当前位置:文档之家› 系统任务和函数

系统任务和函数


在Verilog HDL中,除了$display与$write这两 种主要的标准输出任务外,还有以下几种标准 输出任务: (1) $displayb与$writeb(输出二进制数)。 (2) $displayo与$writeo(输出八进制数)。 (3) $displayh与$writeh(输出十六进制数)。
module disp; reg[31:0] rval; pulldown(pd); initial begin rval=101; $display("rval=%h hex %d decimal", rval, rval); $display("rval=%o otal %b binary", rval, rval); $display("rval has %c ascii character value",rval); $display("pd strength value is %v",pd); $display("current scope is %m"); $display("%s is ascii value for 101",101); $display("simulation time is %t",$time); end endmodule
module printval; reg[11:0]r1; initial begin r1=10; $display("Printing with maximum size=%d=%h",r1,r1); $display("Printing with minimum size=%0d=%0h",r1,r1); end enmodule 输出结果为: Printing with maximum size=10=00a: printing with minimum size=10=a 在显示输出数据时,在经过格式转换以后,总是用最少的位数 来显示表达式的当前值
为了便于设计者对仿真过程进行控制,以及对仿真结果进行 分析比较,Verilog HDL提供了大量的系统功能调用,大致 可以分成两种: 一种是任务型的功能调用,称为系统任务; 另一种是函数型的功能调用,称为系统函数。 Verilog HDL的系统任务与系统函数是以字符“$”开头的标识
符,一般在initial和always过程块中调用系统任务和函数
【例7.9】$display任务的例子。 $display("Hello Dr Blair");
…… output:Hello Dr Blair
$display($time) //目前的仿真时间 …… output:460 counter = 4'b10; $display(" The count is %b",counter);
格式相同
区别: $display任务具有自动换行的功能
下面以$display任务为例进行详细说明。 $display可以用来输出字符串、表达式及 变量值,其语法格式与C语言中的printf函数 相同,可表示如下: $display(<format_specifiers>,signal, signal,……); 其中,<format_specifiers>用来指定输出格式。 表7.1给出了各种不同的输出格式。
普通字符,即需要原样输出的字符。其中一些特殊的字符可 以通过表2中的转换序列来输出。下面表中的字符形式用于 格式字符串参数中,用来显示特殊的字符
换码序列 \n \t \\ \“ \o %%
功能 换行 横向跳格(即跳到下一个输出区) 反斜杠字符\ 双引号字符" 1到3位八进制数代表的字符 百分符号%
如果输出列表中表达式的值包含有不确定的值或高 阻值,其结果输出遵循以下规则: (1).在输出格式为十进制的情况下: 如果表达式值的所有位均为不定值,则输出结果为 小写的x。 如果表达式值的所有位均为高阻值,则输出结果为 小写的z。 如果表达式值的部分位为不定值,则输出结果为大 写的X。 如果表达式值的部分位为高阻值,则输出结果为大 写的Z。
显示层次
通过显示任务中的%m的选项,可以显示任意级别的层次。 例 module m; initial module top; $display(“displaying in %m”) m m1(); m m2(); Endmodule m m3(); Endmodule 仿真输出如下显示: displaying in top.m1 displaying in top.m2 displaying in top.m3
主要区别有两点:系统任务可以没有返回值,或有多个返回 值,而系统函数只有一个返回值;系统任务可以带有延迟,
而系统函数不允许延迟,在0时刻执行。
依据实现功能的不同,可分成以下几类: 1) 显示任务( display task) 2) 文件输入/输出任务(File I/O task) 3) 时间标度任务(timescale task) 4) 模拟控制任务(simulation control task) 5) 时序验证任务(timing check task) 6) PLA建模任务(PLA modeling task) 7) 随机建模任务(stochastic modeling task) 8) 实数变换函数(conversion functions for real) 9) 概率分布函数(probabilistic distribution function)
2).在输出格式为十六进制和八进制的情况下: 每4位二进制数为一组代表一位十六进制数,每3位二 进制数为一组代表一位八进制数。 如果表达式值相对应的某进制数的所有位均为不定值, 则该位进制数的输出的结果为小写的x。 如果表达式值相对应的某进制数的所有位均为高阻值, 则该位进制数的输出结果为小写的z。 如果表达式值相对应的某进制数的部分位为不定值, 则该位进制数输出结果为大写的X。 如果表达式值相对应的某进制数的部分位为高阻值, 则该位进制数输出结果为大写的Z。
其输出结果为: rval=00000065 hex 101 decimal rval=00000000145 octal 00000000000000000000000001100101 binary rval has e ascii character value pd strength value is StX current scope is disp e is ascii value for 101 simulation time is 0 1输出列表中数据的显示宽度是自动按照输出格式 进行调整的。 2用表达式的最大可能值所占的位数来显示表达式 的当前值。 3十进制数格式输出时,输出结果前面的0值用空 格来代替。对
显示系统任务用于信息显示和输出。这些系 统任务进一步分为: • 显示和写入任务 • 探测监控任务 • 连续监控任务
$display与$write都属于显示类系统任务 调用形式 $display ( “格式控制字符串”, 输出变量名表项) ; $write ( “格式控制字符串”, 输出变量名表项) ; 输出变量名表项就是指要输出的变量,各变量名 之间以逗号相隔;格式控制字符串的内容包括两部 分:需要与输出变量一起在输出时一并显示的普通 字符;对输出变量显示形式进行控制的格式说明符。
//initial语句块2 initial begin b<=0; $display("b by display is:",b); // display x $strobe("b by strobe is:",b); //display o #5; $display("#5 b by display is:",b); //display o $strobe("#5 b by strobe is:",b); // display 1 b<=1; end endmodule
…… output:The count is 0010
在$display和$write的参数列表中,其“输出表列”是需要输 出的一些数据,可以是表达式,下面举例说明
例7-10 module disp; initial begin $display("\\\t%%\n\"\123"); end endmodule 输出结果为 \% "S” 从上面的这个例子中可以看到一些特殊字符的输出 形式(八进制数123就是字符S)
$tor 一旦被调用后,将随时对输出变量名表项中列出的各个变量 进行检测,如发现其中的任何一个变量在模拟过程中的某一 时刻发生了任何形式的改变,就会启动$monitor任务,整个 输出列表中所有变量和表达式的值都会按照所规定的格式, 在时间步结束时输出结果。如果在同一仿真时刻,多个变量 或表达式值发生变化,则该时刻只输出显示一次。 如$monitor(“a=%b,b=%b,out=%b\n”,a,b,out)
可以通过系统任务$monitoron打开监控任务 ,通过系统任务$monitoroff关闭监控任务 。多模块调试时,会有多个模块调用 monitor,但是任意时刻只能有一个 monitor被启动,这就需要用$monitoron和 $monitoroff在特定时刻启动需要检测的模 块,关闭其它模块。缺省情况下,监控任 务在仿真开始时自动打开。
$d i s p l a y("Simulation time is %t",$ t i m e) ; $d i s p l a y( $t i m e,":R=%b,Q=%b,QB=%b", R,S,Q,QB); / /因为没有指定格式,时间按十进制显示。 $w r i t e("Simulation time is:); $w r i t e( " % t \ n " , $t i m e) ; 上述语句输出$ t i m e、R、S、Q和Q B等值的执行结 果如下: Simulation time is 10 10:R=1, S=0, Q=0, QB=1 Simulation time is 10 end
相关主题