Memorias ROM

ROM Asíncronas

  • Cambian el puerto de salida cuando cambia la dirección de lectura sin la necesidad de un flanco de reloj adicional
  • La inferencia de memorias asíncronas depende de la tecnología que se dispone. En la actualidad la mayoría de las memorias embebidas de los dispositivos programables son síncronas y esta inferencia de memorias asíncronas (combinacionales sin reloj) deriva en una implementación realizada con lógica (LUTs)

ROM Síncronas

  • Cambian el puerto de salida cuando cambia la dirección de lectura siempre y cuando tengamos un flanco de reloj
  • La inferencia de memorias síncronas es directa en memorias embebidas. Por ejemplo en un dispositivo como la Cyclone IV del laboratorio sería mediante las memorias embebidas de 9kbits

Inicialización de las ROM

Para aportar contenidos a la memoria utilizaremos “system tasks” preestablecidos

  • $readmemb: Obtiene los contenidos de un fichero ASCII en donde los valores están escritos en formato binario
  • $readmemh: Obtiene los contenidos de un fichero ASCII en donde los valores están escritos en formato hexadecimal
  • Cuando se desea introducir una dirección, el formato utilizado es en hexadecimal en cualquiera de los casos .
  • Suele llamarse a dichos procedimientos desde un initial como se ha visto en los ejemplos anteriores
  • Aunque el fichero puede tener una extensión básica de .txt, es recomendable la utilización de la extensión .dat

La sintaxis completa de este tipo de “system task” es:

$readmemb(“<file_name>”, <memory_name>, <start_addr>?,<finish_addr>?);

siendo los dos últimos argumentos opcionales