Mi interés está más en cómo se verá el circuito sintetizado real y en qué componentes se construirá. Aquí hay un ejemplo de módulo de RAM 64x1:
module ram64X1 (clk, we, d, addr, q);
input clk, we, d;
input [5:0] addr;
output q;
reg [63:0] temp;
always @ (posedge clk)
if(we)
temp[addr] <= d;
assign q = temp[addr];
endmodule
Solo para asegurarme de que entiendo la lógica: addr
indexa un punto particular en la matriz de 64x1 bits. Toma el valor d
y lo coloca en esa entrada, mientras que también devuelve el valor antiguo q
que estaba allí antes. ¿Es esto correcto?
Mi pregunta principal es qué circuitos se traducirán si sintetizamos, por ejemplo, una biblioteca de células estándar. El objeto reg
parece ser una matriz de flip-flops cronometrados por clk
. No sé qué circuitos lógicos toman addr[5:0]
e indexan en esta matriz. ¿Un mux realmente amplio de 64 a 1 con addr
como el cable seleccionado? También me gustaría saber cómo se construyen esos muxes normalmente.