Professional Documents
Culture Documents
VHDL
Elementos Esenciales
Entity.
Architecture.
Process.
Type.
Signal.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MULTIVECTOR is
Port ( E0, E1, E2, E3 : in STD_LOGIC _VECTOR (3 downto 0);
S0, S1 : in STD_LOGIC;
F : out STD_LOGIC _VECTOR (3 downto 0));
end MULTIVECTOR;
IDENTIFICADORES.
ARCHITECTURE
architecture arch_name of entity_name is
-- declaraciones de la arquitectura
-- signals ;
-- nuevos tipos de seales ;
begin
-- operaciones lgicas aritmticas concurrentes;
-- asignaciones a seales;
process
begin
-- cdigo de descripcin
end process;
end arch_name;
Operaciones Lgicas:
and | or | not | nand | nor | xor | xnor
(se pueden aplicar a bits y a vectores).
Operaciones Aritmticas:
+ | - (suma y resta )
&
(Concatenacin similar a ,)
* | ** | / | mod | rem (Multiplicacion, potencias,
divisin, mdulo y residuo)
Operaciones Relacionales:
= | /= | < | <= | > | >=
(igual, diferente, menor que, menor o igual, mayor, mayor o igual)
Operaciones de Traslacin:
sll | srl | sla | sra | rol | ror
(a la izquierda, lgica a la derecha, aritmtica a la derecha, rotacin
izquierda, rotacin derecha)
: IN
: OUT
BIT ;
BIT ) ;
==========================================================
entity mux2 is
port (D0, D1, S0: in std_logic;
O : out std_logic);
end mux2;
architecture behavioral2 of mux2 is
begin
multiplexor: process( D0,D1,S0)
if(S0 = 1) then O <= D1;
else O <= D0;
end if;
end process;
end behavioral2;
Decodificador Genrico
entity dcdr_n
generic (
Port ( Xi
Yo
end dcdr_n;
is
n : integer := 4);
: in STD_LOGIC_VECTOR (0 to n-1);
: out STD_LOGIC_VECTOR (0 to (2**n)-1));
PROCESS
El proceso la seccin que contiene las operaciones que se
ejecutan secuencialmente. El proceso posee el siguiente
formato:
<etiqueta>: process (lista sensible)
begin
-- operaciones o estructuras secuenciales
end process <etiqueta>
-- la etiqueta es opcional
PROCESS
PROCESS
FOR GENERATE;
<etiqueta>: FOR <ndice> IN (valor inicial) TO
(valor final) GENERATE
<asignacin1 que depende de ndice> ;
<asignacin2 que depende de ndice> ;
END GENERATE ;
CASE WHEN
case expresin is
when alternativa_l => ... --seq. statements
Ejemplo if end if
Define el proceso
Compara el cual se
ejecuta
secuencialmente
Arquitectura
funcional de la
entidad comp.
: IN
: OUT
STD_LOGIC ;
STD_LOGIC ) ;
mux2to1 IS
)
f <= w0 ;
f <= w1 ;
signal a, b: bit_vector(0 to 7)
Flip-flops en VHDL
Describir un flip-flop tipo D con entrada de reloj clk activada por flanco
negativo.
FFD: process (clk)
begin
if (clkevent and
Q <= D;
end if;
end process FFD;
clk = 0) then
Ejemplo:
Presente la descripcin de un flip-flop tipo D con entrada de clear nCR y preset nPR,
la entrada de reloj es activa en el flanco de atraso.
process (CLK,nPR,nCR)
begin
if nCR = '0' then
Q <= '0' ;
elsif nPR = '0' then
Q <= '1' ;
elsif (CLK'event and CLK = 0') then
Q <= D ;
end if ;
end process;
Se realiza un flip-flop tipo D cuya entrada clear posee prioridad superior a CLK y a D
Registros en VHDL
Las declaraciones en VHDL de los registros es similar a los flip-flops con la
diferencia de que ahora las entradas son declaradas como vectores,
ejemplo:
Signals
Componentes
Este recurso nos permite crear mdulos que posteriormente podremos utilizar para
agilizar nuestro diseo. Los componentes estn orientados para ser almacenados
en paquetes pero se pueden especificar con archivos dentro de un proyecto.
Para poder utilizar un diseo como un componente hay que declararlo como tal ya
sea en una librera propia o dentro del mdulo donde ser utilizado.
Definicin de la entidad en el
diseo del componente
Asociacin de seales
por posicin:
De RTL a VHDL
VHDLRTL
Aspectos Importantes
Transferencia condicionada:
DV*(F) <= OCLM*(G).
Buses y conexiones:
BUS = OCLM*(H).
Unidad de control.
Estas declaraciones
van al inicio de la
architecture pero
antes de begin
signal f
...
begin
f(1) <=
f(2) <=
...
f(n) <=
: std_logic_vector (1 to n) ;
f1(csl[i],IR[j]) ;
f2(csl[i],IR[j]) ;
fn(csl[i],IR[j])] ;
OV1 ;
OV2 ;
OVn ;
;
Unidad de Control
1. La unidad de control puede realizarse en un archivo separado que luego ser
conectado como componente en el archivo de datos.
2. Usar la herramienta para la implementacin automatizada de mquinas de
estado, de esta forma se realiza usando la cantidad mnima de flip-flops.
Patrn de encabezado:
entity fsm is
Port ( clk, rst, : in STD_LOGIC; -- clk y rst siempre incluidas.
-- Aqu se incluyen las declaracin de otras seales o vectores
-- que influyen en los saltos condicionales (Entradas e IR) ;
fsmout : out STD_LOGIC_VECTOR (1 to n));
-- la salida siempre ser un vector de n bits
-- n = nmero de pasos DELAY de la secuencia de control,
-- note que empieza desde 1 y no desde 0.
end fsm ;
Unidad de Control
Contina
Unidad de Control
Ejemplo:
Implementar en VHDL la secuencia de control obtenida para el ejemplo 4.3 que se
presenta a continuacin:
AHPLMODULE: EJEMPLO43
MEMORY: AR[16];DR[32];CT[2].
EXINPUTS: X[8];READY;WORD.
OUTPUTS: WRITE;ACCEPT;DBUS[32];ADBUS[16].
1 =>(^READY,READY&WORD,READY&^WORD)/(1,2,3).
2 CT<=2$0.
3 (DR[0:7]!DR[8:15]!DR[16:23]!DR[24:31])*(^CT[0]&^CT[1],
^CT[0]&CT[1],CT[0]&^CT[1],CT[0]&CT[1])<= X; ACCEPT=\1\;
CT <= (CT[0]@CT[1],^CT[1]);
=>(^(CT[0]&CT[1]))/(1).
4 =>(^READY,READY&WORD,READY&^WORD)/(4,2,5).
5 AR[0:7]<= X; ACCEPT=\1\.
6 =>(^READY,READY&WORD,READY&^WORD)/(6,2,7).
7 AR[8:15] <= X; ACCEPT=\1\.
8 WRITE=\1\; DBUS = DR; ADBUS = AR;
=>(1).
Solucin:
Paso 1 / El encabezado: Afecta al entity y a la architecture por los nombres en
los terminales de entrada y de salida y dems recursos que utiliza el mdulo.
AHPLMODULE: EJEMPLO43
MEMORY: AR[16];DR[32];CT[2].
EXINPUTS: X[8];READY;WORD.
OUTPUTS: WRITE;ACCEPT;DBUS[32];
ADBUS[16].
entity EJ43 is
Port ( X : in STD_LOGIC_VECTOR (0 to 7);
ready, word, clk, rst : in STD_LOGIC;
ADBUS : out STD_LOGIC_VECTOR (0 to 15);
DBUS : out STD_LOGIC_VECTOR (0 to 31);
wrt, accpt : out STD_LOGIC);
end EJ43;
architecture Behavioral of EJ43 is
signal
signal
signal
signal
ar :
dr :
ct :
C :
std_logic_vector
std_logic_vector
std_logic_vector
STD_LOGIC_VECTOR
(0
(0
(0
(1
to
to
to
to
15);
31);
1);
8);
Solucin:
Paso 2 / La seccin de datos: Recopilar las transferencias de todos los registros
en una sola transferencia incluyendo en las condiciones las seales de control.
2 CT<=2$0.
3 (DR[0:7]!DR[8:15]!DR[16:23]!DR[24:31])*(^CT[0]&^CT[1],
^CT[0]&CT[1],CT[0]&^CT[1],CT[0]&CT[1])<= X; ACCEPT=\1\;
CT <= (CT[0]@CT[1],^CT[1]).
5 AR[0:7]<= X; ACCEPT=\1\.
7 AR[8:15] <= X; ACCEPT=\1\.
8 WRITE=\1\; DBUS = DR; ADBUS = AR.
Resumen de conexiones:
ACCEPT = CSL3 + CSL5 + CSL7;
Solucin:
Paso 3 / La seccin de datos: Expresar las transferencias en los procesos y las
conexiones concurrentes.
Implementacin de CT:
CT*(CSL2+CSL3)<= (2$0!INC(CT))*(CSL2,CSL3)
Solucin:
Paso 3 / La seccin de datos: Expresar las transferencias en los procesos.
Implementacin de DR: para DR se deben separar las diferentes particiones como
registros independientes.
DR(0:7)*(CSL3&^CT[0]&^CT[1]) <= X
El resto de las particiones son similares.
datr: process (clk)
begin
if clk'event and clk
dr(0 to 7) <= x ;
end if;
if clk'event and clk
dr(8 to 15) <= x ;
end if;
if clk'event and clk
dr(16 to 23) <= x;
end if;
if clk'event and clk
dr(24 to 31) <= x;
end if;
end process datr ;
Solucin:
Recopilacin de conexiones:
ACCEPT = CSL3 + CSL5 + CSL7;
Solucin:
Paso 4 / La seccin de control: Definir el archivo para la seccin de control
1
2
3
4
5
6
7
8
=>(^READY,READY&WORD,READY&^WORD)/(1,2,3).
=>(3).
=>(^(CT[0]&CT[1]))/(1).
=>(^READY,READY&WORD,READY&^WORD)/(4,2,5).
=>(6).
=>(^READY,READY&WORD,READY&^WORD)/(6,2,7).
=>(8).
=>(1).
Solucin:
Paso 4 / La seccin de control: Definir el archivo para la seccin de control
Definicin de la mquina de estado.
fsm: process (clk,rst)
begin
if rst = '1' then
q <= s1 ; -- CONTROLRESET(1)
elsif clk'event and clk = '0' then
q <= qnext ;
end if ;
end process fsm ;
1
2
3
4
5
6
7
8
=>(^READY,READY&WORD,READY&^WORD)/(1,2,3).
=>(3).
=>(^(CT[0]&CT[1]))/(1).
=>(^READY,READY&WORD,READY&^WORD)/(4,2,5).
=>(6).
=>(^READY,READY&WORD,READY&^WORD)/(6,2,7).
=>(8).
=>(1).
Contina...
Solucin:
Paso 4 / La seccin de control: Definir el archivo para la seccin de control
Definicin del siguiente estado (continuacin).
when s2 =>
c <= ( 2=>'1', others
qnext <= s3 ;
when s3 =>
c <= ( 3=>'1', others
if ct /= "11" then
qnext <= s1 ;
else
qnext <= s4 ;
end if;
when s4 =>
c <= ( 4=>'1', others
if ready = '0' then
qnext <= s4 ;
elsif ready = '1' and
qnext <= s2 ;
else
qnext <= s5 ;
end if ;
=>'0') ;
=>'0') ;
1
2
3
4
5
6
7
8
=>(^READY,READY&WORD,READY&^WORD)/(1,2,3).
=>(3).
=>(^(CT[0]&CT[1]))/(1).
=>(^READY,READY&WORD,READY&^WORD)/(4,2,5).
=>(6).
=>(^READY,READY&WORD,READY&^WORD)/(6,2,7).
=>(8).
=>(1).
=>'0') ;
Contina...
Solucin:
Paso 5 / La entidad debe ser declarada como un componente antes de que
pueda ser utilizada.
Declaracin de la unidad de control como componente.
architecture Behavioral of EJ43 is
component EJ43CNTL is
Port ( clk, rst, ready, word : in STD_LOGIC;
ct : in STD_LOGIC_VECTOR (0 to 1);
fsmout : out STD_LOGIC_VECTOR (1 to 8));
end component EJ43CNTL ;
signal C : . . .
Decodificador Generico
entity dcdr_n
generic (
Port ( Xi
Yo
end dcdr_n;
is
n : integer := 4);
: in STD_LOGIC_VECTOR (0 to n-1);
: out STD_LOGIC_VECTOR (0 to (2**n)-1));
Ejemplo:
Implementar en VHDL la secuencia de control obtenida para el ejercicio 5.21 que se
presenta a continuacin:
AHPLMODULE: STACK
EXINPUTS: PUSH; POP.
MEMORY: SP[8];M<256>[16].
EXBUSES: DBUS[16].
CLUNITS: INC[8];DEC[8]; DCD[256];BUSFN[16].
1 =>(^(PUSH + POP),PUSH&^POP,^PUSH&POP)/(1,2,4).
2 M*DCD(SP) <= DBUS; SP <= INC(SP).
3 =>(PUSH,^PUSH)/(3,1).
4 SP <= DEC(SP).
5 DBUS = BUSFN(M;DCD(SP));
=>(POP,^POP)/(5,1).
ENDSEQUENCE
CONTROLRESET(1).
END.