Yo no estoy familiarizado con herramientas de Xilinx, pero yo estoy con Altera, por lo que voy a decirle a usted acerca de ellos. Xilinx y a los demás no debería ser muy diferente.
Verilog
La primera cosa que usted necesita hacer es aprender de Verilog. Esto hará que su cabeza le dolía porque Verilog (y algo similar VHDL) fue diseñado como una simulación idioma, y muchas de las construcciones (como #5
que significa "esperar 5 pasos de tiempo", un tiempo de paso suele ser un nanosegundo). Así que hay un montón de restricciones que hay que tener en cuenta para hacer su código Verilog synthesizable, es decir, compilable en un flujo de bits para un FPGA.
El susto más grande, sin embargo, es que lo que usted escribe en Verilog (y VHDL) es el comportamiento esperado del sistema, y el compilador infiere la adecuada lógica de su descripción. Si usted no tiene cuidado, usted puede conseguir un montón de errores desagradables de este.
Por ejemplo, un D flip-flop se ve así:
always @(posedge RESET or posedge CLK)
begin
if(RESET)
Q <= 1'b0;
else if(CLK_ENA)
Q <= D;
end
Este describe cómo un DFF obras, y el compilador ha de analizar y entender usted desea un DFF. El @(...)
se llama la sensibilidad de la lista, que es una lista de las señales que desencadenan una reevaluación del bloque de código; por lo tanto, en este bloque, Q
sólo cambia si hay un flanco ascendente en RESET
o CLK
(esto es para un activo de alto reset). Si se le olvida algo en la sensibilidad de la lista (que debe contener todo el lado derecho de variables sin ninguna posedge
o negedge
modificadores para un bloque de lógica combinacional) el compilador de sintetizar las trabas según sea necesario, en lugar de llamar a un error. Loco, pero es como es, porque Verilog fue originalmente un lenguaje de simulación que se escondió (y por lo tanto no requieren) detalles de la implementación. VHDL es la misma, pero mucho más detallado.
Por último, una nueva versión de Verilog llamado SystemVerilog fue lanzado un par de años atrás que hace la escritura de synthesizable código mucho, mucho más fácil. Si es posible, aprender este idioma, como Xilinx ISE y Altera Quartus II, tanto de apoyo. El principal problema es la absoluta falta de buen material de referencia.
El SystemVerilog versión de un DFF limpia un par de cosas:
always_ff @(posedge RESET, posedge CLK)
begin
if(RESET)
Q <= '0;
else if(CLK_ENA)
Q <= D;
end
Tenga en cuenta que las señales en la sensibilidad de la lista están separados por comas. Esto es debido a que or
fue confuso, ya and
no podía trabajar allí. También tenga en cuenta la sustitución de 1'b0
(una sola 0
bits) con '0
(un símbolo que se expande sin embargo, muchos 0
bits son necesarios basado en lo que se asigna a; mucho más flexible con parametrizada módulos). Por último, tenga en cuenta la sustitución de always
(que podría ser utilizado para cualquier cosa; la lógica combinacional, cerrojos y flip flops) con always_ff
que requiere el contenido de sintetizar los flip-flops. También hay un always_comb
que elimina la sensibilidad de la lista, ya que sólo funciona de la sensibilidad de las entradas para el bloque.
Altera el diseño del software se llama Quartus II, y se le busca para la Edición Web. (Las ediciones de suscripción son bastante caros y sólo es necesario para la más rápida o la más reciente de FPGA modelos.)
La parte triste es que no he encontrado un buen libro sobre el tema. Lo que he aprendido me dieron por las cosas juntando a partir de múltiples fuentes, tales como Verilog libros que no hacen un buen trabajo de decirle a usted lo que es synthesizable y lo que no, y un código de ejemplo. Quartus II tiene una "plantilla de inserción de comandos" que se inserta la plantilla de código para varias estructuras comunes, de D flip-flops para máquinas de estado.
Demo De Hardware
Una vez que haya implementado el procesador en Verilog, que necesita para construir. Por el momento, vamos a Quartus elegir la ficha que tienes para elegir a la familia, me gustaría recomendar el Cyclone IV) y las salidas de los pines. Una vez que se biulds, usted sabrá cuánto chip que usted necesita. Se le dirá cuántas lógica de los elementos, las chanclas, los bits de RAM, etc. usted utiliza. Asegúrese de que usted no está de más del 50% en cualquiera de esos, si, mira el chip el compilador elegido y seleccionar manualmente el siguiente más grande (en la lógica de elementos) de chips que tiene al menos el mismo número de pines, y repetir la operación hasta conseguir la utilización por debajo del 50%.
Luego de ir a comprar una placa de demostración que tiene un chip al menos tan grande como la que finalmente se construyó. Compruebe que dispone de los periféricos y/o conectores de e/S que usted necesita. No es raro para construir un daughtercard que se conecta a un conector de expansión para proporcionar cualquier falta de hardware.
Ahora que usted ha elegido su hardware, averiguar la verdadera configuración de pines y usar el Pin Planificador de colocar las señales en el derecho de los pines. La demo de la junta directiva tendrán una guía del usuario que indica que los pines están conectados a los dispositivos o los pines del conector en la placa de demostración.
Una vez que la configuración de pines de establecer, construir de nuevo para que se utiliza el pin que desee. Tenga en cuenta que algunas señales, como el sistema de los relojes se necesita dedicado a los pines de entrada (por lo que la ruta directamente a la interna Pll).
Utilice el programador para descargar tu diseño directamente en la FPGA (registro de desplazamiento que he mencionado hace un tiempo). Ahora estás en la conocida edición-compilación-ejecución de la depuración de ciclo. Lo golpearon hasta que funcione.
Una vez que funciona, puede utilizar el programador para descargar el código en el bordo de la configuración del dispositivo para que el programa se cargue y ejecute en el encendido.
Esto era bastante largo, y espero que ayudó a algunos. Hay mucho que aprender; no es como aprender un nuevo lenguaje de programación como mucho ya que es como el aprendizaje de un nuevo paradigma de programación, por ejemplo, movimiento de procedimientos de los lenguajes funcionales. Verilog es un simultánea del lenguaje; la mayoría del código es siempre la ejecución.
Buena suerte!