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

Verilog学习小笔记3 

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
Verilog学习小笔记3

8 N+ G) T  ^; o3 _4 ^可以通过在%和表示进制的字符中间插入一个0自动调整显示输出数据宽度的方式。* B; p, b2 W  u- k
例如$display("d=%0h a=%0h", data, addr);- ?7 o% ?2 h7 v% @, p
这样在显示输出数据时,在经过格式转换以后,总是用最少的位数来显示表达式的当前值。
5 J, {' z+ Y7 {& W文件可以用系统任务$fopen打开
" V  |$ |* J! n$ _. {9 Jhandle1 = $fopen("file1.out"); //handle1 = 32'h0000_0002: ^) J5 U# d" L- k+ l
handle2 = $fopen("file2.out"); //handle2 = 32'h0000_0004
1 h, x2 {# D( T$ g1 m2 mhandle3 = $fopen("file3.out"); //handle3 = 32'h0000_0008
& i% h8 i4 o/ i4 v  v& ]系统任务$fdisplay,$fmonitor,$fwrite,$fstrobe都用于写文件
/ k$ T) x1 M* T& @' |1 V- I5 y& udesc1 = handle1 | 1; //按位或;desc1 = 32'h0000_0003
( V  _" k7 _; y, F4 @1 B6 w7 s$fdisplay(desc1,"Display 1"); //写到文件file1.out和标准输出stdout$ D9 U7 J0 s  j) Q) l
desc2 = handle2 | handle1; //desc2 = 32'h0000_0006) x2 w$ K3 X3 P
$fdisplay(desc2,"Display 2"); //写到文件file1.out和file2.out7 h4 g, Y. ~* ?6 e3 R
$fclose(handle1); //关闭文件
! ?1 v) R, N/ F+ F$strobe这个系统任务与$display任务除了一点小差异外,其他非常相似。如果使用$strobe,该语句总是在同时刻的其他赋值语句执行完成之后才执行。0 _/ \; F. W" q2 z) Q4 ]
always @(posedge clock) begin  G7 ^0 r; z. @' d0 ?
a = b;7 m3 A5 w! I/ z2 G0 d/ v! [  Q
c = d;& [4 v) X2 T' \6 Y5 M
end
, J' c% p( P% c! U) ^! i: falways @(posedge clock) begin
. C7 W( [5 \8 V* Q $strobe("Displaying a = %b,c = %b", a, c);
0 E; j7 Z% j* @* ~在上例中,时钟上升沿的值在语句a = b和c = d执行完之后才显示。如果使用$display,$display可能在语句a = b和c = d之前执行,结果显示不同的值。
7 Y- T8 M4 }* @# l$time可以返回一个64位的整数来表示当前仿真时刻的值,该时刻是以模块的仿真尺度为基准的。# }0 q4 {* a+ g2 T5 r1 ]
$realtime和$time的作用是一样的,只是$realtime返回的时间数字是一个实型数,该数字也是以时间尺度为基准的。例如:4 R9 O/ T" _) j0 J# _
'timescale 10 ns/1 ns
; T! a: g! B. P/ u- dmodule test;
) f6 {7 [" D8 K9 K% sreg set;
, @0 |; `2 V: _( K: Cparameter p = 1.55;
- F/ L9 E: N; J  s+ }7 G7 Ninitial begin
. w5 ?2 d8 @7 V) ?1 K: A' C& f: Q% k $monitor($realtime,"set = ",set);
. z+ a0 N( s2 b* }8 p #p set = 0;
# \. b% Q8 V* c$ h* p, q/ p; S #p set = 1;* T# E# @- a( v! w7 M
end
9 O/ ?4 H3 Z. }8 k. ?endmodule. ~) {8 _; z8 s( x
输出结果为:' m) g) J+ B, L5 a8 d
0 set = x
7 ]5 q; n8 g4 L: k: d3 p1.6 set = 0
0 l3 ^  z& q" |' r$ S2 w3.2 set = 1
; V$ S7 ^6 D& T- l系统任务$finish,或者$finish(n)的作用是退出仿真器,返回主操作系统,也就是结束仿真过程。任务$finish可以带参数,根据参数的值输出不同的特征信息。如果不带参数,默认$finish的参数值为1。
" L  f8 A/ w! d; z# |6 ^0 ^0 不输出任何信息;; c# x$ h1 P" O6 R, T* S/ K! p
1 输出当前仿真时刻和位置;
/ e  p( i2 x  a; E8 t' [2 输出当前仿着时刻、位置和在仿真过程中所用memory及CPU时间的统计。+ P/ Z% J0 j, D) V
  m+ x1 N2 L; f! x- ?5 Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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