2013-04-22 68 views
0

當我綜合這個32位乘法器代碼時,我沒有得到任何錯誤,只是警告我的輸入未被使用並且被分配但未被使用。我的代碼是這樣的:VHDL乘法器代碼中的綜合警告

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity multiplier is 
    Port (multiplicand : in STD_LOGIC_VECTOR(31 downto 0); 
      multiply : in STD_LOGIC_VECTOR(31 downto 0); 
      clk : in STD_LOGIC; 
      product : out STD_LOGIC_VECTOR(63 downto 0)); 
end multiplier; 

architecture Behavioral of multiplier is 

    component adder32bit is 
     port(addone, addtwo : in STD_LOGIC_VECTOR(31 downto 0); 
       sum : out STD_LOGIC_VECTOR(31 downto 0); 
       cout : out STD_LOGIC); 
    end component; 

    signal tempsum : STD_LOGIC_VECTOR(31 downto 0); 
    signal preg : STD_LOGIC_VECTOR(63 downto 0); 
    signal start : STD_LOGIC := '1'; 
    signal tempcout : STD_LOGIC; 
    signal counter : integer := 1; 
begin 

    addN: adder32bit port map(multiplicand, preg(63 downto 32), tempsum, tempcout); 

    process(clk) 
    begin 
     if(rising_edge(clk)) then 
      if(start = '1') then 

       if(counter = 1) then 
        preg <= "00000000000000000000000000000000" & multiply; 
       end if; 

       if(preg(0) = '1') then 
        preg(63 downto 32) <= tempsum; 
        preg <= tempcout & preg(63 downto 1); 
       else 
        preg <= '0' & preg(63 downto 1); 
       end if; 

       counter <= counter + 1; 

       if(counter = 33) then 
        product <= preg; 
        start <= '0'; 
        counter <= 1; 
       end if; 

      end if; 
     end if; 
    end process; 

end Behavioral; 

當我不管我的兩個輸入(被乘數和乘)什麼運行模擬,輸出將是這樣的:「0000 ... UUUUUUU」

任何建議至於我應該在這裏做什麼?初始化preg

+0

週期後一個是「預浸」你所期望的價值?如果沒有,瞭解Delta循環模型,以及流程中信號分配的順序,找出原因,然後重試。這個Q/A可能是有用的:http://stackoverflow.com/questions/13954193/is-process-in-vhdl-reentrant/13956532#13956532 – 2013-04-22 17:03:34

+0

嘿,非常感謝,我發現了這個問題。問題是我在這個過程中設置了很多次,所以它只用了最後一個。 但是....現在我的問題是,如何初始化preg以使preg的值爲「000 ...&multiply」?我的模擬只有當我設置preg爲某個實際值而不使用乘法時才起作用。那麼我可以使用乘法來初始化信號線中的preg嗎? – user2308179 2013-04-22 17:59:46

回答

0

一種方法只涉及到代碼中的微小的變化......

  if(counter = 1) then 
       preg <= "00000000000000000000000000000000" & multiply; 
      else 
       if(preg(0) = '1') then ... 
      end if;