Tutorial VHDL 2: Programas VHDL

En el tutorial anterior sobre los conceptos básicos del lenguaje de descripción de hardware VHSlC o VHDL, analizamos el flujo de diseño y la estructura del programa VHDL. Ahora es el momento de aprender sobre los programas VHDL.

Sin embargo, tenga en cuenta que el requisito previo para la programación VHDL son los fundamentos de la electrónica digital y el diseño de circuitos digitales. Para entender completamente estos programas, es importante que primero tengas conocimientos adecuados de álgebra booleana, puertas lógicas, circuitos lógicos combinacionales y secuenciales, etc.

Antes de comenzar aquí, considere hacer un repaso rápido de los conceptos básicos de la electrónica digital.

Comencemos con algunos programas VHDL fáciles y estándar...

El programa sumador VHDL completo:
biblioteca IEEE;
utilice IEEE.STD_LOGIC_1164.ALL;
la entidad full_adder es
puerto (a, b, cin: IN STD_LOGIC;
suma, cout: OUT STD_LOGIC);
finalizar complete_adder;
La arquitectura full_adder_arch de full_adder es
para comenzar
suma <= a xor b xor cin;
cout <= (a y b) o (be cin) o (ae cin);
finalizar full_adder_arch;

El programa VHDL de 2 a 4 decodificadores:
biblioteca IEEE;
utilice IEEE.STD_LOGIC_1164.ALL;
El decodificador entidad 2x4 es
puerto (a, b,: EN STD_LOGIC;
o0,o1,o2,o3: OUT STD_LOGIC);
final decodificador2x4;
La arquitectura decoder_arch de decoder2x4 es
para comenzar
o0 <= (no a) y (no b);
o1 <= ae (no b);
o2 <= (no a) y b;
o3 <= ayb;
finalizar decoder_arch;

El programa VHDL de conversión de código binario a gris:
biblioteca IEEE;
utilice IEEE.STD_LOGIC_1164.ALL;
La entidad BtoG es
puerto (B0,B1,B2,B3: EN STD_LOGIC;
G0,G1,G2,G3: SALIDA LÓGICA STD);
fin de BtoG;
La arquitectura BtoG_arch de BtoG es
para comenzar
G3 <= B3;
G2 <= B3 xo B2;
G1 <= B2 xo B1;
G0 <= B1 xo B0;
finalizar decoder_arch;

El programa VHDL generador de paridad de 4 bits:
biblioteca IEEE;
utilice IEEE.STD_LOGIC_1164.ALL;
La entidad parity_gen es
puerto (B0,B1,B2,B3: EN STD_LOGIC;
p:OUT STD_LOGIC);
finalizar parity_gen;
parity_gen_arch la arquitectura de parity_gen es
para comenzar
p <= B0 xor (B1 xor (B2 xou B3));
finalizar parity_gen_arch;

Los programas anteriores presentan el estilo de modelado de flujo de datos que se utiliza normalmente para circuitos lógicos combinacionales. Para escribir un programa para el circuito lógico secuencial, lo mejor es utilizar el estilo de modelado de comportamiento.

A continuación se muestran algunos ejemplos de programas VHDL que utilizan el estilo de modelado de comportamiento.

El programa VHDL multiplexor 4x1:
biblioteca ieee;
utilice ieee.std_logic_1164.all;

la entidad mux41 es
puerto (d: en std_logic_vector (0 a 3);
s: en std_logic_vector (0 a 1);
o: salida std_logic);
finalizar mux41;

mux41_arch la arquitectura de mux41 es
para comenzar
proceso (d,s)
para comenzar
el caso s es
cuando “00” => o<= d(0);
cuando “01” => o<= d(1);
cuando “10” => o<= d(2);
cuando “11” => o<= d(3);
caso final;
fin del proceso;
finalizar mux41_arch;

El programa VHDL del flip-flop D (con reinicio de entrada alta activo):
biblioteca ieee;
utilice ieee.std_logic_1164.all;

entidad flip_flop es
puerto (clk,Din,rst: en std_logic;
P: fuera std_logic;
Qnot: fuera std_logic);
flip_flop final;

my_flipflop la arquitectura de flip_flop es
para comenzar
proceso (clk,Din,primero)
para comenzar
si (primero = '1') entonces
Q<='0';
Qnot <='1′;
elsif(clk'event y clk='1′) entonces
Q <= Din;
Qnot <= no Din;
terminara si;
fin del proceso;
terminar my_flipflop;

El programa VHDL de contador binario de 4 bits:
biblioteca IEEE;
utilice IEEE.STD_LOGIC_1164.ALL;
utilizar IEEE.STD_LOGIC_ARITH.all;
utilice IEEE.STD_LOGIC_UNSIGNED.all;

contador de entidades es
Puerto (primero, clk: en std_logic;
o: salida std_logic_vector(0 a 3));
contador final;

