reporte vhdl7

8

Click here to load reader

Upload: miguel-angel-pena

Post on 20-Jun-2015

159 views

Category:

Education


0 download

DESCRIPTION

practicas realizadas en la clase de vhdl (programacion ) unidad 2 .

TRANSCRIPT

Page 1: Reporte vhdl7

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

Page 2: Reporte vhdl7

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.

Page 3: Reporte vhdl7

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

Page 4: Reporte vhdl7

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

Page 5: Reporte vhdl7

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;

Page 6: Reporte vhdl7

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.