例子2-1给出了这些转义符的基本使用: // Filename: exe_2_1.v // This module is writen by YiTurn Zhao // Module Purpose : $display 和 $write的基本用法 module exe_2_1(); // reg [7:0] a; initial begin a = 31; abcd = 50; $display(" Using $display, a = ",a, " And 12 = ",12); $displayb(" Using $displayb, a = ",a, " And 12 = ",12); $displayo(" Using $displayo, a = ",a, " And 12 = ",12); $displayh(" Using $displayh, a = ",a, " And 12 = ",12); $writeo(" \\nUsing Formatted $writeh, a = %d And 12 = %H",a,12); $writeh(" Using Formatted $writeh, a = %d",a, " And 12 = %H",12,"\\n"); $display("Print \\"%%\\",\\t\\"%%%%\\" should be used."); $display("Use %%C or %%c: a's value %d %C",a,a); $display("Use %%S or %%s: a's value %d %s",a,a); $display("Use %%E or %%e: 10000.8 can be writen as %e ",10000.8); $display("Use %%F or %%f: 1.023E+8 can be writen as %f ",1.023E+8); $display("Use %%G or %%g: 1.023E+8 can be writen as %g ",1.023E+8); $display("Use \\\\xyz : Character \\101's ASCII value is 3'O101"); $display("Use \\\\xyz : Character \\053's ASCII value is 3'O53"); #200 $finish; end
同其他高级语言相比,Verilog提供了几种跟硬件设计相关的特殊输出格式转义符:%v、%m、%t。 %v用于打印一个线网类型变量的信号强度,它不能打印矢量变量的信号强度,而只能打印标量变量,或者矢量变量的指定位的信号强度。信号强度用3个符号输出表示,前两个符号表示信号强度,而第三个符号表示信号的逻辑值。信号强度和逻辑值的意义分别如下面两个表所示: 信号逻辑值表示: 逻辑值 表示意义 0 表示逻辑0值 1 表示逻辑1值 X 表示逻辑不定态 Z 表示逻辑高阻态 L 表示逻辑0值,或者逻辑高阻态 H 表示逻辑1值,或者逻辑高阻态
信号强度表示: 标记符 强度名 强度值表示 Su 电源级驱动(Supply drive) 7 St 强驱动(Strong drive) 6 Pu 上拉级驱动(Pull drive) 5 La 大容性(Large capacitor) 4 We 弱驱动(Weak drive) 3 Me 中级容性(Medium capacitor) 2 Sm 小容性(Small capacitor) 1 Hi 高容性(High capacitor) 0 用%v打印一个信号的强度时,前两个符号除了用上表中的信号强度“标志符”表示信号强度外,也可以用两个数字表示信号强度。关于信号强度和逻辑值的建模在后续章节进行详细介绍。 使用%m,可以打印当前打印语句所在的模块层次。 %t通常用于打印当前的仿真时间,当然也可以用于打印其他数据。该转义符表示把对应的变量使用当前使用的时间表示格式进行打印。Verilog提供系统函数$time获得当前的仿真时间信息,该系统函数输出值为64比特表示的整数。Verilog还提供系统函数$timeformat用于设定当前的时间格式。关于$time和$timeformat的使用也放在后续章节说明。 例2-3为这几个转义符简单使用的一个例子。 // Filename: exe_2_3.v // This module is writen by YiTurn Zhao // Module Purpose : $display 和 $write的部分特殊功能
module exe_2_3();
reg [7:0] a; integer i; wire x; pulldown(x); initial begin #2; $display("%m"); $display("Simulation Time now is : %t",$time); $display("%%t Usage 2:%t",200); $display("x's strength is : %v",x); end
exe_2_3_sub exe_2_3_sub();
endmodule
module exe_2_3_sub; wire [1:0] x; initial begin # 4; $display("%m"); $display("Simulation Time now is : %t",$time); $display("x[1]'s strngth is :%v",x[1]); end endmodule