第七章_常用Verilog语法之五
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2006-3-22
30
文件包含处理 `include
• 一个`include只能指定一个被包含文件 • 任何地方出现,可加路径 • 嵌套文件处理
– 文件1包含文件2 – 文件2内要用到文件3的内容
~include “file3.v” ~include “file2.v” file1.v
2006-3-22
2006-3-22
24
系统任务$random
• 提供了一个产生随机数的手段,函数被 调用时返回一个32位的随机数(带符号)
2006-3-22
25
内容提要
• 系统函数与任务 • 编译预处理
2006-3-22
26
编译预处理
• • • • • • C语言 `符号开头 宏定义:`define 包含:`include 时间:`timescale 条件编译`ifdef
2006-3-Hale Waihona Puke Baidu2 7
验证系统中的任务(task)及函数(function)
• Verilog读取当前仿真时间的系统函数 $time $stime $realtime • Verilog支持文本输出的系统任务: $display $strobe $write $monitor
2006-3-22 8
31
条件编译~ifdef, ~else, ~endif
`ifdef 宏名 语句块1 `else 语句块2 `endif
2006-3-22
33
example
module compile(out,A,B); output out; input A,B; `ifdef add assign out=A+B; `else assign out=A-B; `endif endmodule
2006-3-22
3
系统任务和系统函数分类
• 显示、探测、监视类系统任务: $write $display $write $display 遇到语句执行 $display(“格式控制字符串”,输出变量名表项); • 进程控制类系统任务:$finish $stop
2006-3-22
4
• 仿真时标类系统任务 $printtimescale $timeformat • 仿真时标类系统函数 $time $stime $realtime
• $fopen打开一个文件并返回一个多通道描述符(MCD)。
– MCD是与文件唯一对应的32位无符号整数。 – 如果文件不能打开并进行写操作,MCD将等于0。 – 如果文件成功打开,MCD中的一位将被置位。
• 以$f开始的显示系统任务将输出写入与MCD相对应的文件中。
2006-3-22 21
文件输出
监视信号值—$monitor
2006-3-22
15
监示信号值—$monitor
2006-3-22
16
仿真时间
访问仿真时间 • • • • • $time,$realtime,和$stime函数返回当前仿真时间。 这些函数的返回值使用调用模块中`timescale定义的 时间单位 $time返回一个64位整数时间值。 $stime返回一个32位整数时间值。 $realtime返回一个实数时间值。 $stime函数返回一个32位整数时间值。对大于232 的时间,返回模232的值。使用它可以节省显示及打 印空间。
27
2006-3-22
宏定义 `define `undef
• • • • • 宏名建议大写 有效范围为定义命令之后到源文件结束 引用时加“~” 可以刷新宏定义 不加;
2006-3-22
29
文件包含处理 `include
• 一个源文件将另一个源文件的全部内容 包含进来。 • `include “文件名” • 常用的宏定义或task组成一个文件,用 include命令包含到源文件中
-------------------------------------------------------
例: initial $monitor($time,,”a=%b, b=%h”, a, b);
//每当a 或b值变化时该系统任务都显示当前的仿真时刻并分别用二进制 和十六进制显示信号a和 b的值
显示信号值 — $display
2006-3-22
9
显示信号值 — $display
格式符
%h %o %d %b %c %s %v %m %t hex octal decimal binary ASCII string strength module time
转义符
\t \n \\ tab 换行 反斜杠 制数
18
$time
• $time显示时刻受时间尺度比例的影响, 即$time输出的时刻总是时间尺度的倍数 • $time总是输出整数
2006-3-22
19
$realtime
~timescale 10ns/1ns module test; reg set; parameter p=1.6; initial $monitor ($time,,”set=“,set); #p set = 0; #p set = 1; end 2006 -3-22 endmodule
2006-3-22
\" \< 1-3 digit octal number> %0d 双引号 上述的ASCII表示 无前导0的十进
10
module disp; initial begin $display(“\\\t%%\n\”\123”); end endmodule
example
2006-3-22
20
文件输出
... integer MCD1; MCD1 = $fopen("<name_of_file>"); $fdisplay( MCD1, P1, P2, .., Pn); $fwrite( MCD1, P1, P2, .., Pn); $fstrobe( MCD1, P1, P2, .., Pn); $fmonitor( MCD1, P1, P2, .., Pn); $fclose( MCD1); ...
2006-3-22 17
$time
~timescale 10ns/1ns module test; reg set; parameter p=1.6; initial $monitor ($time,,”set=“,set); #p set = 0; #p set = 1; end 2006 -3-22 endmodule
2006-3-22
34
• $fopen打开参数中指定的文件并返回一个32位无符号 整数 MCD,MCD是与文件一一对应的多通道描述符。如果文 件不能打开并进行写操作,它返回0。 • $fclose关闭MCD指定的通道。 • 输出信息到log文件和标准输出的四个格式化显示任务 ($display, $write, $monitor, $strobe)都有相对应的任务用 于向指定文件输出。 • 这些对应的任务($fdisplay,$fwrite,$fmonitor,$fstrobe)的 参数形式与对应的任务相同,只有一个例外:第一个参数 必须是一个指定向何哪个文件输出的MCD。MCD可以是 一个表达式,但其值必须是一个32位的无符号整数。这个 值决定了该任务向哪个打开的文件写入。 • MCD可以看作由32个标志构成的组,每个标志代表一个 单一的输出通道。
2006-3-22
5
• 文件输入/输出类 $fopen $fclose ; $fdisplay $fwrite $fstrobe $fmonitor ; $readmem
2006-3-22
6
系统任务和函数
$<标识符> ‗$‘ 符号表示 Verilog 的系统任务和函数 常用的系统任务和函数有下面几种: 1) $time //找到当前的仿真时间 2) $display, $monitor //显示和监视信号值的变化 3) $stop //暂停仿真 4) $finish //结束仿真
第七章 常用Verilog语法 (五)
周晓波 北京交通大学电子信息学院 xbzhou@bjtu.edu.cn 51683626
2006-3-22 1
内容提要
• 系统函数与任务 • 编译预处理
2006-3-22
2
系统任务与系统函数分类
• • • • • 输入输出控制类系统任务 模拟时间标记类系统函数 进程控制类系统任务 文件读写类系统任务 其他
显示信号值—$write和$strobe
2006-3-22
14
• $monitor持续监视参数列表中的变量。 • 在一个时间片中,参数表中任何信号发生变化, $monitor将在仿真时间前进前显示参数表的信号值。 • 后面的$monitor将覆盖前面的$monitor。 • 可以用系统任务$monitoron和$monitoroff控制持续监 视。 • $monitor支持多种基数。缺省为十进制。 $monitor ($ time, “%b \t %h \t %d \t %o”, sig1, sig2, sig3, sig4);
2006-3-22 22
系统任务$finish
• • • • • $finish; $finish(n); 0:不输出任何信息 1:输出当前仿真时刻和位置 2:输出当前仿真时刻,位置和仿真过程 中所用memory及CPU时间的统计
23
2006-3-22
系统任务$stop
• $stop; • $stop(n); • 仿真器设置为暂停模式
11
自动调节输出数据宽度
• $display (“=%0h =%0h”data, addr);
2006-3-22
12
显示信号值—$write和$strobe
• $write与$display相同,不同的是不会自动换行。 $write($time, ―%b \t %h \t %d \t %o \t‖, sig1, sig2, sig3, sig4); • $strobe与$display相同,不同的是在仿真时间前进之 前的信号值。而$display和$write立即显示信号值。也 就是说$strobe显示稳定状态信号值,而$display和 $write可以显示信号的中间状态值。 $strobe($time, ―%b \t %h \t %d \t %o \t‖, sig1, sig2, sig3, sig4); • $write和$strobe都支持多种数基,缺省为十进制。 $writeb $strobeb $writeo $strobeo $writeh $strobeh 13 2006-3-22