找回密码
 注册
关于网站域名变更的通知
查看: 320|回复: 1
打印 上一主题 下一主题

Verilog学习小笔记3 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-15 00:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 13:28 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表