Simulación de escritura RAM en VHDL

Escribir un valor en la RAM es una pequeña parte de mi proyecto, todo funciona, pero no puedo explicar una cosa relacionada con la RAM/la temporización digital.

Escribiré una descripción con respecto a la imagen que agregué.

  • macc_out va a data_in de la RAM
  • address_ram es la dirección de la celda RAM
  • out_temp es la salida de la RAM
  • write_en_ram es write_en de la RAM

Por lo que tenía la idea de RAM, escribe directamente en el flanco ascendente del reloj. Por lo tanto, los datos que se ven en data_in en el flanco ascendente del reloj se escribirán en la RAM. Incluso si data_in cambia en el mismo reloj que write_goes high, se escribirán los datos antiguos. primer casoEntonces, ¿por qué en mi caso la RAM escribe -36 y no -10?

segundoAhora traté de cambiar el valor de data_in con un valor de reloj (0/1) y ahora funciona como debería. ¿Lo que está sucediendo? ram_in es data_in de RAM en este caso.

macc_out == ram_in == data_in

"Hasta donde tenía la idea de la RAM, escribe directamente en el flanco ascendente del reloj": Esto no es universal. Depende de lo que haya escrito en su código, por lo que sería muy útil ver su código real.
No estoy cerca de mi código en este momento. Pero todas son asignaciones de lógica combinacional. macc_out depende del valor del contador, write_en_ram depende del estado

Respuestas (1)

Como no se muestra la señal de su reloj, supongo que está relacionada con el cambio en las otras señales.

Basado en eso, el primero parece funcionar correctamente en el sentido de que la escritura solo funciona en el flanco ascendente del reloj y la lógica alta de la señal *write_en*. Entonces, es por eso que ve que los datos solo se escriben en un ciclo después de que la señal de habilitación sube.

En cuanto al segundo sim, parece que la señal del reloj está conectada directamente a la señal *ram_in*. Esto lo explicaría. Los datos se bloquean en el flanco ascendente del reloj. En este caso, los únicos datos que se bloquean alguna vez son 0. En el flanco ascendente, *ram_io* siempre es 0.