Sunteți pe pagina 1din 9

DISEÑO DIGITAL UNMSM

UNIVERSIDAD NACIONAL MAYOR DE SAN


MARCOS
(Universidad del Perú, DECANA DE AMÉRICA)
FACULTAD DE INGENIERIA ELECTRÓNICA Y ELÉCTRICA
E.A.P DE INGENIERÍA ELECTRÓNICA

Tema: Diseño de un mensaje en


desplazamiento (Scroll) en FPGA

Alumno: Jhonatan Alexander Juño Garcia

Código: 12190016

Profesor: Ing. Alfredo Granados Ly


DISEÑO DIGITAL 17-5-2016

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS


(Universidad del Perú, DECANA DE AMÉRICA)
FACULTAD DE INGENIERIA ELECTRÓNICA Y ELÉCTRICA
E.A.P DE INGENIERÍA ELECTRÓNICA

INFORME FINA # 4
SECUENCIA DE PALABRAS

I. OBJETIVO
 Utilizar el estilo estructural para describir el comportamiento de un circuito.
II. MATERIALES Y EQUIPOS
 Placa modulo con FPGA Altera Cyclone I
 PC con la herramienta de síntesis MAX Plus II y el entorno de desarrollo
Quartus II de Altera

III. PROCEDIMIENTO DE DISEÑO


1. Análisis del problema

El problema planteado es diseñar un circuito que maneje la matriz de leds de 8x8


y que en la misma se muestre un mensaje con desplazamiento (Scroll) con la frase
FIEE-UNMSM, para este diseño vamos a separar el circuito en cuatro partes, lo
que nos ayudara a poder manejar mejor la complejidad del mismo y poder hacer
diseño más ordenado.

El circuito tiene los siguientes componentes: Divisor de frecuencias, Multiplexor


para matriz, circuito de control de direcciones y una memoria tipo ROM
implementada en el fpga. Analizaremos cada una de las partes.

El divisor de frecuencias el ya conocido contador que nos permite reducir la


frecuencia del clock a una que sea adecuada a nuestro circuito, este clock será
importante para las otras etapas.

Para lograr que se visualice un mensaje en la matriz hay que lograr una perfecta
sincronización entre las filas y columnas, de esta forma se logra encender un
punto de la matriz, y combinando de una manera adecuada, con un multiplexado
adecuado, se lograra visualizar diferentes caracteres en la matriz.

El circuito de multiplexado de matriz, este circuito se encargará de activar


las columnas de la matriz, esto lo hará a una velocidad adecua que nos permita
poder visualizar si parpadeo las letras en la misma, este multiplexado es muy
similar al que se hace en el display de 7 segmentos.

El control de Direcciones: Este circuito nos provea de una cadena de 7 bits que
tendrá la dirección para acceder a los datos de la memoria, además de proveer la
direcciones lo hará de tal forma desplazándose por la memoria y apuntando a los
datos que se requieran para formar las palabras y su respectivo desplazamiento,

1
DISEÑO DIGITAL 17-5-2016

esto lo hará sincronizado con el multiplexado, de esta forma podemos conseguir


mostrar las palabras y ver el desplazamiento de las mismas.

La memoria, es quizás una de las partes más importantes de este circuito. En la


memoria se encuentran los datos de las filas, con la información de la secuencia
de encendido de cada fila por pulso de reloj, esta memoria se construyó de la
siguiente forma:

Direccion dato dato hex


0 11111111 FF
1 11111111 FF
2 11111111 FF
3 11111111 FF
4 11111111 FF
5 11111111 FF
6 11111111 FF
7 11111111 FF
8 00000000 00
9 01101111 6F
10 01101111 6F
11 01101111 6F
12 11111111 FF
13 01111110 7E
14 00000000 00
15 01111110 7E
16 11111111 FF
17 00000000 00
18 01101110 6E
19 01101110 6E
20 01101110 6E
21 11111111 FF
22 00000000 00
23 01101110 6E
24 01101110 6E
25 01101110 6E
26 11111111 FF
27 11100111 E7
28 11100111 E7
29 11100111 E7
30 11111111 FF
31 00000000 00
32 11111110 FE
33 11111110 FE
34 00000000 00
35 11111111 FF

2
DISEÑO DIGITAL 17-5-2016

36 00000000 00
37 11011111 DF
38 11101111 EF
39 11110111 F7
40 11111011 FB
41 00000000 00
42 11111111 FF
43 00000000 00
44 11011111 DF
45 11101111 EF
46 11011111 DF
47 00000000 00
48 11111111 FF
49 10011101 9D
50 01101110 6E
51 01101110 6E
52 01110110 76
53 10111001 B9
54 11111111 FF
55 00000000 00
56 11011111 DF
57 11101111 EF
58 11011111 DF
59 00000000 00
60 11111111 FF
61 11111111 FF
62 11111111 FF
63 11000011 C3
64 10000001 81
65 00000000 00
66 00000000 00
67 00011000 19
68 10111101 BD
69 11011011 DB
70 11111111 FF
71 11111111 FF
72 11111111 FF
73 11111111 FF
74 11111111 FF
75 11111111 FF
76 11111111 FF
77 11111111 FF

