Estoy tratando de entender en qué parte del siguiente código de comportamiento, en qué tipo de hardware se convierte:
reg [7:0] k0, k1, k2, k3;
reg [7:0] data1_tmp, data2_tmp;
// Asynchronously read data from two registers
always @(*)
begin
case (reg1)
0: data1_tmp = k0;
1: data1_tmp = k1;
2: data1_tmp = k2;
3: data1_tmp = k3;
endcase
case (reg2)
0: data2_tmp = k0;
1: data2_tmp = k1;
2: data2_tmp = k2;
3: data2_tmp = k3;
endcase
end
Lógicamente entiendo lo que está haciendo. Pero me gustaría saber de qué se haría este archivo de mini registro en hardware. En particular, la matriz de 4x8 bits que consiste en k0, k1, k2, k3. Pensé que cuando se trataba de registros y matrices como esta, ¿necesitas un reloj para leer datos, como RAM?
Vea Tengo un problema conceptual al diseñar un módulo simple de caché verilog. Tengo una matriz de datos que contiene todas mis etiquetas como:
reg [NUM_TAG_BITS-1:0] tag_array[NUM_BLOCKS-1:0]
Y tengo un cable "line_select" (de mi PC de entrada). Lo que quiero hacer es recuperar tag_array [line_select] y luego colocarlo en un comparador con la etiqueta de mi PC para ver si tengo un hit.
Pero pensé que cada vez que accedía a tag_array, tenía que estar dentro del código "always @ (posedge clk)". Luego me quedé atascado: ¿cómo leo este tag_array y hago la comparación dentro del mismo ciclo de reloj? Así que encontré el código anterior en línea diciendo que se puede leer de los registros de forma asíncrona, luego me confundí porque, francamente, no sé lo suficiente sobre el hardware de memoria y cómo es posible.
Muchas gracias por cualquier ayuda!