4 bit x 4 bit usando la tabla de consulta (rom)

0

Este es un curso de nivel introductorio de verilog. Estoy tratando de generar una salida de 8 bits a partir de 4 bits multiplicado por 4 bits. Aquí está el código que tengo hasta ahora.

    // 4 bit x 4 bit operator
    module bit4x4Operator(
    input [3:0]A,        //this code works when A and B are switched to 7:0
    input [3:0]B,
    output [7:0]P
    );
    reg [7:0] ROM[0:224];
    integer i,k;

    initial 
    begin
      for (i = 0; i < 16; i = i+1)
           for (k = 0; k < 16; k = k + 1)
              begin
                  ROM [(i * k)] = (i * k);
              end
     end
     assign P = ROM[(A * B)];

      endmodule

Por lo tanto, la asignación debe hacerse implementando la ROM [], y este código se ejecuta y genera correctamente si los bits de entrada se cambian a 7: 0, pero no estoy seguro de por qué funciona y por qué puede ' Sé como es ahora.

    
pregunta Sagistic

1 respuesta

2

assign P = ROM[(A * B)]; debería ser assign P = ROM[{A,B}]; Los paréntesis ( {} ) se utilizan para concatenar los bits. Los corchetes ( [] ) son para indexación.

Para ROM [(i * k)] = (i * k); querrá ROM [{i[3:0],k[3:0]}] = (i * k);

i y k son enteros (equivalentes a reg signed [31:0] ), por lo que {i,k} tendría 64 bits de ancho con i comenzando en el bit 32. El [3:0] es un intervalo de rango si los enteros son significativo para esta indexación.

Nota: no desea redefinir i y k como reg [3:0] , ya que esto le dará un bucle infinito 15 + 1 es 0 para un registro de 4 bits y siempre menor que 16.

    
respondido por el Greg

Lea otras preguntas en las etiquetas