En este artículo, estudiaremos la estructura básica de un módulo de Verilog, veremos algunos ejemplos de uso del tipo de datos de "cable" de Verilog y su forma vectorial, y tocaremos brevemente algunas diferencias entre VHDL y Verilog.
Verilog y VHDL son dos idiomas que se usan comúnmente para describir circuitos digitales. AAC tiene una serie de artículos técnicos que analizan los conceptos básicos de VHDL. Este artículo funciona como un punto de partida para nuestra serie sobre Verilog.
Antes de comenzar nuestra discusión, abordemos una pregunta obvia: ¿realmente necesitamos saber ambos idiomas?
Tanto Verilog como VHDL son herramientas poderosas que pueden usarse para diseñar un circuito digital complejo. Aunque hay algunas diferencias entre estos dos HDL, puede elegir cualquiera de las dos para dominar y usar. Sin embargo, creo que en algún momento, se beneficiará de tener al menos una comprensión básica de ambos idiomas. A veces, como diseñadores, necesitamos un segmento de código de muestra para tener una idea de cómo codificar un proyecto. Navegamos por la red durante horas y finalmente encontramos lo que necesitamos, pero no tiene sentido para nosotros, está escrito en el HDL que nos resulta totalmente desconocido. Sin tener una comprensión básica del lenguaje, es posible que no podamos entender completamente las técnicas.
Verilog fue diseñado a principios de 1984 por Gateway Design Automation (aproximadamente tres años después de que VHDL fuera iniciado por el Departamento de Defensa de los Estados Unidos). Con el respaldo del DoD, VHDL se convirtió en un estándar IEEE en 1987. Verilog no llegó a escena hasta 1995. Hoy en día, tanto VHDL como Verilog son HDL populares y las herramientas de diseño FPGA generalmente admiten ambos idiomas.
La palabra "Verilog" es una combinación de las palabras "verificación" y "lógica" porque el lenguaje se sugirió por primera vez como una herramienta de simulación y verificación. Empecemos con los conceptos y la sintaxis de Verilog.
Como primer ejemplo, escribamos el código Verilog para el circuito que se muestra en la Figura 1.
Hay dos entradas y una salida. Los puertos son todos un poco de ancho. La funcionalidad del circuito es para Y las dos entradas y poner el resultado en el puerto de salida1.
Una posible descripción de Verilog para el módulo Circuit_1 es:
Estas dos líneas usan las palabras clave "módulo" y "endmodule" para especificar que las líneas intermedias (líneas 2 a 7) describen un circuito llamado "Circuito_1". Este nombre es arbitrario y nos permite referirnos a este circuito más adelante.
Estas líneas especifican la interfaz de "Circuit_1" con su entorno circundante. Los puertos de entrada y salida se describen utilizando las palabras clave "entrada" y "salida". Estas palabras clave van seguidas de otra palabra clave "cable" y luego el nombre del puerto (consulte la Figura 1). ¿Qué especifica la palabra clave “cable”? "Cable" es un tipo de datos Verilog que representa un cable físico en el diseño. Discutiremos los tipos de datos de Verilog con mayor detalle en un artículo futuro, pero por ahora, sabemos que habrá tres cables llamados a, b, y out1 en nuestro módulo y, como estos están especificados en la declaración del puerto, corresponden a La interfaz del módulo.
Esta línea utiliza el operador AND a nivel de bits, es decir, &, para describir la funcionalidad del circuito. La palabra clave “asignar” pone a y b en el puerto de salida out1. Este tipo de asignación se denomina asignación continua. Se llama así porque la asignación siempre está activa cuando un operando en el lado derecho cambia, a & b se evalúa y se asigna a out1. Podemos imaginar una asignación continua como un circuito combinacional cuya salida se actualiza continuamente dependiendo de sus entradas. En nuestro ejemplo, este circuito combinatorio es una simple puerta AND. También hay tareas de procedimiento en Verilog HDL que se tratarán en futuros artículos.
Ahora, podemos usar un paquete de software como Xilinx ISE para verificar el código anterior. Puede encontrar un tutorial basado en Verilog de este software aquí (PDF).
La Figura 2 a continuación muestra las descripciones de Verilog y VHDL para el módulo Circuit_1.
Como puede ver, tenemos que incluir algunas bibliotecas al codificar en VHDL. Estas bibliotecas dan la definición de los tipos de datos y operadores. Considerando la adición de estas bibliotecas y el formato general de VHDL, observamos que el código VHDL es más detallado. Sin embargo, esta verbosidad no está exenta de ventajas. Por ejemplo, la función de administración de bibliotecas de VHDL puede ser útil al modelar sistemas de nivel superior. En futuros artículos, ocasionalmente analizaremos los pros y los contras de estos dos HDL.
Hay cuatro valores básicos utilizados en la mayoría de los tipos de datos de Verilog. Los cables definidos en el Listado 1 pueden tomar uno de los siguientes valores:
El tipo de datos std_logic de VHDL puede tomar nueve valores diferentes, pero sus valores comúnmente utilizados son "0", "1", "Z" y "-" ("-" denota que no le importa).
Como otro ejemplo, escribamos el código Verilog para el circuito (que etiquetaremos Circuit_2) que se muestra en la Figura 3.
El siguiente código Verilog describe este circuito:
Los elementos utilizados en el código anterior son similares a los del Ejemplo 1, excepto que se define una señal interna en la línea 10 del código. La palabra clave "cable" se utiliza para especificar el tipo de datos de esta conexión. Como se mencionó anteriormente, el tipo de datos "cable" se traduciría a un cable físico en el diseño.
El código anterior también utiliza algunos operadores nuevos de Verilog bitwise: ~ para NOT y | para la operación OR Otro operador útil a nivel de bits es ^ para la operación XOR. La Figura 4 muestra las descripciones de Verilog y VHDL para el módulo Circuit_2. Estas comparaciones pueden ayudarlo a ver las diferencias y similitudes entre estos dos idiomas.
Para nuestro tercer y último ejemplo, le daremos el código de Verilog para el esquema que se muestra en la Figura 5.
Como puede ver, existe una cierta relación entre los puertos de entrada azules y los rojos: las entradas correspondientes se combinan con el operador AND. El resultado se asigna a un puerto de salida. En tales casos, podemos agrupar las señales y tratarlas como un vector. Esto hace que el código sea compacto y legible.
Usando el concepto de vector en Verilog, podemos extender fácilmente el código en el Listado 1 para describir el circuito anterior (vea el código en el Listado 3 a continuación).
Tenga en cuenta que el rango de índice de los vectores puede ser ascendente ([0:2] como se usa arriba) o descendente ([2:0]). Aunque el formato ascendente se usa arriba, generalmente es menos propenso a errores usar la forma descendente. Esto se debe al hecho de que el estilo descendente coincide con nuestra percepción de que la posición más a la izquierda de un número binario tiene el índice más alto. Tenga en cuenta que los vectores también se utilizan en VHDL.
La Figura 6 a continuación muestra una simulación ISE del código en el Listado 3.
En este artículo, discutimos que es una buena idea aprender tanto VHDL como Verilog, estudiamos la estructura básica de un módulo Verilog y nos familiarizamos con el tipo de datos Verilog "wire" y su forma vectorial. También mencionamos brevemente algunas diferencias entre VHDL y Verilog. El siguiente artículo de nuestra serie Verilog tratará sobre el diseño de circuitos combinacionales en Verilog.
ga('create', 'UA-1454132-1', 'auto'); ga('require', 'GTM-MMWSMVL'); ga('require', 'displayfeatures'); ga('set',{'dimension1':'eda,embedded,digital-ics,embedded,embedded-software,engineering-consulting'}); ga('set',{'contentGroup1':'eda,embedded,digital-ics,embedded,embedded-software,engineering-consulting'}); ga('send', 'pageview');
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1808435332737507'); // Insert your pixel ID here. fbq('track', 'PageView'); fbq('track', 'ViewContent', { content_ids: ['eda','embedded','digital-ics','embedded','embedded-software','engineering-consulting'], content_type: 'category'});
_linkedin_data_partner_id = "353081"; (function(){var s = document.getElementsByTagName("script")[0]; var b = document.createElement("script"); b.type = "text/javascript";b.async = true; b.src = "https://snap.licdn.com/li.lms-analytics/insight.min.js"; s.parentNode.insertBefore(b, s);})(); } if(jstz.determine().name().indexOf("Europe") === -1) { showSocialCode(); // NOT EU } else { showSocialCode(); window.addEventListener("load", function () { window.cookieconsent.initialise({ "palette": { "popup": { "background": "#252e39" }, "button": { "background": "#14a7d0" } }, "type": "opt-out", "content": { "message": "This website uses tracking cookies to ensure you get the best experience on our website.", "href": "https://www.allaboutcircuits.com/privacy-policy/", "dismiss": "OK, GOT IT" }, onInitialise: function (status) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },
onStatusChange: function (status, chosenBefore) { var type = this.options.type; var didConsent = this.hasConsented(); if (type == 'opt-out' && didConsent) { console.log("eu"); //showSocialCode(); } },
onRevokeChoice: function () { var type = this.options.type; if (type == 'opt-out') { console.log("eu"); //showSocialCode(); } },
}) }); }
Los días felices de la PDA y Blackberry han quedado definitivamente atrás, pero el factor…
Tutorial sobre cómo pronosticar usando un modelo autorregresivo en PythonFoto de Aron Visuals en UnsplashForecasting…
Si tienes un iPhone, los AirPods Pro son la opción obvia para escuchar música, ¡aunque…
Ilustración de Alex Castro / The Verge Plus nuevos rumores sobre el quinto Galaxy Fold.…
Se rumorea que los auriculares premium de próxima generación de Apple, los AirPods Max 2,…
El desarrollador Motive Studio y el editor EA han lanzado un nuevo tráiler de la…