Pregunta

Siempre quise hacer mi propio microprocesador. Leí ¿Cómo puedo hacer mi propio microcontrolador? .

Intenté varias veces aprender algo de Verilog y VHDL. Pero por mi vida, simplemente no puedo entender los estilos de lenguaje. Vengo de un fondo C / C ++ / C # y he tocado algunos (con éxito) haciendo programación funcional con Ruby.

¿Puede alguien sugerir un libro o un recurso en línea para enseñar un lenguaje HDL desde cero (para que pueda desaprender mi forma de pensar de procedimiento)

Además, estoy teniendo problemas para entender exactamente cómo simular un programa HDL. No hay nada como imprimir o cosas en el hardware, entonces, ¿cuál es la mejor manera de probar programas sin un FPGA (aunque voy a pedir uno de esos en algún momento). ¿Cómo funciona exactamente la simulación?

Básicamente, solo necesito a alguien que me ayude a entender mi HDL y su simulación.

¿Fue útil?

Solución

Recuerde, las HDL estaban diseñadas para modelar hardware. Con el hardware todo sucede a la vez. Por hardware, me refiero a una colección de puertas lógicas conectadas a entradas y a las salidas de otras puertas lógicas de alguna manera. Esto es esencialmente lo que es un FPGA o un ASIC (en un FPGA esas conexiones son programables). Mueva una entrada y los efectos se propagan a través de la cadena de puertas lógicas: piense en cada puerta lógica como un pequeño procesador que evalúa constantemente sus entradas.

Por lo tanto, en una HDL, lo primero que debe tener en cuenta es que todas las tareas se realizan al mismo tiempo. El único lugar donde suceden las cosas en la normalidad sense (una instrucción que sigue a otra como en un lenguaje de programación regular) está dentro de un bloque de proceso (en VHDL, o un bloque siempre en Verilog). Pero luego debe darse cuenta de que todos los bloques de proceso (o siempre los bloques en Verilog) también se ejecutan simultáneamente.

Las HDL solo intentan modelar la concurrencia de hardware.

En cuanto a los libros que intentan enseñar HDL a los desarrolladores de software ... no creo que haya ninguno. La mayoría están dirigidos a ingenieros de hardware.

Mencionaste que has hecho algo de programación en Ruby. Si quieres jugar con un HDL escrito en Ruby, puedes probar RHDL: http://rhdl.rubyforge.org/ Los conceptos básicos de HDL están ahí y se parecen mucho a VHDL, pero es Ruby para que puedas experimentar un poco más con las entrañas. Puedes escribir modelos y luego simularlos. Hay algunos ejemplos incluidos.

Otros consejos

La depuración se realiza con el simulador y su visor de forma de onda: puede ver lo que hacen todos sus elementos internos con el tiempo. Además, con Modelsim también puede hacer puntos de corte similares a software dentro de los procesos.

Puede imprimir cosas con VHDL utilizando el " informe " declaración, pero debe formatear de una manera que no sea SW:

report " El valor no es " &erio; integer'image (some_integer_variable);

Para una impresión algo más fácil, use el paquete textio .

Otro consejo: un montón de código por ahí tiene uso ieee.std_logic_arith.all; en él. Esa biblioteca no es estándar (a pesar del moniker IEEE), use ieee.numeric_std.all en su lugar.

Comience de manera simple: cree un contador que aumente en uno cada vez que el reloj marque (use si rising_edge (clk) y luego idioma). Cuando el contador llega a un valor particular, alterna una señal.

Crea un banco de pruebas para simularlo, lo que básicamente significa que solo hacer que la señal clk pase a '0', '1', '0', '1'.

Una forma fácil de entender es esta:

process:
begin
    clk <= '0';
    wait for 5 ns;
    clk <= '1'; 
    wait for 5 ns;
end process;

Ejecuta el simulador, mira cómo sube tu contador y la señal de alternar alternar. Si hace que su contador sea lo suficientemente grande, puede construir un FPGA y ver cómo se enciende y apaga un LED encendiendo esa señal de conmutación a un pin LED.

