División de una matriz de bits en Verilog

0

estoy diseñando un algoritmo AES básico en verilog, y necesito dividir una matriz de 1828 bits en 16 partes cada una de 8 bits, por ejemplo (ejemplo de longitud básica no 128), si recibo en mi divisor 8 a 2 módulo 10111011 necesito generar 4 salidas 10 11 10 11

Gracias

    

3 respuestas

3

La forma más fácil, si no necesitas parametrizar cosas, sería usar el enlace, es decir, { } .

Para su ejemplo usando un input_sig de 8 bits, puede hacer esto de la siguiente manera:

reg [1:0] part0, part1, part2, part3;
always @(input_sig)
   {part3, part2, part1, part0} = input_sig;

Esa última línea esencialmente hace un gran cable de cada parte y asigna input_sig al nuevo cable a nivel de bits (como si el nuevo cable fuera cualquier otro cable de 8 bits). Entonces, si input_sig fue 10111011: part3 = 10, part2 = 11, part1 = 10, y part0 = 11.

Luego puedes manipular las partes como desees. Si te preocupan los parámetros, podrías usar un bucle for, pero la lógica podría tener un poco de complejidad (al menos para mi gusto). Esta solución no será demasiado complicada incluso para dividir una señal en 16 partes.

    
respondido por el Matthew Mellott
3

Debería poder escapar sin un bucle for si la parametrización es la necesidad de la hora.

Algo así como,

reg ['param1:0] part0, part1, part2, part3;

always @(input_sig) begin
  part0 <= input_signal ['param1:0];
  part1 <= input_signal [2*param1:param1+1]; 
  part2 <= input_signal [3*param1:2*param1+1]; 
  part3 <= input_signal [4*param1:3*param1+1]; 
end
    
respondido por el PranavKN
0
reg [3:0]['param1:0] part;

always @* 
    for(int i = 0 ; i < 4; i = i + 1)
        part[i] = input_signal['param*i+:'param]; 
    
respondido por el manu

Lea otras preguntas en las etiquetas