La arquitectura counter_arch de Counter es
recuento de señales: std_logic_vector (0 a 3);
para comenzar
proceso (primero, clk)
para comenzar
si (primero = '1') entonces cuente <= “0000”;
elsif (clk'event y clk = '1') luego cuenta <= cuenta + 1;
terminara si;
fin del proceso;
o <= contar;
finalizar contador_arch;

Si el circuito es pequeño y simple, puedes usar los dos estilos de modelado anteriores para el programa VHDL. Sin embargo, si el circuito es grande y complejo, es necesario utilizar el estilo de modelado estructural.

En este estilo, un circuito grande se considera una interconexión de componentes más pequeños. Esto ocurre porque el circuito completo está representado por un conjunto de componentes interconectados.

A continuación se muestra un ejemplo de un programa VHDL que emplea el estilo de modelado estructural.

El circuito sumador completo que utiliza el medio sumador y la puerta OR como componentes:
biblioteca IEEE;

Utilice IEEE. STD_LOGIC_1164.all;

entidad IS de suma completa
puerto (a,b,cin:en STD_LOGIC;
suma, realizar: salida STD_LOGIC);
extremo de la suma completa;
—————————— arquitectura sumadora completa
La arquitectura FA_arch de fulladder es

—————————– componente medio sumador
El componente half_adder es

puerto (p,q: en STD_LOGIC;
s,cy: salida STD_LOGIC);
componente final;
—————————— o componente de puerta
El componente or_gate es
puerto (p1,q1:en STD_LOGIC;
r1: salida STD_LOGIC);
componente final;
—————————-
señal s1,c1,c2: STD_LOGIC;
para comenzar
w1: mapa de puerto half_adder (a,b,s1,c1);
w2: mapa de puertos half_adder(s1,cin,sum,c2);
w3: mapa de puertos or_gate (c1,c2,carry);
finalizar FA_arch;
————————— programa de componente medio sumador
la entidad half_adder es

puerto (p,q: en STD_LOGIC;
s,cy: salida STD_LOGIC);
finalizar half_adder;
Arquitectura HA_arch de half_adder IS
para comenzar
s <= px o q;
cy <= peq;
finalizar HA_arch;
—————————- o programa de componente de puerta
la entidad ou_gate es

puerto (p1,q1:en STD_LOGIC;
r1: salida STD_LOGIC);
finalizar ou_gate;
arquitectura or_gate_arch de or_gate IS
para comenzar
r1 <= p1 o q1;
finalizar ou_gate_arch;

Para comprender mejor los tres estilos de modelado, diseñemos un decodificador de 2 a 4 utilizando los tres métodos.

El decodificador de 2 a 4 que utiliza el estilo de modelado de flujo de datos (es el mismo que antes):
biblioteca IEEE;

utilice IEEE.STD_LOGIC_1164.ALL;
El decodificador entidad 2x4 es
puerto (a, b,: EN STD_LOGIC;
o0,o1,o2,o3: OUT STD_LOGIC);
final decodificador2x4;
La arquitectura decoder_arch de decoder2x4 es
para comenzar
o0 <= (no a) y (no b);
o1 <= ae (no b);
o2 <= (no a) y b;
o3 <= ayb;
finalizar decoder_arch;

El decodificador de 2 a 4 que utiliza el estilo de modelado de comportamiento:
biblioteca IEEE;

utilice IEEE.STD_LOGIC_1164.ALL;
El decodificador entidad 2x4 es
puerto (I: IN STD_LOGIC_VECTOR(0 a 1);
O: SALIDA STD_LOGIC_VECTOR (0 a 3));
final decodificador2x4;
La arquitectura decoder_arch de decoder2x4 es
para comenzar
proceso (yo)
para comenzar
si yo soy
cuando “00” => O <= “0001”;
cuando “01” => O <= “0010”;
cuando “10” => O <= “0100”;
cuando “11” => O <= “1000”;
caso final;
fin del proceso;
finalizar decoder_arch;

El decodificador de 2 a 4 que utiliza el estilo de modelado estructural:
biblioteca IEEE;

utilice IEEE.STD_LOGIC_1164.ALL;
El decodificador entidad 2x4 es
puerto (I: IN STD_LOGIC_VECTOR(0 a 1);
O: SALIDA STD_LOGIC_VECTOR (0 a 3));
final decodificador2x4;

La arquitectura decoder_arch de decoder2x4 es
——————— Y componente PUERTA ———————-
El componente and_gate es
puerto(a, b: en STD_LOGIC;
y: salida STD_LOGIC);
componente final;
——————- NO componente PUERTA ———————–
El componente not_gate es
puerto(m: en STD_LOGIC;
n: salida STD_LOGIC);
componente final;
—————– señales de salida intermedias—————–
señal p,q: STD_LOGIC;
—————- mapeo de puertos de componentes ———————-
para comenzar
w1: mapa de puertos not_gate (I(0),p);
w2: mapa de puertos not_gate (I(1),q);
w3: mapa de puertos and_gate (p,q,O(0));
w4: mapa de puertos and_gate (I(0),q,O(1));
w5: mapa de puertos and_gate (p,I(1),O(2));
w3: mapa de puertos and_gate (I(0),I(1),O(3));
finalizar decoder_arch;
——————— Y programa del componente GATE ————–
la entidad and_gate es
puerto(a, b: en STD_LOGIC;
y: salida STD_LOGIC);
finalizar e_gate;
La arquitectura and_gate_arch de and_gate es
para comenzar
y <= ayb;
finalizar and_gate_arch;
——————- Programa del componente NO GATE —————-
La entidad not_gate es
puerto(m: en STD_LOGIC;
n: salida STD_LOGIC);
finalizar not_gate;
La arquitectura not_gate_arch de not_gate es
para comenzar
n <= no m;
finalizar not_gate_arch;

Como puede ver, podemos diseñar cualquier circuito digital utilizando cualquiera de los estilos de modelado. Depende del diseñador elegir el estilo de modelado ideal y más apropiado para describir el circuito.

En el siguiente tutorial, describiremos cómo compilar, simular, ejecutar y verificar estos programas VHDL cuando utilizamos la herramienta de software MAX+II (de Altera).

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.