Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


VLSI LABORATORIO PRACTICAS, Ejercicios de VLSI

VLSI LABORATORIO PRACTICAS UNAM FI

Tipo: Ejercicios

2022/2023

Subido el 27/04/2026

eddie-jovany-gomez-moctezuma
eddie-jovany-gomez-moctezuma 🇲🇽

4 documentos

1 / 11

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
UNIVERSIDAD NACIONAL
AUTÓNOMA DE MÉXICO
FACULTAD DE INGENIERÍA
DISEÑO DIGITAL VLSI
PRÁCTICA NO. 2
DISEÑO DE REGISTROS DE CORRIMIENTO EN
CASCADA
PROFESOR: RAFAEL PRIETO MELÉNDEZ
ALUMNO: RAMOS VILLASEÑOR CÉSAR MAURICIO
SEMESTRE: 2020-1
GRUPO DE TEORÍA: 3
FECHA: 28/08/19
pf3
pf4
pf5
pf8
pf9
pfa

Vista previa parcial del texto

¡Descarga VLSI LABORATORIO PRACTICAS y más Ejercicios en PDF de VLSI solo en Docsity!

UNIVERSIDAD NACIONAL

AUTÓNOMA DE MÉXICO

FACULTAD DE INGENIERÍA

DISEÑO DIGITAL VLSI

PRÁCTICA NO. 2

DISEÑO DE REGISTROS DE CORRIMIENTO EN

CASCADA

PROFESOR: RAFAEL PRIETO MELÉNDEZ

ALUMNO: RAMOS VILLASEÑOR CÉSAR MAURICIO

SEMESTRE: 2020 - 1

GRUPO DE TEORÍA: 3

FECHA: 28 /0 8 /

Objetivos Demostrar a los estudiantes mediante el diseño de registros de corrimiento en cascada, que las declaraciones secuenciales requieren de un orden para ser ejecutadas, utilizando las estructuras de control if-then-else o case dentro de un proceso. Especificaciones Utilizando un FPGA y 8 displays de 7 segmentos, diseñar un sistema digital que despliegue un mensaje que se vea recorrer en los displays. La figura 2.1 muestra el diagrama de bloques del sistema Registros de Corrimiento en Cascada. Diagrama bloques Dentro del sistema digital Registros de Corrimiento en Cascada, se tienen varios bloques funcionales, los cuales internamente ejecutan instrucciones en forma secuencial. La figura 2.2 muestra los bloques funcionales del sistema.

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; rapido <= cuenta(10); end process; CONTRAPID: process (rapido) variable CUENTA: STD_LOGIC_VECTOR(1 downto 0) := "00"; begin if rising_edge (rapido) then CUENTA := CUENTA + 1; end if; Qr <= CUENTA; end process; seledisplay: process (Qr) BEGIN case Qr is when "00" => AN<= "1110"; Qs <= "1111001";--D0; when "01" => AN<= "1101"; Qs <= "0100100";--D1; when "10" => AN<= "1011"; Qs <= "0110000";--D2; when others => AN<= "0111"; Qs <= "0011001";--D3; end case; end process; L <= Qs; end Behavioral;

Adjuntamos el funcionamiento de este bloque en el apartado Funcionamiento

Actividad 3. Elección de mensaje gracias al multiplexor. En esta actividad se desarrolló la implementación de poder elegir entre dos mensajes a mostrar. La elección se lleva a cabo por medio de un switch en la tarjeta, el cuál actúa en el código como entrada para decidir qué mensaje multiplexear. Se anexa el código:

library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity P2 is Port ( reloj : in STD_LOGIC; AN : out STD_LOGIC_VECTOR (3 downto 0); Qs : out STD_LOGIC_VECTOR (6 downto 0); opc : in STD_LOGIC); end P2; architecture Behavioral of P2 is signal segundo : std_logic; signal Q : std_logic_vector(3 downto 0):="0000"; signal display1, display2, display3, display4 : std_logic_vector(6 downto 0) := "0000000"; signal rapido : std_logic; signal Qr : std_logic_vector(1 downto 0); 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; rapido <= cuenta(10); segundo <=CUENTA(22); end process; Comenzamos el funcionamiento del código con un divisor de frecuencia, para apreciar los cambios en el multiplexeo. Así definimos dos señales, la de segundo y la de rápido, dos relojes que utilizamos para distintos procesos. CONTRAPID: process (rapido) variable CUENTA: STD_LOGIC_VECTOR(1 downto 0) := "00"; begin if rising_edge (rapido) then CUENTA := CUENTA + 1; end if; Qr <= CUENTA; end process; seledisplay: process (Qr) BEGIN

display1<="1111111"; end case; else case Q is when "0000"=> display1<="1001000"; --M when "0001"=> display1<="0001000"; --A when "0010"=> display1<="1000001"; --U when "0011"=> display1<="1111111"; when "0100" => display1<="0001100";-- P when "0101"=> display1<="0001000"; -- A when "0110"=> display1<="1000110";-- C when "0111"=> display1<="1000000"; --O when others => display1<="1111111"; end case; end if; end process; Aquí implementamos ambos mensajes, decidimos el mensaje haciendo uso de un if sobre la señal opc que es el switch que indicará qué mensaje desplegar. El primer mensaje dice en la ola y el segundo mau paco. Observar que el corrimiento se logra gracias a la señal segundo y la señal Q , pues cada segundo Q aumenta su valor, haciendo que cambie la letra a despegar. FF1 : process (segundo) begin if rising_edge (segundo) then display2 <= display1; end if; end process; FF2 : process (segundo) begin if rising_edge (segundo) then display3 <= display2; end if; end process; FF3 : process (segundo) begin if rising_edge (segundo) then

display4 <= display3; end if; end process; end Behavioral; Aquí cambiamos el valor de cada display, aquí finalmente se da alusión al corrimiento, pues al asignar el display anterior al siguiente, creamos esa sensación de que las letras están corriendo en una dirección. Haciendo ayuda del multiplexor y la cuenta, solo resta esto.

El funcionamiento se anexa en la siguiente sección.

Funcionamiento Funcionamiento del multiplexor: Podemos observar como los valores asignados a cada vector que entran al multiplexor son desplegados en cada display. Debido a que, en el caso del corrimiento específicamente, no se observa de la mejor manera en imágenes, se adjunta el siguiente vídeo con el funcionamiento. Funcionamiento del doble corrimiento: https://youtu.be/3H-hHiOzywE Conclusiones Se concluye que esta vez sí se logró en tiempo los objetivos de la práctica, al ya no tener dificultades con la implementación del código. Se logró analizar la manera en la que ahora es más fácil programar los corrimientos y además la correcta modulación de un nuevo multiplexor. Me encuentro satisfecho esta vez con los resultados de la práctica y considero que espero funcione de igual manera en todas las restantes. Estoy ansioso por llenar nuestra biblioteca de módulos.