Sunteți pe pagina 1din 13

Universitatea VALAHIA din Trgovite Facultatea de Inginerie Electric

29.01.2010

PROIECT
Shift register Disciplina: Analiza i Sinteza Circuitelor Numerice
ndrumtor, l.dr.ing. Gabriel PREDUC Specializarea Automatic; Student, Niulescu Cristian, Anul II;

Aceast lucrare prezint modelarea unui registru de deplasare n VHDL, testarea realiznd-o cu ModelSim. 1. Noiuni generale Registrele sunt circuite logice secveniale care permit stocarea i/sau deplasarea informaiei codificate binar. Ele se realizeaz din celule de memorie binar (CBB) i din circuite logice combinaionale (CLC), care permit nscrierea, citirea i transferul informaiei. Capacitatea unui registru este dat de numrul celulelor de memorie. Orice informaie binar, care nu depete capacitatea registrului, poate fi nscris prin acionarea corespunztoare a intrrilor (care depinde i ea de natura bistabilelor). Registrele pot s fie de mai multe tipuri: de memorie; de deplasare; combinate; universale. Registrele de memorie memoreaz informaia binar n celule de memorie binar. n fiecare celul de memorie se memoreaz un bit de informaie. ncrcarea se poate face paralel, prin intrrile asincrone, de Set i Reset. Registrele de deplasare sunt cele care realizeaz transferul informaiei. Transferul se poate face: stnga-dreapta; dreapta-stnga; n ambele sensuri. La fiecare impuls de tact coninutul registrului se deplaseaz cu cte o celul (n sensul stabilit). Semnalul de ieire este identic cu cel de intrare, dar ntrziat cu un numr de impulsuri de tact egal cu numrul de celule de memorie din care este format registrul. Exceptnd primul bistabil, ecuaia de stare a unui registru de deplasare stngadreapta este dat de relaia: Qi(t+1) = Qi-1(t) c (unde c = impulsul de tact). Exemplu: Registru de deplasare stnga-dreapta cu bistabile JK MS. Q0 Q1 Q2 SIN J0 Q0 J1 Q1 J2 Q2 CLK CLK CLK K0 Q0 K1 Q1 K2 Q2 R R R R Reset CLK La fiecare impuls de tact coninutul bistabilului Qi se transfer n bistabilul Qi+1. n bistabilul Q0 se introduce informaia din exterior, iar coninutul ultimului bistabil se pierde. ncrcarea registrului se realizeaz deci n mod serie. Iniializarea registrului se face prin semnalul de Reset, care foreaz toate ieirile registrului n 0 logic. Registrele de deplasare dreapta-stnga i reversibile se realizeaz folosind circuite logice combinaionale suplimentare. Registrele combinate sunt cele care au i funcia de memorare i cea de deplasare.

Q3 J3 Q3 CLK K3 Q3

Registrele universale cumuleaz toate funciile: deplasare stnga-dreapta, deplasare dreapta-stnga, ncrcare serie sau paralel a informaiei, citire serie sau paralel a informaiei. RI A B C D LI S0 S1

CLK CLR

D Q CLK CLR

D Q CLK CLR

D Q CLK CLR

D Q CLK CLR

Q0 Q1 Q2 Q3 Intrrile de selecie S1S0 condiioneaz modul de funcionare a registrului. Avem: S1S0 = 00 pstreaz coninutul nemodificat; S1S0 = 01 deplasare stnga-dreapta; S1S0 = 10 deplasare dreapta-stnga; S1S0 = 11 ncrcare paralel. tergerea registrului se face asincron, prin semnalul CLR. Aplicaii ale registrelor Registrele sunt utilizate n mai multe tipuri de aplicaii, dup funciile pe care pot s le ndeplineasc. 1. Registre de deplasare cu reacie Au ieirile conectate la intrri i pot fi: - registre de deplasare n inel coninutul ultimei celule de memorie se nscrie n prima celul de memorie; Q0 Q1 Q2 Q3 1 0 0 0 SIN 0 1 0 0 0 0 1 0 Q0 Q1 Q2 Q3 0 0 0 1 1 0 0 0 - registre (numrtoare) Johnson n prima celul se introduce coninutul negat al ultimei celule. Q0 Q1 Q2 Q3 0 0 0 0 SIN 1 0 0 0 1 1 0 0 Q0 Q1 Q2 Q3 1 1 1 0 1 1 1 1

