Programables
y Lenguaje VHDL
SOLUCION:
ENTITY mux2 IS
PORT ( a, b: IN BIT;
selec: IN BIT;
salida: OUT BIT);
END mux2;
ARCHITECTURE comportamental OF mux2 IS
BEGIN
PROCESS (a, b, selec)
BEGIN
Un bloque PROCESS, se considera como una subrutina
IF (selec = ‘0’) THEN cuyas instrucciones se ejecutan secuencialmente cada
vez que algunas de las señales de la lista sensible
salida <= ‘a’; cambia. Esta lista sensible es una lista de señales que se
ELSE suele poner junto a la palabra PROCESS, como en el
ejemplo es (a, b, selec).
salida <= ‘b’;
END IF;
END PROCESS;
END comportamental;
Flujo de datos:
Mux 2x1:
tabla característica:
SELEC SALIDA
0 a
1 b
Expresión de la salida:
Luego el programa en VHDL es:Salida = a(selec) + b(selec)
ENTITY mux2x1 IS
PORT (a,b: in bit;
selec: in bit;
salida: out bit);
END mux2x1;
ARCHITECTURE mux OF mux2x1 IS
BEGIN
Salida <= ((a and (not selec)) or (b and selec));
END mux;
Estructur
al:
Mux 2x1.
ENTITY Mux2x1 IS
PORT (a,b: IN bit;
selec: IN bit;
salida: OUT bit);
END Mux2x1;
--****************************
ARCHITECTURE estructural OF Mux2x1
IS
SIGNAL nosel, ax, bx : bit;
COMPONENT and2
PORT (e1,e2: IN bit; y: OUT bit);
END COMPONENT; BEGIN
u0: inv PORT MAP (e=>selec,
COMPONENT or2 y=>nosel);
PORT(e1,e2: IN bit; y: OUT bit); u1: and2 PORT MAP (e1=>a,
END COMPONENT; e2=>nosel, y=>ax);
u2: and2 PORT MAP (e1=>b,
COMPONENT inv e2=>sel, y=>bx);
PORT(e: IN bit; y: OUT bit); u3: or2 PORT (e1=>ax,
END COMPONENT; e2=>bx,y=>salida);
END estructural;
LOGICA SECUENCIAL
Describir de forma comportamental, el funcionamiento de
un Flip-flop tipo D, el cual posee una entrada de reset y es
activo en alto.
entity ff is
port(d,clk,clr: in bit;
Q: out bit);
end ff;
architecture funcional of ff is
begin
process(clk,clr)
begin
if clr = '1' then
Q <='0';
elsif (clk'event and clk
='1') then
Q <= d;
end if;
end process;
end architecture funcional;
Operadores predefinidos
PROCESO
• La manera más general de describir el comportamiento de
una arquitectura es mediante sentencias tipo proceso
• Un proceso puede contener órdenes secuenciales, pero todos
los procesos se ejecutan concurrentemente
• Las acciones descritas en el cuerpo del proceso se ejecutan
en orden, de la primera a la última
• Cuando se ejecuta la última acción se dice que el proceso
queda suspendido
• Cuando ocurre un cambio en una señal de la lista de
sensibilidades el proceso se inicia de nuevo, volviendo a
ejecutar las acciones de la primera a la última
PROCESO
• Cada proceso se ejecuta una vez al comienzo de la
simulación para determinar el valor inicial de sus salidas
• Algunas sentencias sólo pueden aparecer en un proceso
porque implican ejecución secuencial: estructural de
ejecución secuencial
ENTITY decod42 IS
PORT (f0,f1,f2,f3:IN BIT; salida:OUT BIT_VECTOR(1 DOWNTO 0));
END decod42;
ENTITY biestable_D IS
PORT(D,clk:IN BIT;
Q,Q_menos: OUT BIT); ENTITY BIESTABLE_D IS
END biestable_D; PORT(D,CLK:IN BIT;Q:OUT BIT);
END BIESTABLE_D;
ARCHITECTURE comportamiento OF ARCHITECTURE COMPORTAMIENTO OF
biestable_D IS BIESTABLE_D IS
BEGIN BEGIN
PROCESS(CLK) PROCESS(CLK)
BEGIN BEGIN
IF CLK'EVENT AND clk='1' IF CLK'EVENT AND CLK='1' THEN
THEN CASE D IS
CASE D IS WHEN '1'=>
WHEN '1' => Q<='1';
Q<='1'; WHEN '0' =>
Q_menos<='0'; Q<='0';
WHEN '0' => END CASE;
Q<='0'; END IF;
Q_menos<='1'; END PROCESS;
END CASE; END COMPORTAMIENTO;
END IF;
END PROCESS;
END comportamiento;
Contador ascendente de 4 bits
library ieee;
use ieee.std_logic_1164.all;
use work.std_arith.all;
entity contador is
port(clk: in std_logic;
conta: buffer std_logic_vector(3 downto 0));
end contador;
entity contador is
port(clk, load, reset:in std_logic;
data: in std_logic_vector(3 downto0);
conta:buffer std_logic_vector(3 downto 0));
end contador;
entity FSM is
port(reset, E, clk: in bit; O: out bit);
end FSM;
SINCRONO: process(clk,reset)
begin
if reset ='1' then
ESTADO <= S1;
elsif clk'event and clk='1' then
ESTADO < = SIG_ESTADO;
end if;
end process SINCRONO;
CONTROL: process(ESTADO,E)
begin
case ESTADO is
when S1 =>
O <= '0';
if (E='0') then
SIG_ESTADO <= S2;
else
SIG_ESTADO <= S1;
end if;
when S2 =>
O <= '0';
if (E='0') then
SIG_ESTADO <= S3;
else
SIG_ESTADO <= S1;
end if;
when S3 =>
O <= '0';
if (E='0') then
SIG_ESTADO <= S3;
else
SIG_ESTADO <= S4;
end if;
when S4 =>
O <= '1';
if (E='0') then
SIG_ESTADO <= S2;
else
SIG_ESTADO <= S1;
end if;
end case;
end process control;
end ARCH;
Tutorial Xilinx-ISE
Manejo básico
XILINX ISE
La herramienta XILINX ISE (Integrated
Software Environment) es una
herramienta de diseño profesional, que
mediante la realización de circuitos
esquemáticos, o la utilización de lenguaje
de programación como el VHDL, nos
permite la simulación y la generación de
códigos ejecutables para programar
dispositivos lógicos.
Creación de un nuevo proyecto
• Un proyecto es un conjunto de
ficheros, tales como esquemáticos,
líneas de códigos de programa
(utilizando un lenguaje de
programación), lista de
conexionados, librerías de
componentes, vectores de test para
simulación, etc., seleccionados para
un proyecto específico.
Para crear un nuevo
proyecto
1. File New Project.
2. Project Name Colocar el nombre del proyecto
3. Project Location Elegir la carpeta para guardar el proyecto
4. Top-Level Source Type Seleccionar el método de trabajo,
Schematic o HDL (Si utiliza lenguaje de
programación VHDL)
5. Next
1. Family: Seleccionar según dispositivo a programar, CDLP(XC9500XL CPLDs ) o
FPGA (Spartan3E)
2. Device: CPLD ( XC9572XL) o FPGA(XC3500E)
3. Package: CPLD (PC44) o FPGA (FG320)
4. Preferred Language: VHDL
5. Next
1. New Source: Seleccionar la fuente del proyecto
2. En la nueva ventana que se despliega seleccionar: Shematic
(Esquemáticos) o VHDL Module según el método seleccionado
anteriormente.
3. File Name: Escriba el nombre del archivo
4. Next
1. Entity Name: Digite el nombre de la Entidad.
2. Architecture Name: Digite un nombre para la arquitectura (ojalá nombres
coherentes con el proyecto)
3. Port Name: Asigne el nombre de los puertos de entradas y salidas
4. Selecione la opción una de las opciones, in, out, inout según el diseño del
proyecto.
5. Si utilza vectores de entrada o salida habilite la opción de Bus y digite cual es
el bit mas significativo y el menos significativo (Por ejemplo si el vector es de 8
bits, entonces MSB = 7 y LSB = 0)
6.Next
1. Resumen del proyecto para su revisión, si existe
algún error oprima Back para regresar y corregir
2. Presione el botón Finish
Opción para crear un nuevo proyecto y un nuevo
archivo fuente, en nuestro caso oprima Next, Next.
Ventana donde se muestra las especificaciones del
proyecto.
Oprima Finish.
Empiece a desarrollar el programa (arquitectura) utilizando el
lenguaje VHDL y después proceda a generar el archivo de
programación (Generate Programming File)
(Ejemplo demostrativo)
Programa totalmente terminado y
compilado