Diferencias en la sintaxis VHDL

0

Estoy leyendo un diseño VHDL y encontré la sintaxis en la arquitectura que se ve así:

    x_out <= x_in(15) & x_in(6) & x_in(19) & x_in(20) & x_in(28) & x_in(11) & 
                x_in(27) & x_in(16) & x_in(0) & x_in(14) & x_in(22) & x_in(25) & 
                x_in(4) & x_in(17) & x_in(30) & x_in(9) & x_in(1) & x_in(7) & 
                x_in(23) & x_in(13) & x_in(31) & x_in(26) & x_in(2) & x_in(8) & 
                x_in(18) & x_in(12) & x_in(29) & x_in(5) & x_in(21) & x_in(10) & 
                x_in(3) & x_in(24);

donde x_out y x_in son std_logic_vector(31 DOWNTO 0) . Podría ser escrito así:

x_out(0) <= x_in(15);
x_out(1) <= x_in(6);
x_out(2) <= x_in(19);   
x_out(3) <= x_in(20);
x_out(4) <= x_in(28);
x_out(5) <= x_in(11);
x_out(6) <= x_in(27);   
x_out(7) <= x_in(16);   
x_out(8) <= x_in(0);
x_out(9) <= x_in(14);
x_out(10)  <= x_in(22); 
x_out(11)  <= x_in(25);
x_out(12)  <= x_in(4);
x_out(13)  <= x_in(17);
x_out(14)  <= x_in(30); 
x_out(15)  <= x_in(9);  
x_out(16)  <= x_in(1);
x_out(17)  <= x_in(7);
x_out(18)  <= x_in(23); 
x_out(19)  <= x_in(13);
x_out(20)  <= x_in(31);
x_out(21)  <= x_in(26);
x_out(22) <= x_in(2);   
x_out(23) <= x_in(8);
x_out(24) <= x_in(18);
x_out(25) <= x_in(12);
x_out(26) <= x_in(29);  
x_out(27) <= x_in(5);
x_out(28) <= x_in(21);
x_out(29) <= x_in(10);
x_out(30) <= x_in(3);   
x_out(31) <= x_in(24);

¿O en el primer ejemplo es x_out(31) <= x_in(15); y así sucesivamente?

También en un diseño VHDL, ¿cuál de los 2 métodos son preferidos?

    
pregunta Dean

3 respuestas

3

Una alternativa más limpia, que evita el error ilustrado por la pregunta:

Utilice asociación nombrada en lugar de posicional.

x_out <= (31 => x_in(15),
          30 => x_in(6),
          29 => x_in(19), 
          ...
          1  => x_in(3),
          0  => x_in(24));
    
respondido por el Brian Drummond
1

Preferencias personales O esquemas del equipo de diseño

Mi preferencia personal sería el estilo # 2, ya que es más fácil de leer y cambiar

    
respondido por el JonRB
1

La solución de Brian es probablemente la mejor alternativa. De todos modos, aquí hay una solución compacta en caso de que quiera guardar algunas líneas.

constant permutation_indexes: integer_vector := (
    15,  6, 19, 20, 28, 11, 27, 16,  0, 14, 22, 25,  4, 17, 30,  9,
     1,  7, 23, 13, 31, 26,  2,  8, 18, 12, 29,  5, 21, 10,  3, 24
);
...        
permutation: for i in x_out'range generate
    x_out(i) <= x_in(permutation_indexes(i));
end generate;
    
respondido por el rick

Lea otras preguntas en las etiquetas