Académique Documents
Professionnel Documents
Culture Documents
VDD
0 1
?
c Output
c
1
input
0
Compuerta inversora NMOS Estática
VDD VDD
RONP
U
Output=Vdd ROFFP H
=H
Input=L ROFFPD + RONP
ROFFPD U
VDD
RONP
U
Output=Vdd RONP L
D =L
Input=H RONPD + RONP
RONP U
D
Compuerta inversora NMOS Estática
0 1
1 VDD
c Output
c
input
OBJETOS MANIPULABLES
Por ejemplo:
Ejemplo:
signal vcc: bit: ´1´;
signal suma: bit_vector: (3 downto 0);
Señales
Ejemplos:
signal count: integer range 1 to 50; (el valor inicial será
1)
signal GROUND: BIT:='0';
signal YS_BUS std_logic_vector (7 downto 0);
port (B,A: in integer range 0 to 9);
signal bogus: bit_vector; (Errónea, no hay dimensión)
Driver de señal
ARCHITECTURE t1 OF d1 IS
BEGIN
a <= b AFTER 10 ns ;
a <= c AFTER 10 ns ;
END t1;
Función de resolución
Ejemplos
Ejemplos:
puertoa: in bit;
puertob: in bit_vector(0 to 7);
puertoc: out bit_vector(3 downto 0);
puertod: buffer bit;
puertoe:inout std_logic;
Modo de Puerto
in
Un puerto es de modo in si la información correspondiente al mismo, entra a la entidad y se suele
usar para relojes, entradas de control (como las típicas load, reset y enable), y para datos de
entrada unidireccionales.
out
Un puerto es de modo out si la información fluye hacia fuera de la entidad.
Este modo no permite realimentación ya que al declarar un puerto como out estamos indicando al
compilador que el estado lógico en el que se encuentra no es leíble.
buffer
Este modo es similar al modo out, pero además, permite la realimentación y no es bidireccional,
y solo puede ser conectado directamente a una señal interna, o a un puerto de modo buffer de
otra entidad. Una aplicación muy común de este modo es la de salida de un contador, ya que
debemos saber la salida en el momento actual para determinar la salida en el momento
siguiente.
inout
Es usado para señales bidireccionales, es decir, si necesitamos que por el mismo puerto fluya
información tanto hacia dentro como hacia afuera de la entidad. Este modo permite la
realimentación interna y puede reemplazar a cualquiera de los modos anteriores, pudiéndose
usar este modo para todos los puertos.
Tipos Nativos para VHDL
boolean
Puede tomar dos valores: verdadero/true o falso/false. Un ejemplo típico es la salida de un comparador
que da verdadero si los números comparados son iguales y falso si no lo son
bit
Puede tomar dos valores: 0 ó 1 ( o también "low" o "high", según se prefiera). Es el tipo más usado
de los nativos
bit_vector
Es un vector de bits. Debemos tener cuidado al definir el peso de los bits que lo integran, ya que
según pongamos la palabra reservada downto o to estaremos diciendo que el bit más significativo es
el número más alto o el más bajo del vector, respectivamente..
integer
Para mantenerr números enteros. Hay que advertir que el uso de enteros consume muchos recursos
del dispositivo de lógica programable, siempre y cuando sea sintetizable, debido a que está
prácticamente creado para la simulación.
• Definir un modelo de comportamiento sintetizable (ARCHITECTURE)
Usando el juego de instrucciones soportado por las herramientas de síntesis
Begin
End archpro;
Component xnor2
Port (e1,e2:in bit; y:out bit);
End component;
Component and4
Port (e1,e2,e3,e4:in bit; y:out bit);
End component;
begin
u0: xnor2 port map (a(0),b(0),x(0));
u1: xnor2 port map (a(1),b(1),x(1));
u2: xnor2 port map (a(2),b(2),x(2));
u3: xnor2 port map (a(3),b(3),x(3));
u4: and4 port map (x(0),x(1),x(2),x(3),igual);
end struct;
Estilo de Escritura RTL (Register Transfer Level)
type id is definiciòn_tipo;
Ejemplos
Uso
Ejemplo:
Entity HALFADD is
port (A,B : in bit;
SUM, CARRY : out bit);
end HALFADD;
Tipos predefinidos
Escalares
Enumerados
BOOLEAN,BIT,CHARACTER
Enteros
INTEGER
Físicos
TIME
Flotantes
REAL
Compuestos
Arrays
STRING,BIT_VECTOR
• Otros
Puntero
ACCESS
Archivos
FILE
TIPO BOOLEAN
TRUE
FALSO
‘A’
‘b’
‘x’
TIPO INTEGER
Un tipo integer es un dato cuyo contenido es un
valor numerico entero que esta dentro del siguiente rango :
2,147,483,647 a +2,147,483,647.
Ejemplos
+1
682
-139
+239
Ejemplos
“error en sincronia”
“Hola Mundo”
TIPO BIT_VECTOR
"0101_1001"
x"00AF"
Ejemplo:
s
i
g
n
a
l
A
std_logic para drivers múltiples
Z<= A; RES_Z<= A;
Z<= B; RES_Z<= B;
Cláusulas library y use
entity MVLS is
port (A,B: in std_ulogic;
Z: out std_ulogic);
end MVLS;
OPERADORES LOGICOS
Pueden igualmente
operar sobre
STD_LOGIC_VECTOR
utilizando los paquetes
STD_LOGIC_UNSIGNED
y STD_LOGIC_ARITH.
OPERADORES DE DESPLAZAMIENTO