¿Cómo puedo portar / en un archivo de registro con Verilog (código capaz de síntesis)? En este código específico, un código de bucle de generación no es viable debido a la arquitectura de un código existente.
Un código de prueba, intentando portar / desde mi módulo un archivo de registro dinámico, con un tamaño basado en un parámetro.
module mux_test (/*AUTOARG*/
// Outputs
ro,
// Inputs
clk, rst_n, ain, v, din, bias
) ;
parameter D_WIDTH=8;
parameter A_WIDTH=2;
localparam N = 1 << A_WIDTH;
input wire clk, rst_n;
input wire [A_WIDTH-1:0] ain;
input wire v;
input wire [D_WIDTH-1:0] din;
input wire [D_WIDTH-1:0] bias[N-1:0];
output reg [D_WIDTH-1:0] ro[N-1:0];
wire [D_WIDTH-1:0] d2s = din + bias[ain];
integer i;
always @(posedge clk, negedge rst_n)
if (!rst_n)
for(i=0; i<N; i=i+1)
ro[i] <= 0;
else if (v)
ro[ain] <= d2s;
endmodule // mux_test
El modelo-sim me da lo siguiente:
- Compilando el módulo mux_test
** Error: .... / mux_test.v (3): (vlog-2110) Referencia ilegal a la memoria "ro".
** Error: ... / mux_test.v (5): (vlog-2110) Referencia ilegal al "sesgo" de la matriz de red.