1. 如何观察被测模块的响应:
在initial 块中,用系统任务$time 和 $monitor
$time 返回当前的仿真时刻
$monitor 只要在其变量列表中有某一个或某几个变 量值发生变化,便在仿真单位时间结束时显示其变 量列表中所有变量的值。
1 例: 2 initial begin 3 $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); 4 end
2.如何把被测模块的输出变化记录到数据库文件中?
(文件格式为VCD,大多数的波形显示工具都能读取该格式)
可用以下七个系统任务:
1 $dumpfile(“file.dump”); //打开记录数据变化的数据文件 2 $dumpvars(); //选择需要记录的变量 3 $dumpflush; //把记录在数据文件中的资料转送到硬盘保存 4 $dumpoff; //停止记录数据变化 5 $dumpon; //重新开始记录数据变化 6 $dumplimit(<file_size>); //规定数据文件的大小(字节) 7 $dumpall; //记录所有指定信号的变化值到数据文件中
3. $<标识符> ‘$’ 符号表示 Verilog 的系统任务和函数
常用的系统任务和函数有下面几种:
1 $time //找到当前的仿真时间 2 $display, $monitor //显示和监视信号值的变化 3 $stop //暂停仿真 4 $finish //结束仿真
4.特殊符号 “#” 常用来表示延迟: 在过程赋值语句时表示延迟。
1 例:initial begin #10 rst=1; #50 rst=0; end
5. 编译引导语句用主键盘左上角小写键 “ ` ” 起头 用于指导仿真编译器在编译时采取一些特殊处理
1 `include “global.v” 2 `define //宏定义 3 `include //包含其他文件 4 `timescale //仿真分辨了 5 `uselib //使用库 6 `resetall //编译引导语句把所有设置的编译引导恢复到缺省状态,不明白啊?
6.`timescale 用于说明程序中的时间单位和仿真精度
7.选择数据类型时常犯的错误,其中过程块是always块吗?
1 在过程块中对变量赋值时,忘了把它定义为寄存器 类型(reg)或已把它定义为连接类型了(wire) 2 把实例的输出连接出去时,把它定义为寄存器类型了 3 把模块的输入信号定义为寄存器类型了。