Tengo un kit de inicio ciclón v gx. Viene con 4884 bits de memoria de chip. Quiero escribir un módulo para acceder a la memoria onchip. Por lo tanto, he generado el diseño de referencia ip del ram del catálogo de ip como este:
module onchipmem (
aclr,
address,
clken,
clock,
data,
rden,
wren,
q);
input aclr;
input [7:0] address;
input clken;
input clock;
input [15:0] data;
input rden;
input wren;
output [15:0] q;
'ifndef ALTERA_RESERVED_QIS
// synopsys translate_off
'endif
tri0 aclr;
tri1 clken;
tri1 clock;
tri1 rden;
'ifndef ALTERA_RESERVED_QIS
// synopsys translate_on
'endif
wire [15:0] sub_wire0;
wire [15:0] q = sub_wire0[15:0];
altsyncram altsyncram_component (
...
);
Puedo escribir / leer datos creando una instancia de este módulo:
onchipmem write_mem (
.aclr(reset),
.address(address),
.clken(ce),
.clock(clk),
.data(data),
.rden(1'b0),
.wren(1'b1),
.q()
);
Quiero guardar los datos por onchipmem
en un módulo y leer los datos de la misma instancia de onchipmem
de otro módulo. Sin embargo, la creación de varias instancias de onchipmem
asignará un bloque duplicado de RAM por instancia.
En otras palabras, un módulo de RAM único no puede ser llamado por varios módulos. Entonces, ¿cómo implementar un módulo RAM de uso compartido para que múltiples módulos puedan acceder?
Encontré esta respuesta y sugerí usar arbiter
. Proporcionó algunos códigos de muestra de un árbitro, pero no está completado.
Soy nuevo en fpga y no puedo ver cómo funciona.
Por lo tanto, estoy buscando un ejemplo real y completo para poder aprenderlo y probarlo en modelsim.
Por favor avise.