当前位置: 代码迷 >> 综合 >> verilog testbench
  详细解决方案

verilog testbench

热度:45   发布时间:2024-01-26 03:50:15.0

verilog testbench notes

相关语法
initial begin
xxxx;
end

repeat(y) xxxx;
inout信号:

assign birport = (bir_port_oe)?bir_port_reg:1'bz;

@(posedge xxx) xxxxx;//边沿触发
wait(xxxx=y) ;//电平触发
仿真控制语句以及系统能够任务描述

$stop        //停止运行仿真,modelsim中可以继续仿真
$stop(n)     //带参数系统任务,根据参数0,1,或2不同,输出仿真信息
$finish      //结束运行仿真,不可继续仿真
$finish(n)   //带参数系统任务,根据参数的不同:0,1或2,输出仿真信息// 0: 不输出任何信息// 1: 输出当前仿真时刻和位置// 2:输出房前仿真时刻、位置和仿真过程中用到的memory以及cpu时间的统计
$random        //产生随机数
$random%n     //产生范围-n到n之间的随机数
{$random}%n    //产生范围0到n之间的随机数

仿真终端显示描述

$monitor    //仿真打印输出,打印出仿真过程中的变量,使其终端显示/*  $monitor($time,,,"clk = %d reset = %d out = %d",clk,reset,out); */
$display   //终端打印字符串,显示仿真结果等/*  $display("Simulation start !");$display("At time %t,input is %b %b %b,output is %b",$time,a,b,en,z);*/
$time      //返回64位整型时间
$stime     //返回32位整型时间
$realtiime //实行实型模拟时间

文本输入方式: r e a d m e m b / readmemb / readmemh

//激励具有复杂的数据结构 //verilog提供了读入文本的系统函数 
$readmemb/$readmemh("<数据文件名>",<存储器名>); 
$readmemb/$readmemh("<数据文件名>",<存储器名>,<起始地址>); 
$readmemb/$readmemh("<数据文件名>",<存储器名>,<起始地址>,<结束地址>); $readmemb:/*读取二进制数据,读取文件内容只能包含:空白位置,注释行,二进制数 
数据中不能包含位宽说明和格式说明,每个数字必须是二进制数字。*/ $readmemh: /*读取十六进制数据,读取文件内容只能包含:空白位置,注释行,十六进制数数据中不能包含位宽说明和格式说明,每个数字必须是十六进制数字。*/ /*当地址出现在数据文件中,格式为@hh...h,地址与数字之间不允许空白位置, 可出现多个地址*/

for example:

module xxx;
reg [7:0] memory[0:3];//声明4个8位存储单元
integer i; 
initial begin$readmemh("mem.dat",memory);//读取系统文件到存储器中的给定地址 //显示此时存储器内容 for(i=0;i<4;i=i+1)  $display("Memory[%d]=%h",i,memory[i]); end
endmodule

mem.dat的文件内容格式:

//mem.dat文件内容
@001
AB CD
@003
A1 
//仿真输出为
// Memory[0] = xx;
// Memory[1] = AB; 
//Memory[2] = CD; 
//Memory[3] = A1; 
always 与forever的区别

forever放在initial语句中

initial beginxxxx;forever xxxx;
end

always放在initial语句外面

initial beginxxxx;
end
always beginxxxx;xxxx;
end
参考资料

https://blog.csdn.net/qq_26652069/article/details/96422293