Você está na página 1de 111

Por ejemplo:

Por ejemplo:

entity sumador is
port (A,B: in bit_vector (3 downto 0) ;
Cin: in bit;
Cout: out bit;
SUMA: out bit_vector( 3 downto 0)) ;
end sumador;
1 Ejemplo
2 library ieee;
3 use ieee.std_logic_1164.all ;
4 entity tabla is port(
5 a,b,c: in std_logic;
6 f: out std_logic);
7 end tabla;
8 architecture ejemplo of tabla is
9 begin
10 f <= '1' when (a='0' and b= '0 and c= '0') else
11 '1' when (a= '0 and b= 1 and c= '1') else
12 1 when (a= '1 and b= '1' and c= '0') else
13 '1 when (a= '1' and b= '1' and c= '1 ) else
14 '0';
15 end ejemplo;
library ieee;
use ieee.std_logic_1164.all;

entity logic is port (


a,b,c,d,e,f: in std_logic;
x1,x2,x3: out std_logic) ;
end logic;

architecture booleana of logic is


begin
x1 <= a xnor b;
x2 <= ( ( (c and d) or (a xnor b) ) nand
( (e xor f) and (c and d) ) ) ;
x3 <= (e xnor f) and (c and d) ;
end booleana;
Diseo de un multiplexor
El primer ejercicio consistir en crear el diseo de un multiplexor de dos entradas de
datos de un bit. Por tanto, este multiplexor tendr una seal de seleccin (un bit).
Seleccin de una seal (with*select>when)
La declaracin with-select-when se utiliza para asignar un valor a una
seal con base en el valor de otra seal previamente seleccionada.
Elementos de memoria

Un elemento de memoria es un componente que es capaz de guardar (memorizar) un


valor. Existen muchas maneras de modelar un elemento de memoria en VHDL, sin
embargo, dentro del subconjunto de VHDL sintetizable slo hay unas pocas maneras. El
subconjunto de VHDL sintetizable es un estndar del VHDL que
restringe el lenguaje a un mnimo construcciones VHDL que los sintetizadores deben acep
tar. Por tanto, no todo el VHDL es aceptado para sintetizarlo e implementarlo en la FPG
A. Esto se debe a que el VHDL surgi para modelar y simular circuitos, y no para sintet
izarlos. Por ello, el VHDL es mucho ms amplio que lo que se puede sintetizar. En la pr
ctica, cada sintetizador acepta un conjunto determinado para sntesis, y por ello se deb
e consultar el manual antes de empezar a usar un sintetizador nuevo [27].
VHDL- FLIP FLOP
EJEM1:
Se desea disear un registro con FF tipo D.
library ieee;
use ieee.std_logic_1164.all;
entity reg is port (
D: in std_logic_vector(0 to 7);
clk: in std_logic;
Q: out std_logic_vector(0 to 7));
end reg ;
architecture arqreg of reg is
begin
process (clk)
begin
if (clk'event and clk='l') then
Q <= D;
end if;
end process;
end arqreg;

ING.CIP.Dennis Izquierdo L.
dizquierdo@tecsup.edu.pe 63
EJEM2:
Se desea disear un registro con FF tipo J-K.
EJEM2:
Se desea disear un registro con FF tipo T
VHDL- Contadores

EJEM2:
Se desea disear un contador de 0 a 15 UP/DOWN
Cdigo del
contador
EJEM2:
Se desea disear un registro.
FLIP FLOP


EJEM1:
El sistema tendr en la salida z un 1 si recibe cuatro 1s consecutivos.
Cdigo de la maquina de
estado

ING.CIP.Dennis Izquierdo L.
dizquierdo@tecsup.edu.pe
EJEM2:
Se desea disear un circuito que genere una seal de encender un led y apagar
un led cada 1 segundo.

En esta prctica queremos que un LED se mantenga encendido durante un segundo y


se apague durante el segundo siguiente, este comportamiento se repetir
peridicamente.
Entonces lo que tenemos que hacer es un divisor de frecuencia. Nuestro reloj tiene
una frecuencia de 50 MHz y queremos una seal de 1 Hz (que llamaremos S1seg). El
cronograma de estas seales se muestra en la figura 6.1. Como se puede apreciar, la
seal S1seg estar a 1 solamente durante un ciclo de reloj durante un segundo.
La seal S1seg ser la entrada a un biestable T, y har que cada segundo,
el biestable cambie de valor. El esquema general del circuito se muestra
en la figura 6.2.

Para pasar de 20 ns a 1 segundo (de 50 MHz a 1 HZ), tenemos que contar hasta 50
millones (50x106). La menor potencia14 de dos superior a 50x106 es 26. Esto es, 226 >
50x106 >225. Por tanto, necesitamos 26 bits para poder representar el nmero 50x106.
As que nuestra seal de cuenta va a tener 26 bits.
Para llevar la cuenta se puede utilizar una seal de tipo entero o natural (integer o
natural). Esta seal debe de tener un rango potencia de dos. Su declaracin sera:
Fjate que el rango de los enteros o naturales es ascendente (to en vez de downto
como lo era en los std_logic_vector).
La operacin potencia se representa con dos asteriscos en VHDL. Se debe restar
uno al resultado de la potencia porque el rango empieza en cero. Por ejemplo para 8
bits, el rango sera:

Si a un entero no se le especifica el rango, se genera una seal de 32 bits, lo que en


la mayora de los casos es un desperdicio de recursos.

NOTA: Para calcular el nmero de bits que necesitas, obtn el entero superior al
resultado del logaritmo en base 2 del nmero.
Por ejemplo, log2(5010 6) = 25,75 26 bits.
Se pide implementar un diseo con VHDL del sistema de un semforo:

http://books.google.es/books?id=wpRRNiq5V1EC&prints
ec=frontcover&dq=boylestad&hl=es&sa=X&ei=raVrVIrx
C4qhNsiPgqAE&ved=0CCUQ6AEwAA#v=onepage&q=bo
ylestad&f=false

Você também pode gostar