Acceso a memoria utilizando TCL
Acceso a memoria utilizando TCL
Introducción
El Quartus puede ser controlado mediante linea de comando y ejecutar scripts en lenguaje TCL. La información de esta página es un extracto del manual de referencia del Scripting de Altera, orientado a poder manipular el contenido de una memoria que tenga habilitada la opción de In-System content Memory editor.
Ejecutables de linea de comando
En la carpeta de instalación de Quartus ( altera\13.1\quartus\bin) hay una serie de ejecutables de linea de comando que permiten realizar mutiles acciones que habitualmente se hacen a través de la interfaz gráfica. En la la tabla 1 del capitulo 1 hay un resumen de los ejecutables y en el capítulo 2 se profundiza en cada uno de ellos.
En particular el ejecutable quartus_stp es el que nos permite acceder a recursos dentro del FPGA a través de la interfaz JTAG. Este será el que nos permitirá acceder a la memoria que tengamos en el diseño.
La opción -t permite ejecutar un conjunto de comandos TCL que se encuentran en un archivo: quartus_stp -t <script file>
La opción --tcl_eval permite ejecutar un solo comando TCL para probarlo.
Identificando recursos accesibles por JTAG
Para acceder a la memoria en nuestro diseño debemos de conocer:
- El hardware de acceso JTAG (hardware_name)
- El dispositivo dentro de la cadena JTAG al que queremos acceder (device_name)
- El indice de la instancia accesible por JTAG dentro de nuestro diseño a la que queremos acceder.
Esto se puede hacer dentro de un script ejecutando ciertos comandos y guardando los resultados en variables. En forma similar a lo que se hizo en la práctica 4.
Con la placa conectada y programada, ejecutamos esta serie de comandos con la opción tcp_eval:
Para conocer el hardware_name:
C:\altera\13.1\quartus\bin>quartus_stp --tcl_eval get_hardware_names
{USB-Blaster [USB-0]}
Ahora que conocemos eso podemos consultar el nombre de los FPGAs accesibles por JTAG:
C:\altera\13.1\quartus\bin>quartus_stp --tcl_eval get_device_names -hardware_name "USB-Blaster [USB-0]"
{@1: EP3C16/EP4CE15 (0x020F20DD)}
ATENCION: cuando se usan [ ] en la evaluación de un comando, por ejemplo en [USB-0], los [ ] deben de estar precedidos de un \ para escaparlos.
Ahora el indice del dispositivo accesible (es el primero de los valores entre {}, el 0):
C:\altera\13.1\quartus\bin>quartus_stp --tcl_eval get_editable_mem_instances -hardware_name "USB-Blaster [USB-0]" -device_name "@1: EP3C16/EP4CE15 (0x020F20DD)"
{0 16 8 RW ROM/RAM uy2}
Script para cargar MIF en memoria
El archivo se ejecuta con la opción -t :
C:\altera\13.1\quartus\bin>quartus_stp -t escribir_mem.tcl
Archivo escribir_mem.tcl:
------------8<----------
begin_memory_edit -hardware_name "USB-Blaster " -device_name "@1: EP3C16/EP4CE15 (0x020F20DD)"
update_content_to_memory_from_file -instance_index 0 -mem_file_path "top.mif" -mem_file_type mif
end_memory_edit------------8<----------
Otro ejemplo de acrhivo TCL que descubre el HW y device name en el propio script.
------------8<----------load_package insystem_memory_edit
# Obtengo el nombre del hardware y el nombre del dispositivo
set hwname [lindex [get_hardware_names] 0]
set devname [lindex [get_device_names -hardware_name ${hwname}] 0]
set hexfile [lindex $argv 0]
# Initiate a editing sequence
begin_memory_edit -hardware_name ${hwname} -device_name ${devname}
# Write memory content using the hex memory file
update_content_to_memory_from_file -instance_index 0 -mem_file_path ${hexfile} -mem_file_type hex
# End the editing sequence
end_memory_edit
------------8<----------