






Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
VLSI LABORATORIO PRACTICAS UNAM FI
Tipo: Ejercicios
1 / 11
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!







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;
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.
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.