0

我是 VHDL 的初学者,我正在尝试做一个乘法器,但是我必须从书中使用的代码不能用 xilinx 软件正确编译。代码是:

     library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity testMult is
    Port ( ISwitch  : in  STD_LOGIC_VECTOR (3 downto 0);
           IPress : in  STD_LOGIC;
           IRegIn : in  STD_LOGIC_VECTOR (31 downto 0);
           IRegOut : out  STD_LOGIC_VECTOR (31 downto 0);
           Iclk : in  STD_LOGIC);
end testMult;

architecture Beh of testMult is
    component asMult
        port(ISwitch  : in  STD_LOGIC_VECTOR (3 downto 0);
           IRegA : in  STD_LOGIC_VECTOR (7 downto 0);
              IRegB : in STD_LOGIC_VECTOR (7 downto 0);
           IRegProd : out  STD_LOGIC_VECTOR (15 downto 0);
           Iclk : in  STD_LOGIC;
              St : in STD_LOGIC;
              Done : out STD_LOGIC);
    end component;

constant aValue : std_logic_vector:= IRegIn(7 downto 0);
constant bValue : std_logic_vector:= IRegIn(15 downto 8);
signal Done : std_logic;
signal St : std_logic;
signal IRegA, IRegB : std_logic_vector(7 downto 0);
signal IRegProd : std_logic_vector(15 downto 0);
signal CLK : std_logic;

begin

CLK <= not CLK after 10 ns;

process
    begin
        if IPress = '1' then
            IRegA <= aValue;
            IRegB <= bValue;
            St <= '0';
        wait until CLK = '1' and CLK'event;
            St <= '1';
        wait until Done = '0' and Done'event;
            IRegOut <= IRegProd & IRegIn(15 downto 8) & IRegin(7 downto 0);
        end if;
end process;
asMult1 : asMult port map (ISwitch, aValue, bValue, IRegProd, Iclk, St, Done);
end Beh;

但我不断收到此错误:第 36 行:所有多次等待中预期的等待条件相同。

4

2 回答 2

2

您是在尝试合成该代码,还是只想模拟它?代码不会合成,因为:

  1. CLK <= not CLK after 10 ns不是一个可综合的陈述,并且
  2. 综合工具只能处理较简单的过程。尝试将您的代码分解为纯粹组合的进程,或对同一时钟的同一边沿敏感的同步进程。

如果您只想模拟代码,您的示例仍然存在其他问题,但至少它可以使用 Modelsim ASE 10.1b 编译。我的猜测是您的编译器正在尝试合成代码。

于 2013-12-06T12:26:35.217 回答
0

那是模拟代码 - 您可以在 ISIM 中运行模拟。

在你完成工作之后,你可以合成它的一部分asmult块),但你不能合成你的顶层块,因为它充满了测试台、仅模拟、代码,比如等待事件(只能以非常具体的方式进行合成)和after

于 2013-12-09T11:16:11.903 回答