2012-04-29 18 views
10

Zajmuję się małą rzeczą w VHDL i jestem całkiem nowy. Mam problem z ustaleniem, jak podzielić większy element std_logic_vector na mniejszy.Jak "wyciąć" std_logic_vector w VHDL?

Na przykład mam 3 sygnały:

signal allparts: std_logic_vector(15 downto 0); 
signal firstpart: std_logic_vector(7 downto 0); 
signal secondpart: std_logic_vector(7 downto 0); 

Zasadniczo czego chcę jest przypisanie bity przez 8 do 15 secondpart i bity przez 0 do 7 firstpart. Jak dokładnie bym „plaster” wektorem tak bez przypisywania poszczególnych bitów

Odpowiedz

18

można bezpośrednio przypisać je:

firstpart <= allparts(15 downto 8); 
secondpart <= allparts(7 downto 0); 

... czy firstpart i secondpart są po prostu alternatywne sposoby odnoszą się do części Sygnał allparts, możesz użyć aliasu:

alias firstpart is allparts(15 downto 8); 
alias secondpart is allparts(7 downto 0); 
+0

Ah. Widzę coraz więcej, że VHDL jest bardzo spójnym językiem. Również rozwiązanie aliasowe jest znacznie czystsze, więc użyję tego – Earlz

+0

. Zauważ, że na przykład 'std_logic_vector ([niektóre wyrażenie]) (15 downto 8)' nie zadziała. Aby uzyskać więcej informacji na temat tej składni, zobacz [ta odpowiedź] (http://stackoverflow.com/a/28452053/603003). – ComFreek