Ese es el FPGA equivalente a " Hello World " ;!

Para la depuración, Verilog ofrece tareas de sistema similares a printf como $ display o $ monitor. Por supuesto, estos no son sintetizables, pero todos los simuladores deberían entenderlos. La depuración se realiza, por un lado, al igual que la depuración de SW, imprimiendo valores de señal y cualquier otra cosa en la consola usando el ya mencionado $ diplay y esas cosas. Y, por otro lado, mirando las formas de onda de señal hasta que encuentre el punto enfermo. Para estas cosas que ni siquiera necesita un FPGA, un buen simulador es todo lo que necesita. Pero tener un FPGA para hacer que algunos LED parpadeen siempre es bueno :)

Para simulación, debería echar un vistazo a Modelsim. Si está en Windows, hay una edición para estudiantes disponible de forma gratuita.
http://www.model.com/content/modelsim- pe-student-edition-hdl-simulation

Otra opción es el paquete web ISE de Xilinx. Esto incluso funciona en Linux e incluye el flujo completo de FPGA. http://www.xilinx.com/tools/webpack.htm
Pero recomiendo Modelsim para la simulación.

Algunos puntos de partida que tengo a mano son:
http://www.asic-world.com/
http://www.doulos.com/knowhow/verilog_designers_guide/

Mi respuesta podría tardar años, pero esto es para futuros espectadores que podrían tener la misma consulta.

También vengo de un fondo C ++ / C #. Mi respuesta solo concierne a Verilog HDL y no a VHDL. Actualmente estoy tomando un curso este término y aquí están los libros que me ayudaron a entender mejor a Verilog:

Puede encontrar una gran cantidad de libros aquí como se enumera en sitio asic-world .

Como skorgon había respondido, puedes usar Xilinx ISE para la simulación. Es lo más cercano a Visual Studio con C ++ / C # como a Verilog. Pero para una sensación primitiva (sin IDE), es posible que desee probar iVerilog o Icarus Verilog . Es el que se usa en nuestro curso. Aquí se explica cómo ejecutar archivos Verilog utilizando iVerilog:

Escriba su código en un editor de texto, guárdelo como .vl dentro de la carpeta bin     de iVerilog. En el símbolo del sistema, vaya a la carpeta bin. Luego escriba lo siguiente:

iverilog -o <name of exe file you want for your .vl file> <your .vl file>
vvp <name of exe file>

Ejemplo:

iverilog -o samp sample.vl
vvp samp

¡Espero que esto ayude!

A veces es necesario imprimir el nombre de la instancia. Esto es útil si se utilizan muchas instancias del mismo componente en un diseño: " ... Aunque es simple en VERILOG (% m en la función del sistema de pantalla), en VHDL se requiere un poco más de escritura de código. $ display (" nombre de instancia dbg% m en% d " ;, $ time); Un ejemplo de cómo imprimir un nombre de instancia en systemc también está disponible en este sitio.

La importancia de dicha información de depuración es cuando un diseño contiene muchas instancias del mismo componente.

El primer texto de la biblioteca IO debe llamarse y la variable de línea debe declararse. Consulte el ejemplo de impresión para ver los detalles.

A continuación, debe seleccionar entre dos opciones: una es: nombre de instancia solo en la cadena de depuración y la otra opción proporciona más información, como nombres de entrada y arquitectura ... " http://bknpk.ddns.net/my_web/MiscellaneousHW/vhdl_path_name_print.printml

Si eres fuerte en programación en C, puedes aprender cualquier otro lenguaje de programación muy fácilmente. Los lenguajes de descripción de hardware no son muy diferentes. Pero debe conocer los conceptos básicos de los componentes de hardware de uso común. Por ejemplo, el diseño de un sumador completo es muy simple si sabe ¿Cuáles son las entradas y salidas del sumador completo. También debe conocer la relación entre entradas y salidas. "La pdf puede ser útil para un principiante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top