2012-01-24 74 views
11

你好,我正試圖找到一種方法來取代這個命令:Bus_S <= "0000000000000000000000000000000" & Ne;更方便。一個一個地計數零並不是很複雜。該程序是關於ALU的SLT單位,單位爲mips。 SLT僅獲得1位(ADDSU32的MSB),並且具有32位的輸出全零,但第一位取決於ADDSU32的Ne = MSB。 (PLZ忽略ALUOP暫且)如何在VHDL中聲明多個零的輸出

entity SLT_32x is 
    Port (Ne : in STD_LOGIC; 
     ALUop : in STD_LOGIC_VECTOR (1 downto 0); 
     Bus_S : out STD_LOGIC_VECTOR (31 downto 0)); 
end SLT_32x; 

architecture Behavioral of SLT_32x is 
begin 
    Bus_S <= "0000000000000000000000000000000" & Ne; 
end Behavioral; 

有沒有辦法使用(30 DOWNTO 0)= '0' 或類似的東西的方法嗎?謝謝。

+1

感謝這也應該工作: '常數C:std_logic_vector(30 DOWNTO 0):=(他人=> '0');' '開始 Bus_S <= C & Ne; Ne_out <=氖;' – BugShotGG

回答

24

試試這個:bus_S <= (0 => Ne, others => '0') 這意味着:設置位0到Ne,並將其他位設置爲'0'。

1

替代給出答案:

architecture Behavioral of SLT_32x is 
begin 
    Bus_S <= (others => '0'); 
    Bus_S(0) <= ne; 
end Behavioral; 

始終在組合學過程的最後分配考慮。這在大多數情況下具有默認分配並且隨後添加特殊情況(即通過分層塊饋送寬總線(定義爲記錄)並且僅修改一些信號)時使得非常易讀的代碼。

+0

此需要在流程內完成,否則將無法工作。至少不在ModelSim-Altera 10.3d上 – iSWORD