Práctica2 VLSI
Práctica2 VLSI
Práctica2 VLSI
Facultad de Ingeniería
Grupo: 3
1
Contenido
Parte básica. ........................................................................................................................................................................ 3
Código: ........................................................................................................................................................................... 3
Parte complementaria. ........................................................................................................................................................ 5
Primera actividad complementaria: ................................................................................................................................ 5
Códigos: .......................................................................................................................................................................... 5
Segunda actividad complementaria: ............................................................................................................................... 8
Código: ........................................................................................................................................................................... 8
Conclusión. ....................................................................................................................................................................... 11
2
Parte básica.
Como ya se observó en la primera práctica, el código que se nos presenta funciona de manera
correcta en las tarjetas con los displays de 7 segmentos conectados de forma multiplexada, se
realizaron las modificaciones al mismo ya que en mi caso tengo la tarjeta DE10 lite y esta
tarjeta presenta los displays con conexión directa. También se observa que el código original
contiene más displays de los que la tarjeta DE10 lite cuenta. A continuación el código:
Código:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity corri is
Port( reloj : in std_logic;
display1, display2, display3, display4,display5,
display6 : buffer std_logic_vector (6 downto 0));
end corri;
begin
divisor : process(reloj)
variable CUENTA: std_logic_vector(27 downto 0) := X"0000000";
begin
if rising_edge (reloj) then
if CUENTA =X"48009E0" then
cuenta := X"0000000";
else
cuenta := cuenta+1;
end if;
end if;
segundo <=CUENTA(22);
end process;
With Q select
display1 <= "0000110" when "0000", --E
"0101011" when "0001", --n
"1111111" when "0010", --espacio
"1000111" when "0011", --L
"0001000" when "0100", --A
"1111111" when "0101", --espacio
"1000000" when "0110", --O
"1000111" when "0111", --L
"0001000" when "1000", --A
"1111111" when others; --espacios
FF3 : process(segundo)
begin
if rising_edge (segundo) then
display4 <= display3;
end if;
end process;
FF4 : process(segundo)
begin
if rising_edge (segundo) then
display5 <= display4;
end if;
end process;
4
FF5 : process(segundo)
begin
if rising_edge (segundo) then
display6 <= display5;
end if;
end process;
end bhv;
Parte complementaria.
Se nos pide la realización del multiplexado para mandar las señales a 4 displays de 7
segmentos. La estructura es la siguiente:
Para ello se realizaron dos códigos, uno para la estructura pedida y el otro para ponerlo a
prueba mediante un port map. Estos códigos se realizaron sin perder de vista la cuestión del
uso de la tarjeta DE10 lite y el tema de los displays de 7 segmentos.
Códigos:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity Mux4disp is
Port(clk: in std_logic;
D0: in std_logic_vector(6 downto 0);
D1: in std_logic_vector(6 downto 0);
D2: in std_logic_vector(6 downto 0);
D3: in std_logic_vector(6 downto 0);
AN: out std_logic_vector(3 downto 0);
5
L: out std_logic_vector(6 downto 0));
end Mux4disp;
begin
case Qr is
when "00" =>
AN <= "0001";
L <= D0;
when "01" =>
6
AN <= "0010";
L <= D1;
when "10" =>
AN <= "0100";
L <= D2;
when others =>
AN <= "1000";
L <= D3;
end case;
end process;
end bhv;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity UseMux4disp is
Port (clk : in std_logic;
AN: inout std_logic_vector(3 downto 0);
L: out std_logic_vector(6 downto 0));
end UseMux4disp;
component Mux4Disp is
Port(
clk : in std_logic;
D0: in std_logic_vector(6 downto 0);
D1: in std_logic_vector(6 downto 0);
D2: in std_logic_vector(6 downto 0);
D3: in std_logic_vector(6 downto 0);
AN: out std_logic_vector(3 downto 0);
L: out std_logic_vector(6 downto 0));
end component;
begin
Mux: Mux4Disp port map (
clk => clk,
D0 => "0001001", --0
7
D1 => "1000000", --1
D2 => "1000111", --2
D3 => "0100000", --3
AN => AN,
L => L);
end bhv;
Para finalizar, se nos pide la modificación de la parte básica para que dada la señal lógica ‘1’
muestre un mensaje y para ‘0’ otro. En este caso se muestra mi número de cuenta para sw =
‘0’ y parte de mi nombre completo cuando es ‘1’ (alan cano). Esto se logró mediante un if
else.
Código:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity complemen2 is
Port( reloj : in std_logic;
sw: in std_logic;
display1, display2, display3, display4,display5,
display6 : buffer std_logic_vector (6 downto 0)
);
end complemen2;
begin
divisor : process(reloj)
variable CUENTA: std_logic_vector(27 downto 0) := X"0000000";
begin
if rising_edge (reloj) then
if CUENTA =X"48009E0" then
cuenta := X"0000000";
else
cuenta := cuenta+1;
8
end if;
end if;
segundo <=CUENTA( 22);
end process;
else
case Q is
when "0000" => display1 <= "0100000"; --a
when "0001" => display1 <= "1000111"; --l
when "0010" => display1 <= "0100000"; --a
when "0011" => display1 <= "1001000"; --n
when "0100" => display1 <= "1111111"; --espacio
when "0101" => display1 <= "1000110"; --c
when "0110" => display1 <= "0100000"; --a
when "0111" => display1 <= "1001000"; --n
when "1000" => display1 <= "1000000"; --o
when others => display1 <= "1111111"; --espacios
end case;
end if;
9
end process;
FF3 : process(segundo)
begin
if rising_edge (segundo) then
display4 <= display3;
end if;
end process;
FF4 : process(segundo)
begin
if rising_edge (segundo) then
display5 <= display4;
end if;
end process;
FF5 : process(segundo)
begin
if rising_edge (segundo) then
display6 <= display5;
end if;
end process;
end bhv;
10
Conclusión.
En esta práctica no me costó mucho trabajo su realización ya que no observé que tomará
tantos parámetros como en la primera práctica, por lo tanto, se realizó en la misma clase
todos los códigos. La práctica sigue reforzando conceptos vistos en la materia antecesora y el
diseño de bloques funcionales va quedando de manera correcta.
11