|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Verilog学习小笔记3 " p4 a Q3 D& e& h4 J9 `1 Q6 @
可以通过在%和表示进制的字符中间插入一个0自动调整显示输出数据宽度的方式。( u& Q8 [; f3 ~. A( z) n
例如$display("d=%0h a=%0h", data, addr);( O4 S% v$ t* o+ I9 d* J( Y. d
这样在显示输出数据时,在经过格式转换以后,总是用最少的位数来显示表达式的当前值。
' q) `% G2 q c6 H- N: x3 D/ P文件可以用系统任务$fopen打开
. y" T# k) o% S8 i: V; D+ Y7 Shandle1 = $fopen("file1.out"); //handle1 = 32'h0000_0002
5 j, T3 K% r) S/ ]* uhandle2 = $fopen("file2.out"); //handle2 = 32'h0000_0004
2 D& r. m( i* ?7 {handle3 = $fopen("file3.out"); //handle3 = 32'h0000_0008/ `$ u9 A2 h, H8 p9 e
系统任务$fdisplay,$fmonitor,$fwrite,$fstrobe都用于写文件
4 b4 c* \% }1 @% V. E& y" Pdesc1 = handle1 | 1; //按位或;desc1 = 32'h0000_0003
+ r$ I2 V& e u) n$fdisplay(desc1,"Display 1"); //写到文件file1.out和标准输出stdout
4 p# R" z0 ?4 c. o2 }8 qdesc2 = handle2 | handle1; //desc2 = 32'h0000_0006
1 E0 z* y; |7 j5 L$fdisplay(desc2,"Display 2"); //写到文件file1.out和file2.out, x: ^8 X1 Z6 E* @9 R
$fclose(handle1); //关闭文件% W: a/ J: a/ G( A/ ~# u
$strobe这个系统任务与$display任务除了一点小差异外,其他非常相似。如果使用$strobe,该语句总是在同时刻的其他赋值语句执行完成之后才执行。
! T! J$ K' Q7 D% Q2 }; Nalways @(posedge clock) begin& c3 O6 ~. s( f1 x, I H
a = b;
; ?# Z E9 A, B# d& h5 e c = d;
1 a# A; c, R1 J H0 eend* U) g+ T8 X" @6 V( M% p) K3 K
always @(posedge clock) begin
/ J& A" A) E# }0 m- @# z $strobe("Displaying a = %b,c = %b", a, c);
8 T5 E6 w/ G- R+ c/ `1 r5 O9 }; H* c在上例中,时钟上升沿的值在语句a = b和c = d执行完之后才显示。如果使用$display,$display可能在语句a = b和c = d之前执行,结果显示不同的值。6 F8 I# J1 Y9 q, ^5 R
$time可以返回一个64位的整数来表示当前仿真时刻的值,该时刻是以模块的仿真尺度为基准的。! b* p/ X+ K: d, t
$realtime和$time的作用是一样的,只是$realtime返回的时间数字是一个实型数,该数字也是以时间尺度为基准的。例如:& B4 L( P' G; S0 g' i( q
'timescale 10 ns/1 ns
' _' j$ r: O8 Q+ s7 v0 umodule test;
4 {5 j2 v+ E, O# L `reg set;" {8 L% s0 [$ }3 K
parameter p = 1.55;: X& W( t! K3 e( B
initial begin
R, J# x3 |5 \; @1 p $monitor($realtime,"set = ",set);
9 D4 k, Z9 M9 E #p set = 0;
- u8 {: a/ e" _ h #p set = 1;
3 T, r) }- }, Rend5 f9 C% Z% u4 I7 G
endmodule2 f1 x% B- l5 v+ f, q6 n
输出结果为:0 @/ q% \' |1 ]4 ]4 q% }
0 set = x8 f/ M3 Y$ X9 O+ U* P/ Q' }( [
1.6 set = 02 ]5 K# _4 {: k" \( E4 ~) Z! `
3.2 set = 1
- N2 e& E5 G9 y( S系统任务$finish,或者$finish(n)的作用是退出仿真器,返回主操作系统,也就是结束仿真过程。任务$finish可以带参数,根据参数的值输出不同的特征信息。如果不带参数,默认$finish的参数值为1。& n, i0 o4 A# y# s9 a
0 不输出任何信息;7 A( q; d$ }2 X" ~9 ? ^
1 输出当前仿真时刻和位置;8 T8 S2 b' i( Y5 S; k$ y- H3 q
2 输出当前仿着时刻、位置和在仿真过程中所用memory及CPU时间的统计。# J0 Q F4 ` }$ ?9 y8 V$ [
' |8 F" k+ B" C7 y# B, d# ?3 V& u |
|