PRACTICA 4 - mrpss1234/Treball-de-Final-de-Grau GitHub Wiki

Realització Pràctica 4:

Carrega de dades:

Per a realitzar la carrega dels 8 bits del puk o dels 4 bits del codi segons el mode de funcionament en el que estiguem no podem fer-ho únicament amb portes lògiques, en aquests casos fa falta un registre de desplaçament, en aquest cas un registre de desplaçament de carrega en paral·lel.

Registres de desplaçament:

Un registre de desplaçament es un circuit digital seqüencial (es a dir, que els valors de les seves sortides depenen de les entrades i dels seus valors anteriors) consistent en una sèrie de biestables, normalment aquest biestables son de tipus D, connectats en cascada, que funcionen de manera síncrona amb la mateixa senyal de rellotge. Segons les connexions entre els biestables del registre es pot aconseguir un desplaçament cap a l’esquerra o cap a la dreta de la informació emmagatzemada. Cal destacar que desplaçar cap a la dreta un conjunt de bits equival a multiplicar per dos i desplaçar cap a la dreta equival a dividir entre 2. També existeixen registres bidireccionals, que poden funcionar en ambos sentits. Depenent del tipus d’entrades i sortides, els registres de desplaçament es poden classificar com:

  • Sèrie-Sèrie: Nomes són accessibles externament la entrada del primer flip-flop i la sortida de l’últim.
  • Paral·lel-Sèrie: Són accessibles les entrades de tots els flips-flops però nomes la sortida de l’últim. Aquest tipus s’utilitza per convertir dades sèrie en paral·lel i a la inversa.
  • Sèrie-Paral·lel: Al contrari que l’anterior, són accessibles totes les sortides dels flips-flops però només la primera entrada.
  • Paral·lel-Paral·lel: Tant les entrades com les sortides son accessibles, s’utilitzen per càlculs aritmètics.

Aplicacions:

  • Generador Pseudoaleatori
  • Multiplicador en sèrie
  • Registre de aproximacions successives
  • Retardador de bits

Introducció Codi PIN:

Un cop que el tècnic de l’operador de mòbil ha fixat mitjançant les senyals PukProg i CodeProg el mode I de funcionament s’ha introduir el codi PIN format per un nombre de 4 bits. Per poder emmagatzemar el codi PIN s’utilitza un registre format per 4 biestables de tipus D connectats en cascada. El valor del codi PIN introduit pel tècnic només es quedarà emmagatzemat al registre quan el valor de DATAIN serà de 0. Això provocarà que el codi PUK es quedi gravat al sistema. Per controlar que el codi es quedi emmagatzemat quan l’operari esta en el mode 1, controlem la senyal de rellotge del registre amb una porta AND de 3 entrades, assegurant-nos que només funcionarà aquest registre quan el valor de les senyals PukProg i CodeProg siguin “0,1” respectivament i DATAIN generi un 0.

Introducció del Puk:

El Puk que volem introduir és un nombre binari que esta format per 8 bits, per tant necessitarem construir un registre per poder emmagatzemar el seu valor quan el operari estigui en Mode 2 Per realitzar-ho, construirem el registre mitjançant 8 flip-flops connectats en cascada, on el seu valor D per cada flip-flop serà el corresponent dígit en binari del Puk. Volem que el codi Puk nomes quedi enregistrat com ens diu el enunciat quan el valor de PukProg sigui “1” i CodeProg sigui “0”. Per tant, mitjançant lògica binaria connectem aquestes dos entrades (PukProg i CodeProg) mitjançant una porta AND de 3 entrades. Quan el operari premi el polsador de DATAIN, la senyal activarà la porta AND i arribarà un 1 a la senyal de rellotge del registre, de manera que el bit assignat a cada flip-flop quedarà enregistrat.

Validació del PIN:

Un cop el operari ha establert el codi Puk, es el moment de validar el codi PIN. Per poder-lo validar, el operari ha ficar el dispositiu en Mode 0, mitjançant la introducció de les senyals CodeProg i PukProg amb un valor de “0” binari les dues. Un cop el dispositiu ja esta en Mode 0, l’operari ha d’introduir el codi PIN ha validar. Aquest codi PIN s’enmagatzemara de la mateixa forma que les dos vegades anteriors. Mitjançant un registre format per 4 biestables de tipus D colocats en cascada amb una senyal de rellotge que només s’activi quan les senyals de control CodeProg i PukProg i DataIn valguin 0. Una vegada el operari ha carregat el codi PIN ha validar, mitjançant un conjunt de portes logiques tal i com es mostra es procedeix a la comprovació de que es el mateix nombre. A la sortida del circuit de portes logiques hi haura la senyal CodeOK, que serà de valor alt quan el codi introduit per el operari sigui vàlid. Si la validació del PIN s’ha realitzat correctament, CodeOK valdra un 1 i s’encendra el LED.

Introducció Codi PIN a validar:

Validació del Codi PIN:

Validacio del Puk:

De la mateixa forma que la validació del PIN, l’operari ha de validar el PUK. Per poderlo validar, les senyals de control han de ser CodeProg=0 i PukProg=0. Un cop l’operari te marcat el codi Puk per validar, apreta el boto de DATAIN. Al apretar-lo, la senyal del rellotge pertanyent al registre encarregat de emmagatzemar el Puk a validar s’activa i queda el Puk gravat dins del registre, format per 8 flip-flops tipus D en cascada.

Un cop ha quedat registrat el codi Puk a comparar, mitjançant un conjunt de portes logiques es compara cada bit del codi Puk a validar amb el original i s’obte com a sortida la senyal PukOk, que s’activara quan el codi a validar sigui correcte.

Connexions al IceStudio-LEDS:

Connexions a la placa de training FPGA-UdL Sortides PUKLoaded [7..0] i CodeLoaded [3..0]

  • PUK7Loaded --> LED7

  • PUK6Loaded --> LED6

  • PUK5Loaded --> LED5

  • PUK4Loaded --> LED4

  • PUK3Loaded --> LED3

  • PUK2Loaded --> LED2

  • PUK1Loaded --> LED1

  • PUK0Loaded --> LED0

  • Code3Loaded D11 --> RED_A

  • Code2Loaded D12 --> YELLOW_A

  • Code1Loaded D13 --> GREEN_A

  • Code0Loaded DD0 (A0) --> RED_B

  • CodeOK DD1 (A1) --> GREEN_B

  • PukOK DD2 (A2) --> YELLOW_B

Conexions IceStudio-Entrades:

Connexions a la placa de training FPGA-UdL

Entrades PUK [7..0] i Code [3..0]

  • PUK7/Code3 D0 <-- 1A

  • PUK6/Code2 D1 <-- 2A

  • PUK5/Code1 D2 <-- 3A

  • PUK4/Code0 D3 <-- 4A

  • PUK3 D4 <-- 1B

  • PUK2 D5 <-- 2B

  • PUK1 D6 <-- 3B

  • PUK0 D7 <-- 4B

  • DATAIN D8 <-- PUSH_D (cal prémer per fer un flanc de pujada amb DATAIN)

  • CODEPROG D9 <-- PUSH_C (quan es prem es genera un 0)

  • PUKPROG D10 <-- PUSH_B (quan es prem es genera un 0)

Funcionament Pràctica 4:

Watch the video