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

Verilog学习小笔记3 

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Verilog学习小笔记3

0 \# b- i) X4 I5 U" R& W( U可以通过在%和表示进制的字符中间插入一个0自动调整显示输出数据宽度的方式。
& m8 [& N; V5 H+ S' |% b例如$display("d=%0h a=%0h", data, addr);
- R" l3 C9 ^$ T: r( ~" A5 }这样在显示输出数据时,在经过格式转换以后,总是用最少的位数来显示表达式的当前值。* P" M' _$ h5 Y  o5 U8 ~6 |
文件可以用系统任务$fopen打开
9 H/ o' H$ e$ w# nhandle1 = $fopen("file1.out"); //handle1 = 32'h0000_0002
0 b+ x. ~3 M3 z: r& h. n- Fhandle2 = $fopen("file2.out"); //handle2 = 32'h0000_00048 r$ M9 v8 Z! s. ^  j6 T
handle3 = $fopen("file3.out"); //handle3 = 32'h0000_0008, W3 B6 i6 }% c. }6 y( k6 S8 J# r
系统任务$fdisplay,$fmonitor,$fwrite,$fstrobe都用于写文件1 V# n$ U; b; J/ p  C
desc1 = handle1 | 1; //按位或;desc1 = 32'h0000_0003' g1 b! @+ N1 v9 \7 Y
$fdisplay(desc1,"Display 1"); //写到文件file1.out和标准输出stdout$ S2 q6 E' S4 S2 H+ r
desc2 = handle2 | handle1; //desc2 = 32'h0000_0006) B/ g! B( T. J9 M) a
$fdisplay(desc2,"Display 2"); //写到文件file1.out和file2.out; i3 s4 D+ Q' ^) z9 K; @
$fclose(handle1); //关闭文件. P" v3 Q. i" Z+ v" d5 P
$strobe这个系统任务与$display任务除了一点小差异外,其他非常相似。如果使用$strobe,该语句总是在同时刻的其他赋值语句执行完成之后才执行。
% X* m# W+ H& A" I$ oalways @(posedge clock) begin- i5 b# X* }: m7 y* Z
a = b;: [1 J; [% x) b8 t% I( C5 x9 {% b
c = d;/ L* Q; Y1 k. J0 E# e
end( x: N9 }$ s6 A& p5 g% `
always @(posedge clock) begin
2 x& K$ o9 w3 l% S, E3 D- ]1 z* T; Z $strobe("Displaying a = %b,c = %b", a, c);
% ?) U. G% w* P6 k在上例中,时钟上升沿的值在语句a = b和c = d执行完之后才显示。如果使用$display,$display可能在语句a = b和c = d之前执行,结果显示不同的值。
& d$ V/ w2 l+ u$time可以返回一个64位的整数来表示当前仿真时刻的值,该时刻是以模块的仿真尺度为基准的。
$ y7 I2 q# j- g$ d' a0 S& V2 o$realtime和$time的作用是一样的,只是$realtime返回的时间数字是一个实型数,该数字也是以时间尺度为基准的。例如:7 D) r5 k: h- T
'timescale 10 ns/1 ns2 z  ^& x1 }, s0 [5 s
module test;
+ R& |/ t/ V9 P% v3 ireg set;5 N+ A* A8 M! m  G4 z8 n
parameter p = 1.55;
' A, b" l# M* O# B# X. h) y0 Jinitial begin$ |) c4 W4 o9 j3 G1 A9 P5 J! Q+ H
$monitor($realtime,"set = ",set);
) v0 I% M$ B) F; s #p set = 0;$ w* b5 o" K& e8 _8 [+ `& U
#p set = 1;
  h  Z) D# D1 v1 F' w/ Q" aend, R# v& x& y+ L% N% m
endmodule
" ]5 R& Q1 R" I: K" }  I输出结果为:
2 U* t% t7 Z; f0 set = x
' y' L- g0 Y  C% l7 ]  }1.6 set = 0
; t6 a2 w3 y3 c) v8 O( b$ y" S0 V3.2 set = 11 U1 d5 r1 E+ N1 a+ O0 w
系统任务$finish,或者$finish(n)的作用是退出仿真器,返回主操作系统,也就是结束仿真过程。任务$finish可以带参数,根据参数的值输出不同的特征信息。如果不带参数,默认$finish的参数值为1。
6 A. S# l- b6 y7 y3 L5 m; e3 ~; ?3 o0 不输出任何信息;% q5 M, b: s$ B
1 输出当前仿真时刻和位置;. v7 o+ Y4 G- R/ O7 u5 H) h
2 输出当前仿着时刻、位置和在仿真过程中所用memory及CPU时间的统计。
3 G1 W8 M$ z- B8 s. P6 `
0 c2 Q9 R* A0 Y# e. w
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 04:29 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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