原创 verilog输出函数

2009-6-24 13:27 4078 5 5 分类: MCU/ 嵌入式
“格式化输出”功能需要使用转义符。除了增加部分跟硬件设计相关的转义符外,Verilog的这些系统函数中的转义符同其他高级语言中的定义和使用基本相
同。Verilog的转义符分为两大类:以”\\”引导的和以”%”引导的。通常,以”%”引导的转义符用于指定变量列表中的变量、常量、表达式的格式化
输出;以”\\”引导的表示其他的一些格式化输出功能,通常是比较“特殊”的功能,比如输出一个“TAB”,或者输出”\\”本身,以及输出”%”本身
等。

下表给出了Verilog中基本的转义符定义和意义说明:
转义符      意义说明
%d 以及 %D      以十进制格式输出
%b 以及 %B      以二进制格式输出
%o 以及 %O      以八进制格式输出
%h 以及 %H      以十六进制格式输出
%s 以及 %S      以字符串格式输出
%c 以及 %C      以ASCII码格式输出
%v 以及 %V      输出线网类型变量的强度
%m 以及 %M      输出层次名
%t 以及 %T      以当前时间格式输出
%e 以及 %E      以指数表示方式输出实数(real型)
%f 以及 %F      以十进制数表示方式输出实数(real型)
%g 以及 %G      以十进制数或者以指数表示方式输出实数。两种输出格式中,哪种占用更少的宽度,就使用哪一种。
\\n      开始新行(“回车”功能)
\\t      输出一个 TAB
\\”      输出 ” 本身
\\\\      输出 \\ 本身
%%      输出 % 本身
\\xyz      xyz表示一个八进制数。\\xyz表示输出八进制数xyz的值对应的ASCII码符号。比如,”\\123”,应该输出的为符号“S”。

例子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
   
endmodule

注意:1,在verilog中,转义符一定是使用在双引号括起来的字符串中!
2,”\\”
和”%”后跟的不是前述指定的符号时,行为跟仿真器的设计有关。比如,“\\N”实现的不是换行功能,但不同仿真器对其解释不同。同样,对于”\\%”、
”%\\”等1364-2001标准未规定的格式,不同仿真器也可能进行不同的处理。严格的说,没有规定的转义表达式应该不能使用,比如“\\%”这一形
式。一旦使用,应该通不过编译,并报告错误信息。但是通过几个仿真器的仿真发现,通常,”\\%”是允许的,推广之,发现”\\”后跟的如果不是表格中规
定的转义符,”\\”将被忽略,而直接输出之后的信息。比如”\\%”就输出”%”符号,”\\N”就输出”N”符号。但是”%\\”是不允许的,推广
之,发现”%”后跟的如果不是表格中规定的转义符,将报告错误。
3,除”%%”外,”%”引导的转义符的使用必须和对应的变量、或者表达式匹配使用。对应于某一个转义符的变量为空时,可以用两个”,”将的空格来表示。参见例2-2。
4,”%C”、
”%S”、”\\xyz”等形式的转义符都跟ASCII码有关。”\\xyz”输出值为八进制数”xyz”的ASCII码,它不需要对应的变量(或者常
量)列表。”%C”、”%s”也是输出一个ASCII符号,其值为变量列表中对应的变量、常量或者表达式的值,因此需要在变量列表中提供相应的变量、常量
或者表达式。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条