Вы находитесь на странице: 1из 9

ESTRUCTURA DE PROGRAMA VHDL

ENTITY: DESCRIBE LA INTERFAZ HACIA EL MUNDO EXTERIOR; DEFINIENDO:


Numero de puertos, su direccin y el tipo de los mismos.
ENTITY mux IS
PORT ( a, b, c, d : IN BIT;
s0, s1 : IN BIT;
x, : OUT BIT);
END mux;

ARCHITECTURE: CONTIENE LAS SENTECIAS QUE MODELAN EL


COMPORTAMIENTO DE LA ENTIDAD, POR LO QUE SIEMPRE ESTARA
RELACIONADO A UNA ENTIDAD.
ARCHITECTURE dataflow OF mux IS
SIGNAL select : INTEGER;
BEGIN
select <= 0 WHEN s0 = 0 AND s1 = 0 ELSE
1 WHEN s0 = 1 AND s1 = 0 ELSE
2 WHEN s0 = 0 AND s1 = 1 ELSE
3;
x <= a AFTER 0.5 NS WHEN select = 0 ELSE
b AFTER 0.5 NS WHEN select = 1 ELSE
c AFTER 0.5 NS WHEN select = 2 ELSE
d AFTER 0.5 NS;
END dataflow;

ASIGNANDO SEALES CONCURRENTES:


En un lenguaje de programacin tpico como podra ser el visual basic el c+
+, las sentencias de asignacin se ejecutan uno despus de otro en un orden
especificado por el cdigo fuente.
EN VHDL, no se da esta situacin, no hay un orden en las sentencias de
asignacin; por consiguiente el orden de ejecucin solamente ser definido por
eventos ocurridos en las seales a las cuales las sentencias de asignamiento
sean sensibles.
Veamos la asignacin en el ejemplo:
select <=

0 WHEN s0 = 0 AND s1 = 0 ELSE


1 WHEN s0 = 1 AND s1 = 0 ELSE
2 WHEN

1
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

Una seal de asignamiento es identificado por el smbolo <=, entonces la


seal select tomara valores numricos basados en los valores de s0 y s1.
La sentencia se ejecutar, si se produce un evento ya sea en s0 en s1, es decir, si se
presenta un cambio en el valor de dicha seal.
LA SENSIBILIDAD A CAMBIOS:
Se puede decir que las sentencias de asignacin son sensibles a seales que estn a
la derecha del smbolo <= (operador de asignacin).

Analizando el ejemplo:
ENTITY mux IS
PORT ( a, b, c, d : IN BIT;
s0, s1 : IN BIT;
x, : OUT BIT);
END mux;
ARCHITECTURE dataflow OF mux IS
SIGNAL select : INTEGER;
BEGIN
select <= 0 WHEN s0 = 0 AND s1 = 0 ELSE
1 WHEN s0 = 1 AND s1 = 0 ELSE
2 WHEN s0 = 0 AND s1 = 1 ELSE
3;
x <= a AFTER 0.5 NS WHEN select = 0 ELSE
b AFTER 0.5 NS WHEN select = 1 ELSE
c AFTER 0.5 NS WHEN select = 2 ELSE
d AFTER 0.5 NS;
END dataflow;

Si: a, b, c, d

s0, s1 son todos 0s.

La salida ser:

x=0

Debido a que s0, s1 apuntan a a


Suposicin 1:
Si provocamos un evento en a, es decir, a=1.
La sentencia de asignacin para select no se ejecutar, debido a que la misma
no es sensible a a.
La sentencia de asignacin para x, s se ejecutar.
Por consiguiente:

x=1.

Suposicin 2:
Provocando un cambio en s0. ?
2
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

Event scheduling: (Retardando asignacin)


Se le llama as al mecanismo de retardo que se le pone a una seal. Ejemplo:
x <= a AFTER 0.5 NS

PROCESS en VHDL
Todas las sentencias dentro de un proceso se ejecutan uno seguido del otro tal
cual ocurre en un lenguaje de programacin tradicional.
Un PROCESS en VHDL, consiste en un conjunto de acciones a ser ejecutadas en
forma secuencial, a lo que en ingles se conoce como: Sequential Statements
(Sentencias Secuenciales o instrucciones secuenciales). Es as que las
asignaciones en un PROCESS no se ejecutan mientras no se presente el END
PROCESS. Por lo que generalmente a un PROCESS se le puede entender como
un circuito a parte en la arquitectura el cual es indivisible.
Un PROCESS tiene dos formas bsicas:
La primera, tiene una lista de sensibilidad, sin sentencias WAIT en el process.
La segunda, tiene una o ms sentencias WAIT, pero no tiene lista de
sensibilidad. (No se desarrollar en el curso)
PROCESS con lista de sensibilidad
process(sensitivity-list)

begin
declarations;
sequentialstatement;
sequentialstatement;

...

end process;
sensitivity-list

: Es una lista de seales a las cuales el PROCESS es

sensible.
declarations

: Consiste en declaraciones varias que son locales para el

