96wmD)硬件述语言 Chinapub.com 下载 Display与 Write:十进制数 sdisplayb与$ writeb:二进制数 display与$ write:八进制数 Sdisplayh与 Writer:十六进制数 可以用如下代码序列输出特殊字符: n换行 1t制表符 \字符\ ooo值为八进制值ooo的字符 告号字符告 例如: Display("simulation time is st"sme display(stime,": R=8b, Q=sb sb",R,s,Q, QB)i //因为没有指定格式,时间按十进制显示 Write("simulation time is: )i Write("st\n", stime) 述语句输出stme、R、S、Q和QB等值的执行结果如下: simulation time is 10:R=1,S=0,Q=0,QB=1 simulation time i 2.探测任务 探测任务有: Strobe Sstrobeb Sstrobeh strobed 这些系统任务在指定时间显示模拟数据,但这种任务的执行是在该特定时间步结束时才 显示模拟数据。“时间步结束”意味着对于指定时间步内的所有事件都已经处理了。 e(posedge Rst) Strobe("the flip-flop value is sb at time st",time 当Rst有一个上升沿时, Strobe任务输出Q的值和当前模拟时间。下面是Q和 Stime的一些 值的输出。这些值在每次Rst的上升沿时被输出。 The flip-flop value is 1 at time The flip-flop value is o at time The flip-flop value is 1 at time 其格式定义与显示和写入任务相同 探测任务与显示任务的不同之处在于:显示任务在遇到语句时执行,而探测任务的执行 要推迟到时间步结束时进行。下面的例子有助于进一步区分这两种不同任务 begin Display("After first assignment, cool has value b'b,) strobe("When strobe is executed, cool has value wb2 Cool Display("After second assignment, cool has value abaI
$ d i s p l a y与$ w r i t e :十进制数 $ d i s p l a y b与$ w r i t e b :二进制数 $ d i s p l a y o与$ w r i t e o :八进制数 $ d i s p l a y h与$ w r i t e h :十六进制数 可以用如下代码序列输出特殊字符: \n 换行 \t 制表符 \\ 字符\ \" 字符” \OOO 值为八进制值O O O的字符 %% 字符% 例如: $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 2. 探测任务 探测任务有: $s t r o b e $s t r o b e b $s t r o b e h $s t r o b e o 这些系统任务在指定时间显示模拟数据,但这种任务的执行是在该特定时间步结束时才 显示模拟数据。“时间步结束”意味着对于指定时间步内的所有事件都已经处理了。 a l w a y s @ (p o s e d g e R s t ) $s t r o b e("the flip-flop value is %b at time %t",Q,$ t i m e) ; 当R s t有一个上升沿时, $s t ro b e任务输出Q的值和当前模拟时间。下面是 Q和$t i m e的一些 值的输出。这些值在每次R s t的上升沿时被输出。 The flip-flop value is 1 at time 17 The flip-flop value is 0 at time 24 The flip-flop value is 1 at time 26 其格式定义与显示和写入任务相同。 探测任务与显示任务的不同之处在于:显示任务在遇到语句时执行,而探测任务的执行 要推迟到时间步结束时进行。下面的例子有助于进一步区分这两种不同任务。 i n t e g e r C o o l; i n i t i a l b e g i n Cool = 1; $d i s p l a y("After first assignment,Cool has value %d", C o o l) ; $s t r o b e("When strobe is executed,Cool has value %d", C o o l) ; C o o l = 2; $d i s p l a y("After second assignment,Cool has value %d", C o o l) ; e n d 96 Verilog HDL 硬件描述语言 下载
第0章其他论题97 下载 产生的输出为 After first assignment, cool has value trobe is executed, cool h After second assignment, cool has valu 第一个$ display任务输出Cool的值1(Cool的第一个赋值)。第二个 Display任务输出 Cool的值2(Cool的第二个赋值)。 Strobe任务输出Cool的值2,这个值保持到时间步结 3.监控任务 监控任务有 Monitor Monitor Smoni torh Smonitoro 些任务连续监控指定的参数。只要参数表中的参数值发生变化,整个参数表就在时间 步结束时显示。例如 ⊥n⊥七ia monitor ("At t,d= sd, clk = sd") time, D, clk, ando is sb",9)i 当监控任务被执行时,对信号D、CIk和Ω的值进行监控。若这些值发生任何变化,则显 示整个参数表的值。下面是D、CIk和Q发生某些变化时的输出样本。 24, D= Clk=x and Q is O 25, D=x Clk= x and s is 1 30D=0 Clk=x and Q is 1 35 D=0 Clk= l and Q is 1 37, D=0 Clk =0 and S is 1 43,D=l Clk=o and Q is 1 监控任务的格式定义与显示任务相同。在任意时刻对于特定的变量只有一个监控任务 以被激活。 可以用如下两个系统任务打开和关闭监控 Smonitoroff;//禁止所有监控任务 monitory;//使能所有监控任务 这些提供了控制输出值变化的机制。$ monitor『任务关闭了所有的监控任务,因此不再 显示监控更多的信息。 Smonitoron任务用于使能所有的监控任务。 10.32文件输入输出任务 文件的打开和关闭 系统函数 Fopen用于打开一个文件 integer file pointer = fopen (file //系统函数 Fopen返回一个关于文件的整数(指针) 而下面的系统任务可用于关闭一个文件: fclose(file pointer): 这是一个关于它的用法的例子。 integer Iq File initial
产生的输出为: After first assignment,Cool has value 1 When strobe is executed,Cool has value 2 After second assignment,Cool has value 2 第一个 $d i s p l a y任务输出 C o o l的值1(C o o l的第一个赋值)。第二个 $d i s p l a y任务输出 C o o l的值 2(C o o l的第二个赋值)。$s t ro b e任务输出 C o o l的值 2,这个值保持到时间步结 束。 3. 监控任务 监控任务有: $m o n i t o r $m o n i t o r b $m o n i t o r h $m o n i t o r o 这些任务连续监控指定的参数。只要参数表中的参数值发生变化,整个参数表就在时间 步结束时显示。例如: i n i t i a l $m o n i t o r ("At %t,D = %d, Clk = %d"), $t i m e, D , C l k,"and Q is %b",Q); 当监控任务被执行时,对信号 D、C l k和Q的值进行监控。若这些值发生任何变化,则显 示整个参数表的值。下面是 D、C l k和Q发生某些变化时的输出样本。 监控任务的格式定义与显示任务相同。在任意时刻对于特定的变量只有一个监控任务可 以被激活。 可以用如下两个系统任务打开和关闭监控。 $m o n i t o r o f f; //禁止所有监控任务。 $m o n i t o r o n; //使能所有监控任务。 这些提供了控制输出值变化的机制。 $m o n i t o ro ff任务关闭了所有的监控任务,因此不再 显示监控更多的信息。$m o n i t o ro n任务用于使能所有的监控任务。 10.3.2 文件输入/输出任务 1. 文件的打开和关闭 系统函数$f o p e n用于打开一个文件。 i n t e g e r f i l e _ p o i n t e r = $ f o p e n(f i l e _ n a m e); / /系统函数$f o p e n返回一个关于文件的整数(指针)。 而下面的系统任务可用于关闭一个文件: $f c l o s e(f i l e _ p o i n t e r); 这是一个关于它的用法的例子。 i n t e g e r T q _ F i l e; i n i t i a l 第10章 其 他 论 题 97 下载
98mwi1mDl件述语言 Chia°b6eoM 下载 begin Tq File fopen("-/jb/div tq") 2.输出到文件 显示、写入、探测和监控系统任务都有一个用于向文件输出的相应副本,该副本可用于 将信息写入文件。这些系统任务如下 Sfdisplay $fdisplayb sfdisplayh sfdisplay Sfwrite Sfwriteb Sfwriteh sfwriteo Sfmonitor Simoni torb Sfmonitorh sfmonitoro 所有这些任务的第一个参数是文件指针,其余的所有参数是带有参数表的格式定义序列 下面的实例将作进一步解释说明。 integer Vec F⊥1e in⊥七ia1 begin vec File = sfopehdiv vec") display(vec File, " The simulation time st",stime)i /第一个参数 vec Fi1e是文件指针。 Fclose(vec file) end 等到$ display任务执行时,文件“div.vec”中出现下列语句 The simulation time is 3.从文件中读取数据 有两个系统任务能够用于从文件中读取数据,这些任务从文本文件中读取数据并将数据 加载到存储器。它们是 Sreadmemb 文本文件包含空白空间、注释和二进制(对于$ readmem b)或十六进制(对于 Sreadmemh)数字。每个数字由空白空间隔离。当执行系统任务时,每个读取的数字被指派 给存储器内的一个地址。开始地址对应于存储器最左边的索引。 reg [0: 3] Mem A [0: 63] in⊥七ia1 sreadmemb("ones and zero vec", Mem A) //读入的每个数字都被指派给从0开始到63的存储器单元。 显式的地址可以在系统任务调用中可选地指定,例如 Sreadmemb("rx vex", Mem A, 15,30 /从文件“xκ.vec”中读取的第一个数字被存储在地址15中,下一个存储在地址 //16,并以此类推直到地址30 也可以在文本文件中显式地给出地址。形式如下 @address in hexadecimal 在这种情况下,系统任务将数据读入指定地址。后续的数字从指定地址开始向后加载
b e g i n T q _ F i l e = $ f o p e n("~/ j b / d i v . t q ") ; . . . $f c l o s e(T q _ F i l e) ; e n d 2. 输出到文件 显示、写入、探测和监控系统任务都有一个用于向文件输出的相应副本,该副本可用于 将信息写入文件。这些系统任务如下: $f d i s p l a y $f d i s p l a y b $f d i s p l a y h $f d i s p l a y o $f w r i t e $f w r i t e b $f w r i t e h $f w r i t e o $f s t r o b e $f s t r o b e b $f s t r o b e h $f s t r o b e o $f m o n i t o r $f m o n i t o r b $f m o n i t o r h $f m o n i t o r o 所有这些任务的第一个参数是文件指针,其余的所有参数是带有参数表的格式定义序列。 下面的实例将作进一步解释说明。 i n t e g e r V e c _ F i l e; i n i t i a l b e g i n Vec_File = $fopen(" d i v . v e c ") ; . . . $f d i s p l a y(V e c _ F i l e,"The simulation time %t",$time); / /第一个参数V e c _ F i l e是文件指针。 $f c l o s e(V e c _ f i l e) ; e n d 等到$f d i s p l a y任务执行时,文件“d i v. v e c”中出现下列语句: The simulation time is 0 3. 从文件中读取数据 有两个系统任务能够用于从文件中读取数据,这些任务从文本文件中读取数据并将数据 加载到存储器。它们是: $readmemb $readmemh 文本文件包含空白空间、注释和二进制(对于 $ r e a d m e m b)或十六进制(对于 $re a d m e m h)数字。每个数字由空白空间隔离。当执行系统任务时,每个读取的数字被指派 给存储器内的一个地址。开始地址对应于存储器最左边的索引。 r e g [0:3] Mem_A [0:63]; i n i t i a l $r e a d m e m b( " o n e s _ a n d _ z e r o . v e c " , M e m _ A ) ; / /读入的每个数字都被指派给从0开始到6 3的存储器单元。 显式的地址可以在系统任务调用中可选地指定,例如: $r e a d m e m b( " r x . v e x " , M e m _ A , 1 5 , 3 0 ) ; / /从文件“r x . v e c”中读取的第一个数字被存储在地址1 5中,下一个存储在地址 / / 1 6,并以此类推直到地址3 0。 也可以在文本文件中显式地给出地址。形式如下: @ a d d r e s s _ i n _ h e x a d e c i m a l 在这种情况下,系统任务将数据读入指定地址。后续的数字从指定地址开始向后加载。 98 Verilog HDL 硬件描述语言 下载
Chinaopub.com 第0章其他论99 下载 10.33时间标度任务 系统任务 Sprinttimescale 给出指定模块的时间单位和时间精度。若$ printtimescale'任务没有指定参数,则用于输出 包含该任务调用的模块的时间单位和精度。如果指定到模块的层次路径名为参数,则系统任 务输出指定模块的时间单位和精度 Sprinttimescale Sprinttimescale(hier path to module)i 下面是这些系统被调用时输出的样本 Time scale of (c10) is 100ps/100ps Time scale of(C10. INST) is lt 系统任务 Stimeformat 指定%t格式定义如何报告时间信息,该任务形式如下 stimeformat(units number, precision suffix, numeric field width) 其中 units number为: 1:100ms 1 ms o us 0 us 8:10ns -10:100ps 100fs -14:10fs 系统任务调用 stimeformat(-4,3,ps",5)i Display("Current simulation time is t",stime) 将显示 Display任务中%t说明符的值,如下 current simulation time is 0.051 ps 如果没有指定 Stimeformat,%t按照源代码中所有时间标度的最小精度输出 10.34模拟控制任务 系统任务 s£ inish 使模拟器退出,并将控制返回到操作系统
10.3.3 时间标度任务 系统任务 $p r i n t t i m e s c a l e 给出指定模块的时间单位和时间精度。若 $p r i n t t i m e s c a l e任务没有指定参数,则用于输出 包含该任务调用的模块的时间单位和精度。如果指定到模块的层次路径名为参数,则系统任 务输出指定模块的时间单位和精度。 $p r i n t t i m e s c a l e ; $p r i n t t i m e s c a l e(h i e r _ p a t h _ t o _ m o d u l e) ; 下面是这些系统被调用时输出的样本。 Time scale of (C10) is 100ps/100ps Time scale of (C10.INST) is lus/100ps 系统任务 $t i m e f o r m a t 指定% t格式定义如何报告时间信息,该任务形式如下: $t i m e f o r m a t(u n i t s _ n u m b e r , p r e c i s i o n , s u f f i x , n u m e r i c _ f i e l d _ w i d t h) ; 其中u n i t s _ n u m b e r为: 0 : 1 s -1 : 100 ms -2 : 10 ms -3 : 1 ms -4 : 100 us -5 : 10 us -6 : 1 us -7 : 100 ns -8 : 10 ns -9 : 1 ns -10 : 100 ps -11 : 10 ps -12 : 1 ps -13 : 100 fs -14 : 10 fs -15 : 1 fs 系统任务调用 $t i m e f o r m a t(-4, 3, "ps", 5); $d i s p l a y("Current simulation time is %t",$time); 将显示$d i s p l a y任务中% t说明符的值,如下: Current simulation time is 0.051 ps 如果没有指定$t i m e f o r m a t,% t按照源代码中所有时间标度的最小精度输出。 10.3.4 模拟控制任务 系统任务 $f i n i s h; 使模拟器退出,并将控制返回到操作系统。 第10章 其 他 论 题 99 下载