Aprender Verilog: Una breve serie de tutoriales sobre diseño de electrónica Digital con FPGAs y Verilog HDL (15 / 21 paso)

Paso 15: VM 3.3: Cómo crear una instancia de un módulo

En el módulo anterior mencioné las similitudes entre instancias de módulos en Verilog y llamar a funciones en C y C++.
Vamos a ver cómo se crean instancias de un módulo en Verilog.
Aquí es el módulo que vamos a trabajar con:

' calendario 1ns / 1ps

(módulo) srlatch
entrada S,
entrada R,
salida Q
);

alambre Q_int, Qn_int;

asignar Q_int = ~ (S & Qn_int);
asignar Qn_int = ~ (R & Q_int);
asignar Q = Q_int;

endmodule

Por ahora no debe ser cualquier Verilog en este módulo usted no podía explicar.

Así que vamos a decir que queríamos hacer un circuito con dos pestillos de SR (sin importar lo absurdo este circuito es en realidad), cada uno con un interruptor para su funcionamiento de "set" y un botón compartido. La salida de cada seguro será un LED.

Con estas especificaciones en mente, vamos a hacer la definición del módulo superior. Recuerde que las declaraciones de módulo superior contendrá sólo las entradas y salidas que van y vienen del mundo real.

' calendario 1ns / 1ps

Reto: Volver a escribir esta declaración de módulo utilizando autobuses
(superior) módulo
entrada switch0,
entrada switch1,
entrada btn0,
salida led0,
LED de salida 1
);

endmodule

¡ Excelente! Ahora tenemos que añadir dos SR-pestillos a nuestro circuito. ¿Cómo se hace?

No decir "duro código del comportamiento de dos SR-pestillos y asignar sus entradas y salidas respectivamente. Se crean instancias de dos instancias de un Latch SR. Aquí es cómo se verá nuestro módulo superior después de la creación de instancias:

' calendario 1ns / 1ps

(superior) módulo
entrada switch0,
entrada switch1,
entrada btn0,
salida led0,
LED de salida 1
);

(sr0) srlatch
. S(switch0),
. R(btn0),
. Q(led0)
);

(sr1) srlatch
. S(switch1),
. R(btn0),
. Q(LED1)
);

endmodule

¿Así que lo que queda hacer? Nada; absolutamente nada (suponiendo que ya tienes un archivo UCF listo). ¿Por qué?

La razón radica en la creación de instancias de módulo. Echemos un vistazo a uno.

(sr0) srlatch
. S(switch0),
. R(btn0),
. Q(led0)
);

