Observo un comportamiento bastante extraño de un chip SRAM IS62WV51216BLL-55TLI conectado a un FPGA. Cuando lo ejecuto con los ciclos de lectura más cortos posibles, funciona como se esperaba:
(aquí, leo el valor esperado 0xCF9C3063. Un tic es 6,25 ns)
Sin embargo, cuando trato de usar ciclos de lectura más largos, falla misteriosamente: (aquí, leo el valor 0x136000D0 en lugar de 0x1360EC9F. Una marca es 6,25 ns)
Como puede ver, los datos correctos aparecen en el bus de datos en algún momento, pero se reemplazan rápidamente por un valor falso. Esto sucede esporádicamente en una dirección diferente cada vez, y volver a leer la misma dirección por segunda vez funciona bien:
(aquí, leo el valor 0x18E06439 la primera vez y el valor esperado 0x18E0E71F la segunda vez)
¿Alguien tiene una explicación razonable para esto? ¿Hay algún problema con mi ciclo de lectura? Aquí está el ciclo de lectura de la hoja de datos anterior, como referencia:
Todos mis diagramas se realizaron con SignalTap (analizador lógico integrado en FPGA) funcionando a 160 MHz. Todos los pines de salida del controlador SRAM están registrados:
// ** Output Pin tcm_address_out
reg tcm_address_outen_reg;
always@(posedge clk) begin
if( reset ) begin
tcm_address_outen_reg <= 'b0;
end
else begin
tcm_address_outen_reg <= 'b1;
end
end
reg [ 19 : 0 ] tcm_address_out_reg;
always@(posedge clk) begin
tcm_address_out_reg <= tcs_tcm_address_out[ 19 : 0 ];
end
assign tcm_address_out[ 19 : 0 ] = tcm_address_outen_reg ? tcm_address_out_reg : 'z ;
Luego, la tcm_address_out
señal se conecta a los sram_addr
pines que se ven en los diagramas anteriores, que a su vez están conectados a los pines A0
- A18
del SRAM IC. Otros pines están conectados de manera similar. La longitud de los cables/pistas entre un pin FPGA y un pin SRAM es de unos 10 cm. El SRAM IC tiene tapas de cerámica de 1uF + 100nF entre los pines GND y VDD de ambos lados.
PD. he tratado de mantener afirmó todo el tiempo, lo que no mejoró las cosas. También he intentado una modificación donde se afirma 12.5ns después y se anula durante 12,5 ns entre lecturas consecutivas (manteniendo ). Eso no ayudó:
Dmitry, para obtener la solución a su problema, necesitará solucionarlo sistemáticamente. TonyM, Trevor, Dave, Michael y Gregory proporcionaron varias conjeturas, que deben calificarse sistémicamente dentro de su diseño. A continuación le proporcionaré un resumen:
Veamos la configuración:
always@(posedge clk) begin
if( reset ) begin
A las lecturas de su analizador les falta la señal de reinicio. Tendrá que demostrar que reset
la señal siempre es baja cuando se presenta el problema.
Ahora echemos un vistazo a los diagramas. Como notó, los cambios de valor E0A0 -> ECA0 -> EC9F -> 00D0, con el cambio a 00D0 ocurriendo dentro del ciclo de lectura, y siendo un problema que informa. Esta SRAM no está registrada en sus pines de entrada y E/S, por lo tanto, si comienza a emitir algunas señales incorrectas, pueden ocurrir varios problemas:
Te recomendaría lo siguiente:
usuario76844
usuario76844
usuario76844
usuario76844
usuario76844
miguel karas
miguel karas
Dmitri Grigoriev
miguel karas
TonyM
Dmitri Grigoriev
Dmitri Grigoriev
sram_x
señal está conectada alx
pin correspondiente en la SRAM. ¿Y no se asentarían los transitorios durante esos 150 ns?TonyM
Dmitri Grigoriev
Pedro Smith
Dmitri Grigoriev
Trevor_G
miguel karas
miguel karas
Trevor_G
Trevor_G
Trevor_G
david tweed
TonyM
Dmitri Grigoriev
TonyM
Trevor_G
Dmitri Grigoriev
Dmitri Grigoriev