Sie sind auf Seite 1von 51

CURSO: LABORATORIO DE DISEO DIGITAL LABORATORIO N1 (AVANCE)

PROFESOR: ING. ALARCON MATUTTI

ALUMNO: HENRY RICARDO LAREDO QUISPE CODIGO: 997942

FECHA: 15 DE ABRIL DEL 2013

ESPECIFICACION DEL DISPOSITIVO FPGA: EP1S10F780C6 El dispositivo EP1S10F780C6 es un FPGA de la familia STRATIX de la empresa ALTERA, aparecido en el ao 2003. Posee 780 pines de los cuales se pueden utilizar como seales de Entrada/Salida un total de 426. Su encapsulado es el 780-FBGA. Es de implementacin superficial.

Internamente est constituido por una arquitectura bidimensional de filas y columnas para implementar la lgica requerida. Series de interconexiones de filas y columnas de diversas longitudes y velocidad, proveen las conexiones para las seales entre LABs (logic array memory), bloques de memoria y bloques DSP. Un LAB est constituido por 10 elementos lgicos LE, donde cada LE es la unidad lgica del FPGA que permite implementar las funciones lgicas del programa VHDL.

Cada LE contiene un LUT de cuatro entradas, el cual viene a ser un generador de funciones que puede implementar cualquier funcin de 4 variables. Adems, cada LE contiene un registro programable y una cadena de acarreo con capacidad de seleccin. Cada LE soporta la suma o resta dinmica de un bit. Cada LE maneja todo tipo de interconexiones: local, fila, columna, cadena de LUTs, cadena de registros y enlaces de interconexin directa.

Veamos a continuacin una tabla donde se resumen sus principales caractersticas:

