reporte vhdl7
DESCRIPTION
practicas realizadas en la clase de vhdl (programacion ) unidad 2 .TRANSCRIPT
SEP DGEST SNEST
INSTITUTO TECNOLÓGICO DE MATAMOROS
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Diseño Digital con VHDL
Equipo:
Alumno(s): Núm. de control:
Mario Arturo Cruz Colunga 11260077
Miguel Angel Fierros Peña 11260081
Hermenegildo Martínez de la Cruz 11260095
Jorge Alejandro Reyes Torres 11260108
H. MATAMOROS, TAM. 16 de Octubre del 2013
Practica 7
Objetivo:
Esta práctica implementará un contador de 3 bits descendente/ascendente usando el Aldec HDL y máquinas de estado finito.
Marco teórico:
Un contador ascendente/descendente (up/down)
Es aquel capaz de procesar en cualquier dirección a lo largo de una cierta secuencia. Un contador ascendente/descendente, algunas veces también denominado contador bidireccional, puede tener cualquier secuencia de estados especificada. Un contador binario de 3 bits que avanza en modo ascendente a través de la secuencia (0,1,2,3,4,5,6,7) y que luego pueda invertirse para recorrer la secuencia en sentido contrario (7,6,5,4,3,2,1,0) es un ejemplo de un modo de operación secuencial ascendente/descendente.
Máquina de estados
Se denomina máquina de estados finitos (FSM por finite state machine) si el conjunto de estados de la máquina es finito, este es el único tipo de máquinas de estados que podemos modelar en un computador en la actualidad; debido a esto se suelen utilizar los términos máquina de estados y máquina de estados finitos de forma intercambiable. Sin embargo un ejemplo de una máquina de estados infinitos sería un computador cuántico esto es debido a que los Qubit que utilizaría este tipo de computadores toma valores continuos, en contraposición los bits toman valores discretos (0 ó 1). Otro buen ejemplo de una máquina de estados infinitos es una Máquina universal de Turing la cual se puede definir teóricamente con una "cinta" o memoria infinita.
La representación de una máquina de estados se realiza mediante un Diagrama de estados, sin embargo también es posible utilizar un Diagrama de flujo.
Material:
Laptop
Kit spartan3e
Software aldec HDL, xilinx ISE, adept.
Procedimiento:
Se crea nuevo proyecto en aldec HDL Se crea un diagrama de estados
count1/001/
count0/000/
Entity : counterArchitecture: counter_arch
No clock enablece
clk
Sreg0
count5/101/
count4/100/
count3/011/
count2/010/
B
A
X
clk
count7/111/
count6/110/
C
A<='0';B<='0';C<='0'A<='0';B<='0';C<='0'
A<='0';B<='0';C<='1'A<='0';B<='0';C<='1'
A<='0';B<='1';C<='0'A<='0';B<='1';C<='0'
A<='1';B<='0';C<='0'A<='1';B<='0';C<='0'
A<='1';B<='0';C<='1'A<='1';B<='0';C<='1'
A<='1';B<='1';C<='0'A<='1';B<='1';C<='0'
A<='1';B<='1';C<='1'A<='1';B<='1';C<='1'
X='0'
X='0' X='0'
X='1'
X='1'
X='1'
X='1'
X='0'X='1'
X='1'
X='1'
X='1'
X='0'
X='0'
X='0'
X='0'
A<='0';B<='1';C<='1'A<='0';B<='1';C<='1'
Se escribe el código VHDL en el nuevo proyecto
Divisorreloj
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity divisorreloj isport(clkin: in std_logic;reset: in std_logic;clkout: out std_logic);
end divisorreloj; architecture clkdiv of divisorreloj issignal q: std_logic_vector(23 downto 0);begin
process(clkin, reset)begin
if reset='1' then q <= x"000000";elsif clkin'event and clkin ='1' thenq <= q + 1;
end if;end process;clkout <= q(23); end clkdiv;
Contador3bit
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity contadorconreloj is
port(CLK50M, UPDOWN, reset: in std_logic;anodo7seg: out std_logic_vector(3 downto 0);display:out std_logic_vector(6 downto 0));
end contadorconreloj;architecture Arq_contadorconreloj of contadorconreloj iscomponent divisorreloj
port(clkin: in std_logic;reset: in std_logic;clkout: out std_logic); --modifique algunos cosas por mi reloj, si
pongo el del pdf modificar CLK, pulsooutend component; component counter
port(clk, X: in std_logic;A,B,C: out std_logic);
end component;component BCD_A_7Seg
port(BCD: in std_logic_vector(3 downto 0);Seg: out std_logic_vector(6 downto 0));
end component;signal CLK1: std_logic;signal B: std_logic_vector(3 downto 0);begin
B(3) <= '0';anodo7seg <= "1110";U1: divisorrelojport map(clkin => CLK50M, reset => reset, clkout => CLK1);U2: counter port map(clk => CLK1, X => UPDOWN, A => B(2), B => B(1), C=>B(0));U3: BCD_A_7Segport map (BCD => B, Seg => display );
end Arq_contadorconreloj;bcd7seglibrary ieee;
use ieee.std_logic_1164.all; entity BCD_A_7Seg is port(BCD: in std_logic_vector (3 downto 0); seg : out std_logic_vector(6 downto 0)); end BCD_A_7Seg;
architecture BCD_A_7Seg of BCD_A_7Seg is begin
DecodificadorProc: process (BCD) -- corre el proceso si la entrada BCD cambia. begin
case BCD is -- Catodo valor bajo -- abcdefg
when "0000" => seg <= "0000001"; --llamaremos seg provisionalmentewhen "0001" => seg <= "1001111";when "0010" => seg <= "0010010"; when "0011" => seg <= "0000110"; when "0100" => seg <= "1001100"; when "0101" => seg <= "0100100"; when "0110" => seg <= "0100000"; when "0111" => seg <= "0001111"; when "1000" => seg <= "0000000"; when "1001" => seg <= "0000100"; when "1010" => seg <= "1110010"; when "1011" => seg <= "1100110"; when "1100" => seg <= "1011100"; when "1101" => seg <= "0110100"; when "1110" => seg <= "1110000"; when others => seg <= "1111111"; end case; end process; end BCD_A_7Seg;
Observaciones y conclusiones:
El programa se realizó con algunas dificultades porque se cambiaron algunos nombres del proyecto original, pero después de detectarse los errores se realizaron las correcciones y terminamos la práctica satisfactoriamente.