Tengo un módulo que estoy escribiendo en Verilog que contiene efectivamente una matriz 2D de 16 por 10. En un punto y "fila" determinados, lo que quiero es que esos datos se transfieran a una red que pueda leerse fuera del módulo, sin embargo, cuando intento usar una entrada de variable para determinar qué fila quiero que mi sintetizador los devuelva errores:
Error (10734): Verilog HDL error at FontRom.v(12): ROW_NUM is not a constant
El error es bastante claro, pero ahora no estoy seguro de cómo puedo acceder a diferentes partes de la matriz si no puedo usar una variable. Además, normalmente cuando necesito precargar un registro con datos tengo una condición de restablecimiento que lo hace, ¿tengo que hacer lo mismo en este caso también? A continuación se muestra mi código. Gracias.
module FontRom(CLK, CHAR_IN, ROW_NUM, DATA_OUT);
input wire [7:0] CHAR_IN;
input wire [3:0] ROW_NUM;
input wire CLK;
output reg [0:9] DATA_OUT;
parameter char = 2'h48;
parameter font_value = 40'h000008120481204813FC81204812048120400000;
reg [0:159] char_font = font_value;
always @(negedge CLK)
if (CHAR_IN == char) begin
DATA_OUT = char_font[2*ROW_NUM:2*ROW_NUM+10]; // +10 due to Big Endian
end
else begin
DATA_OUT = 8'bZZ;
end
endmodule