viernes, 28 de octubre de 2011

Generando el Hex del ASCII para ROM/RAM usando Matlab

En un previo post , http://hdl-fpga.blogspot.com/2011/06/memorias-rom-fpga-vhdl-como.html, detallé la codificación en VHDL para inferir memorias ROM e implementarlas en FPGAs. Una de las partes mas 'aburridas' de esta codificación es primero pasar de la letra al ASCII y después del ASCII al Hex respectivo. Especialmente para el caso de un string o número muy largo, o varios strings. 
Por ello, en uno de mis últimos cursos que dicté uno de mis alumnos no quería 'aburrirse' realizando las dos conversiones, entonces uso sus conocimientos y me presentó una solución tan ingeniosa como efectiva: escribió una pequeña función en Matlab que hace no solo las mencionadas conversiones sino que también genera directamente la sintaxis VHDL respectiva para la asociación del arreglo ROM  con sus valores respectivos. Gracias Ihosvanni por evitar que nos aburramos !. Acá va un screenshot del .m:




Básicamente lo que hace este código .m es tomar tres mensajes, y convertirlos en ASCII y luego al Hex respectivo. Para este caso planteado el resultado de la ejecución es algo como esto: 

0=>x"56",1=>x"61",2=>x"6C",3=>x"6F",4=>x"72",
5=>x"65",6=>x"73",7=>x"20",8=>x"64",9=>x"65",
. . . . . .
51=>x"20",52=>x"21",others=>x"20"


Así, lo único que queda por hacer es copiar y pegar estos valores en el arreglo ROM declarado tal como se detalló en el previo bloq. 
Este .m se puede perfectamente adaptar a distintos casos, por ejemplo remover mensajes, agregar más mensajes, etc. Por supuesto tener la precaución de que si se remueve algún mensaje, se deben remover todas las referencias al mismo, si se agregan mensajes, agregar las referencias respectivas. También se puede usar para casos en los que se quiere inicializar una memoria tipo RAM con un arreglo definido tal como se detalla en el previo blog.

El código Matlab lo puedes bajar de este link: ascii2rom.m

Espero que sea de utilidad, si es así ... bueno, házmelo saber ! 

jueves, 27 de octubre de 2011

Mensaje de error: "Can't find net or instance name"

Este mensaje suele ser comun cuando queremos restringir (constraint) alguna net o componente de nuestro diseño mediante el uso de constraints en el .ucf. Usualmente eso se debe a que en el .ucf usamos un nombre, normalmente el nombre de la señal o componente en nuestro código VHDL/Verilog, que la herramienta de Síntesis o de Place and Route modificó y nosotros no nos enteramos y consecuentemente el constraint usado en el .ucf hace alusión a una señal o componente que no existe. 
Xilinx ofrece un programa, ejecutable desde comando de linea, llamado netgen, que lee el archivo .ngc o .ngd del sistema implementado y genera el .vhd o .v respectivo para llevar a cabo una simulación funcional (usando .ngc) o post place and route simulación (usando el .ngd). Aún cuando la idea no es llevar a cabo la simulación, el archivo .vhd/.v puede perfectamente ser usado para los fines que buscamos: encontrar los nombres de la señal o componente que necesitamos restringir. 
Los pasos a seguir para usar netgen son similares a los ya explicados anteriormente para pasar de .ngc a .vhd, pero acá los detallos de nuevo.

Pasos para usar 'netgen' (para pasar de .ngc a .vhd) 
  1. Abrir una ventana de 'comandos' o 'DOS': Inicio -> Ejecutar. En la ventanita que se abre escribir 'cmd' y presione 'Aceptar'. 
  2. La ventana de comandos de Window se abrirá normalmente en tu directorio de documentos. 
  3. Usando el viejo comando 'cd' ir hasta el directorio donde está el archivo .ngc que se desea convertir.
  4. Escribir 'netgen -ofmt vhdl mi_archivo.ngc' y presione enter para generar el archivo 'mi_archivo.vhd'. En caso de obtener un mensaje de error diciendo que no reconoce como ejecutable al programa 'netgen', deberá anteponerle el camino del directorio donde reside el ejecutable, por ejemplo:
  5. f:\mi_proyecto>f:\Xilinx\12.1\ISE_DS\ISE\bin\nt\netgen -ofmt  mi_archivo.ngc 
    Si deseas que el archivo .vhd tenga otro nombre usá el siguiente comando: 
    f:\mi_proyecto>f:\Xilinx\12.1\ISE_DS\ISE\bin\nt\netgen -ofmt  mi_archivo.ngc mi_vhd.vhd
Ahora si ya podés abrir el .vhd y buscar las señales o componentes de tu interés. Si bien el archivo .vhd, que en realidad es un modelo de simulación del  sistema implementado. Parece bastante complicado, pero se puede 'leer' e interpretar la implementación, notando el uso de componentes tipo 'primitivas'. Usando un 'search' o búsqueda podemos encontrar las señales o componentes que necesitamos. 

miércoles, 26 de octubre de 2011

Necesitas pasar de .ngc a .edf ?

Como bien es sabido las herramientas de síntesis producen como resultado un archivo comúnmente llamado EDIF (Electronic Design Interchange File) cuya extensión es .edf que básicamente describe en un formato de texto los componentes del diseño y sus conexiones (netlist). Este tipo de archivos es independiente del fabricante de la herramienta de síntesis, teniendo como objetivo establecer un formato común entre los diferentes vendedores de herramientas EDA (Electronic Design Automation). A pesar de ser un formato comumnente adaptado y usado, Xilinx prefirió tener su propio archivo resultado de síntesis llamado NGC, .ngc, que en realidad contiene información del netlist y del archivo de restricciones físicas (llamado .ncf). Este archivo .ngc NO es un archivo de texto por lo que no se puede leer. Sin embargo, sabiendo Xilinx que a algunos Ingenieros nos gusta saber que hay en el netlist, ofrece un ejecutable que convierte de .ngc a .edf. Este program se llama ngc2edif.exe y se debe ejecutar desde una ventana tipo DOS. 

Pasos para convertir NGC a EDIF
  1. Abrir una ventana de 'comandos' o 'DOS': Inicio -> Ejecutar. En la ventanita que se abre escribir 'cmd' y presione 'Aceptar'. 
  2. La ventana de comandos de Window se abrirá normalmente en tu directorio de documentos. 
  3. Usando el viejo comando 'cd' ir hasta el directorio donde está el archivo .ngc que se desea convertir.
  4. Escribir 'ngc2edif.exe mi_archivo.ngc mi_archivo.edf' y presione enter. En caso de obtener un mensaje de error diciendo que no reconoce como ejecutable al programa 'ngc2edif', deberá anteponerle el camino del directorio donde reside el ejecutable, por ejemplo:
  5. f:\mi_proyecto>f:\Xilinx\12.1\ISE_DS\ISE\bin\nt\ngc2edif mi_archivo.ngc mi_archivo.edf
  6. Ahora ya podés abrir el .edf y 'ver' el netlist respectivo...