PREGUNTA (A) PROBLEMA 2.47


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY pregA1Prob2_247 IS -- Puertos PORT ( -- Entradas x1,x2,x3,x4 : IN STD_LOGIC; -- Salidas f1,f2 : OUT STD_LOGIC ); END pregA1Prob2_247; -- Bloque Arquitectura ARCHITECTURE transferencia OF pregA1Prob2_247 IS BEGIN -f1 x2)or(x1 -f2 Describimos la salida f1 <= (x1 and not x3)or(x2 and not x3)or(not x3 and not x4)or(x1 and and not x4); Describimos la salida f2 <= (x1 or not x3)and(x1 or x2 or not x4)and(x2 or not x3 or not x4);

END transferencia;

Se puede apreciar que las salidas f1 y f2 son idnticas.

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (A) PROBLEMA 2.48


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY pregA1Prob2_48 IS PORT ( -- Entradas x1,x2,x3,x4 : IN STD_LOGIC; -- Salidas f1,f2 : OUT STD_LOGIC ); END pregA1Prob2_48; -- Bloque Arquitectura ARCHITECTURE a OF pregA1Prob2_48 IS BEGIN -- Describimos la salida f1 f1 <= ((x1 and x3)or(not x1 and not x3))or((x2 and x4)or(not x2 and not x4)); -- Describimos la salida f2 f2 <= (x1 and x2 and not x3 and not x4)or(not x1 and not x2 and x3 and x4)or(x1 and not x2 and not x3 and x4)or(not x1 and x2 and x3 and not x4); END a;

Se puede apreciar que las salidas f1 y f2 se complementan.

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 2:

PREGUNTA (A) PROBLEMA 3.51


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY pregA2prob3_51 IS PORT ( -- Entradas x1,x2,x3,x4 : IN STD_LOGIC; -- Salidas f : OUT STD_LOGIC ); END pregA2prob3_51; -- Bloque Arquitectura ARCHITECTURE a OF pregA2prob3_51 IS BEGIN -- Describimos la salida f f <= (x2 and not x3 and not x4)or(not x1 and x2 and x4)or(not x1 and x2 and x3)or(x1 and x2 and x3); END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (A) PROBLEMA 3.52


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY prega2prob3_52 IS PORT ( -- Entradas x1,x2,x3,x4 : IN STD_LOGIC; -- Salidas f : OUT STD_LOGIC ); END prega2prob3_52; -- Bloque Arquitectura ARCHITECTURE a OF prega2prob3_52 IS BEGIN -- Describimos la salida f f <= (x1 or x2 or not x4)and(not x2 or x3 or not x4)and(not x1 or x3 or not x4)and(not x1 or not x3 or not x4); END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (A) PROBLEMA 3.53


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY prega2prob3_53 IS PORT ( -- Entradas x1,x2,x3,x4,x5,x6,x7 : IN -- Salidas f : OUT STD_LOGIC ); END prega2prob3_53; -- Bloque Arquitectura ARCHITECTURE a OF prega2prob3_53 IS BEGIN --Describimos la salida f f <= (x1 and x3 and not x6)or(x1 and x4 and x5 and not x6)or(x2 and x3 and x7)or(x2 and x4 and x5 and x7); END a; STD_LOGIC;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 2:

PREGUNTA (A) PROBLEMA 4.35

-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY prega2prob4_35 IS PORT ( -- Entradas x1,x2,x3,x4,x5 -- Salidas f ); END prega2prob4_35; -- Bloque Arquitectura ARCHITECTURE a OF prega2prob4_35 IS -- Seales internas del circuito SIGNAL g,k : STD_LOGIC; BEGIN -- Descripcin de las seales g y k g <= x1 or x2 or x5; k <= (x3 and not x4)or(not x3 and x4); -- Descripcin de la salida f f <= (g and k)or(not g and not k); END a; : IN STD_LOGIC;

: OUT STD_LOGIC

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 2:

PREGUNTA (A) PROBLEMA 4.37

-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY prega2prob4_37 IS PORT ( -- Entradas x1,x2,x3,x4,x5,x6,x7 : IN STD_LOGIC; -- Salidas f : OUT STD_LOGIC ); END prega2prob4_37; -- Bloque Arquitectura ARCHITECTURE a OF prega2prob4_37 IS -- Seales internas del circuito SIGNAL g,k : STD_LOGIC; BEGIN -- Descripcin de las seales g y k g <= not(not(x2 or x2)or not(x3 or x3)); k <= not(not(x4 or x4)or not(x5 or x6)); -- Descripcin de la salida f f <= not(not(x1 or g)or not(x7 or k)); END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 2:

PREGUNTA (A) PROBLEMA 4.39 f (x1,,x4) = m(1,4,7,14,15) + D(0,5,9) f(x1, ,x4) =


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY prega2prob4_39 IS PORT ( -- Entradas x1,x2,x3,x4 : IN -- Salidas f ); END prega2prob4_39; -- Bloque Arquitectura ARCHITECTURE a OF prega2prob4_39 IS BEGIN -- Descripcin de la salida f f <= (not x1 and not x3)or(x3 and x4 and x2)or(x1 and x2 and x3); END a; STD_LOGIC; : OUT STD_LOGIC

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (A) PROBLEMA 4.41 f (x1,,x4) = m(1,4,7,14,15) + D(0,5,9) f(x1, ,x4) =


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY prega2prob4_41 IS PORT ( -- Entradas x1,x2,x3,x4 : IN -- Salidas f ); END prega2prob4_41; -- Bloque Arquitectura ARCHITECTURE a OF prega2prob4_41 IS BEGIN -- Descripcin de la salida f f <= (x2 or not x3)and(x4 or not x1 or not x2)and(x4 or x1 or x2); END a; STD_LOGIC; : OUT STD_LOGIC

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (A) PROBLEMA 5.16 Bloques Superior e Inferior

Multiplicador 4x4

Cdigo VDHL para el bloque superior:


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY bloquesuperior IS PORT( -- Entradas q0,q1,cin,mk,mkmas1 -- Salidas s,cout ); END bloquesuperior; -- Bloque Arquitectura ARCHITECTURE a OF bloquesuperior IS SIGNAL x,y : STD_LOGIC; BEGIN x <= mkmas1 and q0; y <= mk and q1; s <= x xor y xor cin; cout <= (x and y)or(x and cin)or(y and cin); END a;

: IN

STD_LOGIC; : OUT STD_LOGIC

Cdigo VDHL para el bloque inferior:


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY bloqueinferior IS PORT( -- Entradas qj,cin,mk,PPi -- Salidas s,cout ); END bloqueinferior;

: IN

STD_LOGIC; : OUT STD_LOGIC

-- Bloque Arquitectura ARCHITECTURE a OF bloqueinferior IS SIGNAL x : STD_LOGIC; BEGIN x <= qj and mk; s <= x xor PPi xor cin; cout <= (x and PPi)or(x and cin)or(PPi and cin); END a;

Cdigo VDHL para el bloque multiplicador 4x4:


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; -- Bloque Entidad ENTITY prega2prob5_16 IS PORT( -- Entradas cin : IN STD_LOGIC; M,Q : IN STD_LOGIC_VECTOR(3 downto 0); -- Salidas P : OUT STD_LOGIC_VECTOR(7 downto 0) ); END prega2prob5_16; -- Bloque Arquitectura ARCHITECTURE a OF prega2prob5_16 IS COMPONENT bloquesuperior PORT( -- Entradas q0,q1,cin,mk,mkmas1 : IN -- Salidas s,cout ); END COMPONENT; COMPONENT bloqueinferior PORT( -- Entradas qj,cin,mk,PPi : IN -- Salidas s,cout ); END COMPONENT;

STD_LOGIC; : OUT STD_LOGIC

STD_LOGIC; : OUT STD_LOGIC

SIGNAL PP1 : STD_LOGIC_VECTOR(5 downto 2); SIGNAL PP2 : STD_LOGIC_VECTOR(6 downto 3); SIGNAL CFILA0,CFILA1,CFILA2 : STD_LOGIC_VECTOR(1 to 3); BEGIN P(0) <= Q(0) and M(0); fila0_1: fila0_2: fila0_3: fila0_4: fila1_2: fila1_3: fila1_4: fila1_5: fila2_3: fila2_4: fila2_5: fila2_6: END a; bloquesuperior bloquesuperior bloquesuperior bloquesuperior bloqueinferior bloqueinferior bloqueinferior bloqueinferior bloqueinferior bloqueinferior bloqueinferior bloqueinferior PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP PORTMAP (Q(0),Q(1),cin,M(0),M(1),P(1),CFILA0(1)); (Q(0),Q(1),CFILA0(1),M(1),M(2),PP1(2),CFILA0(2)); (Q(0),Q(1),CFILA0(2),M(2),M(3),PP1(3),CFILA0(3)); (Q(0),Q(1),CFILA0(3),M(3),cin,PP1(4),PP1(5)); (Q(2),cin,M(0),PP1(2),P(2),CFILA1(1)); (Q(2),CFILA1(1),M(1),PP1(3),PP2(3),CFILA1(2)); (Q(2),CFILA1(2),M(2),PP1(4),PP2(4),CFILA1(3)); (Q(2),CFILA1(3),M(3),PP1(5),PP2(5),PP2(6)); (Q(3),cin,M(0),PP2(3),P(3),CFILA2(1)); (Q(3),CFILA2(1),M(1),PP2(4),P(4),CFILA2(2)); (Q(3),CFILA2(2),M(2),PP2(5),P(5),CFILA2(3)); (Q(3),CFILA2(3),M(3),PP2(6),P(6),P(7));

Los retardos de las entradas respecto a las salidas son:


Source Name Q[1] Q[1] M[0] M[0] Q[1] M[1] M[1] M[0] Q[0] Q[0] Q[1] cin cin M[0] M[1] Q[0] cin M[2] M[2] Q[1] M[1] Q[0] M[0] cin M[2] M[1] Q[0] M[2] Destination Name P[6] P[7] P[6] P[7] P[5] P[6] P[7] P[5] P[6] P[7] P[4] P[6] P[7] P[4] P[5] P[5] P[5] P[6] P[7] P[3] P[4] P[4] P[3] P[4] P[5] P[3] P[3] P[4] Actual Delay (Longest) 13.401 ns 13.399 ns 13.161 ns 13.159 ns 12.854 ns 12.647 ns 12.645 ns 12.614 ns 12.553 ns 12.551 ns 12.462 ns 12.393 ns 12.391 ns 12.222 ns 12.100 ns 12.006 ns 11.846 ns 11.781 ns 11.779 ns 11.718 ns 11.708 ns 11.614 ns 11.478 ns 11.454 ns 11.234 ns 10.964 ns 10.870 ns 10.842 ns Actual Delay (Shortest) 8.870 ns 8.868 ns 9.002 ns 9.000 ns 8.873 ns 8.494 ns 8.492 ns 8.455 ns 8.535 ns 8.533 ns 9.743 ns 8.491 ns 8.489 ns 8.063 ns 7.947 ns 8.538 ns 8.494 ns 8.056 ns 8.054 ns 10.180 ns 7.555 ns 9.409 ns 7.299 ns 8.427 ns 7.511 ns 8.189 ns 9.323 ns 8.825 ns

cin M[3] M[3] Q[2] Q[2] Q[1] M[2] M[3] M[0] Q[3] Q[3] Q[2] M[3] M[1] Q[0] Q[2] Q[3] cin M[3] Q[3] Q[2] Q[1] M[2] M[0] M[0] M[1] Q[0] Q[0] Q[3] Q[2] cin

P[3] P[6] P[7] P[6] P[7] P[2] P[3] P[5] P[2] P[6] P[7] P[5] P[4] P[2] P[2] P[4] P[5] P[2] P[3] P[4] P[3] P[1] P[2] P[1] P[0] P[1] P[0] P[1] P[3] P[2] P[1]

10.710 ns 10.590 ns 10.588 ns 10.207 ns 10.205 ns 10.170 ns 10.098 ns 10.043 ns 9.930 ns 9.725 ns 9.723 ns 9.660 ns 9.651 ns 9.416 ns 9.322 ns 9.268 ns 9.178 ns 9.162 ns 8.908 ns 8.786 ns 8.600 ns 8.455 ns 8.404 ns 8.215 ns 7.945 ns 7.700 ns 7.608 ns 7.606 ns 7.521 ns 7.476 ns 7.446 ns

7.287 ns 7.328 ns 7.326 ns 7.818 ns 7.816 ns 9.139 ns 9.536 ns 7.646 ns 7.969 ns 7.852 ns 7.848 ns 7.817 ns 9.416 ns 9.027 ns 8.530 ns 8.220 ns 7.862 ns 7.379 ns 8.908 ns 7.875 ns 8.296 ns 8.455 ns 8.404 ns 8.215 ns 7.945 ns 7.700 ns 7.608 ns 7.606 ns 7.521 ns 7.476 ns 7.446 ns

El rea expresa en LUTs es 29:

PREGUNTA (A) PROBLEMA 5.20 Para realizar la sustraccin de nmeros BCD utilizaremos el complemento a 9 del valor que se desea restar y luego se le sumara el digito 1, de tal manera que obtengamos el complemento a 10. Luego la sustraccin puede ser efectuada mediante una suma del primer operando con la representacin en complemento a 10 del segundo operando. Se realizar un cdigo para implementar una resta de dos nmeros BCD con un mximo de 3 digitos por cada uno. Cdigo VDHL para el bloque que realiza la suma BCD de dos nmeros:
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY sumabcd IS PORT ( digito1,digito2,cin : IN STD_LOGIC_VECTOR(3 downto 0); salida,cout : OUT STD_LOGIC_VECTOR(3 downto 0) ); END sumabcd; ARCHITECTURE a OF sumabcd IS SIGNAL resul,bcd : STD_LOGIC_VECTOR(4 downto 0); SIGNAL resul2,bcd2 : STD_LOGIC_VECTOR(4 downto 0); SIGNAL ajuste,ajuste2 : STD_LOGIC; BEGIN --primero sumamos el digito1 + el carry resul <= ('0'&digito1) + cin; ajuste <= '1' when (resul > 9) else '0'; bcd <= resul when (ajuste = '0') else (resul + 6); --luego sumamos el primer resultado + el digito2 resul2 <= bcd + digito2; ajuste2 <= '1' when (resul2 > 9) else '0'; bcd2 <= resul2 when (ajuste2 = '0') else (resul2 + 6); --finalmente separamos el codigo bcd del carry salida <= bcd2(3 downto 0); cout <= "000"&bcd2(4); END a;

Cdigo VDHL para el bloque que realiza el complemento a 9 de un nmero BCD:


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY comple9paraBCD IS PORT ( digito : IN STD_LOGIC_VECTOR(3 downto 0); salida : OUT STD_LOGIC_VECTOR(3 downto 0) ); END comple9paraBCD; ARCHITECTURE a OF comple9paraBCD IS BEGIN salida(0) <= not digito(0); salida(1) <= digito(1); salida(2) <= (not digito(2) and digito(1))or(digito(2) and not digito(1)); salida(3) <= not digito(3) and not digito(2) and not digito(1); END a;

Cdigo VDHL para la solucin de la resta de dos nmeros BCD:


-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY prega2prob5_20 IS PORT( x1,x2,x3 : IN STD_LOGIC_VECTOR(3 downto 0); y1,y2,y3 : IN STD_LOGIC_VECTOR(3 downto 0); z1,z2,z3 : OUT STD_LOGIC_VECTOR(3 downto 0) ); END prega2prob5_20; ARCHITECTURE a OF prega2prob5_20 IS COMPONENT comple9paraBCD PORT ( digito : IN STD_LOGIC_VECTOR(3 downto 0); salida : OUT STD_LOGIC_VECTOR(3 downto 0) ); END COMPONENT; COMPONENT sumabcd PORT ( digito1,digito2,cin : IN STD_LOGIC_VECTOR(3 downto 0); salida,cout : OUT STD_LOGIC_VECTOR(3 downto 0) ); END COMPONENT; SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL BEGIN comple10 : STD_LOGIC_VECTOR(11 downto 0); dig1c9,dig2c9,dig3c9 : STD_LOGIC_VECTOR(3 downto 0); dig1c10,dig2c10,dig3c10 : STD_LOGIC_VECTOR(3 downto 0); co1,co2,co3,co4 : STD_LOGIC_VECTOR(3 downto 0); cr1,cr2,cr3,cr4 : STD_LOGIC_VECTOR(3 downto 0);

--para 3 digitos BCD --primero, generamos el complemento a 9 --digitos bcd. dig1comp9: comple9paraBCD PORT MAP (y1, dig2comp9: comple9paraBCD PORT MAP (y2, dig3comp9: comple9paraBCD PORT MAP (y3,

de todos los dig1c9); dig2c9); dig3c9);

--le sumamos 1 para obtener complemento a 10 comple10 <= "000000000001"; co1 <= "0000"; dig1comp10: sumabcd PORT MAP (dig1c9,comple10(3 downto 0),co1,dig1c10,co2); dig2comp10: sumabcd PORT MAP (dig2c9,comple10(7 downto 4),co2,dig2c10,co3); dig3comp10: sumabcd PORT MAP (dig3c9,comple10(11 downto 8),co3,dig3c10,co4); --finalmente sumamos los dos digitos bcd cr1 <= "0000"; dig1resta: sumabcd PORT MAP(x1,dig1c10,cr1,z1,cr2); dig2resta: sumabcd PORT MAP(x2,dig2c10,cr2,z2,cr3); dig3resta: sumabcd PORT MAP(x3,dig3c10,cr3,z3,cr4); END a;

En la simulacin tenemos que queremos restar en BCD: 063 050, lo cual efectivamente resulta 13.

Los retardos de las entradas respecto a las salidas son:


Source Name y1[3] y1[3] y1[1] y1[1] y1[2] y1[2] y1[3] y1[1] y1[3] Destination Name z3[0] z3[1] z3[0] z3[1] z3[0] z3[1] z3[3] z3[3] z3[2] Actual Delay (Longest) 32.036 ns 32.030 ns 31.942 ns 31.936 ns 31.755 ns 31.749 ns 31.719 ns 31.625 ns 31.540 ns Actual Delay (Shortest) 19.735 ns 20.187 ns 19.398 ns 19.850 ns 19.311 ns 19.763 ns 20.061 ns 19.724 ns 20.219 ns

y1[1] y1[2] y1[2] y1[0] y1[0] y1[0] y1[0] x1[1] x1[1] x1[3] x1[3] x1[1] x1[1] x1[2] x1[2] x1[3] x1[3] x1[2] x1[2] x1[0] x1[0] x1[0] x1[0] y1[3] y1[1] y1[3] y1[1] y1[2] y1[2] y1[3] y1[1] y2[0] y2[0] y1[2] y2[2] y2[2] y2[0] y1[0] y2[0] y1[3] y2[2] y1[1] y1[0] y2[2] y1[2]

z3[2] z3[3] z3[2] z3[0] z3[1] z3[3] z3[2] z3[0] z3[1] z3[0] z3[1] z3[3] z3[2] z3[0] z3[1] z3[3] z3[2] z3[3] z3[2] z3[0] z3[1] z3[3] z3[2] z2[3] z2[3] z2[2] z2[2] z2[3] z2[2] z2[1] z2[1] z3[0] z3[1] z2[1] z3[0] z3[1] z3[3] z2[3] z3[2] z2[0] z3[3] z2[0] z2[2] z3[2] z2[0]

31.446 ns 31.438 ns 31.259 ns 30.651 ns 30.645 ns 30.334 ns 30.155 ns 28.187 ns 28.181 ns 27.925 ns 27.919 ns 27.870 ns 27.691 ns 27.649 ns 27.643 ns 27.608 ns 27.429 ns 27.332 ns 27.153 ns 26.919 ns 26.913 ns 26.602 ns 26.423 ns 25.135 ns 25.041 ns 24.967 ns 24.873 ns 24.854 ns 24.686 ns 24.357 ns 24.263 ns 24.211 ns 24.205 ns 24.076 ns 23.980 ns 23.974 ns 23.894 ns 23.750 ns 23.715 ns 23.678 ns 23.663 ns 23.584 ns 23.582 ns 23.484 ns 23.397 ns

19.882 ns 19.637 ns 19.795 ns 19.499 ns 19.951 ns 19.825 ns 19.983 ns 17.696 ns 18.148 ns 17.821 ns 18.273 ns 18.022 ns 18.180 ns 17.611 ns 18.063 ns 18.147 ns 18.305 ns 17.937 ns 18.095 ns 18.221 ns 18.673 ns 18.547 ns 18.705 ns 15.601 ns 15.264 ns 16.021 ns 15.684 ns 15.177 ns 15.597 ns 16.139 ns 15.802 ns 15.217 ns 15.669 ns 15.715 ns 14.865 ns 15.317 ns 15.543 ns 15.365 ns 15.701 ns 15.503 ns 15.191 ns 15.166 ns 15.785 ns 15.349 ns 15.079 ns

y1[0] y1[0] x1[1] x1[1] x1[3] x1[3] x1[2] x1[2] x1[1] x1[3] x1[0] x1[2] x1[0] x1[1] x1[3] x1[2] x1[0] x1[0] y1[1] y1[3] y1[2] y2[0] y2[0] y2[2] y2[2] y1[1] y2[0] y1[3] y1[3] y1[1] y1[2] y2[2] y1[2] y1[0] y2[0] y1[3] y1[1] y2[2] y1[2] y1[0] y1[0] y1[0] x1[3] x1[1] x1[2]

z2[1] z2[0] z2[3] z2[2] z2[3] z2[2] z2[3] z2[2] z2[1] z2[1] z2[3] z2[1] z2[2] z2[0] z2[0] z2[0] z2[1] z2[0] z1[3] z1[3] z1[3] z2[3] z2[2] z2[3] z2[2] z1[2] z2[1] z1[1] z1[2] z1[1] z1[2] z2[1] z1[1] z1[3] z2[0] z1[0] z1[0] z2[0] z1[0] z1[1] z1[2] z1[0] z1[3] z1[3] z1[3]

22.972 ns 22.293 ns 21.286 ns 21.118 ns 21.024 ns 20.856 ns 20.748 ns 20.580 ns 20.508 ns 20.246 ns 20.018 ns 19.970 ns 19.850 ns 19.829 ns 19.567 ns 19.291 ns 19.240 ns 18.561 ns 17.712 ns 17.542 ns 17.528 ns 17.310 ns 17.142 ns 17.079 ns 16.911 ns 16.565 ns 16.532 ns 16.482 ns 16.480 ns 16.388 ns 16.381 ns 16.301 ns 16.201 ns 16.157 ns 15.853 ns 15.735 ns 15.641 ns 15.622 ns 15.454 ns 15.097 ns 15.095 ns 14.350 ns 13.814 ns 13.559 ns 13.383 ns

15.903 ns 15.167 ns 13.524 ns 14.159 ns 13.649 ns 14.284 ns 13.439 ns 14.074 ns 14.100 ns 14.225 ns 14.049 ns 14.015 ns 14.684 ns 12.989 ns 13.114 ns 12.904 ns 14.625 ns 13.514 ns 11.681 ns 11.968 ns 11.687 ns 11.083 ns 11.503 ns 10.987 ns 11.124 ns 12.426 ns 11.621 ns 12.651 ns 12.711 ns 11.869 ns 12.287 ns 11.557 ns 12.370 ns 11.557 ns 11.012 ns 12.030 ns 11.616 ns 11.194 ns 11.606 ns 11.919 ns 11.994 ns 10.645 ns 9.211 ns 9.497 ns 9.412 ns

x1[0] x1[3] x1[1] x1[1] x1[3] x1[2] x1[2] x1[1] x1[0] x1[3] x1[2] x1[0] x1[0]

z1[3] z1[2] z1[1] z1[2] z1[1] z1[2] z1[1] z1[0] z1[2] z1[0] z1[0] z1[1] z1[0]

12.808 ns 12.763 ns 12.633 ns 12.631 ns 12.343 ns 12.332 ns 12.095 ns 11.886 ns 11.757 ns 11.596 ns 11.348 ns 11.337 ns 10.590 ns

9.904 ns 10.329 ns 10.160 ns 10.242 ns 10.011 ns 9.898 ns 10.159 ns 9.497 ns 10.341 ns 9.622 ns 9.412 ns 10.266 ns 9.019 ns

El rea expresa en LUTs es 160:

PREGUNTA (A) PROBLEMA 6.19 Se pide la siguiente ecuacin:

La cual corresponde con un decoder de 3 a 8 con una compuerta OR de 6 entradas al final, sin embargo el programa en VHDL puede escribirse de la siguiente manera:
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY prega2prob6_19 IS PORT ( w : IN STD_LOGIC_VECTOR(3 downto 1); f : OUT STD_LOGIC ); END prega2prob6_19; ARCHITECTURE a OF prega2prob6_19 IS BEGIN with w select f <= '0' when "001", '0' when "110", '1' when others; END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (A) PROBLEMA 6.21 Escribir el cdigo VHDL para un encoder binario de 4 a 2.
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY prega2prob6_21 IS PORT ( x : IN z : OUT ); END prega2prob6_21; ARCHITECTURE a OF prega2prob6_21 IS BEGIN with x select z <= "00" when "0001", "01" when "0010", "10" when "0100", "11" when others; END a; STD_LOGIC_VECTOR(4 downto 1); STD_LOGIC_VECTOR(2 downto 1)

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 2:

PREGUNTA (A) PROBLEMA 6.23 Escribir el cdigo VHDL para un encoder prioritario de 8 a 3.
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY prega2prob6_21 IS PORT ( x : IN z : OUT ); END prega2prob6_21; ARCHITECTURE a OF prega2prob6_21 IS BEGIN with x select z <= "00" when "0001", "01" when "0010", "10" when "0100", "11" when others; END a; STD_LOGIC_VECTOR(4 downto 1); STD_LOGIC_VECTOR(2 downto 1)

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 7:

PREGUNTA (A) PROBLEMA 6.25 Escribir el cdigo VHDL para un encoder prioritario de 8 a 3 pero utilizando IF ELSE.
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY prega2prob6_25 IS PORT ( w : IN STD_LOGIC_VECTOR(7 downto 0); y : OUT STD_LOGIC_VECTOR(2 downto 0); z : OUT STD_LOGIC ); END prega2prob6_25; ARCHITECTURE a OF prega2prob6_25 IS BEGIN PROCESS(w) BEGIN if w = "00000001" then y <= "000"; elsif w = "0000001-" then y <= "001"; elsif w = "000001--" then y <= "010"; elsif w = "00001---" then y <= "011"; elsif w = "0001----" then y <= "100"; elsif w = "001-----" then y <= "101"; elsif w = "01------" then y <= "110"; elsif w = "1-------" then y <= "111"; else y <= "000"; end if; if w = "00000000" then z <= '0'; else z <= '1'; end if; END PROCESS; END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 7:

PREGUNTA (A) PROBLEMA 7.10 Escribir el cdigo VHDL para un flip flop tipo T
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY prega2prob7_10 IS PORT ( T, reset,clock : IN Q : OUT STD_LOGIC ); END prega2prob7_10; ARCHITECTURE a OF prega2prob7_10 IS SIGNAL Qi : STD_LOGIC; BEGIN PROCESS(reset,clock) BEGIN if reset = '0' then Qi <= '0'; elsif clock'event and clock = '1' then if T = '1' then Qi <= not Qi; else Qi <= Qi; end if; end if; Q <= Qi; END PROCESS; END a;

STD_LOGIC;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (A) PROBLEMA 7.11 y 7.12 Escribir el cdigo VHDL para un flip flop tipo JK.
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY prega2prob7_11 IS PORT ( J,K,clock,reset : IN STD_LOGIC; Q : OUT STD_LOGIC ); END prega2prob7_11; ARCHITECTURE a OF prega2prob7_11 IS SIGNAL Qi : STD_LOGIC; BEGIN PROCESS(clock,reset) BEGIN if reset <= '0' then Qi <= '0'; elsif clock'event and clock = '1' then Qi <= (J and not Qi)or(not K and Qi); end if; END PROCESS; Q <= Qi; END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 1:

PREGUNTA (B) Disee el circuito digital que se muestra con la siguiente especificacin:

La entrada IN puede cambiar en cualquier instante, no se conoce su valor inicial ni se puede predeterminar. Cuando A = 1, cada cambio de IN hace que T cambie de valor el cual se mantiene hasta un nuevo cambio de IN. Si cambia A = 0, entonces el prximo cambio de IN hace que F cambie de valor que se mantiene hasta un siguiente cambio de IN. Al inicio asumir que A = 0, y se tiene una seal de reset para T = 0, F = 0.
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY pregb_v2 IS PORT( --Entradas del sistema ent_IN,ent_A,reset : IN STD_LOGIC; --Salidas del sistema T,F : OUT STD_LOGIC ); END pregb_v2; ARCHITECTURE a OF pregb_v2 IS --Senales para el flanco de subida de ent_IN SIGNAL Ti, Fi : STD_LOGIC; --Senales para el flanco de bajada de ent_IN SIGNAL Tif, Fif : STD_LOGIC; BEGIN --Detectamos si hubo un cambio de estado en --reset, o si hubo un flanco de subida en --ent_IN. PROCESS(ent_IN,reset) BEGIN if(reset = '1') then Ti <= '0'; Fi <= '0'; elsif(ent_IN 'event and ent_IN = '1') then --Evaluamos el estado de A para manipular --la seal Ti o Fi correspondientes con --el flanco de subida. if(ent_A = '1') then Ti <= not Ti; else Fi <= not Fi;

end if; end if; END PROCESS; --Detectamos si hubo un cambio de estado en --reset, o si hubo un flanco de bajada en --ent_IN. PROCESS(ent_IN,reset) BEGIN if(reset = '1') then Tif <= '0'; Fif <= '0'; elsif(ent_IN 'event and ent_IN = '0') then --Evaluamos el estado de A para manipular --la seal Tif o Fif correspondientes con --el flanco de bajada. if(ent_A = '1') then Tif <= not Tif; else Fif <= not Fif; end if; end if; END PROCESS; --Finalmente para conocer los valores de las seales --de salida del sistema T y F, hacemos la siguiente --tabla: -- Tif Ti Xor Descripcion -- 0 0 0 Estado inicial, o Flanco de bajada detectado en ent_IN. -- 0 1 1 Flanco de subida detectado en ent_IN. -- 1 1 0 Flanco de bajada detectado en ent_IN. -- 1 0 1 Flanco de subida detectado en ent_IN. --Aplicando un xor a las seales de Tif con Ti, o Fif con Fif, es --posible obtener los cambios de estado cuando ent_IN cambia. T <= Ti xor Tif; F <= Fi xor Fif; END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 6:

PREGUNTA C Disear el circuito digital Call:

Permite a dos procesos independientes compartir un subproceso comn, mediante seales de peticin (Req) y trmino (Ack). Se debe considerar los siguientes casos: a) Los procesos que llaman son mutuamente excluyentes (no son simultneos al mismo tiempo). b) En caso que sean simultneos, entonces se transfiere solo A1, R1 hacia el recurso compartido. Cuando concluye dicha peticin se transfiere la otra peticin si an est pendiente. Observacion: Debido a que el Quartus II realiza sus simulaciones basadas en la sintetizacin del cdigo VDHL, es que ignora las declaraciones de retardos como after Xns, entonces para poder realizar la aplicacin Call ha sido necesario aadir una seal de clock y un reset para el manejo de los tiempos.
-- Quartus VHDL Template LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY pregc IS PORT( A R R1,R2 A1,A2 reset,clock : IN ); END pregc;

: : : :

BUFFER STD_LOGIC; OUT STD_LOGIC; IN STD_LOGIC; OUT STD_LOGIC; STD_LOGIC

ARCHITECTURE a OF pregc IS SIGNAL tRofR1,tAofR1 : STD_LOGIC; SIGNAL tRofR2,tAofR2 : STD_LOGIC; SIGNAL tA1,tA2 : STD_LOGIC; SIGNAL tR1,tR2 : STD_LOGIC; BEGIN PROCESS(clock,reset) VARIABLE temp : INTEGER RANGE 0 TO 10; BEGIN if (reset = '1') then temp := 0; tRofR1 <= '0'; tAofR1 <= '0'; tRofR2 <= '0'; tAofR2 <= '0';

tR1 <= '0'; tR2 <= '0'; tA1 <= '0'; tA2 <= '0'; elsif (clock 'event and clock = '1') then --------------------------------------Evaluamos si hay actividad en R1 --o si existe actividad en R2 --siempre y cuando el sistema est --disponible. ------------------------------------if (R1 = '1') then tR1 <= '1'; tRofR1 <= '1'; elsif (R2 = '1') then tR2 <= '1'; tRofR2 <= '1'; end if; --------------------------------------Procesamos la senal tR1. ------------------------------------if (tR1 = '1') then --------------------------------------Procesamos la senal tR. ------------------------------------if (tRofR1 = '1') then R <= '1'; temp := temp + 1; if (temp = 5) then temp := 0; tRofR1 <= '0'; R <= '0'; tAofR1 <= '1'; end if; end if; --------------------------------------Procesamos la senal tA. ------------------------------------if (tAofR1 = '1') then A <= '1'; temp := temp + 1; if (temp = 2) then temp := 0; tAofR1 <= '0'; A <= '0'; tA1 <= '1'; end if; end if; --------------------------------------Procesamos la senal tA1. ------------------------------------if (tA1 = '1') then temp := temp + 1; if (temp = 2) then temp := 0; tA1 <= '0'; tR1 <= '0'; end if; end if; --------------------------------------Procesamos la senal tR2.

------------------------------------elsif (tR2 = '1') then --------------------------------------Procesamos la senal tR. ------------------------------------if (tRofR2 = '1') then R <= '1'; temp := temp + 1; if (temp = 5) then temp := 0; tRofR2 <= '0'; R <= '0'; tAofR2 <= '1'; end if; end if; --------------------------------------Procesamos la senal tA. ------------------------------------if (tAofR2 = '1') then A <= '1'; temp := temp + 1; if (temp = 2) then temp := 0; tAofR2 <= '0'; A <= '0'; tA2 <= '1'; end if; end if; --------------------------------------Procesamos la senal tA1. ------------------------------------if (tA2 = '1') then temp := temp + 1; if (temp = 2) then temp := 0; tA2 <= '0'; tR2 <= '0'; end if; end if; end if; end if; END PROCESS; A1 <= tA1; A2 <= tA2; END a;

Los retardos de las entradas respecto a las salidas son:

El rea expresa en LUTs es 93:

Das könnte Ihnen auch gefallen