Sistemes Electronics Digitals (SED) 04/12/2008 - deeea
Transcripción
Sistemes Electronics Digitals (SED) 04/12/2008 - deeea
Universitat Rovira i Virgili (URV) Escola Técnica Superior d’Enginyeria (ETSE) Enginyeria Automática i Electrònica Industrial (EAEI) 3 ¿Y para la arquitectura A2? (mismas posibles respuestas que la pregunta anterior) Sistemes Electronics Digitals (SED) 04/12/2008 Test: Respuesta correcta: +1 punto, Respuesta incorrecta: –1/3 punto 1. Se tiene un bloque lógico LUT de 4 entradas de la figura, que debe mapear la función lógica F(a,b)=a*b. El contenido de la LUT deberá ser: Nota: El contenido de la LUT es expresado como (LUT)={($F),($E),($D),…($0)} donde I0 es el LSB e I3 es el MSB, y la X expresa cualquier valor lógico en (LUT) o cualquier señal de entrada a la LUT X a b X I0 I1 I2 I3 a) (LUT)={1,1,0,0, 0,0,0,0, b) (LUT)={1,1,1,1, 1,1,1,1, c) (LUT)={X,1,1,X, X,1,1,X, d) Ninguna de las anteriores 4 Se desea generalizar la descripción del diseño DESIGN de la figura, con un genérico N (N es el número de etapas), tal como se muestra en el código que hay a continuación. La asignación en (1) correcta es: F(a,b)=a*b LUT t 1,1,0,0, 0,0,0,0, X,1,1,X, i 0,0,0,0} 0,0,0,0} X,1,1,X} library ieee; use ieee.std_logic_1164.all; architecture A1 of DIS is signal a,b: std_logic; begin process(clk) is begin if rising_edge(clk) then a<=i; b<=a; o<=b; end if; end process; end architecture; entity DIS is port( clk: in std_logic; i: in std_logic; o: out std_logic); end entity; D o Q i D DFF clk D Q DFF clk (a) i Q DFF D (b) Q D DFF Q DFF clk (c) D Q DFF o Ninguno de los anteriores (d) D Q DFF D Q DFF library ieee; use ieee.std_logic_1164.all; 2 El resultado de síntesis del diseño VHDL que hay a continuación, es: i architecture A2 of DIS is begin process(clk) is variable a,b: std_logic; begin if rising_edge(clk) then o<=b; a:=i; b:=a; end if; end process; end architecture; o entity DESIGN is generic( N: integer:=128); port( clk: in std_logic; i,t: in std_logic; o: out std_logic); end entity; a) x(i+1)<=x(i) xor t; b) x(i)<=x(i) xor t(i); c) x(i)<=x(i-1) xor t; d) Ninguna de las anteriores D Q DFF D Q o DFF architecture A of DESIGN is signal x: std_logic_vector(0 to N); begin x(0)<=i; o<=x(N); g0: for i in 1 to N generate process(clk) begin if rising_edge(clk) then --(1) end if; end process; end generate; end architecture; 5 El siguiente código modela el circuito de la figura. Para que sea correcto el modelo se debe substituir (1), (2) y (3) por: --librerias ... –-definicion entidad circuito VDD a o ... o<='L'; a) o<='H'; b) o<='1'; o<='0'; c) o<='1'; o<='0'; d) Ninguna de las anteriores architecture X1 of circuito is signal a,o: std_logic; ... --otras declaraciones begin o<=...; --(1) o<=...; --(2) o<=...; --(3) ... --otras asignaciones ... --y procesos que no usan o end architecture; o<='1' when a='0' else '0'; o<='1' when a='0' else '0'; o<='1' when a='0' else 'Z'; 6 En el circuito de la anterior figura, el de a=’0’ a los 0 ns, y a=’1’ a los 100 ns. El valor de la señal o es: a) b) c) d) o=’1’ antes de 100 ns, o=’X’ después de 100 ns o=’1’ antes de 100 ns, o=’W’ después de 100 ns o=’X’ antes de 100 ns, o=’Z’ después de 100 ns Ninguno de los anteriores 7 Se desea implementar la máquina de estados finito (FSM), con el diagrama de estados de la figura (sólo muestra las condiciones del cambio de estado, en función de la entrada i(1 downto 0)). La condición (1) es: 01 SB 11 10 SA 11 10 SD SC library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity FSM is port( clk,rst: in std_logic; i: in std_logic_vector(1 downto 0); o: out std_logic_vector(3 downto 0)); end entity; architecture BEH of FSM is type TFSM is (SA,SB,SC,SD); signal s,s2: TFSM; signal i2: unsigned(i'range); begin process(i) begin case i is when "01"=> s2<=SB; when "10"=> s2<=SC; when others=> s2<=SD; end case; end process; process begin wait until rising_edge(clk); if rst='1' then s<=SA; i2<="00"; --condicion(1) s<=s2; i2<=unsigned(i); end if; end process; process(s) begin case s is when SA=> o<="0001"; when SB=> o<="0010"; when SC=> o<="0100"; when SD=> o<="1000"; end case; end process; end architecture; 11 a) b) c) d) elsif unsigned(i)>i2 then elsif unsigned(i)/=i2 then elsif unsigned(i)>=i2 then Ninguna de las anteriores clk reset 8. Se substituye el último de los procesos (que asigna la salida o), por el proceso p1 o p2. ¿Cuál/Cuales de los procesos es/son funcionalmente equivalente/s al de la anterior pregunta? oA P1: process(s) case s is when SA=> when SB=> when SC=> when SD=> end case; end process; oC begin o(o'low+0)<='1'; o(o'low+1)<='1'; o(o'low+2)<='1'; o(o'low+3)<='1'; P2: process(i2) begin o<=(others=>'0'); o(conv_integer(i2))<='1'; end process; a) b) c) d) oB los dos sólo P1 sólo P2 Ninguno 9. Se diseña un prescaler de 3-bits, con el código VHDL de abajo. La salida correcta o, para las entradas clk y rst mostradas en la forma de onda, es: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity pscaler is port( clk,rst: in std_logic; o: out std_logic); end entity; architecture BEH of pscaler is begin process(rst,clk) variable cnt: unsigned(2 downto 0); --(2) begin if rising_edge(clk) then o<='0'; cnt:=cnt-1; if cnt=0 then o<='1'; end if; end if; if rst='1' then cnt:=conv_unsigned(7,3); --(1) end if; end process; end architecture; a) b) c) d) oA oB oC Ninguna 10. Si se desea que la descripción del anterior prescaler pueda generalizarse para un número arbitrario de bits, modificando en (2) por cnt: unsigned(XXX-1 downto 0) (XXX es el número de bits). La modificación/es que puede/n hacerse en (1) es/son: cnt:=(others=>'1'); --(1a) cnt:=conv_unsigned((2**XXX)-1,cnt'length); --(1b) a) b) c) d) Cualquiera de las dos Sólo la 1a Solo la 1b Ninguna de las dos Nombre________________________________________________________________ Pregunta 1 2 3 4 5 6 7 8 9 10 A X B C D X X X X X X X X X