Diseño a nivel de puerta con un Smartfusion2

0

Estoy trabajando con un SmartFusion2 FPGA, y estoy tratando de implementar una línea de retardo fino. Para eso, me gustaría controlar exactamente el contenido de algunas LUT, para obtener celdas sin propiedades lógicas pero con interesantes variaciones de tiempo. Por lo tanto, mi objetivo es describir algunas celdas individuales en VHDL y vincularlas a un código VHDL más abstracto. Estoy usando Libero SoC v11.5.

Mi problema es que no puedo encontrar una manera de hacerlo con las herramientas de Microsemi. Existe una biblioteca de macros para SmartFusion2 , con un elemento prometedor: "ARI1", pero hay dos problemas:

  1. No sé cómo explorar o vincular esa biblioteca a mi código VHDL.
  2. La macro "ARI1" es la única que no figura en el catálogo IDE en la macro.

Cualquier consejo para el diseño a nivel de puerta con SmartFusion2 es bienvenido.     

pregunta pserra

1 respuesta

1

Este tipo de diseño es bastante raro, pero estás en el camino correcto. Para realizar el trabajo de tipo línea de retardo, probablemente deba forzar la creación de instancias de los recursos que ha mencionado, y la ubicación; de lo contrario, es posible que los resultados no sean los mismos en todas las ejecuciones de herramientas. Luego tiene el problema de que los resultados no serán consistentes en todas las partes y dependerán de la temperatura.

Los únicos ejemplos que he visto están en el libro de cocina de Altera para crear generadores de números aleatorios (captando el ruido de fondo / disparo) usando cadenas de inversores back to back, uno por LUT. Consulte las páginas 102 del libro de cocina y el archivo random/chain_delay_race.v en su archivo zip. Para esta aplicación, la variación de la parte / temperatura no importa y el punto de inyección en las cadenas se cambia durante la operación para forzar que ocurran peligros.

Como mencionó, deberá encontrar las celdas en la biblioteca de macros del proveedor. Al tomar la biblioteca de piezas a la que se vinculó, ¿por qué no usar primitivas INV y INV1 ? Estos parecen mucho más simples de cablear que ARI1 . Para la simulación, tendrá una biblioteca de simulación proporcionada por el proveedor en algún lugar del directorio de herramientas. Deberá agregar la búsqueda de las rutas y agregarlas a la lista de importación de su simulador (no está familiarizado con las herramientas de Microsemi, lo siento). Por lo general, los encuentro usando grep -r [primitive] ~/tools/../ o similar en el directorio de herramientas: - /

A veces, una buena manera de encontrar ejemplos de ejemplificaciones de primitivos es sintetizar algo de alto nivel en Verilog / vhdl y luego mirar las listas de redes generadas para ver cómo se hace.

Si su aplicación necesita un retardo fijo en una señal de entrada, ¿notó las primitivas de retardo incorporadas? ¿Veo que las almohadillas de E / S tienen un atributo INPUT_DELAY, por lo que quizás podría modificar esto para ahorrar recursos?

    
respondido por el shuckc

Lea otras preguntas en las etiquetas