PROCESS.
Si bien es cierto que un PROCESS de VHDL tiene la apariencia de un simple
procedimiento o funcin en lo que sera un lenguaje de programacin
tradicional, en VHDL un PROCESS tiene un comportamiento totalmente
diferente.
En VHDL un PROCESS, es invocado o llamado por otra rutina; como si fuera
parte de un circuito el cual puede estar ACTIVO o SUSPENDIDO.
3
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

Se dice que un PROCESS est en ACTIVO, cuando una seal de la lista de


sensibilidad cambia. Y el PROCESS estar SUSPENDIDO hasta la prxima vez en
que se produzca un cambio en la seal.

A continuacin un modelo de PROCESS:


signala,b,c,y:std-logic;
process ( a , b , c )
begin
y <= a and b and c ;

end process;

En este ejemplo, PROCESS, se ejecutar cada vez que se presente un cambio


en una de las seales a, b c. Luego Y tomar el valor correspondiente.
ANALIZAR:
a,b,c,d,y: std-logic;
process (a, b, c , d)
begin

...

y <= a or c;
y <= a and b;
y <= c and d;
end process;

VARIABLES EN VHDL
La sintaxis es:
Donde el operador:
VARIABLE.

Nombre_ de_ variable


:=

:= Expresin_ de_ valor;

es usado para realizar una asignacin de tipo

En este caso el asignamiento se ejecuta inmediatamente:


signal a, b, y: std-logic;
process (a, b)
variable tmp0 , tmp1 , tmp2: std-logic;
begin

tmp0 := 0 ;
tmpl : = tmp0 or a;
tmp2 := tmpl or b ;
4
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

y <= tmp2;
end process;

Ntese que la variable es de tipo local y tiene que ser declarado dentro de
PROCESS.

DISEO ESTRUCTURAL (arquitectura estructural)


Consiste en implementar la arquitectura en partes, es decir, dividir el trabajo
en componentes ms sencillos que ejecuten operaciones pequeas y que
interconectndolos puedan lograr el mismo resultado que en una arquitectura
comportacional.
ARCHITECTURE netlist OF mux IS
COMPONENT andgate
PORT(a, b, c : IN bit; c : OUT BIT);
END COMPONENT;
COMPONENT inverter
PORT(in1 : IN BIT; x : OUT BIT);
END COMPONENT;
COMPONENT orgate
PORT(a, b, c, d : IN bit; x : OUT BIT);
END COMPONENT;
SIGNAL s0_inv, s1_inv, x1, x2, x3, x4 : BIT;
BEGIN
U1 : inverter(s0, s0_inv);
U2 : inverter(s1, s1_inv);
U3 : andgate(a, s0_inv, s1_inv, x1);
U4 : andgate(b, s0, s1_inv, x2);
U5 : andgate(c, s0_inv, s1, x3);
U6 : andgate(d, s0, s1, x4);
U7 : orgate(x2 => b, x1 => a, x4 => d, x3 => c, x => x);
END netlist;

En esta descripcin se usa un nmero de componentes de bajo nivel para modelar el


comportamiento de un mux (multiplexor).
En lo que es componentes tenemos compuertas que son: inversor, and y or. Cada
uno de los cuales fue declarado en la seccin correspondiente de la arquitectura
principal.
Un nmero de seales locales es usado para interconectar los, para formar la
descripcin de la arquitectura. (Dichas seales son declaradas usando SIGNAL).
En el ejemplo se tiene entonces la instanciacin de los componentes. La instanciacin
comienza con las etiquetas labels de U1 a U7.

5
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

U1 inicializa el componente inversor. Esta instruccin hace que el puerto So se conecte


al primer puerto del componente inversor, y la seal So_inv al segundo puerto del
componente inversor y el efecto es que el puerto in1 del inversor es conectado al
puerto So de la entidad multiplexor.
Note el caso de U7, el cual utiliza la notacin que tambin es posible:
U7 : orgate(x2 => b, x1 => a, x4 => d, x3 => c, x => x);

En este caso se usa una asociacin utilizando nombres para correlacionar o conectar
los puertos y las seales correspondientemente.
x2 de la orgate es conectada al puerto b de la entidad (en la primera asociacin).
En la ltima asociacin vemos que se conecta el puerto x de orgate al puerto x de la
entidad.

EJEMPLOS DE ARQUITECTURAS COMPORTACIONAL O ESTRUCTURAL?


EJEMPLO 1:
architecture behavioral_2 of AND2 is
begin
Z <= A and B;
end behavioral_2;
EJEMPLO 2:
entity AND_2 is
port (A, B: in std_logic;
Z: out std_logic);
end AND_2;
architecture behavioral_and2 of AND_2 is
-- declaracion de seales internas
signal X: std_logic;
begin
Z <= X;
--SENTENCIAS CONCURRENTES
X <= A and B;
--SENTENCIAS CONCURRENTES
End behavioral_and2;
TODAS LAS SENTENCIAS CONTENIDAS ENTRE: BEGIN y END, SON
CONCURRENTES.
DOS MANERAS DE IMPLEMENTAR UN MULTIPLEXOR, UTILIZACION
CORRECTA DE PROCESS
6
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

