1. Módulo de desarrollo Spartan 3 STARTER KIT con un FPGA

Anuncio
Universidad Simón Bolívar
Departamento de Electrónica y Circuitos
EC1723, Circuitos Digitales
Trimestre Septiembre-Diciembre 2008
Realización: Semana 8. Miércoles 5 de Noviembre
Laboratorio – Práctica 4: Diseño e implementación de una máquina de estados en el SPARTAN 3.
Objetivo:
1. Obtener un reloj de 1Hz a partir del oscilador de 50 MHz presente en el módulo de desarrollo
SPARTAN 3 STARTER KIT.
2. Diseñar un contador que cuente siguiendo los números del carnet de los integrantes del grupo.
El contador tendrá una señal de entrada “A/B” que le permitirá seleccionar el carnet a presentar.
3. Implementar un DRIVER para los 4 DISPLAYS MULTIPLEXADOS presentes en el módulo de
desarrollo SPARTAN 3 STARTER KIT .
Actividades previas requeridas:
1. Diseñar el contador de los 2 CARNETS con las especificaciones dadas.
2. Simular el funcionamiento del CONTADOR de CARNETS en el ISE.
3. Implementar en el ISE las 3 ETAPAS del diseño.
Material Utilizado:
1. Módulo de desarrollo Spartan 3 STARTER KIT con un FPGA xc3s200 ft256
2. Software de diseño XILINX ISE versión 10.1
Especificaciones del diseño a implementar:
Su diseño tendrá 3 etapas:
Etapa 1. “DIVISOR de FRECUENCIA” que le permitirá obtener el reloj de 1Hz para el contador.
Etapa 2. “CONTADOR de CARNET”.
Etapa 3. “DRIVER del DISPLAY”.
Especificaciones de la Etapa 1 “DIVISOR de FRECUENCIA:
Las tres etapas del diseño deben ser sincrónicas; es decir, todas deben utilizar el mismo reloj. Para bajar la
frecuencia en cada etapa se deben crear la señales de CE (CLOCK ENABLE) adecuadas.
Si se desea que el “CONTADOR de CARNET” vaya a un ritmo de 1Hz., el DIVISOR de FRECUENCIA debe
generar un pulso de 20 nanosegundos, una vez por segundo, que servirá de CE (CLOCK ENABLE) al
“CONTADOR de CARNET”.
EC1723 – Circuitos Digitales – Práctica 4
Septiembre – Diciembre 2008
Página 1 de 5
Se sugiere implementar el “DIVISOR de FRECUENCIA” en VHDL.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Divisor_freq_VHDL is
Port ( CLK_50Mhz : in STD_LOGIC;
Cuenta : out STD_LOGIC_VECTOR (25 downto 0);
CE_1seg : out STD_LOGIC);
end Divisor_freq_VHDL;
architecture Behavioral of Divisor_freq_VHDL is
signal temp :STD_LOGIC_VECTOR (25 downto 0):= "00000000000000000000000000";
begin
process (CLK_50Mhz)
begin
if CLK_50Mhz='1' and CLK_50Mhz'event then
temp <= temp + 1;
if temp = "10111110101111000001111111" then CE_1seg <= '1';
temp <="00000000000000000000000000";
else
CE_1seg <= '0';
end if;
end if;
Cuenta<= temp;
end process;
end Behavioral;
Código en VHDL del Divisor de frecuencia
Símbolo esquemático
Especificaciones de la Etapa 2 “CONTADOR de CARNET:
1.
2.
3.
4.
5.
6.
7.
Reset asíncrono.
Reloj del contador, 1 Hz.
FLIP-FLOP tipo D.
Una señal de entrada A/B, para seleccionar el carnet de un miembro del grupo a presentar.
Máquina tipo Moore.
Los estados codificados de forma que el circuito lógico de salida sea el mínimo posible.
Los números del carnet se presentan en el “DISPLAY 0” del módulo de desarrollo con los DISPLAYS
restantes apagados.
8. El contador se detiene después de presentar todos los números de un carnet y queda en un estado
en el que muestra en los 4 displays, los 4 números que le fueron asignados en Práctica 2.
Observe que la situación deseable es que asigne a los ESTADOS un valor que coincida con las SALIDAS
para que el circuito lógico de salida sea mínimo. Esto no será posible cuando en su carnet exista un número
repetido.
EC1723 – Circuitos Digitales – Práctica 4
Septiembre – Diciembre 2008
Página 2 de 5
La figura muestra un ejemplo del
Diagrama de Estados del
“Contador de Carnets” de un grupo
con Carnets 03-17925 y 03-24988.
y 2,4,A,b como números asignados
en Practica 2.
En los casos en que exista un número que se repita, en un mismo carnet, Ud. debe codificar el
estado de forma que se haga mínimo el circuito lógico de salida.
Especificaciones de la Etapa 1 “DRIVER del DISPLAY:
1. En este diseño solo se encenderá el “Display 0”, salvo en el último estado en que la
máquina se detiene y se encienden los 4 displays con los valores de PRACTICA 2.
2. En los LEDS debe presentarse el valor de los estados.
A continuación se le da una versión del DRIVER de los 4 displays de 7 segmentos, que no coincide
exactamente con el circuito que Ud. requerirá, pero que le puede orientar en su diseño.
EC1723 – Circuitos Digitales – Práctica 4
Septiembre – Diciembre 2008
Página 3 de 5
EC1723 – Circuitos Digitales – Práctica 4
Septiembre – Diciembre 2008
Página 4 de 5
Driver de 4 displays multiplexados en VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Drv_4disp_mux_VHDL is
Port ( sel : in STD_LOGIC_VECTOR (1 downto 0);
D0 : in STD_LOGIC_VECTOR (3 downto 0);
D1 : in STD_LOGIC_VECTOR (3 downto 0);
D2 : in STD_LOGIC_VECTOR (3 downto 0);
D3 : in STD_LOGIC_VECTOR (3 downto 0);
an : out STD_LOGIC_VECTOR (3 downto 0);
seg : out STD_LOGIC_VECTOR (7 downto 0));
end Drv_4disp_mux_VHDL;
architecture Behavioral of Drv_4disp_mux_VHDL is
signal Y: STD_LOGIC_VECTOR (3 downto 0);
begin
process (sel,D0,D1,D2,D3)
begin
case sel is
when "00" => Y <= D0;
an<= "1110";
when "01" => Y <= D1;
an<= "1101";
when "10" => Y <= D2;
an<= "1011";
when "11" => Y <= D3;
an<= "0111";
when others => Y <= D0;
end case;
end process;
with Y SELect
seg<= "11111001" when "0001",
"10100100" when "0010",
"10110000" when "0011",
"10011001" when "0100",
"10010010" when "0101",
"10000010" when "0110",
"11111000" when "0111",
"10000000" when "1000",
"10010000" when "1001",
"10001000" when "1010",
"10000011" when "1011",
"11000110" when "1100",
"10100001" when "1101",
"10000110" when "1110",
"10001110" when "1111",
"11000000" when others;
end Behavioral;
EC1723 – Circuitos Digitales – Práctica 4
Septiembre – Diciembre 2008
--1
--2
--3
--4
--5
--6
--7
--8
--9
--A
--b
--C
--d
--E
--F
--0
Página 5 de 5
Descargar