精华内容
下载资源
问答
  • vivado中简单testbench测试代码的编写 - ZYNQ7021学习

    万次阅读 多人点赞 2018-08-03 15:44:16
    首先要明白测试代码的作用,这点其实很重要!...8、 结束testbench程序的运行  用$stop 或$finish结束程序的运行,另起一个initial。例如 initial begin #(1000000*CYCLE); $ stop; end  

    首先要明白测试代码的作用,这点其实很重要!测试代码其实就是通过代码模拟产生测试的环境,然后测试自己编写的模块代码是否正确。这可以指导我们在编写代码过程中决定某一些控制信号该如何产生,比如用于控制产生测试信号的控制信号,可以在一个 initial 模块里去改变这个值,而测试信号中的控制信号,应该在时钟下产生。

    1、 将测试代码模块命名为 sim_crc_to_ram, 并且不需要任何输入信号。

    module sim_crc_to_ram;

    2、 定义变量类型
           一般将输入信号定义为reg类型的;将输出信号定义为wire类型的;

    	reg 	     clk_60M;
    	reg 	     reset;
    	reg 	     flag_din;
    	reg 	     din;
    	wire        clk_5k;
    	wire        data_sys, data_inter;

    3、例化模块,并将输入输出的信号和 2 中定义的变量进行关联。

    crc_to_ram  uut (
                        .clk_60M(clk_60M),
                        .reset(reset),
                        .start(flag_din),
                        .din(din),
                        
                        .clk_5k(clk_5k),
                        .data_sys(data_sys),
                        .data_inter(data_inter)
                   );

    4、  产生时钟模块。
           根据需要产生一个或多个时钟。一般可以产生一个系统时钟即可,其他时钟由这个时钟分频产生即可。下面代码表示延迟8ns以后clk_60M信号取反,即周期为16ns的方波信号。

    always #8 clk_60M = ~clk_60M; 

    5、  时钟控制和reset信号的控制
           一般放在initial模块里,跟据具体需要对reset信号进行编辑;并注意时钟信号的初始化,否则无法产生正常的时钟信号(若不初始化,clk可能默认为x状态,~x状态仍为x,即不会产生时钟驱动)。

        reg	    data_ready;
        integer counti;                
        
        initial begin
                // Initialize Inputs
                clk_60M = 0;
                reset = 0;
                flag_din = 0;
                din = 0;
                
                counti = 0;
                $readmemb("C:/src.txt", mem);
                // Wait 100 ns for global reset to finish
                data_ready = 0;
                #100;
                reset = 1;
                #100;  
                data_ready = 1;  
                // Add stimulus here        
    //          #(1600 * 10 * 1000);        // 4 frame 100k
                #(1600 * 1 * 1000);            // 4 frame 1M
    //           #(400 * 1000);                // 1 frame 1MHz
                data_ready = 0;
            end 

    6、  初始化文件操作

           基本的文件操作包括读和写,下面是我产生输入信号的代码附带其他标记信号,略显繁琐,自己写时采用一个for循环即可。

    parameter 	        read_idle 	= 2'b00,
    			read_begin	= 2'b01,
    			read_end 	= 2'b10;
    
    reg	[1 : 0]	state_read;
    always@(posedge clk_5k or negedge reset)
    begin
    	if(!reset)
    		state_read	<= read_idle;
    	else
    	begin
    		case (state_read)
    			read_idle:
    			begin
    				if(data_ready == 1'b1)
    				begin
    					counti		<= 0;
    					state_read 	<= read_begin;		
    				end
    				else
    					state_read 	<= read_idle;
    			end
    			
    			read_begin:
    			begin
    				if (counti <= 1023)		// 1 frames
    				begin
    					din			<= mem[counti];
    					counti		<= counti + 1;
    					state_read 	<= read_begin; 
    					
    					if ((counti == 0) || (counti == 1024) || (counti == 2048) || (counti == 3072))	
    						flag_din<= 1'b1;
    					else
    						flag_din<= 1'b0;
    				end	
    				else
    					state_read	<= read_end;
    			end
    			
    			read_end:
    			begin
    				state_read	<= read_idle;
    		    end
    				
    			default: 
    			begin
    				state_read 	<= read_idle;	
    			end
    		endcase 
    	end
    end	

           写操作需要一个文件句柄,还要注意仿真结束前关闭文件操作,默认路径在.sim\sim_1\behav中(后仿在 .sim\sim_1\impl \timing中)。

    integer fid;
    fid = $fopen("resut.txt");
    .........
    $fclose(fid);

    7、 控制信号和输出结果的编程
          根据具体的实例对控制信号进行编程,并采集其输出结果,分多个initial模块进行。要形成很强的时序观念,并尽量使每个initial模块结构相对单一,也可以在always块中随着时钟clk将数据写入文本文件中。一般调用文件写操作保存仿真结果,fid 是文件操作符,直接使用如下语句完成输出即可。

    ......
    $fdisplay(fid,"%b",data_out);
    ......

    8、 结束testbench程序的运行
           用$stop 或$finish结束程序的运行,另起一个initial。例如

      initial
            begin
                 #(1000000*CYCLE);
                 $ stop;
            end

     

    展开全文
  • 以后不需要再手写Testbech了,直接用这个就可以,输入你的verilog源码,直接就生成了可以测试的Testbench了。
  • Vivado中IP Catalog内的大多数IP核都提供了一个TestBench,用于单独仿真该IP核。在设计中可以使用这个TestBench来仿真测试IP核的功能是否正确。在产生IP核的输出文件时,可以看到该IP核是否包含TestBench: 相关...

    Vivado中IP Catalog内的大多数IP核都提供了一个TestBench,用于单独仿真该IP核。在设计中可以使用这个TestBench来仿真测试IP核的功能是否正确。在产生IP核的输出文件时,可以看到该IP核是否包含TestBench:
    这里写图片描述
    相关文件输出完毕后,在Sources窗口的IP Sources中可以看到该TestBench文件,查阅该文件可以学习不少TestBench的设计编写方法。
    这里写图片描述
    在Sources窗口的Hierarchy标签下,在Simulation Sources文件夹中打开IP核的层次结构(点击前面的小箭头,或右键->IP Hierarchy->Show IP Hierarchy),TestBench文件名格式为tb_ipname。
    这里写图片描述
    将该Testbench设置为顶层仿真模块,右键->Set as Top:
    这里写图片描述
    注意,通常顶层模块会显示为加粗字体,但IP核的TestBench设置为Top模块时不会显示加粗(不清楚是否为Vivado版本bug),但在设置中看到仿真顶层模块为对应TestBench即可。
    这里写图片描述
    以DDS Compiler IP核为例,使用自带的TestBench进行行为仿真结果如下:
    这里写图片描述

    展开全文
  • C/C++ Test bench的基本架构 Test bench是一个用来验证逻辑功能是否正确的虚拟坏境,由Driver/Stimulus(输入激励)、Reference Model(参考模型,其输出结果是正确结果)、DUT(待测模型,Design Under Test...

    一. C/C++ Test bench的基本架构

    在这里插入图片描述在这里插入图片描述

    • Test bench是一个用来验证逻辑功能是否正确的虚拟坏境,由Driver/Stimulus(输入激励)、Reference Model(参考模型,其输出结果是正确结果)、DUT(待测模型,Design Under Test,我们需要综合的C函数)、Monitor(检测DUT的输出)、Scoreboard(将DUT的输出和参考模型的结果做对比);
    • C/C++ Test bench是为了验证我们所写的C/C++函数的正确性;
    • 在HLS中还会复用C test bench来验证生成的RTL设计;
    • 如何写一个高效的test bench,希望被测的函数可以更多次执行,可以覆盖更多的输入情况,将我们的被测函数的输出和已知的正确输出做一个比较,如果结果完全正确返回0;否则返回1;

    一个test bench的实例:
    在这里插入图片描述
    test bench结构中的各个部分:
    在这里插入图片描述

    二. Test bench中的测试激励

    在这里插入图片描述
    测试激励的三种来源:

    • 定义一个变量并且初始化;
    • 将数据存储在数组中;
    • 从外部文件中读取数据再赋给数组;

    1. 用数组做测试激励的实例

    在这里插入图片描述

    2. 从外部文件读取数据作为激励

    在这里插入图片描述在这里插入图片描述

    • 优点就是外部文件可以比较容易地存储大量数据,这从一定程度上做到了测试的完备性,另外外部文件很灵活 ,可以很容易的修改测试数据;
    • C++中从外部读取数据的步骤:创建数据流——读取数据——将数据存储到数组;

    使用Template Function可以高效地从外部文件读取数据,可以参数化读取。
    在这里插入图片描述一个实例:
    在这里插入图片描述

    三. 输出检测与格式控制

    1. 输出检测

    在这里插入图片描述在这里插入图片描述

    • Scoreboard的作用在于将DUT的输出结果与Reference Model中的正确结果比较,当出现错误时给出信息;
    • 通常由两种方法来比较:一种是使用if函数做判断,另一种就是用系统函数来做比较,先将DUT的输出放到一个文件中,system函数中输入是文件;

    如何将数据写入外部文件?
    在这里插入图片描述

    2. 输出格式的控制

    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    • setw、left、right、internal;
    • 整数的输出格式;
    • 定点数的输出格式;
    • 浮点数的输出格式;
    展开全文
  • 自从Xilinx官方从ISE升级为Xilinx后,无法再用软件自动生成testbench文件了,给FPGA工程师带来不少麻烦。 不过Xilinx官方提供了tcl商店以丰富Xilinx软件功能,其中就有生成testbench的tcl脚本提供下载。但是使用...

           自从Xilinx官方从ISE升级为Xilinx后,无法再用软件自动生成testbench文件了,给FPGA工程师带来不少麻烦。

           不过Xilinx官方提供了tcl商店以丰富Xilinx软件功能,其中就有生成testbench的tcl脚本提供下载。但是使用起来还是比较麻烦,必须让那个模块成为顶层并进入Elaborate, Synthesize或者implement界面,然后用tcl指令生成。

           网上也有生成testbench的Perl或者Python的脚本代码,但是使用起来还是有点麻烦,因为需要在命令行敲指令才能完成testbench的生成。

           不过后来发现Vim,Sublime,Notepad++这几种比较主流的编辑器都有生成testbench的功能,直接按快捷键就可以生成了,只是自动生成的testbench比较简单,又无法自己修改插件而已。

           后来本人发现VSCode是个颜值很高的编辑器,于是转投VSCode,而且VSCode具有snippets的功能,可以提高效率,Vivado也可以调用VSCode,在Tools->Setting->Text Editor选择Custom Editor,指令为"...(自己电脑的地址)//Microsoft VS Code//Code.exe" -g [file name]:[line number]。

           很遗憾的是VSCode只有基础语法的插件,没有testbench自动生成插件,于是本人结合网上他人python生成testbench的脚本写了一个VSCode生成testbench的插件。由于VSCode目前只支持typescript和Javascript语言开发,但本人并不熟悉,而且官网提供的文档也并不完善,所以使用typescript建立一个命令行窗口调用python脚本生成testbench和模块例化代码。

           在编写插件代码时,当前的窗口可以用下面语句获取:

    let editor = vscode.window.activeTextEditor;
           选取的内容为editor.selection; let text = editor.document.getText(selection);
           其中文本长度text.length
           当前操作的文件名为editor.document.fileName

           工程目录的out目录绝对值为__dirname

           创建命令行窗口并输入命令行指令
    let terminal1 = vscode.window.createTerminal({name:'new'});
    terminal1.show(true);
    terminal1.sendText(`...`);

           该插件的源代码可以在github上下载:https://github.com/truecrab/VSCode_Extension_Verilog。

           现在该插件已经在VSCode的应用市场上架了,名字是Verilog_Testbench,欢迎大家下载使用,有问题可以在博客留言。

           关于Vivado的其他技巧,可参考:Vivado工程经验与时序收敛技巧

    展开全文
  • vivado testbench 注意事项

    千次阅读 2018-09-27 11:32:52
    对于一个设计而言,时间刻度应该统一,如果设计文件和testbench里面的时间刻度不一致,仿真 器默认以testbench为准。一个较好的办法是写一个global.v文件,然后用include的办法,可以防止这个问题。 对于反复执行的...
  • 打开Vivado软件,直接在欢迎界面点击Create New Project,或在开始菜单中选择File - New Project即可新建工程。 点击Next 输入工程名称和路径。 选择RTL Project,勾选Do not specify......(这样可以跳...
  • 参见 玩转Zynq连载17——新建Vivado工程,这里不再另行说明。 更改编辑器 Tools→settings→TextEditor→CurrentEditorTools\rightarrow settings\rightarrow Text Editor \rightarrow Current EditorTools→...
  • verilog 写的单个与门以及testbench
  • 工程文件虽然部分基于xilinx的官方例程,但官方例程没有testbench,这部分是自己编写的,并对不同的配置进行了分析,完整的工程文件见 如果没有分数下载,认真看本篇,也能做出来。 第一部分参考以下文章,表示感谢...
  • verilog实现的交通灯,用状态机实现,七段数码管显示,包含详细讲解,注释,testbench,波形图以及实验报告!内部只写了单方向的交通灯,可以根据自己需要进行修改。
  • 虽然简单,但是流程很全,教你一步步实现modelsim仿真,很适合新手!
  • Testbench编写指南(1)基本组成与示例

    万次阅读 多人点赞 2018-08-24 17:06:43
    对于小型设计来说,最好的测试方式便是使用TestBench和HDL仿真器来验证其正确性。一般TestBench需要包含这些部分:实例化待测试设计、使用测试向量激励设计、将结果输出到终端或波形窗口便于可视化观察、比较实际...
  • testbench的简单例子和模板

    千次阅读 2019-08-01 16:53:10
    //////////////////////testbench//////////////////////////////////// //待测模块中的input类型 reg clock;////时钟输入 reg rst_n;//复位 reg en;//使能 //待测模块中output类型 wire [7:0]data;//数据输入...
  • Testbench的模板_自用

    2020-04-11 11:59:57
    因为建立Xilinx工程的时候,会需要联合modelsim进行仿真,同样会写Testbench,所以,这次就留一个Testbench的模板,以防止后面重复性操作。
  • 这个是vivado写的Verilog代码,主要是实现FIFO的功能,还有一些是自己的测试testbench
  • 针对Verilog 的Testbench 例程,需要写Testbench 可以参考……
  • 怎样用vhdl写testbench

    2013-04-19 12:24:33
    文档讲解了怎样用vhdl写testbench
  • 适合新手学习verilog HDL语言。并附有testbench文件,共新手学习使用。
  • Test bench是一个用来验证逻辑功能是否正确的虚拟坏境,由Driver/Stimulus(输入激励)、Reference Model(参考模型,其输出结果是正确结果)、DUT(待测模型,Design Under Test,我们需要综合的C函数)、Monitor...
  • testbench编写模板

    2014-05-23 09:38:22
    学习testbench编写最佳学习资料,见过最好的testbench模板
  • Vivado中IP Catalog内的大多数IP核都提供了一个TestBench,用于单独仿真该IP核。在设计中可以使用这个TestBench来仿真测试IP核的功...
  • Testbench编写指南(2)文件的读写操作

    万次阅读 多人点赞 2018-05-27 17:36:13
    Testbench编写指南是博主新开的一个系列,主要介绍在编写testbench时使用到的技巧,让编写者的水平不再仅仅停留在时钟信号、复位信号等简单信号的设置上,更好的完成对设计的仿真工作。 第一篇的题材是文件的读写...
  • 编写高效Vivado HLS工程testbench的三个要素
  • 因此,还是需要testbench测试下仿真的波形,通过波形来看,是不是真的完全表达了设计的初衷。 本文目录: 1.编写测试文件的思路 2.怎么写 正文: 1.编写测试文件的思路 我们编写 2.怎么写 THE END~ ...
  • 本文介绍在模块化设计过程中编写testbench并仿真的方法,Vivado对此有很好的特性支持,使用Quartus+ModelSim也可以达到同样的效果。 仿真第1个子模块 在开始设计前,根据设计划分好各功能模块(为了叙述方便,...
  • 用vhdl写testbench文件的简单方法

    万次阅读 多人点赞 2018-03-30 10:12:05
    Vhdl -- 写Testbench 1 六进制计数器的代码 Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cnt6is port (clr,en,clk ...
  • vivado中FFT核的调用配置及Verilog HDL 版本的testbench.v文件
  • module testbench ; reg clk ; wire ddp ; wire gdp ; wire out ; wire add ; wire [ 3 : 0 ] m ; wire [ 3 : 0 ] n ; test test ( . clk ( clk ) , . out ( out ) , . gdp ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,330
精华内容 532
热门标签
关键字:

testbenchvivado