2012-04-29 16 views
10

Sto sviluppando una piccola cosa in VHDL e sono abbastanza nuovo ad esso. Non riesco a capire come suddividere un più grande std_logic_vector in uno più piccolo.Come "affettare" uno std_logic_vector in VHDL?

Per esempio ho 3 segnali:

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

Fondamentalmente, quello che voglio è assegnare bit da 15 a 8 per secondpart ei bit 7 a 0 fino a firstpart. Esattamente come avrei "fetta" di un vettore come questo senza assegnare singoli bit

risposta

18

è possibile assegnarli direttamente:

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

... o se firstpart e secondpart sono modi alternativi semplicemente per fare riferimento a una parte del segnale di allparts, potresti voler usare un alias:

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

Ah. Sto vedendo sempre più ora che VHDL è un linguaggio molto coerente. Inoltre, la soluzione alias è molto più pulita, quindi userò quella – Earlz

+0

Nota che per esempio 'std_logic_vector ([some expression]) (15 downto 8)' non funzionerà. Vedi [questa risposta] (http://stackoverflow.com/a/28452053/603003) per maggiori dettagli quando questa sintassi è applicabile. – ComFreek