VHDL中的Wait语句错误

时间:2015-07-14 19:07:52

标签: vhdl

我在this site的Quartus II 9.1中阅读了VHDL中的位加法器。首先,根据指南我添加并编译1位加法器 - 它可以正常工作。

-- Simulation Tutorial
-- 1-bit Adder

-- This is just to make a reference to some common things needed.
LIBRARY IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- We declare the 1-bit adder with the inputs and outputs
-- shown inside the port().
-- This will add two bits together(x,y), with a carry in(cin) and 
-- output the sum(sum) and a carry out(cout).
entity BIT_ADDER is
        port( a, b, cin         : in  STD_LOGIC;
              sum, cout         : out STD_LOGIC );
end BIT_ADDER;

-- This describes the functionality of the 1-BIT adder.
architecture BHV of BIT_ADDER is
begin

        -- Calculate the sum of the 1-BIT adder.
        sum <=  (not a and not b and cin) or
                        (not a and b and not cin) or
                        (a and not b and not cin) or
                        (a and b and cin);

        -- Calculates the carry out of the 1-BIT adder.
        cout <= (not a and b and cin) or
                        (a and not b and cin) or
                        (a and b and not cin) or
                        (a and b and cin);
end BHV;

当我编译它时,它工作正常。之后我添加其他VHDL来测试它。 这是1位加法器的测试平台:

-- ENGR 10 VHDL Lab
-- 1-bit Adder Testbench

-- A testbench is used to rigorously tests a design that you have made.
-- The output of the testbench should allow the designer to see if
-- the design worked.  The testbench should also report where the testbench
-- failed.

-- This is just to make a reference to some common things needed.
LIBRARY IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Decare a testbench.  Notice that the testbench does not have any
-- input or output ports.
entity TEST_ADD is
end TEST_ADD;

-- Describes the functionality of the tesbench.
architecture TEST of TEST_ADD is 

    -- The object that we wish to test is declared as a component of 
    -- the test bench. Its functionality has already been described elsewhere.
    -- This simply describes what the object's inputs and outputs are, it
    -- does not actually create the object.
    component BIT_ADDER 
        port( a, b, cin         : in  STD_LOGIC;
            sum, cout         : out STD_LOGIC );
    end component;

    -- Specifies which description of the adder you will use.
    for U1: BIT_ADDER use entity WORK.BIT_ADDER(BHV);

    -- Create a set of signals which will be associated with both the inputs
    -- and outputs of the component that we wish to test.
    signal A_s, B_s : STD_LOGIC;
    signal CIN_s    : STD_LOGIC;
    signal SUM_s    : STD_LOGIC;
    signal COUT_s   : STD_LOGIC;

    -- This is where the testbench for the BIT_ADDER actually begins.   
    begin

    -- Create a 1-bit adder in the testbench.   
    -- The signals specified above are mapped to their appropriate
    -- roles in the 1-bit adder which we have created.
    U1: BIT_ADDER port map (A_s, B_s, CIN_s, SUM_s, COUT_s);

    -- The process is where the actual testing is done.
    process
    begin

        -- We are now going to set the inputs of the adder and test
        -- the outputs to verify the functionality of our 1-bit adder.

        -- Case 0 : 0+0 with carry in of 0.

        -- Set the signals for the inputs.
        A_s <= '0';
        B_s <= '0';
        CIN_s <= '0';

        -- Wait a short amount of time and then check to see if the 
        -- outputs are what they should be. If not, then report an error
        -- so that we will know there is a problem.
        wait for 10 ns;
        assert ( SUM_s = '0'  ) report "Failed Case 0 - SUM" severity error;
        assert ( COUT_s = '0' ) report "Failed Case 0 - COUT" severity error;
        wait for 40 ns;

        -- Carry out the same process outlined above for the other 7 cases.

        -- Case 1 : 0+0 with carry in of 1.
        A_s <= '0';
        B_s <= '0';
        CIN_s <= '1';
        wait for 10 ns;
        assert ( SUM_s = '1'  ) report "Failed Case 1 - SUM" severity error;
        assert ( COUT_s = '0' ) report "Failed Case 1 - COUT" severity error;
        wait for 40 ns;

        -- Case 2 : 0+1 with carry in of 0.
        A_s <= '0';
        B_s <= '1';
        CIN_s <= '0';
        wait for 10 ns;
        assert ( SUM_s = '1'  ) report "Failed Case 2 - SUM" severity error;
        assert ( COUT_s = '0' ) report "Failed Case 2 - COUT" severity error;
        wait for 40 ns;

        -- Case 3 : 0+1 with carry in of 1.
        A_s <= '0';
        B_s <= '1';
        CIN_s <= '1';
        wait for 10 ns;
        assert ( SUM_s = '0'  ) report "Failed Case 3 - SUM" severity error;
        assert ( COUT_s = '1' ) report "Failed Case 3 - COUT" severity error;
        wait for 40 ns;

        -- Case 4 : 1+0 with carry in of 0.
        A_s <= '1';
        B_s <= '0';
        CIN_s <= '0';
        wait for 10 ns;
        assert ( SUM_s = '1'  ) report "Failed Case 4 - SUM" severity error;
        assert ( COUT_s = '0' ) report "Failed Case 4 - COUT" severity error;
        wait for 40 ns;

        -- Case 5 : 1+0 with carry in of 1.
        A_s <= '1';
        B_s <= '0';
        CIN_s <= '1';
        wait for 10 ns;
        assert ( SUM_s = '0'  ) report "Failed Case 5 - SUM" severity error;
        assert ( COUT_s = '1' ) report "Failed Case 5 - COUT" severity error;
        wait for 40 ns;

        -- Case 6 : 1+1 with carry in of 0.
        A_s <= '1';
        B_s <= '1';
        CIN_s <= '0';
        wait for 10 ns;
        assert ( SUM_s = '0'  ) report "Failed Case 6 - SUM" severity error;
        assert ( COUT_s = '1' ) report "Failed Case 6 - COUT" severity error;
        wait for 40 ns;

        -- Case 7 : 1+1 with carry in of 1.
        A_s <= '1';
        B_s <= '1';
        CIN_s <= '1';
        wait for 10 ns;
        assert ( SUM_s = '1'  ) report "Failed Case 7 - SUM" severity error;
        assert ( COUT_s = '1' ) report "Failed Case 7 - COUT" severity error;
        wait for 40 ns;

    end process;
END TEST;

但出现此错误:

  

错误(10533):add_test.vhd(65)处的VHDL Wait语句错误:Wait语句必须包含带UNTIL关键字的条件子句

1 个答案:

答案 0 :(得分:1)

如Brian所述,Altera Quartus是一个综合工具:它将您的VHDL(或Verilog)代码转换为“网表”,可以映射到实际的门(或查找表)在FPGA的情况下,但这是另一个故事)。因此,Quartus就像是来自Xilinx的并发ISE。还有其他的合成器,比如Synopsys的Design Compiler等。通常你会用VHDL(或Verilog)设计这样的目的:获得一个最终工作的硬件,在真正的门上(FPGA或ASIC门)。

但在此之前,您还需要检查此电路是否有可能真正发挥作用:为此您需要测试台。一般来说,这个测试平台不可合成:它只是一组过程:

  • 生成所有必需的时钟并重置
  • 为您的“被测设计”(DUT)提供数据
  • 在完成自己的计算后回读数据

构建测试平台本质上是一个软件学科。上述过程充当虚拟仪器,使您的DUT进入预期状态。