广告

fpga学习日记21,再探testbench

2013-9-2 16:30 816 0 分类: FPGA/CPLD 文集: 数电,FPGA学习

 Testbench再学习

 

Testbench主要用来生成时钟激励和模拟信号提供给测试模块

然后通过modelsim观察模块的响应

 

基本结构:

module test_bench  

//通常Testbench没有输入与输出端口 信号或变量定义声明 

使用initial always语句来产生激励波形 

例化设计模块 

监控和比较输出响应 

endmodule

 

 

具体内容

Testbench内容主要包括

1,时间单位设置

'timescale 1ns/100ps

2,系统时钟和复位信号的产生

方法(1

always

begin

        #5 clk=~clk;

End

方法(2

initial

begin

mclk = 0;

   while(1)

#10 mclk = ~mclk;

End

方法(3

initial

begin

       Forever   #(延时) CLK = ~CLK;

End

 

复位信号

initial

begin

       Rst = 1;

       #100;

       Rst = 0;

       #500;

       Rst = 1;

 

End

initial

begin

       Rst = 1;

       @(negedge CLK);  // 等待时钟下降沿

       repeat (3) @(negedge CLK);   // 经过3个时钟下降沿

       Rst = 1;

end

3,输入信号的初始化

initial

begin

        clk=1'b0;

        rst=1'b1;

        #10

        rst=1'b0;

        #500

        rst=1'b1;

end

4,模拟产生出入信号,实例化待测试模块

initial

begin

   a_in = 1;

   b_in = 3;

   #200 a_in = 2;

   b_in = 0;

   #200 a_in = 3;

   b_in = 3;

end

5,进行仿真观察结果

 

 

注意事项

1相应于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理。 

 

为双向端口设置中间变量inout_reg作为该inout的输出寄存,inout口在testbench中要定义为wire型变量,然后用输出使能控制传输方向。 eg 

inout [0:0] bi_dir_port; 

wire [0:0] bi_dir_port; 

 

reg [0:0] bi_dir_port_reg; 

reg bi_dir_port_oe; 

assign bi_dir_port=bi_dir_port_oe?bi_dir_port_reg:1'bz; 

bi_dir_port_oe控制端口数据方向,并利用中间变量寄存器改变其值。等于两个模块之间用inout双向口互连。

2,每个testbench都最好包含$stop语句,用以指明仿真何时结束。

3,加载测试向量时,避免在时钟的上下沿变化,比如数据最好在时钟上升沿之前变化,这也符合建立时间的要求。

4initialalways是同时执行的,只是initial只执行一次。

5一般用initial块给信号赋初值,initial块执行一次,always或者forever表示由事件激发反复执行

 

实例

`timescale 1 ns/ 1 ps

module ex0_vlg_tst();

// test vector input registers

reg clk;

reg rst_n;

// wires

wire led;

// assign statements (if any)

ex0 i1 (

// port map - connection between master ports and signals/registers

.clk(clk),

.led(led),

.rst_n(rst_n)

);

initial begin

$monitor($time,"led value = %b\n",led); //监控 led 信号的变化,如果其值发生变

化,立马打印出来

rst_n = 0;                

clk = 0;                          

#1000;                            

@(posedge clk);                       

rst_n = 1;                          

repeat(5) #1_000_000_000;  //延时 5s

$stop;                              

end  

 always #20 clk = ~clk;  //出生 25MHz 时钟信号

endmodule

 

系统任务的使用

1,仿真控制任务

$stop  格式: initial #500 $stop

$finish  格式: initial #500 $finish

$stop暂停仿真后返回软件操作主窗口,将控制权交给user

$finish终止仿真后关闭软件操作主窗口

$time 返回64位整型时间

未完,完整内容见附件 

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
liang890319_284707880 2016-03-22 11:41
[博客大赛]我在搞嵌入式 我有罪
  我在搞嵌入式 我有罪 做嵌入式也有几年了 刚学习的时候书上说嵌入式的定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计...
liang890319_284707880 2015-10-22 11:57
帕萨特迈腾蒙迪欧哪个好
氵灬清风灬说:太小了,没法穿了,懒得换了 junyao00022说:............................... jd272475byp说:宝贝收到啦,衣服质量非常不错,...
liang890319_284707880 2015-10-22 11:56
二手荣威550和二手起亚k2哪个好
二手荣威550和二手起亚k2哪个好   风之乞说:衣服挺好的,就是偏小,已经更换了 梦里水乡0609说:不错 很好  不了不错  赞 四灵之首说:衣服质量不错,韵达快递不行~ ...
liang890319_284707880 2015-10-22 11:55
澳大利亚深海鱼油哪个牌子好
hgjfhgj说:不错  价格便宜  款式不错  开始买中码小了一点  免费给换的  好店家 小杰c子说:非常合适。也很有气质 天佑945说:还可以,性价比高。。。。。。。。。。 Ab...
liang890319_284707880 2015-10-19 11:03
常用DDR sdram和Flash型号
  以下是代码片段: http://blog.csdn.net/myarrow/article/details/7854863   主要是三星 现代 ...
liang890319_284707880 2013-09-29 17:00
ROM FLASH RAM
EPROM、EEPROM、FLASH的总结性区别   http://xdc0363.blog.163.com/blog/static/11546200220...
我要评论
0
0
广告