Tengo un módulo ram de 32x32 que construí, el código simple:
Código Verilog
module RAM32X32(
input clk,
input rst,
input WE,
input [4:0] ADDRESS,
input [31:0] D_IN,
output [31:0] D_OUT
);
//////internal////////////////
reg [31:0] mem [31:0];//,r;
wire [31:0] data ;
integer i;
/////////////////////////////
initial begin
for (i = 0; i < 32; i = i +1) begin
mem[i] = 32'b0;
end
end
assign data = WE ? D_IN : 32'bz;
always @ (posedge clk) begin
if (WE == 1'b1) begin
mem[ADDRESS] = data;
end
end
assign D_OUT = mem[ADDRESS];
endmodule
ahora veo que cuando escribo en el ram, lleva tiempo, y en la simulación veo que la memoria cambia solo el CC después, como se ve a continuación (R31 está en la última fila, ahí quiero escribir):
Cambié mi lista de sensibilidad y agregué:
(posedge clk or data)
Y obtuve lo que quería en la simulación. Pero ... sintetizar no lo permitió debido a:
No hay soporte para la síntesis de desencadenantes mixtos de borde y nivel.
Así que pensé en hacer un ariete disparado con tri-estado para protegerlo. ¿Qué piensas? ¿Es incluso legítimo utilizar el nivel activado en estos días? Cualquier ayuda será útil!
¡Gracias!