0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 2. Memorie de tip FIFO (First In, First Out), primul nscris primul citit (memorie coad) Se realizeaz cu registre de deplasare stnga-dreapta. Numrul registrelor depinde de lungimea cuvintelor ce urmeaz a fi memorate. Capacitatea memoriei depinde de lungimea registrelor. De exemplu, dac registrele sunt de 4 bii, capacitatea memoriei este de 4 cuvinte. La fiecare impuls de tact se introduc datele pe intrarea serial. y1 SIN x1 y2 SIN x2 y3 SIN x3 y4 SIN x4 CLK Ts Ts Ts Ts

2. Modelul unui circuit combinational Test Bench pentru un registru pe 2 biti: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all; entity reg_TB is end reg_TB; -- entity declaration

----------------------------------------------------------------architecture TB of reg_TB is component reg port( I: in std_logic_vector(1 downto 0); clock: in std_logic; load: in std_logic; clear: in std_logic; Q: out std_logic_vector(1 downto 0) ); end component; signal signal signal signal signal begin U_reg: reg port map (T_I, T_clock, T_load, T_clear, T_Q); -- concurrent process to offer the clock signal process begin T_clock <= '0'; wait for 5 ns; T_clock <= '1'; wait for 5 ns; end process; process variable err_cnt: integer :=0; begin T_I <= "10"; T_load <= '0'; T_I: std_logic_vector(1 downto 0); T_clock: std_logic; T_load: std_logic; T_clear: std_logic; T_Q: std_logic_vector(1 downto 0);

T_clear <= '1'; -- case 1 wait for 20 ns; T_load <= '1'; wait for 10 ns; assert (T_Q="10") report "Test1 Failed!" severity error; if (T_Q/=T_I) then err_cnt := err_cnt+1; end if; -- case 2 wait for 10 ns; T_load <= '0'; wait for 10 ns; assert (T_Q="10") report "Test2 Failed!" severity error; if (T_Q/=T_I) then err_cnt := err_cnt+1; end if; -- case 3 wait for 10 ns; T_clear <= '0'; wait for 10 ns; assert (T_Q="00") report "Test3 Failed!" severity error; if (T_Q/=T_I) then err_cnt := err_cnt+1; end if; -- case 4 wait for 10 ns; T_clear <= '1'; wait for 10 ns; assert (T_Q="00") report "Test4 Failed!" severity error; if (T_Q/=T_I) then err_cnt := err_cnt+1; end if; -- summary of all the tests if (err_cnt=0) then assert false

report "Testbench of register completely successfully!" severity note; else assert true report "Something wrong, check again pls!" severity error; end if; wait; end process; end TB; ----------------------------------------------------------------configuration CFG_TB of reg_TB is for TB end for; end CFG_TB; -----------------------------------------------------------------

--------------------------------------------------Test bench pentru un registru pe n biti: --------------------------------------------------library ieee ; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; --------------------------------------------------entity reg is generic(n: natural :=2); port( I: in std_logic_vector(n-1 downto 0); clock: in std_logic; load: in std_logic; clear: in std_logic; Q: out std_logic_vector(n-1 downto 0) );

end reg; ---------------------------------------------------architecture behv of reg is signal Q_tmp: std_logic_vector(n-1 downto 0); begin process(I, clock, load, clear) begin if clear = '0' then -- use 'range in signal assigment Q_tmp <= (Q_tmp'range => '0'); elsif (clock='1' and clock'event) then if load = '1' then Q_tmp <= I; end if; end if; end process; -- concurrent statement Q <= Q_tmp; end behv; --------------------------------------------------Test bench pentru un registru pa n biti. --------------------------------------------------library ieee ; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; --------------------------------------------------entity reg is generic(n: natural :=2); port( I: in std_logic_vector(n-1 downto 0); clock: in std_logic; load: in std_logic; clear: in std_logic;

Q: ); end reg;

out std_logic_vector(n-1 downto 0)

---------------------------------------------------architecture behv of reg is signal Q_tmp: std_logic_vector(n-1 downto 0); begin process(I, clock, load, clear) begin if clear = '0' then -- use 'range in signal assigment Q_tmp <= (Q_tmp'range => '0'); elsif (clock='1' and clock'event) then if load = '1' then Q_tmp <= I; end if; end if; end process; -- concurrent statement Q <= Q_tmp; end behv; --------------------------------------------------2. Compilarea i simularea circuitelor combinaionale

Bibliografie

1. Dan Nicula, Electronic digital, Editura Tehnic, 2005, Bucureti, ISBN 973-31-2270-X 2. Wakerly John F., Circuite digitale. Principiile i practicile folosite n proiectare, Editura Teora, 2002, 928 pg., ISBN 973-20-0659-5. 3. Murean T., Gontean A., Bbi M., Circuite digitale, Editura de vest, Timioara, 2005, 218pg., ISBN 973-36-416-X.

S-ar putea să vă placă și