EJEMPLO 3
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY mux IS
PORT (i0, i1, i2, i3, a, b : IN
std_logic;
q : OUT
std_logic);
END mux;
ARCHITECTURE manera_a of mux IS
SIGNAL muxval : INTEGER;
BEGIN
PROCESS ( i0, i1, i2, i3, a, b )
BEGIN
muxval <= 0;
IF (a = 1) THEN
muxval <= muxval + 1;
END IF;
IF (b = 1) THEN
muxval <= muxval + 2;
END IF;
CASE muxval IS
WHEN 0 =>q <= I0 AFTER 10
ns;
WHEN 1 =>q <= I1 AFTER 10
ns;
WHEN 2 =>q <= I2 AFTER 10
ns;
WHEN 3 =>q <= I3 AFTER 10
ns;
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END manera_a;

EJEMPLO 4
LIBRARY IEEE;
USE IEEE.std_logic_1164ALL;
ENTITY mux IS
PORT (i0, i1, i2, i3, a, b : IN std_logic;
q : OUT std_logic);
END mux;
ARCHITECTURE manera_b OF mux IS
BEGIN
PROCESS ( i0, i1, i2, i3, a, b )
VARIABLE muxval : INTEGER;
BEGIN
muxval := 0;
IF (a = 1) THEN
muxval := muxval + 1;
END IF;
IF (b = 1) THEN
muxval := muxval + 2;
END IF;
CASE muxval IS
WHEN 0 =>q <= I0 AFTER 10 ns;
WHEN 1 =>q <= I1 AFTER 10 ns;
WHEN 2 =>q <= I2 AFTER 10 ns;
WHEN 3 =>q <= I3 AFTER 10 ns;
WHEN OTHERS =>NULL;
END CASE;

7
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

END PROCESS;
END manera_b;

PREGUNTA:
Cul de las formas de implementacin del MUX es la que trabaja correctamente?

EJEMPLO 5: Sumador completo de 4 bits usando un sumador completo de 1


bit.
library ieee;
use ieee.std_logic_1164.all;
--DEFINIENDO AL SUMADOR COMPLETO DE UN BIT
entity FULLADDER is
port (a, b, c: in std_logic;
sum, carry: out std_logic);
end FULLADDER;
architecture fulladder_behav of FULLADDER is
begin
sum <= (a xor b) xor c ;
carry <= (a and b) or (c and (a xor b));
end fulladder_behav;
--SUMADOR DE 4 BITS
8
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

S EJEMPLO library ieee;


ieee.std_logic_1164.all;
= if rst = use
'0' then
...

FUNCIN

/= if clk /='1' then ...

Para evaluar desigualdad

Para evaluar igualdad

=>

entity USING1BITFULLADDER is Evala mayor igual que


while mem(i) >= 10 loop ..
port (a, b: in std_logic_vector(3 downto 0);
assert compteur <= 32 ...
Evala menor igual que
Cin : in std_logic;
output <= internal_bus after 10 ns;
Asignacin de seales
sum: out std_logic_vector (3
reg:= internal_bus;
Asignacin de variables
downto 0);
case .. when "10" => outputs
<= "101";
Entonces condicional
Cout:
out std_logic);
funct(input1=>"1011",
..)
Toma valor
end USING1BITFULLADDER;

<

if mem(i) < 64 then ..

>

if ram(i)architecture
> 8 then ..fouradder_structure Mayor
que
of

"

report "my
message"
USING1BITFULLADDER
is

>=
<=
<=
:=
=>

Menor que
Trabajar con mensajes o cadenas

signal c: std_logic_vector (4
downto
0);
Punto
separador
component
FULLADDER
: signal sortie : bit;
Separador
port(a,
b,
c:
in
std_logic;
+ sum: = a + b;
Operador suma positivo
sum,
carry:
out
std_logic);
- subtr := a- b;
Operador resta negativo
end
component;
/ period/2
Operador divisin
begin
* mult= a * b;
Multiplicacin
FA0: FULLADDER
** expo= 2**10;
Exponenciacin
port map (a(0), b(0), not Cin,
& ten_bits = "1010" & six_bits;
Concatenacin
sum(0), c(1));
| when '1' | 'X' =>
FA1: FULLADDER Barra vertical, operador OR
; end component;
Clausula
de terminacin
port map (a(1),
b(1), C(1),
sum(1),
c(2));
FA2: FULLADDER
port map (a(2), b(2), C(2), sum(2),
c(3));
FA3: FULLADDER
port map (a(3), b(3), C(3), sum(3),
c(4));
Cout <= c(4);
end fouradder_structure;
.

cell.header

Operadores Importantes

9
Microprocesadores Y Arquitectura Del Computador
Electrnica Doc. JMCV

Ing.

Вам также может понравиться