Verilog设计与验证 学习笔记4 Testbench编写
Verilog设计与验证 学习笔记4 Testbench编写
编写仿真激励的注意事项:
一. 仿真激励与被测对象的连接
二. 使用initial语句和always语句
always语句是在被动检测响应的时候使用,即在一些条件发生时才能执行,比如:
always @(posedge clk) begin sigA = sigB; ... end
initial语句是在主动产生激励时使用,如果希望在initial里面多次执行一个语句块,可以再initial里面 嵌入循环语句,(如while,repeat,for和forever),比如:
initial begin forever begin ... end end
三. 时钟,复位的写法
-
普通时钟信号
//用initial语句产生一个周期为10的时钟parameter FAST_P = 10; reg clk; initial begin clk = 0; forever # (FAST_P/2) clk = ~clk; end
//用always语句产生一个周期为10的时钟
parameter FAST_P = 10; reg clk; initial clk = 0;//初始化clk为0 always # (FAST_P/2) clk = ~clk;
-
固定数目的时钟信号
如果需要产生固定数目的时钟脉冲,可以在initial语句中使用repeat语句实现:
//两个高脉冲的时钟脉冲parameter PulseCoun 4000 t = 4,FAST_PERIOD = 10; reg clk; initial begin clk = 0; repeat (PulseCount) # (FAST_PERIOD/2) clk = ~clk; end
-
相移时钟信号
assign # PHASE _SHIFT sigB = sigA;//将信号A的波形右移PHASE_SHIFT时间,得到信号B,其中,sigA为寄存器变量,sigB为线网变量
四.几个简单的系统函数
-
display语句,在仿真器中打印出地址和数据
$display ("Addr : %b -> DataWrite : &d",Mpi_addr,Data_out);
-
利用时序检查的系统任务来检查时序
$setup (Sig_D , posedge clk , 1); //如果在clk上升沿到达之前的1ns之内Sig_D发生跳变,则将给出建立时间违反警告 $hold (posedge clk , Sig_D , 0.1); //如果在clk上升沿到达之后的0.1ns内,Sig_D发生跳变,则将发出保持时间违反警告
-
randow系统函数产生激励数据
Data_out = {$randow} % 256; //产生0-255之间的数据
-
$time 系统函数可以返回当前的仿真时间,协助仿真
五. 从文本文件中读出和写入数据
-
将文件 File_1 中的数据读入Data数组中
reg [7:0] Data [0:47]; //定义一个二维数组 $readmemh ("File_1.txt" , Data);
-
向文件 File_2 中写入数据:
integer File_2; //定义一个整数的文件指针 File_2 = $fopen("File_2.txt"); //打开文件 $fdisplay (File_2 , "@%h\n%h" , addr , data_in);//向文件中写入内容 $fclose (File_2); //关闭文件
一般步骤为:定义文件指针,利用指针,将文件打开,向指针写入内容,关闭文件指针。
六. 并行激励
fork join语法结构,在仿真的某个时刻同时启动多个任务
在仿真开始后的100ns后,如果希望同时启动和接收任务,而不是发送完毕后进行接收:
initial begin #100; fork// Send_task; Receive_task; join end
七.封装功能模块
-
任务(Task)
格式:task 任务名称; 输入,输出声明; 语句; endtask
调用task时的代码为:
任务名称 (输出,输入)
-
函数(function),返回一个宽度为BITWIDTH的值。
格式:function [BITWIDTH - 1 : 0] 函数名称; 输入声明; 语句; endfunction
八. 使用VCD文件
VCD文件是一种标准格式的波形记录文件,该文件值记录发生变化的波形。
九. 使用testbench的命令行进行仿真
-
将工作目录切换到工程目录下,比如将Proj切换:
cd E:/Example-7-1/Proj
-
运行仿真
do sim.do
其中,sim.do是实现编写好的modelsim自动运行脚本,包含编译库文件,编译设计文件,载入仿真,开始运行仿真灯命令,使得整个仿真过程自动运行
TIPs:学习脚本的写法
十. 拓展Verilog的高层建模能力
PLI(编程语言接口):有Verilog开放,专门用来和C语言的程序通信。通过 PLI,Verilog高层建模功能上的不足将会得到弥补。
参考文章:https://www.geek-share.com/detail/2673678023.html
- Verilog设计与验证 学习笔记5 Verilog语义和仿真原理
- 【学习笔记】【第五章】仿真验证与Testbench编写
- MySQL学习笔记_6_SQL语言的设计与编写(下)
- Verilog学习笔记5:层次化设计-数码管段选
- MySQL学习笔记_6_SQL语言的设计与编写(下)
- MySQL学习笔记_6_SQL语言的设计与编写(下)
- Verilog学习笔记(三):计数器的设计
- MySQL学习笔记_5_SQL语言的设计与编写(上)
- Verilog学习笔记6:层次化设计-数码管位选
- MySQL学习笔记_5_SQL语言的设计与编写(上)
- 【verilog】Verilog数字系统设计教程学习笔记(夏宇闻)《一》
- MySQL学习笔记_5_SQL语言的设计与编写(上)
- MySQL学习笔记_5_SQL语言的设计与编写(上)
- verilog testbench编写笔记
- MySQL学习笔记_5_SQL语言的设计与编写(上)
- [转]Verilog数字系统设计教程(大连理工一博士学习笔记)
- 我脑残实验室Verilog学习笔记——在Xilinx ISE中运用符号设计顶层模块的方法
- MySQL学习笔记_6_SQL语言的设计与编写(下)
- MySQL学习笔记_6_SQL语言的设计与编写(下)
- 大数据学习笔记:编写Mapreduce代码并运行