2016-02-24 72 views
-1

[我的波形] [1] 移位器是一個能夠實現算術和邏輯移位操作的組件。 對於此實現,您不允許使用移位運算符。 AL輸入決定您是否進行算術或邏輯移位操作。 迪爾也決定你的轉變方向。改變輸入值也決定了你期望的班次數。 您可以假設每個位移都需要10 ns的移位分量。例如,如果選擇移位= 5而不管移位方向或類型(算術或邏輯)如何,則此組件的延遲爲50 ns。計算32位移位VHDL延遲

如何找出延遲?每個位都有10 ns的延遲,我應該怎麼做10 *移位延遲?

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use ieee.std_logic_unsigned.all; 

ENTITY shifter IS 
    GENERIC (BW : INTEGER :=32); 
    PORT (i : IN STD_LOGIC_VECTOR (BW -1 DOWNTO 0); 
      dir : IN BIT; -- dir ='0' means shift right and dir ='1' means shift left 
      AL: IN BIT ; -- Arithmetic or logical shift asume AL='1' means arithmetic an AL ='0' means logical 
      shifting : IN INTEGER range 0 to BW -1; 
      o: OUT STD_LOGIC_VECTOR (BW -1 DOWNTO 0)); 
    END ; 

ARCHITECTURE shifter_arch OF shifter IS 

BEGIN 
process(dir,i,AL,shifting) 
variable temp: std_logic_vector(31 downto 0); 
begin 
if dir='0' then 
    if AL='0' then 
     temp:= i(BW-(1+shifting) downto 0)&(BW-1 downto BW-(1+shifting)=> '0'); 
    else 
     temp:= i(BW-(1+shifting) downto 0)&(BW-1 downto BW-(1+shifting)=> i(BW-1)); 
    end if; 

elsif dir ='1' then 
    if AL='0' then 
     temp:= i(BW-1 downto shifting)&((shifting-1) downto 0=> '0'); 
    else 
     temp:= i(BW-1 downto shifting)&((shifting-1) downto 0=> i(0)); 
    end if; 

end if; 
o <= temp ; 
end process; 
END shifter_arch ; 
+0

你的移位器沒有成功分析。生成循環的外部依賴於作爲右邊界的「移位」,移位是輸入端口(非靜態)。 IEEE Std 1076-2008 11.8生成語句「for generate語句的生成參數規範中的離散範圍應爲靜態離散範圍;類似地,if生成語句中的每個條件應爲靜態表達式。」 *必須*(*必須* -1993)具有強制性權重,並且應該產生錯誤而不是沒有詳細說明。你的意思是使用順序循環語句(在一個進程內)? – user1155120

+0

我應該如何獲得n位移位而不生成? –

+0

一個for循環的過程? – user1155120

回答

0

第一:你寫的10納秒,但你把1個PS一步照片在你的模擬器, ,我無法理解。第二:如果您在ISim中沒有成功,請將您的模擬器更改爲ModelSim,然後在Quartus中編譯您的代碼,而不是在ISE和它的模擬器中。因爲他們不支持更好的時間模擬。