精华内容
下载资源
问答
  • 用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 ...

    Vhdl -- 写Testbench

    1         六进制计数器的代码

    Library ieee;  
    
    use ieee.std_logic_1164.all;  
    
    use ieee.std_logic_arith.all;  
    
    use ieee.std_logic_unsigned.all;  
    
    entity cnt6 is  
    
    port  
    
      (clr,en,clk :in std_logic;  
    
      q  :out  std_logic_vector(2 downto 0)  
    
      );  
    
    end entity;  
    
    architecture rtl of cnt6 is  
    
    signal tmp  :std_logic_vector(2 downto 0);  
    
    begin  
    
      process(clk)  
    
    --    variable q6:integer;  
    
        begin  
    
          if(clk'event and clk='1') then  
    
            if(clr='0')then  
    
              tmp<="000";  
    
            elsif(en='1') then  
    
              if(tmp="101")then  
    
                tmp<="000";  
    
              else  
    
                tmp<=unsigned(tmp)+'1';  
    
              end if;  
    
            end if;  
    
          end if;  
    
          q<=tmp;  
    
    --      qa<=q(0);  
    
    --     qb<=q(1);  
    
    --     qc<=q(2);  
    
      end process;  
    
    end rtl;  

    2         六进制计数器testbench的代码

    library ieee;  
    
    use ieee.std_logic_1164.all;  
    
      entity cnt6_tb is   
    
    end cnt6_tb;  
    
    architecture rtl of cnt6_tb is  
    
      component cnt6  
    
        port(  
    
          clr,en,clk :in std_logic;  
    
          q  :out  std_logic_vector(2 downto 0)  
    
          );  
    
      end component;  
    
        signal clr  :std_logic:='0';  
    
      signal en   :std_logic:='0';  
    
      signal clk  :std_logic:='0';  
    
      signal  q   :std_logic_vector(2 downto 0);  
    
          constant clk_period :time :=20 ns;   
    
      begin  
    
        instant:cnt6 port map  
    
        (  
    
          clk=>clk,en=>en,clr=>clr,q=>q  
    
          );  
    
      clk_gen:process  
    
      begin      
    
        wait for clk_period/2;  
    
        clk<='1';   
    
        wait for clk_period/2;  
    
        clk<='0';  
    
      end process;  
    
    
    
      clr_gen:process  
    
      begin  
    
        clr<='0';  
    
        wait for 30 ns;  
    
        clr<='1';  
    
        wait;  
    
      end process;  
    
            en_gen:process  
    
      begin  
    
        en<='0';  
    
        wait for 50ns;  
    
        en<='1';  
    
        wait;  
    
      end process;  
    
    end rtl;  

    3         Testbench固定的一套格式

    其实testbench也有自己固定的一套格式,总结如下:

    --测试平台文件(testbench)的基本结构  

    library ieee;  
    
    use ieee.std_logic_1164.all;  
    
      entity test_bench is      --测试平台文件的空实体(不需要端口定义)  
    
    end test_bench;  
    
    architecture tb_behavior of test_bench is  
    
        component entity_under_test         --被测试元件的声明  
    
            port(  
    
            list-of-ports-theri-types-and-modes  
    
            );  
    
        end component;  
    
    begin  
    
        instantiation:entity_under_test port map  
    
        (  
    
            port-associations  
    
        );  
    
        process()       --产生时钟信号  
    
        ……  
    
        end process;  
    
        process()       --产生激励源  
    
        ……  
    
        end process;  
    
    end tb_behavior;  

    3.1      简单计数程序源码  

    library ieee;  
    
    use ieee.std_logic_1164.all;  
    
    use ieee.std_logic_unsigned.all;  
    
    use ieee.std_logic_unsigned.all;  
    
    entity sim_counter is  
    
        port(  
    
            clk     :in     std_logic;  
    
            reset   :in     std_logic;  
    
            count   :out    std_logic_vector(3 downto 0)  
    
            );  
    
    end entity;  
    
    architecture behavioral of sim_counter is  
    
    signal temp :std_logic_vector(3 downto 0);  
    
    begin  
    
        process(clk,reset)  
    
        begin  
    
            if reset='1' then  
    
                temp<="0000";  
    
            elsif clk'event and clk='1' then  
    
                temp<=temp+1;  
    
            end if;  
    
        end process;  
    
        count<=temp;  
    
    end behavioral;  

    3.2      简单计数程序,测试文件代码(testbench)  

    library ieee;  
    
    use ieee.std_logic_1164.all;  
    
    use ieee.std_logic_unsigned.all;  
    
    use ieee.numeric_std.all;  
    
    entity counter_tb_vhd is            --测试平台实体  
    
    end counter_tb_vhd;  
    
    architecture behavior of counter_tb_vhd is  
    
        --被测试元件(DUT)的声明  
    
        component sim_counter  
    
        port(  
    
            clk :in std_logic;  
    
            reset   :in std_logic;  
    
            count   :out std_logic_vector(3 downto 0)  
    
            );  
    
        end component;  
    
        --输入信号  
    
        signal clk:std_logic:='0';  
    
        signal reset :std_logic:='0';  
    
        --输出信号  
    
        signal count    :std_logic_vector(3 downto 0);  
    
    
    
        constant clk_period :time   :=20 ns;        --时钟周期的定义  
    
    
    
    begin  
    
        dut:sim_counter port map(  
    
            clk=>clk,reset=>reset,counter=>counter  
    
            );  
    
        clk_gen:process  
    
        begin  
    
            clk='1';  
    
            wait for clk_period/2;  
    
            clk='0';  
    
            wait for clk_period/2;  
    
        end process;  
    
    
    
        tb:process      --激励信号  
    
        begin  
    
            wait for 20 ns;  
    
            reset<='1';  
    
            wait for 20 ns;  
    
            reset<='0';  
    
            wait for 200 ns;  
    
            wait;       --will wait forever;  
    
        end process;  
    
    end;  

    4        激励信号的产生方式  

    4.1      自书写

    1,  以一定的离散时间间隔产生激励信号的波形。

    2,  基于实体的状态产生激励信号,也就是说基于实体的输出响应产生激励信号

    两种常用的复位信号  

    1.周期性的激励信号,如时钟  

    2.时序变化的激励型号,如复位  

      --eg.产生不对称时钟信号  
    
        w_clk<='0' after period/4 when w_clk='1' else  
    
               '1' after 3*period/4 when w_clk='0' else  
    
               '0';   
    
    --eg.产生堆成时钟信号,process语句  
    
    clk_gen1:process  
    
    constan clk_period  := 40 ns;  
    
    begin  
    
        clk='1';  
    
        wait for clk_period/2;  
    
        clk='0';  
    
        wait for clk_period/2;  
    
    end process;  

        

    4.2       Quartus II 自动生成

    如果自己不想写这些testbench的这些固定格式,可以在quartus里自动生成testbench文件的模板,然后往里面写信号就行了

    步骤:processing->start->starttest bench template write

    这里需要注意的是要在仿真选项里选择一个仿真工具,然后才会生成testbench

    自动生成的testbench模板格式如下:

    [c-sharp]
    
    -- Copyright (C) 1991-2008 Altera Corporation  
    
    -- Your use of Altera Corporation's design tools, logic functions   
    
    -- and other software and tools, and its AMPP partner logic   
    
    -- functions, and any output files from any of the foregoing   
    
    -- (including device programming or simulation files), and any   
    
    -- associated documentation or information are expressly subject   
    
    -- to the terms and conditions of the Altera Program License   
    
    -- Subscription Agreement, Altera MegaCore Function License   
    
    -- Agreement, or other applicable license agreement, including,   
    
    -- without limitation, that your use is for the sole purpose of   
    
    -- programming logic devices manufactured by Altera and sold by   
    
    -- Altera or its authorized distributors.  Please refer to the   
    
    -- applicable agreement for further details.  
    
    
    
    -- ***************************************************************************  
    
    -- This file contains a Vhdl test bench template that is freely editable to     
    
    -- suit user's needs .Comments are provided in each section to help the user   
    
    -- fill out necessary details.                                                  
    
    -- ***************************************************************************  
    
    -- Generated on "03/13/2011 20:05:04"  
    
    
    
    -- Vhdl Test Bench template for design  :  cnt6  
    
    --   
    
    -- Simulation tool : ModelSim (VHDL)  
    
    --   
    
    
    
    LIBRARY ieee;                                                
    
    USE ieee.std_logic_1164.all;                                 
    
    
    
    ENTITY cnt6_vhd_tst IS  
    
    END cnt6_vhd_tst;  
    
    ARCHITECTURE cnt6_arch OF cnt6_vhd_tst IS  
    
    -- constants                                                   
    
    -- signals                                                     
    
    SIGNAL clk : STD_LOGIC;  
    
    SIGNAL clr : STD_LOGIC;  
    
    SIGNAL en : STD_LOGIC;  
    
    SIGNAL q : STD_LOGIC_VECTOR(2 DOWNTO 0);  
    
    COMPONENT cnt6  
    
        PORT (  
    
        clk : IN STD_LOGIC;  
    
        clr : IN STD_LOGIC;  
    
        en : IN STD_LOGIC;  
    
        q : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)  
    
        );  
    
    END COMPONENT;  
    
    BEGIN  
    
        i1 : cnt6  
    
        PORT MAP (  
    
    -- list connections between master ports and signals  
    
        clk => clk,  
    
        clr => clr,  
    
        en => en,  
    
        q => q  
    
        );  
    
    init : PROCESS                                                
    
    -- variable declarations                                       
    
    BEGIN                                                         
    
            -- code that executes only once                        
    
    WAIT;                                                         
    
    END PROCESS init;                                             
    
    always : PROCESS                                                
    
    -- optional sensitivity list                                    
    
    -- (        )                                                   
    
    -- variable declarations                                       
    
    BEGIN                                                           
    
            -- code executes for every event on sensitivity list   
    
    WAIT;                                                         
    
    END PROCESS always;                                            
    
    END cnt6_arch;  

     

    展开全文
  • 目录序言变量定义时钟设计设计输入模块例化实战演练 序言 由于入门的测试文件很简单...TestBench文件,又称为TB文件,是用来对设计文件进行测试的程序,它与设计文件不同的地方在于,它使用的语法可以是不可综合的...

    序言

    由于入门的测试文件很简单,所以一直以来也都是直接给出测试文件,直到今天才想着去总结一个测试文件的写法。这篇博客将根据HDLBits的题目来总结如何书写Testbench文件,肯定有不完善的地方,仅仅作为一次总结吧。
    TestBench文件,又称为TB文件,是用来对设计文件进行测试的程序,它与设计文件不同的地方在于,它使用的语法可以是不可综合的,比较灵活,不仅仅可以使用Verilog来写Tb文件,还可以使用其他语言,例如sv等。
    写好一个基本的测试文件比较简单,但是写好一个比较完善的测试文件还是比较具有挑战性的。
    Tb文件包括那些组件呢?

    1. 变量定义;
    2. 时钟生成;
    3. 待测试模块输入设计;
    4. 例化待设计模块。
      那我们就开始吧。

    变量定义

    这个比较简单,所谓的变量定义,就是将待测试设计的输入在Tb文件中进行定义,方便后面对其数值进行设计。
    待测试模块的输入定义为reg类型,因为我们要对其进行设计,输出定义为wire类型,它作为例化模块的输出,所以必须定义为wire类型。
    例如,我们要测试一个D触发器:

    module dff(
    input clk,
    input d,
    input areset,
    output q;
    );
    reg q_mid;
    always@(posedge clk or posedge areset ) begin
    	if(areset) q_mid <= 0;
    	else q_mid <= d;
    end
    assign q = q_mid;
    endmodule
    

    我们在写测试文件的时候,对其输入输出进行定义,如下:

    module test_dff();
    // input define
    reg clk;
    reg d;
    reg areset;
    // output define
    wire q;
    
    //other parts
    //......
    endmodule
    

    好了,这部分讲完了,进入下一部分,时钟生成。

    时钟设计

    对于时钟的设计,我们有两种写法,都是通过循环的方式来实现。

    • forever
    • always
      第一种方式,也是我比较喜欢的方式,使用forever进行时钟的设计:
      还是以上一个例子为例,待测试模块为dff:
    module test_dff();
    // input define
    reg clk;
    reg d;
    reg areset;
    // output define
    wire q;
    
    localparam PERIOD = 4;
    // clk generate
    initial begin
    	clk = 0;
    	forever 
    		# (PERIOD/2) clk = ~clk; 
    end
    //other parts
    //......
    endmodule
    

    可以看到,时钟生成部分很容易,需要注意的是必须在initial的内容进行输入的设计(时钟也属于输入),可以这么说,测试文件的reg(输入)几乎都是在initial内部完成的,这是一种有时间顺序的系列行为。
    另一种方式是使用always的方式来设计时钟,如下:

    module test_dff();
    // input define
    reg clk;
    reg d;
    reg areset;
    // output define
    wire q;
    
    localparam PERIOD = 4;
    // clk generate
    initial begin
    	clk = 0;
    end
    always begin
    	#(PERIOD/2) clk = ~clk;
    end
    
    //other parts
    //......
    endmodule
    

    可以看出区别,这种方式是在initial里面首先将clk初始化为0,之后在initial外部进行clk循环反转设计。
    这是规则,需要严格遵守。
    介绍完这两种方式之后,我们来看看HDLBits中对应这一部分的例题:
    Tb/clock
    原题复现:
    You are provided a module with the following declaration:

    module dut ( input clk ) ;

    Write a testbench that creates one instance of module dut (with any instance name), and create a clock signal to drive the module’s clk input. The clock has a period of 10 ps. The clock should be initialized to zero with its first transition being 0 to 1.
    在这里插入图片描述
    好吧,给出我的设计:

    module top_module ( );
        reg clk;
        initial begin
           clk = 0;
            forever 
            #5 clk = ~clk;
        end
        
        dut inst_dut(
            .clk(clk)
        );
    
    endmodule
    

    在这里插入图片描述

    设计输入

    其实时钟也是输入,输入的设计和时钟的设计方式没有什么差别,只不过更加的多样化,我们可以使用task,function等等,当然也可以直接设计。
    这里就不那么多废话了,突然感觉前面说了很多多余的东西,这里就怎么简单怎么来吧。
    看这个例子:
    input design
    原题复现:
    Create a Verilog testbench that will produce the following waveform for outputs A and B:
    在这里插入图片描述
    我的设计:

    module top_module ( output reg A, output reg B );//
    
        // generate input patterns here
        initial begin
            A = 0;
            B = 0;
            #10
            A = 1;
            #5
            B = 1;
            #5
            A = 0;
            #20
            B = 0;
    
        end
    
    endmodule
    
    

    当然,在实际写tb文件时候,肯定不是这样的整体格式,这里是为了适应做相应的题目需要。
    实际中的格式是:

    module top_module (  );//
    
        // generate input patterns here
        initial begin
            A = 0;
            B = 0;
            #10
            A = 1;
            #5
            B = 1;
            #5
            A = 0;
            #20
            B = 0;
    
        end
    
    endmodule
    
    

    模块例化

    模块例化是测试文件中必须的,因为我们写测试文件的目的就是测试待测试模块。
    举个例子,我们下面来测试一个与门:
    题目链接
    You are given the following AND gate you wish to test:

    module andgate (
        input [1:0] in,
        output out
    );
    

    Write a testbench that instantiates this AND gate and tests all 4 input combinations, by generating the following timing diagram:
    在这里插入图片描述
    我的设计:

    module top_module();
        reg [1:0] in;
        wire out;
        
        initial begin
           in = 2'b00;
            #10
            in = 2'b01;
            #10
            in = 2'b10;
            #10
            in = 2'b11;
        end
        
        andgate inst(
            .in(in),
            .out(out)
        );
    
    endmodule
    
    

    实战演练

    题目链接
    The waveform below sets clk, in, and s:
    在这里插入图片描述
    Module q7 has the following declaration:

    module q7 (
        input clk,
        input in,
        input [2:0] s,
        output out
    );
    

    Write a testbench that instantiates module q7 and generates these input signals exactly as shown in the waveform above.
    我的设计:

    module top_module();
        
        reg clk;
        reg in;
        reg [2:0] s;
        wire out;
        
        initial begin
           clk = 0;
           forever begin
              #5 clk = ~clk; 
           end
        end
        
        initial begin
        	in = 0;
            s = 2;
            #10
            s = 6;
            #10
            in = 1;
            s = 2;
            #10
            in = 0;
            s = 7;
            #10
            in = 1;
            s = 0;
            #30
            in = 0;
        end
        
        q7 inst(
            .clk(clk),
            .in(in),
            .s(s),
            .out(out)
        
        );
        
        
        
    
    endmodule
    
    

    在加上一个题目:
    Tff testbench
    You are given a T flip-flop module with the following declaration:

    module tff (
        input clk,
        input reset,   // active-high synchronous reset
        input t,       // toggle
        output q
    );
    

    Write a testbench that instantiates one tff and will reset the T flip-flop then toggle it to the “1” state.
    我的设计为:

    module top_module ();
        
        reg clk;
        reg reset;
        reg t;
        wire q;
        
        initial begin
           clk = 0;
           forever 
               #2 clk = ~clk;
        end
        
        initial begin
           reset = 1;
           t = 0;
           #4
           reset = 0;
            t = 1;
           
        end
        
        tff inst(
            .clk(clk),
            .reset(reset),
            .t(t),
            .q(q)
        );
        
    
    endmodule
    
    

    这篇博文就到这里吧,这是最基础,最简单的测试文件的写法,当然,基础很重要,在此基础上,才能够在上一层楼。

    展开全文
  • 运行:Testbench生成testbench模板 运行:VerilogInstance生成组件实例 运行:VerilogInterface生成接口(SystemVerilog)模板 运行:VerilogClass生成类(SystemVerilog)模板您可以使用p粘贴它。 推荐模块(端口)声明...
  • Testbench 文件读写

    2016-09-18 10:18:00
    1. 读操作 读操作用到的语句是:$readmemb()或$readmemh()。 以$readmemb()为例,它的调用为 ... file_name:可以是.txt、.doc等格式的文件,但必须遵守ROM的规范,即其内容形式必须如下: @0001010_01...

    1.  读操作

    读操作用到的语句是:$readmemb()或$readmemh()。

    以$readmemb()为例,它的调用为

              $readmemb("file_name",memory)

               file_name:可以是.txt、.doc等格式的文件,但必须遵守ROM的规范,即其内容形式必须如下:           

       @00  01010_01001010010010101010

       @01  000010100101001001_0010010

            .......

       @0f  0010101010101_010010010010

             其中:@后紧跟的ROM单元的地址,它必须用十六进制表示。在ROM单元地址与其后  的二进制比特流串之间至少要有一个空格(亦可以有回车);比特流可以用"_"隔开,以增强程序的可读性。

               memory:memory的声明格式为:

               reg[WORD_LEN-1 : 0]  my_rom [WORD_NUM-1 : 0];

             其中:WORD_LEN代表的是每一个ROM向量的长度,即二进制流的长度;WORD_NUM代表的是ROM向量的个数。

             值得注意的是执行完$readmemb()指令后文件中的对应单元就一次性的存储到my_rom当中。在后续的处理中my_rom只能通过其地址访问,一次性地读取对应地址上的向量,如my_rom[k];而不能访问到具体的每一位或几位,如my_rom[k][n];如果要取其中的某一位,可通过将ROM得向量赋给以个寄存器组,再进行引用,需强调的是ROM单元存储文件中向量的时候,将文件二进制串前头的数据存于高位,将二进制串中末尾的数据存于低位。

    一般情况下,可由matlab生成内存文件。

    例如:以下是一个简单的.m文件,生成test.txt 后将该txt 文件保存到Quartus II 工程中的modelsim文件夹下,注意,不管testbench.v文件保存在哪里,该txt文件必须保存在modelsim文件夹下!!!

               clear all
               clc
               fid = fopen('test.txt','wt');
                 for i  = 0 : 63
                        fprintf(fid,'@%x   %s\n',i,dec2bin(i,6));
               end
               fclose(fid); 

     

    testbench.v code

    integer read_addr; 

    reg [7:0] mem[63:0]; // a 8-bit,

    initial

    begin

             $readmemb ( "test.txt", mem );

    end

        always@(posedge clk_x2 or posedge reset) 

        begin 

            if(reset) 

            begin    

                read_addr <= 0;

    din <= 8'd0;

            end 

            else 

            begin 

                if(read_addr <= 63) 

                begin 

                    read_addr <= read_addr + 1; 

                    din <= mem[read_addr];  

                end 

            end 

        end        

            

    2. 写操作

    写操作用用到的操作主要有$fopen(),$fdisplay()和$fclose()。

    $fopen()用于打开一个待写入得文件,并返回一个整型句柄,如:

           integer fid;//定义一个整型变量

           fid = $fopen("my_file");

    $fdisplay()用于向一个打开的文件写入一个向量,如:

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

        $display()将根据data_out的长度向fid指向的文件输入一个data_out长度的向量(每次写入后就加一个回车)。同时和$readmemb相似的,写入的向量索引高的放文件头,索引低的放文件尾。

    $fclose()用于关闭文件,每次文件操作结束后一定要关闭文件。

    testbench.v

        integer i=0;

       integer w_file; 

       initial w_file = $fopen("data_out.txt"); 

       always@(posedge clk_x2 or posedge reset) 

      begin 

            $fdisplay(w_file,"%h",i); 

            i <= i+1;

            if(i == 8'd255)    //共写入256个数据 

            begin

                 $fclose(w_file);

                $stop; 

             end

        end   

    转载于:https://www.cnblogs.com/chuanchuan304/p/5880614.html

    展开全文
  • 适合新手学习verilog HDL语言。并附有testbench文件,共新手学习使用。 适合新手学习verilog HDL语言。并附有testbench文件,共新手学习使用。
  • 用vhdl写testbench

    2014-05-17 16:05:36
    如何用vhdl语言书写testbench文件,帮助你跟好的开发vhdl工程,并进行modelsim仿真测试
  • 如何VHDL的test bench文件

    千次阅读 2013-04-19 11:11:43
    对ISE一窍不通啊,研究了一些testbench文件的编写,record一下。  借用一下博文http://hi.baidu.com/lovelink/item/ff34ce9b12f45988581461ac的话。  首先对TESTBENCH作一个形象一些的比喻吧,它就象是一个面包...

          最近项目上要用到FPGA,之前用的一直是verilog,后面换成了VHDL。对ISE一窍不通啊,研究了一些testbench文件的编写,record一下。

           借用一下博文http://hi.baidu.com/lovelink/item/ff34ce9b12f45988581461ac的话。

           首先对TESTBENCH作一个形象一些的比喻吧,它就象是一个面包板(做过电路实验吧),他对外没有任何接口,但它要向要插在他上面的器件提供接口,这样才能正确的插入,还有它必须对插在它上面的器件提供正常的信号。当然在它上面还必须要有这个器件。这时就完成了一个TESTBENCH。应该大概明白了其中的意思了吧。

           好了,根据上面的比喻我们可以非常明确的知道一个TESTBENCH要写一些什么东西,首先它对外无接口,所以它的实体部分是空的。在它上面要有相应的器件,所以在它的结构体中要申明我们要测试的器件,也就是component的申明。还有就是它要对器件提供接口,所以它的结构体应该提供一些信号,并且要对这些信号进行正确的测试赋值。当然还要进行一些插入工作,就是信号的对应工作。这样一个TESTBENCH就完成了。原理很简单的,应该很容易明白。不过在真正的测试中可能不会用太多的这种方式吧,应该会选用测试向量吧,这个的准确性更高一些。不过怎么样写测试向量,这到是一个有大学问的东西,因为当我们的管脚很多的时候,测试的向量数目是要心指数增长的,当然不可能把所有的情况都测试完成了,只有是测试其中的一部分,这儿怎么样写出有代表性的一组测试向量是很有学问的,应该说是研究的热点吧。

          几个testbench要用到的重要语句:

        (1)wait:无限等待,表示永远挂起,对于汉语wait语句的进程来说,进程在一开始执行一次后面就不执行了;

        (2)wait on 信号表:敏感信号等待语句,等待敏感信号表中的信号发生变化才执行;

        (3)wait until 表达式:条件等待语句,当条件表达式中所含的信号发生了变化,并为true时,进程才脱离等待状态;

        (4)wait for 时间表达式:此语句中声明了一个时间段,从从执行到当前的wait语句开始,只要这个时间段内,进程处于等待状态,超过这段时间,进程自动恢复执行该等待语句的下一条语句。wait for 5ns

    下面贴一下我的代码

     
     
     
    --自己写的加法器LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;
      
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    entity adder is
    	port(a,b:in std_logic;
    		  co,so:out	std_logic
    	);
    end adder;
    
    architecture Behavioral of adder is
    begin
    	co<=a and b;
    	so<=a xor b;
    
    end Behavioral;
    
     
     
    
    --为了练习例化语句,我又外包了一层框架,代码如下:
    
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    entity test is
    	port(ain,bin:IN std_logic;
    		sum,cout:out std_logic);
    end test;
    
    architecture Behavioral of test is
       component adder
    		port(a,b:in std_logic;
    			  co,so:out	std_logic
    		);
    	end component;
    begin
    
       u1: adder port map(a=>ain,b=>bin,so=>sum,co=>cout);
    end Behavioral;
    
     
     
     
     
     --下面是系统生成的testbench文件,当然我改了一下
    

    LIBRARY ieee; USE ieee.std_logic_1164.ALL;   -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --USE ieee.numeric_std.ALL;   ENTITY adder_test IS END adder_test;   ARCHITECTURE behavior OF adder_test IS       -- Component Declaration for the Unit Under Test (UUT)       COMPONENT test     PORT(          ain : IN  std_logic;          bin : IN  std_logic;          sum : OUT  std_logic;          cout : OUT  std_logic         );     END COMPONENT;    

       --Inputs    signal ain : std_logic := '0';    signal bin : std_logic := '0';

      --Outputs    signal sum : std_logic;    signal cout : std_logic;    -- No clocks detected in port list. Replace <clock> below with    -- appropriate port name  --   -- constant clk_period  : time := 10 ns;   BEGIN    -- Instantiate the Unit Under Test (UUT)    uut: test PORT MAP (           ain => ain,           bin => bin,           sum => sum,           cout => cout         );

       -- Clock process definitions

     

       -- Stimulus process  ain_gen:process     begin        ain<='0';        wait for 30 ns;        ain<='1';    wait for 100 ns;    ain<='0';       wait;     end process;      bin_gen:process     begin        bin<='0';        wait for 100 ns;        bin<='1';       wait for 200 ns;       bin<='0';           wait;     end process;      

    END;

     

     

     

     

     


    
    
    
    
    
    
    
    
    
    
    
    
    展开全文
  • 怎样用vhdl写testbench

    2013-04-19 12:24:33
    文档讲解了怎样用vhdl写testbench
  • TestBench文件就是使用硬件描述语言的方式描述激励信号,使用熟练后会比图形化的方式更方便,并且逻辑复杂后你会发现,图形化的方式根本无法操作,必须使用TextBench进行仿真。 vivado软件没有自动生成TestBench...
  • 必须为reg,因为对于testbench来说输入其实是要输出给测试模块的,也就是相当于需要一个东西来存储,所以是register类型 输出 必须为wire,因为对于testbench来说输出其实是测试模块的输入,也就是需要通过wire来...
  • Testbench是硬件仿真中的输入激励文件,在Ncsim、Modelsim中属于必不可少的一部分。本文属于入门级Testbench教程。
  • 怎样用VHDL写TESTBENCH.pdf
  • sha-512testbench文件

    2013-04-28 09:38:31
    sha算法的testbench程序,在modelsim上已仿真
  • 之前在使用Verilog做FPGA项目中、以及其他一些不同的场合下,零散的过一些练手性质的testbench文件,开始几次的时候,每次都会因为一些基本的东西没记住、的很不熟练,后面的时候稍微熟练了一点、但是整体...
  • 在资源管理窗口选中了testbench 文件后,在当前资源操作窗显示的ModelSim Simulator 中显示了4 种能进行的模拟操作,分别是:Simulator Behavioral Model(功能 仿真)、Simulator Post-translate VHDL Model(翻译...
  • Verilog编写串并转换,包含modsim编写的testbench文件
  • 在单独使用Modelsim有时候需要自己独立书写testbench,对于应用QII所自带的Start testbench Template writer确实方便,但是有时对于一个小的独立模块进行... 首先在写testbench时,应注意名称要和自己待仿真的工程...
  • 时序控制的串并转换模块,其中包括并行转串行子模块和串行转并行子模块,主时钟24Mhz;在安装了modelsim之后,直接运行testbench文件可以获得仿真结果。
  • Testbench编写指南(2)文件的读写操作

    万次阅读 多人点赞 2018-05-27 17:36:13
    Testbench编写指南是博主新开的一个系列,主要介绍在编写testbench时使用到的技巧,让编写者的水平不再仅仅停留在时钟信号、复位信号等简单信号的设置上,更好的完成对设计的仿真工作。 第一篇的题材是文件的读写...
  • 如何一个仿真文件——testbench

    千次阅读 多人点赞 2020-04-29 17:25:08
    testbench就是对的FPGA文件进行测试的文件。任何设计都是有输入输出的,testbench的作用就是给这个设计输入,然后观察输出是否符合我们的预期,这就是testbench的功能。运行环境一般是ise或者vivado自带的仿真工具...
  • Quartus ii中使用testbench文件

    万次阅读 2014-02-18 14:20:29
    Quartus ii版本是13.01,原工程文件名为ex,Quartus要求最顶层.v文件名要与工程名相同,因此顶层.v文件名为ex.v ...Processing -> Start -> Start Testbench Template Writer生成针对工程的Testbench模板文件
  • FPGA TESTBENCH读取文件数据 `timescale 1ns / 1ps //////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 13:44:03 12/09/2020 // ...
  • testbench文件读写

    2015-05-23 16:47:00
    reg [7:0] data_mem[0:...文件 integer w_file; initial w_file = $fopen("data_out.txt"); always @(i) begin $fdisplay(w_file,"%h",data_out); if(i == 8'd255) //共写入256个数据 $stop; end
  • module Test_bench();//通常无输入输出 信号或变量声明定义 逻辑设计中输入对应reg型 逻辑设计中输出对应wire型 使用initial或always语句产生激励 例化待测试模块 监控和比较输出响应 endmodule 时钟激励...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,873
精华内容 4,349
关键字:

如何写testbench文件