Examen Final Primavera 2013 (2) (2014)

Apunte Catalán
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería de Sistemas de Telecomunicación - 2º curso
Asignatura Disseny Digital
Año del apunte 2014
Páginas 4
Fecha de subida 08/04/2015
Descargas 0
Subido por

Vista previa del texto

ETSETB Disseny Digital Control de Laboratori    Curs: Primavera 2013 Publicació notes provisionals (atenea): 28-06-2013, 23:55.
Presentació d’al·legacions (web ETSETB): 30-06-2013, 23:55.
Publicació notes definitives (atenea): 01-07-2013, 14:00.
El codi VHDL donat a la següent plana, on per més comoditat s’han numerat les línies, descriu l’entitat cpDD, que volem sintetitzar amb el Quartus II.
a) (20%) Descriviu la funció (o funcions) que fa cpDD.
b) (20%) En compilar l’arxiu cpDD.vhd en el Quartus II, apareixen els missatges donats a sota, referits a les línies 4 i 15. Expliqueu quin error origina cada missatge i corregiu-lo.
Error (10482): VHDL error at cpDD.vhd(4); object “std_logic” is used but not declared Error (10500): VHDL syntax at cpDD.vhd(15) near text “,”; expecting “(“, or “ ’ ”, or “.” c) (20%) Un cop corregits els errors anteriors i compilat l’arxiu, s’ha obtingut la simulació mostrada a sota. Aquesta simulació sembla indicar un funcionament incorrecte del disseny, car segons el codi VHDL les sortides qa, qb, qc i qd només poden tenir valors zero o provinents de l’entrada numBCD. Expliqueu raonadament què passa.
AB d) (10%) Expliqueu quin és el valor del senyal q que falta al final del cronograma.
e) (30%) Utilitzant portes i mòduls combinacionals i seqüencials estàndard, dibuixeu un esquema equivalent de cpDD. Indiqueu clarament quins senyals connecten els components entre si, així com les entrades i sortides.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
library ieee; entity cpDD is port (clk, nrst, ld_qx, ld_x : in std_logic; numBCD : in std_logic_vector(7 downto 0); qa, qb, qc, qd : out std_logic_vector(7 downto 0)); end cpDD; architecture wertl of cpDD is signal q : std_logic_vector(1 downto 0); begin process (clk, nrst) begin if nrst='0' then qa, qb, qc, qd <= x"00"; q <= "00"; elsif clk'event and clk='1' then if ld_x='1' then q <= numBCD(1 downto 0); end if; if ld_qx='1' then case q is when "00" => qa <= numBCD; when "01" => qb <= numBCD; when "10" => qc <= numBCD; when "11" => qd <= numBCD; end case; end if; end if; end process; end wertl; Solució a) És un sistema seqüencial síncron que, per ld_qx=’1’, carrega el valor de l’entrada numBCD, de 8 bits, en un dels registres qa, qb, qc, o qd, mentre que per ld_qx=’0’, tots quatre registres mantenen el seu valor. El registre destí l’indica el senyal q, de 2 bits, que està emmagatzemat en un altre registre i que actualitza el seu valor (amb els dos bits de menys pes de numBCD) quan ld_x=’1’.
El reset és asíncron, actiu en nivell baix i posa tots els registres a zero.
b) 1er error: en VHDL no es poden utilitzar els tipus std_logic i std_logic_vector si abans no s’han declarat la llibreria i el paquet on aquests tipus estan definits. La primera línia on s’esmenta un d’aquests tipus és la 4, lloc on apunta el missatge d’error. Per corregir-lo cal declarar el paquet std_logic_1164 (veure a sota).
2on error: l’assignació múltiple que es fa a la línia 15 és sintàcticament incorrecta. Una solució és assignar cada senyal per separat (veure a sota).
library ieee; use ieee.std_logic_1164.all; --correcció error 1 ...
process (clk, nrst) begin if nrst='0' then qa<=x"00"; qb<=x"00"; qc<=x"00"; qd<=x"00"; --correcció error 2 q <= "00"; elsif clk'event and clk='1' then ...
c) No hi ha res malament. L’aparent incongruència de valors entre l’entrada numBCD i les sortides qa, qb, qc i qd es deu a que totes corresponen a busos de 8 bits, però s’estan visualitzant en formats diferents. Així, numBCD es visualitza en hexadecimal (un enter positiu per a cada 4 bits) i la resta en unsigned (un enter positiu codificat en binari de 8 bits). Per exemple, el valor 48 de qa correspon al binari 0011 0000, que en hexadecimal és 30, valor que apareix en el cronograma de numBCD.
Per “arreglar-ho” podem dir-li al Quartus II que visualitzi les sortides qa a qd en el mateix format (hexadecimal) que numBCD. El resultat seria el següent, AB q <= 0 q <= 2 qa <= 30 q <= 3 qc <= 31 q <= 1 qd <= 33 qb <= 19 d) D’acord amb el que s’ha dit més amunt, el valor final de q és 1, és a dir 01 en binari, que són els dos bits de menys pes de numBCD=[19]16=[0001 1001]2.
e) L’esquema demanat és, Reg cpDD clk nrst Reg numBCD[7..0] 0 Reg LD q[1..0] qb[7..0] LD numBCD[1..0] ld_x clk nrst ld_qx qa[7..0] LD 2:4 1 Decoder 2 enable clk nrst Reg qc[7..0] LD 3 clk nrst Reg qd[7..0] LD clk nrst ...