2012-01-24 9 views
11

Witam Próbuję znaleźć sposób zastąpienia tego polecenia: Bus_S <= "0000000000000000000000000000000" & Ne; z czymś wygodniejszym. Zliczanie zer jeden po drugim nie jest zbyt wyrafinowane. Program dotyczy jednostki SLT dla jednostki ALU w mipsach. SLT otrzymuje tylko 1 bit (MSB z ADDSU32) i ma wyjściowe 32 bity wszystkich zer, ale pierwszy bit, który zależy od Ne = MSB z ADDSU32. (Plz ignorować ALUop na razie)Jak zadeklarować wyjście z wieloma zerami w 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; 

czy istnieje sposób użyć (30 downto 0) = '0' lub coś takiego? Dzięki.

+1

Dzięki To powinno też działać: 'stałą C: std_logic_vector (30 downto 0): = (inne => '0');' 'zaczynają Bus_S <= C & Ne; Ne_out <= Ne;' – BugShotGG

Odpowiedz

24

Spróbuj tego: bus_S <= (0 => Ne, others => '0') Oznacza to: ustaw bit 0 na Ne i ustaw pozostałe bity na "0".

1

alternatywa do podanych odpowiedzi:

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

Zawsze ostatnie zadanie w combinatoric procesu jest brane pod uwagę. Zapewnia to bardzo czytelny kod, gdy ma domyślne przypisanie dla większości przypadków, a następnie dodaje specjalne przypadki, tj. Podawanie szerokiej magistrali (określonej jako rekord) przez hierarchiczny blok i tylko modyfikowanie niektórych sygnałów.

+0

to musi być wykonane wewnątrz procesu, w przeciwnym razie nie będzie działać. przynajmniej nie w ModelSim-Altera 10.3d – iSWORD