欢迎FPGA工程师加入官方微信技术群
点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群
VHDL与Verilog硬件描述语言在数字电路的设计中使用的非常普遍,无论是哪种语言,仿真都是必不可少的。而且随着设计复杂度的提高,仿真工具的重要性就越来越凸显出来。在一些小的设计中,用TestBench来进行仿真是一个很不错的选择。VHDL与Verilog语言的语法规则不同,它们的TestBench的具体写法也不同,但是应包含的基本结构大体相似,在VHDL的仿真文件中应包含以下几点:实体和结构体声明、信号声明、顶层设计实例化、提供激励;Verilog的仿真文件应包括:模块声明、信号声明、顶层设计实例化、提供激励。大致思想都是相似的。
简单的说,TestBench就是一种验证手段,从软件层面对设计的硬件电路进行仿真。具体来讲,一般是在你的仿真文件里,产生激励信号,作用于被仿真的设计文件DUT(Design Under Test),产生相应的输出,然后根据输出信号检验设计的电路是否存在问题或者存在哪些问题。
下面以FPGA板中驱动流水灯的一段程序为例,简单介绍一下两种语言的TestBench的编写。
1 module led_run(clk,rst,led); 2 input clk,rst; 3 output reg [7:0] led; 4 reg [25:0] clk_cnt; 5 reg clk_tmp; 6 reg [3:0] temp; 7 8 always@(posedge clk or negedge rst) 9 begin10 if(!rst)11 begin12 clk_cnt<=26'd0;13 clk_tmp<=1'b1;14 end15 else16 begin17 if(clk_cnt==26'b11111111111111111111111111)18 begin19 clk_cnt<=26'd0;20 clk_tmp<=~clk_tmp;21 end22 else23 clk_cnt<=clk_cnt+1'b1;24 end25 end26 27 always@(posedge clk_tmp or negedge rst)28 begin29 if(!rst)30 temp<=4'd15;31 else32 temp<=temp+1'b1;33 end34 35 always@(temp)36 begin37 case(temp)38 4'd0 :led<=8'b11111110;39 4'd1 :led<=8'b11111100;40 4'd2 :led<=8'b11111000;41 4'd3 :led<=8'b11110000;42 4'd4 :led<=8'b11100000;43 4'd5 :led<=8'b11000000;44 4'd6 :led<=8'b100000