Verilog的打印系统函数

上一篇 / 下一篇  2007-06-30 13:19:42 / 天气: 晴朗 / 心情: 高兴 / 个人分类:Backup

Verilog本质上也是一门高级语言,因而也提供了丰富打印信息、输出信息的系统函数。EDA中国门户网站Z1N0Kqj%e N.a
Verilog提供的打印系统函数分为三类:EDA中国门户网站 [6e1H!r]
显示/写系统函数(Display and Write tasks)EDA中国门户网站%]C2{A0{
脉冲选择监视系统函数(strobed monitoring tasks)
RJ[cc}-f0连续监视系统函数(continuous monitoring tasks)
!] O t#d TBW.D0显示/写系统函数EDA中国门户网站0j8fP|Oq s9l `
这类函数包括$display、$displayb、$displayo、$displayh、$write、$writeb、$ writeo、$writeh等八个函数。其使用语法如下:EDA中国门户网站j5dB6\$d eg7q
  系统函数名(变量列表);EDA中国门户网站.[#L q9G DpS7T0n
变量列表就是需要输出的信息,该变量列表可以是变量名、表达式、双引号括起来的字符串、以及这三种形式的组合。变量列表也可以为空。这时,$display会输出一个回车符(就是开始新的一行),而$write则相当于不进行任何操作。EDA中国门户网站/f/IMh a%q/YY
$display系列和$write系列除了一点差别外完全一致,其差异在于$display会在变量列表后面自动增加一个回车符,而$write则没有该功能,完全按照变量列表指示的内容输出。当变量列表为空时,$display输出一个回车符,而$write则相当于不进行任何操作。EDA中国门户网站:b+U6w E%[
Verilog的这些打印系统函数的使用同其他高级语言比如C中的打印函数很类似。这些函数支持“格式化输出”,也是在双引号括起来的变量中加入转义符号实现的。对于变量列表中的变量或者常量,当指定了输出格式时,这八个函数没有差别,都将以指定格式输出其值;当没有指定输出格式时,各函数以默认的形式输出该变量或者常量的值。EDA中国门户网站*n6_.eW8C1L,@
下表给出各个函数默认的输出格式:EDA中国门户网站Ex/gK8Q#{
系统函数      默认制式      例子(a[7:0]=31)EDA中国门户网站^%]t0a'_d3_;g,o
$display、$write      十进制      $write(12,” and ”, a[7:0]);
wo,]X$k0$displayb、$writeb      二进制      $writeb(12, ” and ”, a[7:0]);EDA中国门户网站-CPjVJ4{[Tku
$displayo、$writeo      八进制      $writeo(12, ” and ”, a[7:0]);EDA中国门户网站:n(W2{hh9t
$displayh、$writeh      十六进制      $writeh(12, ” and ”, a[7:0]);
5D8Y;wZ,c/A c9]"J0“格式化输出”功能需要使用转义符。除了增加部分跟硬件设计相关的转义符外,Verilog的这些系统函数中的转义符同其他高级语言中的定义和使用基本相同。Verilog的转义符分为两大类:以”\\”引导的和以”%”引导的。通常,以”%”引导的转义符用于指定变量列表中的变量、常量、表达式的格式化输出;以”\\”引导的表示其他的一些格式化输出功能,通常是比较“特殊”的功能,比如输出一个“TAB”,或者输出”\\”本身,以及输出”%”本身等。EDA中国门户网站(o;L(I;F4jK4X6phi
下表给出了Verilog中基本的转义符定义和意义说明:
&XZIP'tya1I0转义符      意义说明EDA中国门户网站j"v%De;n
%d 以及 %D      以十进制格式输出
3^*FA!g r;gV'_@7o0%b 以及 %B      以二进制格式输出EDA中国门户网站Xi}G0D0[
%o 以及 %O      以八进制格式输出EDA中国门户网站 D `t$j;^D
%h 以及 %H      以十六进制格式输出EDA中国门户网站?3ujPI?
%s 以及 %S      以字符串格式输出
zAD!p`n0%c 以及 %C      以ASCII码格式输出EDA中国门户网站(Dac;k;g;lNx
%v 以及 %V      输出线网类型变量的强度
R|Yg0X9`:Hvu0%m 以及 %M      输出层次名
UJ4I1{8~P:m)?0%t 以及 %T      以当前时间格式输出EDA中国门户网站BV&C-LT4g0O,g"Y{Q3b
%e 以及 %E      以指数表示方式输出实数(real型)
b'~"C(Z(v1s s R5c0%f 以及 %F      以十进制数表示方式输出实数(real型)
.^ D+^J7rR&fu0%g 以及 %G      以十进制数或者以指数表示方式输出实数。两种输出格式中,哪种占用更少的宽度,就使用哪一种。EDA中国门户网站3z\*?Xi K;E
\\n      开始新行(“回车”功能)
8r7q*].K~/X8IX,X(t0\\t      输出一个 TABEDA中国门户网站 Q0i6Q{9@SBu@q
\\”      输出 ” 本身
O6ET b6B{l0\\\\      输出 \\ 本身
)|&lyjzZ0%%      输出 % 本身
.p p%`IMo0\\xyz      xyz表示一个八进制数。\\xyz表示输出八进制数xyz的值对应的ASCII码符号。比如,”\\123”,应该输出的为符号“S”。
9h,X6tL4Tq0例子2-1给出了这些转义符的基本使用:EDA中国门户网站5E(\:{Y ZGF
// Filename: exe_2_1.v
cFDaNfQy,}0// This module is writen by YiTurn ZhaoEDA中国门户网站)[q"F5X8j?s
// Module Purpose : $display 和 $write的基本用法
oxA+mX:l0module exe_2_1();
z&H^0zhr]0  //
"W t)dI6`0  reg [7:0] a;  
nmNs6@ p0  initial begin  EDA中国门户网站!h0?2Gg s
    a = 31;  
5dC:B9B.\(x5s0    abcd = 50;
8r\'D'nh K2B0    $display(" Using $display, a = ",a, "   And 12 = ",12);EDA中国门户网站5sD!_V3^~
    $displayb(" Using $displayb, a = ",a, "   And 12 = ",12);
/GJ8[ |0O K0    $displayo(" Using $displayo, a = ",a, "   And 12 = ",12);
h `d a4u"E0    $displayh(" Using $displayh, a = ",a, "   And 12 = ",12);EDA中国门户网站]"hx#k:n1a
    $writeo("\\nUsingFormatted $writeh, a = %d   And 12 = %H",a,12);EDA中国门户网站,s)qG#e:f[.v+r;Y
    $writeh(" Using Formatted $writeh, a = %d",a, "   And 12 = %H",12,"\\n");
/E4lcL\2_4l%lX*h0    $display("Print\\"%%\\",\\t\\"%%%%\\" should be used.");
Gt4Q`.v n0    $display("Use %%C or %%c: a's value %d %C",a,a);EDA中国门户网站4\J"^&Q`
    $display("Use %%S or %%s: a's value %d %s",a,a);
:l&m4m6zH h0L}1Z0    $display("Use %%E or %%e: 10000.8 can be writen as %e ",10000.8);EDA中国门户网站PP+MtcG
    $display("Use %%F or %%f: 1.023E+8 can be writen as %f ",1.023E+8);EDA中国门户网站8zMl@;A ZB2[
    $display("Use %%G or %%g: 1.023E+8 can be writen as %g ",1.023E+8);
+G?:o%k/RH:^6K0    $display("Use\\\\xyz: Character\\101'sASCII value is 3'O101");EDA中国门户网站/qB]3qoW;x)K$a/]l
    $display("Use\\\\xyz: Character\\053'sASCII value is 3'O53");EDA中国门户网站}1n HC)vs$D @ ^
    #200 $finish;EDA中国门户网站5Y j;Ya?"p
  endEDA中国门户网站aExH6ice
   
&grw D;n4wbbD_0endmodule
%Z5OB7Ai,Y0注意:1,在verilog中,转义符一定是使用在双引号括起来的字符串中!EDA中国门户网站3p9D"{.Y jq.A
2,”\\”和”%”后跟的不是前述指定的符号时,行为跟仿真器的设计有关。比如,“\\N”实现的不是换行功能,但不同仿真器对其解释不同。同样,对于”\\%”、”%\\”等1364-2001标准未规定的格式,不同仿真器也可能进行不同的处理。严格的说,没有规定的转义表达式应该不能使用,比如“\\%”这一形式。一旦使用,应该通不过编译,并报告错误信息。但是通过几个仿真器的仿真发现,通常,”\\%”是允许的,推广之,发现”\\”后跟的如果不是表格中规定的转义符,”\\”将被忽略,而直接输出之后的信息。比如”\\%”就输出”%”符号,”\\N”就输出”N”符号。但是”%\\”是不允许的,推广之,发现”%”后跟的如果不是表格中规定的转义符,将报告错误。EDA中国门户网站j:}/\3H2f6\q-Ogb
3,除”%%”外,”%”引导的转义符的使用必须和对应的变量、或者表达式匹配使用。对应于某一个转义符的变量为空时,可以用两个”,”将的空格来表示。参见例2-2。EDA中国门户网站~2ad0x E
4,”%C”、”%S”、”\\xyz”等形式的转义符都跟ASCII码有关。”\\xyz”输出值为八进制数”xyz”的ASCII码,它不需要对应的变量(或者常量)列表。”%C”、”%s”也是输出一个ASCII符号,其值为变量列表中对应的变量、常量或者表达式的值,因此需要在变量列表中提供相应的变量、常量或者表达式。EDA中国门户网站5YiA hCy
   
1U`O`vby F0同其他高级语言相比,Verilog提供了几种跟硬件设计相关的特殊输出格式转义符:%v、%m、%t。
7a Rsm/I.aI Z2| Z0%v用于打印一个线网类型变量的信号强度,它不能打印矢量变量的信号强度,而只能打印标量变量,或者矢量变量的指定位的信号强度。信号强度用3个符号输出表示,前两个符号表示信号强度,而第三个符号表示信号的逻辑值。信号强度和逻辑值的意义分别如下面两个表所示:
"`2r$] v!W_8V`O0信号逻辑值表示:EDA中国门户网站$}A*|0EQK @_
逻辑值      表示意义EDA中国门户网站e2h|W.O
0      表示逻辑0值EDA中国门户网站&J)M k#S D|
1      表示逻辑1值EDA中国门户网站` Udyb g JG NUx
X      表示逻辑不定态
4bCn+|5j.L Aq0Z      表示逻辑高阻态EDA中国门户网站3X1[6P4x j s
L      表示逻辑0值,或者逻辑高阻态
;q_9hx$K$r2Q0H      表示逻辑1值,或者逻辑高阻态EDA中国门户网站#r;_K?\^1?
信号强度表示:EDA中国门户网站1a}m|j"nxC
标记符      强度名      强度值表示
2J+Q9F.[Zq0Su      电源级驱动(Supply drive)      7EDA中国门户网站 U h*b$LT'E7~xy)~
St      强驱动(Strong drive)             6EDA中国门户网站K)^_E7vd S
Pu      上拉级驱动(Pull drive)      5EDA中国门户网站4CvhRJw
La      大容性(Large capacitor)      4EDA中国门户网站,qO/J w(p9z
We      弱驱动(Weak drive)             3EDA中国门户网站p] B@;TMF)}
Me      中级容性(Medium capacitor)      2
A@fHoV0Sm      小容性(Small capacitor)      1EDA中国门户网站Q Nn.c6qT*X
Hi      高容性(High capacitor)      0EDA中国门户网站2L?)q @zs*J
用%v打印一个信号的强度时,前两个符号除了用上表中的信号强度“标志符”表示信号强度外,也可以用两个数字表示信号强度。关于信号强度和逻辑值的建模在后续章节进行详细介绍。EDA中国门户网站o|$c9h!`
使用%m,可以打印当前打印语句所在的模块层次。
:c$Ldp[-A0%t通常用于打印当前的仿真时间,当然也可以用于打印其他数据。该转义符表示把对应的变量使用当前使用的时间表示格式进行打印。Verilog提供系统函数$time获得当前的仿真时间信息,该系统函数输出值为64比特表示的整数。Verilog还提供系统函数$timeformat用于设定当前的时间格式。关于$time和$timeformat的使用也放在后续章节说明。
,`%~ SL Aj*xN$l0例2-3为这几个转义符简单使用的一个例子。EDA中国门户网站5b Z5ECN:N7g \
// Filename: exe_2_3.vEDA中国门户网站C"x1y8WdJ
// This module is writen by YiTurn Zhao
?YQvnl9]\0// Module Purpose : $display 和 $write的部分特殊功能
d;~?/Q+w\u X0module exe_2_3();
Z/ry a q(g*zL$}J'v0 EDA中国门户网站8zfpF^3}*zq
  reg [7:0] a;  
dR e]uhs0  integer i;EDA中国门户网站3nm sa"p:n
  wire x;EDA中国门户网站8U9\mv,b2K
  pulldown(x);    EDA中国门户网站1`5da;D.J
  initial begin
s.{;a%W+Js|0    #2;EDA中国门户网站:C"Y Tv V8O]
    $display("%m");  EDA中国门户网站8^3k8tWC KU#N oj0L
    $display("Simulation Time now is : %t",$time);
3y&ub:g1U-c s:p O8} k`0    $display("%%t Usage 2:%t",200);
5i@j @t8p0    $display("x's strength is : %v",x);EDA中国门户网站a YS%B-V$o3fC~]
  end
+TQSS B5|;L0 
"G b#|rU V(T g0  exe_2_3_sub exe_2_3_sub();
0` ^6{'KB(?k/Wf)R0   EDA中国门户网站,S-P+R6|,?a)_c'|F+?
endmodule
y\S{ j zvS0module exe_2_3_sub;
(dn+l9NL i5nh b0  wire [1:0] x;EDA中国门户网站3[j*p`1DNS
  initial beginEDA中国门户网站 `9b3l ~RMsk
    # 4;EDA中国门户网站^$J ]]vcN
    $display("%m");
9QI4XEq _/m N+]0    $display("Simulation Time now is : %t",$time);
&g"nL TrI[;T;n"g| ?0    $display("x[1]'s strngth is :%v",x[1]);EDA中国门户网站lg~q'_t-\.n
  end
1D6W4r];Ya.v{^0endmodule


FPGA/CPLD器件价格查询

TAG: verilog Verilog

引用 删除 lengbi   /   2008-10-20 21:30:38
你好,我是初学者
请问楼主,现在是用verilog多些还是 vhdl多些
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-12-02  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 10122
  • 日志数: 96
  • 建立时间: 2006-08-07
  • 更新时间: 2007-06-30

RSS订阅

Open Toolbar