Primera línea: srlatch sr0 (

Esta es una línea muy importante cuya forma necesita comprometerse a la memoria. Primero viene srlatch. Este es el nombre del base módulo que estamos creando una instancia. sr0 es el nombre de instancia. El paréntesis abre a la creación de instancias. Cada creación de instancias se iniciará. "< módulo a ser instanciada >< nombre de instancia >(".

Hay algunos casos menos comunes donde instanciación se diferencia ligeramente, pero aún así este formulario todavía estará presente.

Las siguientes tres líneas:
. S(switch0),
. R(btn0),
. Q(led0)

Echa un vistazo a lo srlatch nombres de puerto de módulo y luego mirar hacia atrás en estas tres líneas. Esto es, de una manera indirecta, similar a cómo se llame a una función en C y C++; Esto es donde pasan los parámetros.

La diferencia es que en Verilog estamos pasando ambas entradas al módulo de salidas y al módulo. Es decir, le estamos diciendo a esa instancia específica del módulo de donde provienen las entradas y donde queremos las salidas para ir.

Otra manera de mirar esto es que estamos pasando el módulo de un conjunto de entradas y salidas, cada uno cuyo valor es continuamente actualizado ya sea desde dentro del módulo (salidas) o fuera del módulo (entradas).

Desglosemos la instrucción: . S(switch0)

La creación de instancias de cada módulo tendrá una serie de declaraciones similares a esta declaración, uno por entrada/salida. El ". S"se refiere a la entrada de S en el módulo de srlatch, y el (switch0) se refiere a entrada switch0 situado en el módulo superior. ¿Ver un patrón?

. < nombre del puerto en módulo de instancia > (< nombre del puerto en el módulo actual >)

Este concepto también es similar a llamar a funciones en otros lenguajes de programación como C y C++; en la llamada de función pasamos valores (que conocemos por el nombre de la variable) en la función. Llamamos a este algo de valor, por ejemplo, principal, pero en la función se llama algo diferente. En este ejemplo de Verilog, tenemos una entrada en el módulo superior llamado "swtich0", y queremos que el valor de "S" de "sr0" igual a cualquier "switch0" es.

Como he mencionado antes, usted necesita una declaración de la inicialización del puerto por puerto en el módulo son instancias, pero si son instancias de un módulo que tiene, digamos, un autobús [7:0] llamado "T" de entrada, no necesitas hacer 8 declaraciones como ". T[0](Input[0]) ". Puede pasar todos buses haciendo referencia a los nombres solamente, por lo que podría pasar "Entrada" a "T"declarando". T(INPUT) ". Tenga en cuenta sin embargo que deben coincidir con dimensiones de autobús para arriba (es decir, no se puede pasar un bus de 5 puerto en un módulo que tiene un bus de 3 Puerto).

Además, tipos de puertos deben coincidir. Sólo puede pasar una entrada a una entrada y una salida (o un alambre; más sobre esto más adelante) a una salida.

Declaraciones de inicialización puerto separado con una sola coma. Buen estilo de codificación exige que cada línea contiene sólo una creación de instancias. De esto debe ser capaz de comprender esas tres líneas de código.

Cerca de la creación de instancias con un correspondiente paréntesis y un punto y coma.

Después de la creación de instancias con éxito, las salidas del módulo de instancia, en esencia, será accesibles dentro del módulo actual. Luego puede dirigir estas salidas a puertos de nivel superior o incluso las entradas de otros módulos de instanciadas.

Antes de finalizar esta discusión, vamos a resumir cómo iniciar un módulo (recordar que "módulo actual" se refiere al módulo que está haciendo la creación de instancias):

< nombre del módulo >< (nombre de instancia >
. < nombre del puerto en el módulo a ser instanciada > (< nombre del puerto/alambre módulo actual >),
... < repetición arriba tantas veces como sea necesario >...
. < nombre del puerto en el módulo a ser instanciada > (< nombre del puerto/alambre módulo actual >)
);

Artículos Relacionados

Cómo reutilizar una lámpara fluorescente compacta muerto y obtener libre electrónica

Cómo reutilizar una lámpara fluorescente compacta muerto y obtener libre electrónica

cómo llegar a electrónica gratis este muerto "lámpara fluorescente compacta" hay tantos electrónica allíhay transistores, resistencias, transformador de audio, condensadores, diodos... etc.el objetivo de este proyecto fresco es reciclaje muerto
Cómo escribir una buena electrónica Instructable

Cómo escribir una buena electrónica Instructable

Este Instructable fue inspirado principalmente por mis aportes sobre en la clínica, que, si no han oído hablar de él, es un hilo del foro donde se puede ir a pedir ayuda a criticar sus proyectos. Por lo general ser voluntario ayudar con proyectos rel
Hacer una sudadera de protoboard (instantánea electrónica usable!) ¿

Hacer una sudadera de protoboard (instantánea electrónica usable!) ¿

Son vestibles electrónica el futuro? ¡Eso creo! Aquí es el proyecto de electrónica usable más rápido, más versátil, la sudadera de la protoboard.En su mayoría, wearables involucran hilo conductor para el cableado. Pero ese tipo de cosas atasca mi máq
12V-180kV: una batería generador Marx (e Introducción a la electrónica)

12V-180kV: una batería generador Marx (e Introducción a la electrónica)

Si estás leyendo este Instructable, una cosa es probablemente cierta: estás interesado en alto voltaje! Si es así, has venido al lugar correcto; Generadores de Marx puede satisfacer su sed de chispas, explosiones y emoción. Hice este generador Marx v
RC barco hecha de una taza de deli y reciclado de piezas del aeroplano de RC (con mod de bonus al final)

RC barco hecha de una taza de deli y reciclado de piezas del aeroplano de RC (con mod de bonus al final)

Este barco es un asequible, fácil de hacer remoto controlado barco hecha de una taza de deli de 36 o 24 onzas, una pequeña hélice, pegamento caliente, cinta adhesiva, un gran palo de paleta de helado/del arte, una pequeña caja de plástico y algunos e
Una breve historia del tiempo

Una breve historia del tiempo

"La gente no entiende a tiempo. Es no lo que crees que es. - La gente asume que el tiempo es una progresión estricta de causa a efecto... pero en realidad, desde una perspectiva no lineal, no subjetiva, es más como una bola grande de wibbly-wobbly...
Cómo dar una breve clase de presentación competente

Cómo dar una breve clase de presentación competente

este instructivo se compone de puntos con un montón de palabras fijadas a ellos. Sé que palabras pueden ser intimidantes, pero leyendo estas palabras particular le ayudará a evitar errores comunes al dar una presentación de clase. No importa qué tema
Una breve historia de viaje y algunas Ideas que puedan o puede no ayudar a que mantenga su cordura mientras tomar viajes con su descendencia

Una breve historia de viaje y algunas Ideas que puedan o puede no ayudar a que mantenga su cordura mientras tomar viajes con su descendencia

viaja, especialmente con los niños, puede sacar el demonio en casi todo el mundo. Encanta ver lugares nuevos y te encanta sus little tikes su rugrats, pinzas cortantes de su tobillo, su hijo prepubescent, púber adolescente con sus hormonas furiosas,
Una breve introducción a la síntesis

Una breve introducción a la síntesis

¿se ha preguntado como ven las ondas que salen de un sintetizador?  O ¿qué pasa con una forma de onda cuando se agrega la resonancia?Este video ofrece una breve descripción audiovisual de técnicas y terminología básica de la síntesis.  Todas las lect
Programa de una cadena de luces de Navidad a parpadear el código morse con Arduino y Snap circuitos

Programa de una cadena de luces de Navidad a parpadear el código morse con Arduino y Snap circuitos

esto es un proyecto de mi hijo Dylan (9) y pongo usando una placa de circuito de Arduino, un conjunto de broche de presión del circuito y una cadena de luces de Navidad.Lo que usted necesita:Un Arduino: Un Arduino es un equipo en una sola placa de ci
Diseño de joyería digital: Una moda Introducción a Inventor

Diseño de joyería digital: Una moda Introducción a Inventor

mayoría decente de las personas en este planeta, en un momento u otro, entraron en una joyería en busca de algún tipo de accesorio, ya sea para nosotros mismos, o eso especial alguien. Aunque los minoristas a menudo tienen una amplia selección de dis
Un alambre de laberinto con una electrónica giro

Un alambre de laberinto con una electrónica giro

aquí es un SIMPLE y realmente proyecto de diversión electrónica usted puede hacer en casa. No necesitas hacer un tablero de circuito impreso que lo hace todo mucho más fácil!Estoy seguro que has jugado "laberinto de alambre"... (también llamado
CÓMO HACER UNA BATERÍA ELECTRÓNICA. (no un dechado de MIDI) aka KIDU

CÓMO HACER UNA BATERÍA ELECTRÓNICA. (no un dechado de MIDI) aka KIDU

Este instructable va a sersobre la construcción de una batería electrónica (no un MIDI sampler.), utilizando un Arduino UNO R3.,similares a una V-DRUM. Es código denominado KIDU.(Kompact inteligente unidad tamborileo). Algunos de los artículos usados
Convertir una báscula de baño electrónica en una escala de envío para

Convertir una báscula de baño electrónica en una escala de envío para <>

,En mi pequeño negocio necesitaba peso medio para artículos grandes y cajas a escala de planta para el envío. En lugar de la manera de pagar demasiado por un modelo industrial, usé una báscula de baño digital. Me pareció estar lo suficientemente cerc