FPGA, primeros pasos

11

Bueno, esta es una continuación de mi pregunta sobre FPGA por aquí .

Finalmente seleccioné un Digilent Atlys con un FPGA Spartan 6, no tengo experiencia previa en FPGA, aunque he trabajado mucho con microcontroladores.

Pasé los últimos días leyendo las hojas de datos del FPGA, y creo que sería una buena opción comenzar con Verilog. Sin embargo, no pude encontrar ningún ejemplo de código e incluso las hojas de datos no son amigables para los novatos.

Quiero hacer algo de programación, simulación, síntesis ahora y esto es lo que quiero hacer

  1. Genere una frecuencia impar, digamos 54Mhz desde el FPGA (se ejecuta en un reloj de 100Mhz) y diríjalo a uno de los pines. Probablemente tendría que usar DCM o PLL para esto, pero ¿no tiene idea de cómo comenzar aquí?

  2. Implemente algún tipo de lectura y escritura I2C desde el FPGA.

Lo que estoy buscando es una referencia, posiblemente una en línea o un libro que me brinde ejemplos de código y una descripción de cada uno de los componentes de hardware disponibles dentro del FPGA, como DCM, slices, clb's, etc.

Supongo que eso debería ayudarme a comenzar en el mundo de los FPGA.

Kevin Boyd
fuente

Respuestas:

13

Ejemplos de código

Salta a OpenCores y encontrarás docenas de proyectos de código abierto. Hay muchos escritos en Verilog y cubren toda la gama desde dispositivos de E / S hasta procesadores.

Además, no olvide las muchas Notas de aplicación disponibles de Xilinx. Son muy útiles con sus propios dispositivos.

Flujo de diseño

Elija uno o dos libros sobre el flujo de diseño para obtener una visión general de los pasos necesarios para el diseño de FPGA. En resumen, involucrarán:

  1. Entrada de diseño: en su caso, Verilog.
  2. Simulación funcional: uso de varias herramientas.
  3. Síntesis: en su caso, utilizando las herramientas Xilinx ISE.
  4. Simulación: para verificar su diseño posterior a la síntesis porque algunos aspectos de Verilog no son sintetizables.
  5. Lugar y ruta: utilizando las herramientas Xilinx ISE.
  6. Implementación: descarga del diseño en el FPGA.
  7. Pruebas.

Componentes FPGA

En cuanto al uso de los componentes FPGA, hay diferentes formas de usarlos. Pero suponiendo que esté utilizando una entrada de diseño de Verilog, puede inferir o instanciar los diferentes componentes.

La inferencia generalmente implica obtener la herramienta de síntesis para elegir los mejores componentes para usar en función de la funcionalidad que necesita. El mejor ejemplo de esto sería diseñar un sumador.

Al hacer q <= a + bo q = a + bpuede inferir un sumador. Ambos inferirán el sumador, pero hay una diferencia en el uso de la sintaxis de bloqueo / no bloqueo.

La creación de instancias generalmente implica llamar al componente de biblioteca exacto en el código. Algunos componentes simplemente no se pueden inferir fácilmente en el código, como el DCM. Puede utilizar las herramientas y ejemplos de ISE para obtener más información al respecto.

Xilinx proporciona la lista real de componentes en la Guía de bibliotecas .

Protip

La mejor manera de aprender esto es experimentar con pequeños fragmentos de código y ejecutarlos a través de la síntesis ISE para ver qué escupe. También hay muchos ejemplos en el propio conjunto de herramientas ISE.

sybreon
fuente
5

Sus referencias absolutas serán las guías de usuario de Spartan 6 . Por ejemplo, la guía de recursos de sincronización (UG382) cubre cómo configurar los DCM. Para ver ejemplos de cómo se ve el código real, ISE tiene una base de datos de ellos. Abra Plantillas de idioma (la bombilla en la barra de herramientas), luego busque en el idioma (VHDL o Verilog) -> Dispositivo de instanciación primitiva -> familia de chips (Spartan-6) -> Componentes del reloj.

Los detalles específicos de su placa están disponibles en Digilent, en particular querrá la UCF (que nombra todos los IO) y el manual de referencia (que explica los circuitos periféricos).

La estructura general de su idioma, incluida la forma de hacer un componente, probablemente se recoja mejor de los libros y ejemplos. No he usado Verilog, así que no tengo sugerencias específicas. Aún así, las plantillas incluyen fragmentos de varias construcciones genéricas también.

Yann Vernier
fuente
¿Te especializas en VHDL? Con respecto a la UCF, ¿por qué sería importante trabajar con la placa Digilent?
Kevin Boyd el
1
No me especializo como tal, simplemente no he estudiado Verilog. El UCF es el archivo que describe a qué pines se conectan sus puertos, así como las demandas de sincronización. Sin él, los pines se asignan al azar, lo que no coincidirá con el tablero existente.
Yann Vernier
Entendí la parte de asignación de pines ¿qué pasa con las demandas de marcado?
Kevin Boyd el
1
Las restricciones de tiempo cubren cosas como la frecuencia del reloj, la configuración y los tiempos de espera. Todavía obtendrá la información en el análisis de tiempo, pero al especificar los requisitos en el archivo de restricciones, las herramientas pueden detectar cuándo fallan y, posiblemente, esforzarse más para satisfacer sus necesidades cuando está al límite.
Yann Vernier
1

Para el reloj, usa el megacore DLL / PLL.

Brian Carlton
fuente
El 6 espartano tiene DCM y PLL, DLL no encontrado todavía. Después de buscar en los foros, descubrí que Xilinx tiene una herramienta llamada Core Generator que se puede configurar para generar recursos de reloj.
Kevin Boyd