2012-04-29 119 views
10

Estoy desarrollando una pequeña cosa en VHDL y soy bastante nuevo en eso. Tengo problemas para descubrir cómo dividir un std_logic_vector más grande en uno más pequeño.¿Cómo "cortar" un std_logic_vector en VHDL?

Por ejemplo tengo 3 señales:

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

Básicamente, lo que quiero es asignar los bits 15 a 8 para secondpart y los bits 7 a 0 a firstpart. ¿Cómo funciona exactamente iba a "cortar" un vector como este sin la asignación de bits individuales

Respuesta

18

podrá asignar directamente ellos:

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

... o si firstpart y secondpart son simplemente formas alternativas para referirse a una parte del señal de todas las partes, es posible que desee utilizar un alias:

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

Ah. Estoy viendo más y más ahora que VHDL es un lenguaje muy consistente. Además, la solución de alias es mucho más limpia, así que usaré ese – Earlz

+0

Tenga en cuenta que, por ejemplo, 'std_logic_vector ([some expression]) (15 downto 8)' no funcionará. Vea [esta respuesta] (http://stackoverflow.com/a/28452053/603003) para más detalles cuando esta sintaxis es aplicable. – ComFreek