✅ Considere el siguiente código VHDL de un sistema digital que multiplica dos números de n bits según el método tradicional aprendido y usado desde la escuela. El usuario ingresa primero el dato A (multiplicando) y luego el dato B (multiplicador) colocando el dato en la entrada correspondiente y presionando la tecla LdA y LdB según se ingrese el dato A o B respectivamente. Luego que los datos han sido ingresados el sistema espera hasta que el usuario presione el botón Start y empieza con el proceso del cálculo del producto de los números. Cuando el cálculo ha terminado el sistema envía la señal Fin y el usuario podrá ver el resultado en la salida P.
1. vasanza 1
SISTEMAS DIGITALES II
EXAMEN 2do PARCIAL
Fecha: 2018/09/12 I termino 2018-2019
Nombre: _________________________________________________ Paralelo: __________
Problema #x: (x%)
Analizar el siguiente código en lenguaje C:
a) ¿Cal es la función de P en el código anterior?
P es un puntero al doble, lo que significa que puede almacenar la dirección de una
variable de tipo doble. Una vez que tenemos la dirección en p, * p nos dará el valor
disponible en la dirección almacenada en p.
b) ¿Cuál es la impresión que genere el código anterior?
Array values using pointer
*(p + 0) : 1000.000000
*(p + 1) : 2.000000
*(p + 2) : 3.400000
*(p + 3) : 17.000000
*(p + 4) : 50.000000
Array values using balance as address
*(balance + 0) : 1000.000000
*(balance + 1) : 2.000000
*(balance + 2) : 3.400000
*(balance + 3) : 17.000000
*(balance + 4) : 50.000000
2. vasanza 2
PROBLEMA # 2: (x%)
Considere el siguiente código VHDL de un sistema digital que multiplica dos números de n bits según el
método tradicional aprendido y usado desde la escuela. El usuario ingresa primero el dato A
(multiplicando) y luego el dato B (multiplicador) colocando el dato en la entrada correspondiente y
presionando la tecla LdA y LdB según se ingrese el dato A o B respectivamente. Luego que los datos
han sido ingresados el sistema espera hasta que el usuario presione el botón Start y empieza con el
proceso del cálculo del producto de los números. Cuando el cálculo ha terminado el sistema envía la señal
Fin y el usuario podrá ver el resultado en la salida P.
Library IEEE;
Use IEEE.std_logic_1164.all;
Use IEEE.std_logic_unsigned.all;
Use work.componentes.all;
Entity multiplicador is
Generic(n : integer := 4; nn : integer := 8); -- nn deber ser el doble de n
Port(Resetn, Clock : in std_logic;
LdA, LdB, Start : in std_logic;
DataA, DataB : in std_logic_vector(n-1 downto 0);
P : buffer std_logic_vector(nn-1 downto 0);
Fin : out std_logic);
end multiplicador;
Architecture comportamiento of multiplicador is
Type estado is (____________);
Signal y : estado;
Signal Sel, EnA, EnB, EnP, Big0, Zero: std_logic;
Signal B, n_zeros: std_logic_vector(n-1 downto 0);
Signal Ain, A, DataP, Sum, nn_zeros: std_logic_vector(nn-1 downto 0);
Begin
--Circuito Controlador
MSS_transiciones: process(Resetn, Clock)
Begin
__________
__________
end process;
MSS_salidas: process(y, Start, LdA, LdB, Big0, B(0))
Begin
__________
__________
end process;
--Procesador de datos
Zero <= '0';
n_zeros <= (others => '0'); nn_zeros <= (others => '0');
Ain <= n_zeros & DataA;
multiplicando_A: registro_d_i generic map (n => nn)
port map (Resetn, Clock, EnA, LdA, Zero, Ain, A);
multiplicador_B: registro_i_d generic map (n => n)
port map (Resetn, Clock, EnB, LdB, Zero, DataB, B);
Big0 <= '1' when B = n_zeros else '0';
Sum <= A + P;
Multiplexor: busmux2a1 generic map (n => nn)
port map (Sel, nn_zeros, Sum, DataP);
producto_P: registro_sost generic map (n => nn)
port map (Resetn, Clock, EnP, DataP, P);
end comportamiento;
3. vasanza 3
Presente:
a. La partición funcional del sistema. (x%)
b. Complete el código VHDL (código del controlador). (x%)
Type estado is (A,B,C,D);
--Circuito Controlador
MSS_transiciones: process(Resetn, Clock)
Begin
if resetn='0' then y<=A;
elsif clock'event and clock='1' then
case y is
when A=>
if start='1' then y<=B;
else y<=A; end if;
when B =>
if Big0='1' then y<=D;
else y<=C; end if;
When C =>
Y<=B;
When D =>
If start='0' then y<=D;
Else y<=A; end if;
4. vasanza 4
end case;
end if;
end process;
MSS_salidas: process(y, Start, LdA, LdB, Big0, B(0))
case y is
when A=>
EnA<=LdA;
EnB<=LdB;
EnP<='1';
when B =>
EnP <= B(0);
Sel<='1';
When C =>
EnA<='1';
EnB<='1';
When D =>
Fin<='1';
end case;
end process;