3
DISEÑO DIGITAL 17-5-2016

Una vez establecido todos que va a ir almacenados en memoria se procede a su


construcción, el cual se verá en el codigo VHDL.

2. Diagrama de bloques del circuito

Una vez hecho el análisis se propone el siguiente diagrama de bloques del circuito
a implementar:

3. Implementación del Circuito en VHDL

COMPONENTE PRINCIPAL

LIBRARY IEEE;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY SCROLL_UNMSM IS

PORT(CLK :IN STD_LOGIC;


DAT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
MULTIX:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END SCROLL_UNMSM;

ARCHITECTURE SOLUCION OF SCROLL_UNMSM IS

SIGNAL X :STD_LOGIC;
SIGNAL ACCESO:STD_LOGIC_VECTOR(6 DOWNTO 0);

COMPONENT CONTROL_DIR

PORT(CLK:IN STD_LOGIC;
DIR:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END COMPONENT;

COMPONENT MULTI_MATRIZ

PORT(CLK:IN STD_LOGIC;
MULTIPLEXADO8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;

4
DISEÑO DIGITAL 17-5-2016

COMPONENT DIVISOR
PORT ( CLK: IN STD_LOGIC;
CLKOUT: OUT STD_LOGIC);
END COMPONENT;

COMPONENT MEM_UNMSM
PORT(DIREC:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
DATO:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;

BEGIN

U0: DIVISOR PORT MAP(CLK,X);


U1: MULTI_MATRIZ PORT MAP(X,MULTIX);
U2: CONTROL_DIR PORT MAP(X,ACCESO);
U3: MEM_UNMSM PORT MAP(ACCESO,DAT);
END SOLUCION;

DIVISOR:::::::::::::::.
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;

Entity DIVISOR is
Port ( clk: in std_logic;
clkout: out std_logic);

end DIVISOR;

Architecture solucion of DIVISOR is


signal contador :std_logic_vector(20 downto 0);
signal clk_out : std_logic;
begin

Process(clk)
Begin
if clk='1' and clk'event then
contador<=contador+1;
if contador=60000 then

contador <=(others =>'0');


clk_out<= NOT clk_out;

end if;
end if;

5
DISEÑO DIGITAL 17-5-2016

end Process;
clkout<=clk_out;

end solucion;

MULTI_MATRIZ

Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity multi_matriz is

port(CLK:in std_logic;
MULTIPLEXADO8:out std_logic_vector(7 downto 0));
end multi_matriz;

architecture solucion of multi_matriz is

signal contador:std_logic_vector(2 downto 0);

begin
process(CLK)
begin
if CLK='1' and CLK'event then
contador<=contador+1;
end if;
end process;

with contador select MULTIPLEXADO8<="11111110" when "000",


"11111101" when "001",
"11111011" when "010",
"11110111" when "011",
"11101111" when "100",
"11011111" when "101",
"10111111" when "110",
"01111111" when others;
end solucion;

CONTROL DIRECCION
library ieee;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

6
DISEÑO DIGITAL 17-5-2016

entity control_dir is

port(CLK:in std_logic;
dir:out std_logic_vector(6 downto 0));
end control_dir;

architecture solucion of control_dir is

signal repeticion:std_logic_vector(4 downto 0);


signal recorrido,conteo8:std_logic_vector(6 downto 0);

begin
process(CLK)
begin
if CLK='1' and CLK'event then
conteo8<=conteo8+1;
if conteo8=7 then
conteo8<="0000000";
repeticion<=repeticion+1;
if repeticion=9 then
repeticion<="00000";
recorrido<=recorrido+1;
if recorrido=70 then
recorrido<="0000000";
end if;
end if;
end if;
end if;
dir<=conteo8+recorrido;
end process;
end solucion;

MEMORIA:::::::::::

library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity mem_UNMSM is
port(DIREC:in std_logic_vector(6 downto 0);
DATO:out std_logic_vector(7 downto 0));
end mem_UNMSM ;

7
DISEÑO DIGITAL 17-5-2016

architecture solucion of mem_UNMSM is


type rom_type is array (0 to 77) of std_logic_vector (7 downto 0);
signal ROM :
rom_type:=(X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"6F",

X"6F",X"6F",X"FF",X"7E",X"00",X"7E",X"FF",X"00",X"6E",X"6E",

X"6E",X"FF",X"00",X"6E",X"6E",X"6E",X"FF",X"E7",X"E7",X"E7",

X"FF",X"00",X"FE",X"FE",X"00",X"FF",X"00",X"DF",X"EF",X"F7",

X"FB",X"00",X"FF",X"00",X"DF",X"EF",X"DF",X"00",X"FF",X"9D",

X"6E",X"6E",X"76",X"B9",X"FF",X"00",X"DF",X"EF",X"DF",X"00",

X"FF",X"FF",X"FF",X"C3",X"81",X"00",X"00",X"19",X"BD",X"DB",

X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF");

begin
DATO<=ROM(conv_integer(DIREC));
end solucion;

4. Prueba del circuito en módulo FPGA Altera Cyclone I


.

S-ar putea să vă placă și