You are on page 1of 53

Qarqet sekuenciale

Flip-Flop

Portat AND, OR dhe NOT janë elementët bazë për dizenjimin e qarqeve logjike. Me këto blloqe
bazë prodhuesit ndërtojnë qarqe që mund të njohin fjalët, t`i konvertojnë ato nga decimalë në
binarë, të kryejnë veprime aritmetike dhe logjike. Por nuk mjafton. Kompjuteri ka nevojë gjithashtu
për elementë kujtese (memorie), pra për elementë që magazinojnë shifra binare. Qarqet sekuenciale
janë qarqet logjike, daljet e të cilave nuk varen vetëm nga gjendja e hyrjeve por edhe nga gjendja e
brendshme e vetë qarkut. Gjendja e brendshme e qarkut mund të jetë logjika 0 ose logjika 1, dhe për
shkak të aftësisë për të ruajtur gjendjen quhen qarqe me memorie. Qarqet sekuenciale kanë dy dalje
sekuenciale, të cilat janë komplementare të njëra-tjetrës. Qarqet sekuenciale mund të realizohen ose
jo me porta logjike. Flip flop-ët, të njohur ndryshe si multivibratorë me dy gjendje të qëndrueshme
(bistable), janë qarqe elektronike me dy gjendje të qëndrueshme. Një element memorie është një
pajisje e aftë të ruajë një informacion prej një bit deri sa të jetë e nevojshme dhe pas kësaj
përmbajtja e saj mund të ndryshojë në një vlerë të re. Informacioni binar i ruajtur në elementet e
memories në çdo çast të kohe përcakton gjendjen e qarkut sekuencial.
Qarku sekuencial merr informacionin binar nga hyrjet e jashtme. Këto hyrje, së bashku me gjendjen
aktuale të elementeve të memories përcaktojnë vlerën binare të daljeve. Këto përcaktojnë gjithashtu
kushtin për ndryshimin e gjendjes në elementët e memories. Qarqet kombinatorë shpesh janë më të
shpejtë se qarqet sekuenciale, meqenëse qarqet kombinatore nuk kërkojnë elementë të memories,
ndërsa qarqet sekuenciale kanë nevojë për elementë të memories për të kryer veprimet e tij njëri pas
tjetrit (me një rend të caktuar kohor). Një qark sekuencial sinkron është një sistem, ku sjellja e tij do
të përcaktohet nga njohja e sinjaleve të tij në çaste të caktuara të kohës. Në këto sisteme, elementët
e memories veprojnë vetëm në çaste kohe të caktuara. Sinkronizimi realizohet me një pajisje
sinkronizimi që njihet si gjeneratori i orës (clock), i cili gjeneron një varg periodik të impulseve të
clock-ut.

Një qark sekuencial, sjellja e të cilit varet nga renditja me të cilën ndryshojnë sinjalet në hyrje të tij
quhet qark sekuencial asinkron. Dalja ndikohet sa herë që hyrja ndryshon dhe nuk nevojitet ardhja e
impulsit të clock. Në një qark sekuencial asinkron veprimet ndodhin pa asnjë sinkronizim. Prandaj,
në përgjithësi, qarqet sekuenciale asinkrone janë më të shpejtë se qarqet sekuenciale sinkrone.
Elementët e memories që përdoren zakonisht në këto qarqe janë pajisje me kohë vonese.Aftësia e
kujtesës së një pajisje me kohë vonese është për shkak të një kohe të caktuar që i duhet sinjalit të
përhapet nëpër pajisje. Praktikisht, vonesa e përhapjes së sinjalit në portat logjike është një
kohëzgjatje e mjaftueshme për të prodhuar vonesën e nevojshme, kështu që elementët fizikë me
kohë vonese janë të panevojshme. Elementët e memories në sistemet sekuencial asinkron përbëhen
nga porta logjike, në të cilat vonesa e përhapjes përbën memorien e kërkuar.
1
Prandaj, një qark sekuencial asinkron mund të shihet si një qark kombinator me lidhje të kundërt.
Për shkak të lidhjes së kundërt, qarku sekuencial shpesh bëhet i paqëndrueshëm. Qarqet më të
thjeshta memorizuese njihen si flip-flopë. Kemi katër lloje flip flop-ësh si në vijim:
1. Set-Reset (SR) ose Latch
2. D (Data ose Delay)
3. JK
4. T (Toggle)

Latch
Një latch, siç thamë më lart, është një qark multivibrator me dy gjendje të qëndrueshme (bistabël).
Të dy gjendjet e tij të daljes janë të qëndrueshme. Qarku mbetet në një gjendje të caktuar të daljes,
ose LOW ose HIGH, për një kohë të pacaktuar, derisa qarku trigerohet në mënyrë të përshtatshme
për të ndryshuar këtë gjendje të daljes në gjendjen tjetër. Nëse daljet LOW dhe HIGH konsiderohen
respektivisht si 0 ose 1, atëherë dalja mund të jetë 0 ose 1. Ky qark ruan gjendjen deri sa trigerohet
dhe është i aftë të ruajë një shifër binare.

Latch S-R
Një latch SR ka dy hyrje të emërtuara S (Set) dhe R (Reset) dhe ka dy dalje 𝑄 dhe 𝑄̅ . Kur latch ka
gjendjen set, dalja e tij ka vlerën 𝑄 = 1 dhe kur reset ka vlerën 1 atëherë dalja 𝑄 = 0. Dalja 𝑄̅
njihet si dalja komplementare e 𝑄. Kjo nënkupton që të dyja daljet nuk mund të kenë të njëjtën
gjendje njëkohësisht. Latch mund të realizohen me anë të portave logjike AND ose NOR.
Kodi VHDL për SR-Latch jepet si në vijim:
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity SR_Latch is
port(
enable : in STD_LOGIC;
s : in STD_LOGIC;
r : in STD_LOGIC;
reset : in STD_LOGIC;
q : out STD_LOGIC;
qb : out STD_LOGIC
);
end SR_Latch;

architecture SR_Latch_arc of SR_Latch is


begin
latch : process (s,r,enable,reset) is
begin
if (reset='1') then
q <= '0';
qb <= '1';
elsif (enable='1') then
if (s/=r) then
q <= s;
qb <= r;
elsif (s='1' and r='1') then
q <= 'Z';
qb <= 'Z';
end if;
end if;
end process latch;
end SR_Latch_arc;

2
Latch SR me hyrje aktive LOW implementohet me anë të dy portave NAND, siç tregohet në
figurën në vijim.

Theksojmë se dalja e çdo porte NAND është e lidhur me njërën prej hyrjeve të portës tjetër. Kjo
lidhje e kryqëzuar e portave NAND përbën lidhje të kundërt dhe ky qark nuk ka nevojë për
sinkronizim, prandaj quhet qark sekuencial asinkron.

Latch SR me hyrje aktive HIGH

Latch SR me hyrje aktive HIGH mund të realizohet nëpërmjet portave logjike NOR së në figurën në
vijim.

Për të analizuar qarkun, duhet të kemi parasysh që porta NOR ka dalje të barabartë me 0 derisa të
paktën njëra nga hyrjet ka vlerën 1, pavarsisht nga hyrja tjetër. Për të krahasuar latch SR të realizuar
me porta NAND dhe NOR, konstatojmë se në thelb ata veprojnë si komplementë të njëri-tjetrit. Për
të shndërruar një latch SR me hyrje aktive LOW të implementuar me porta NAND, në një latch SR
me hyrje aktive HIGH të implementuar me porta NOR, mjafon të vendosim një portë invertuese në
hyrjet set dhe reset.

Latch SR me hyrje aktive HIGH i realizuar me porta NAND


3
Latch SR me hyrje aktive LOW i realizuar me porta NOR

4
Në vijim ilustrohet shembull i diagramës kohore për latch SR me hyrje aktive LOW:

Kodi VHDL për latch SR me hyrje aktive LOW jepet në vijim:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity SRLatch is
port (SNot, RNot: in std_logic; Q,
QNot: inout std_logic);
end entity SRLatch;
architecture LogicOperation of SRLatch
is
begin
Q <= QNot nand SNot;
QNot <= Q nand RNot;
end architecture LogicOperation;

Latch SR me hyrje aftësuese (enable)

Funksionimi i një latch mund të modifikohet duke siguruar një hyrje shtesë aftësuese EN (enable)
që kontrollon sjelljen e qarkut dhe që përcakton se kur duhet të ndryshohet gjendja e qarkut. Skema
e një latch SR me hyrje aftësuese tregohet në figurën e mëposhtme.

5
Latch SR aktive HIGH me hyrje EN

Po të shikojmë skemën, të dy portat NAND 1 dhe NAND 2 formojnë latch SR aktive LOW. Kur
sinjali EN është në nivelin e lartë logjik HIGH, të dyja portat NAND aktivizohen dhe hyrjet S dhe R
aplikohen në hyrje të latch në gjendjen e tyre komplementare. P.sh kur S=1 dhe R=0, jepen në vlerë
0 dhe 1 në hyrje të latch, dhe kur EN është HIGH. Kur EN është LOW, të dyja portat NAND
gjenerojnë një 1 logjik në daljet e tyre, pavarsisht gjendjeve në hyrjet S dhe R. Ky 1 logjik i
aplikuar në të dyja hyrjet S dhe R të latch bën që daljet e tij të mos ndikohen dhe të ruajnë gjendjen
e mëparshme. Pra, në këtë situatë, ndryshimet në hyrjet S dhe R nuk do të ndikojnë në gjendjen e
daljeve të latch. Në këtë mënyrë, në latch mund të ruhet çdo informacion, ose 0 ose 1. Duke
aplikuar një nivel HIGH në hyrjen EN, informacioni nga hyrjet e latch reflektohet në dalje dhe duke
aplikuar nivelin LOW në hyrjen EN, ky informacion ruhet për çdo periudhë të caktuar kohe. Në
këtë qark, gjendja e papërcaktuar ndodh kur të dyja hyrjet S dhe R janë në nivelin logjik HIGH.

Kurse qarku me latch SR aktive HIGH jepet në figurën në vijim.

6
Latch D me hyrje aftësuese (enable)

Një tip tjetër latch me hyrje aftësuese EN është edhe latch i tipit D. Ai ndryshon nga latch SR sepse
përveç EN, ai ka vetëm një hyrje D, e cila quhet hyrja e të dhënave. Latch D ka aftësinë të ruajë të
dhënat kur EN është HIGH. Dalja ndjek hyrjen e të dhënave për sa kohë EN=1, kur EN merr vlerën
0, informacioni binar i mëparshëm në daljen Q do të ruhet derisa të marrë përsëri vlerën EN=1.
Meqenëse latch D realizohet duke lidhur hyrjet S dhe R, duhet të evitojmë gjendjen e papërcaktuar
për latch SR kur të dyja hyrjet marrin vlerën 1, prandaj i lidhim ato me portë NOT.

Kodi në VHDL për D latch jepet si në vijim:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity d_latch is
port (
signal d, g: in std_logic;
signal q: out std_logic
);
end d_latch;

architecture behavior of d_latch is


state: process (g, d)
if (g = '1') then
q < = d;
end if;
end process;
end behavior;

7
Latch SR me hyrje aktive LOW

Kurse kodi në VHDL për D latch me hyrje aftësuese jepet si në vijim:

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity DLatch1 is
port (D, EN: in std_logic; Q, QNot: inout
std_logic);
end entity DLatch1;
architecture LogicOperation of DLatch1 is
begin
Q <= QNot nand (D nand EN);
QNot <= Q nand (not D nand EN);
end architecture LogicOperation;

Flip Flop

Flip-flopët janë qarqe sinkrone me dy gjendje të qëndrueshme (bistabla), sepse kontrollohen nga
impulset e clock-ut. Nëse një latch SR me hyrje aftësuese EN, gjatë kohës që hyrja EN është në
nivelin logjik HIGH ose LOW, dalja i përgjigjet të dhënave në hyrje, pra çdo ndryshim në hyrje
reflektohet në dalje sipas tabelës së vërtetësisë. Kurse te FF, dalja i përgjigjet të dhënave në hyrje
vetëm me kalimin nga LOW në HIGH (fronti rritës) ose nga HIGH në LOW (fronti zbritës) të
sinjalit të aftësimit CLK. Ky kalim nga një nivel logjik në tjetrin quhet trigerim dhe FF quhen
respektivisht me trigerim pozitiv dhe trigerim negativ.

Krahasimi ndërmjet latch D dhe FF D

8
Flip Flop SR

Një flip-flop (FF) është një element kujtese që akumulon një shifër binare si tension të ulët apo të
lartë. Në figurën në vijim jepet simboli i flip-flop SR.

Flip-flop S-R është qarku i ruajtjes së të dhënave që dizenjohet nëpërmjet portave logjike duke
përdorur lidhjen e dy portave NOR sipas Figurës 1–1.

Figura 1–1 Flip-flop S-R me porta NOR: (a) gjendja Set (b) gjendja Reset

Le të analizojmë skemën duke supozuar se hyrja Set ka logjikën 1 (HIGH) dhe gjendjen 0 (LOW)
në Reset [Figura 1–1(a)]. Kjo njihet si gjendja Set dhe e bën daljen Q = 1 dhe daljen 𝑄̅ = 0.
Gjendja HIGH në Set do ta bëjë daljen e portës së sipërme NOR të barabartë me 0 (𝑄̅ = 0) dhe 0 do
të jepet në hyrje të portës së poshtme NOR, ku së bashku me gjendjen LOW të hyrjes Reset do të
japë në dalje gjendjen 1 (Q=1). Kur gjendja 1 nuk jepet në hyrje të hyrjes Set, flip-flopi duhet të
ruajë gjendjen Set (Q=1 dhe 𝑄̅ = 0). Kur Set=0, Reset=1 dhe Q=1 janë gjendjet e mëparshme. Porta
e sipërme NOR kalon nga gjendja 0 në 1, duke e bërë 𝑄̅ = 0, kurse porta e poshtme NOR vazhdon
të ruajë gjendjen 0, pra Q=1. Flip flop do të ruajë gjendjen Set edhe pasi hyrja Set kthehet në
gjendjen 0 (kjo quhet ruajtja e gjendjes).
Për të Reset flip-flop mjafton të bëjnë S=0, R=1 [Figura 1–1(b)]. Me R=1, porta e poshtme NOR do
të ketë daljen 0 (Q=0), duke e bërë daljen e portës së sipërme 1 (𝑄̅ = 1), kështu që flip-flop
“ndryshon gjendjen” duke kaluar në gjendjen Reset. Gjendja tjetër që duhet të marrin në
konsideratë është kur të dyja hyrjet S dhe R janë HIGH. Në këtë rast, të dyja portat NOR do të
kalojnë në gjendjen LOW, duke i bërë Q dhe 𝑄̅ të barabarta me 0 dhe zakonisht ky kusht nuk
përdoret. Nga analiza e mësipërme, tabela 1-1 e vërtetësisë për flip-flop S-R jepet në tabelën e
mëposhtme.

9
S R 𝑸 ̅
𝑸 Përshkrimi
0 0 𝑄 𝑄̅ Ruan gjendjen
0 1 1 0 Gjendja Set
1 0 0 1 Gjendja Reset
1 1 x x Gjendje e papërcakruar

Kodi në VHDL për FF SR jepet si në vijim:

library ieee;
use ieee. std_logic_1164.all;
use ieee. std_logic_arith.all;
use ieee. std_logic_unsigned.all;

entity SR_FF is
PORT( S,R,CLOCK: in std_logic;
Q, QBAR: out std_logic);
end SR_FF;

Architecture behavioral of SR_FF is


begin
PROCESS(CLOCK)
variable tmp: std_logic;
begin
if(CLOCK='1' and CLOCK'EVENT) then
if(S='0' and R='0')then
tmp:=tmp;
elsif(S='1' and R='1')then
tmp:='Z';
elsif(S='0' and R='1')then
tmp:='0';
else
tmp:='1';
end if;
end if;
Q <= tmp;
QBAR <= not tmp;
end PROCESS;
end behavioral;

1.1.2 Flip Flop RS me logjikën TTL

Në figurën 1-2 është një RS flip flop, ku çdo kolektor komandon bazën e tranzistorit tjetër përmes
një rezistence 100k. Në qoftë se β e çdo tranzistori është ≥ 20 = RB/RC, njëri tranzistor ngopet e
tjetri mbyllet. Kështu dalja Q mund të jetë L apo H (0 ose 1). Do të thotë që FF mund të akumulojë
vlerën logjike 0 apo 1, pra është element kujtese që magazinon një bit (0 ose 1). Për të kontrolluar
bitin e magazinuar në FF shtohen hyrjet trigeruese (që në fig 1-2 paraqiten me vijë të ndërprerë) R,
S (Reset, Set). Kur S=1 → FF kalon dhe mbetet (fiksohet) në gjendjen Q=1. Pra S=1 vendos (set)
daljen Q në 1. Kur R=1→ FF kalon dhe mbetet (fiksohet) në gjendjen Q=0. Pra R=1 vendos (set)
daljen Q në 0. Q përfaqëson bitin e ruajtur. Duhet theksuar se veç daljes Q mund të nxirret dhe
dalja tjetër që ka gjendje të kundërt logjike dhe prandaj shënohet me Ǭ mund të përdoret ose jo.

10
+15V

RC 5k 5k RC

Q
100k 100k

RB RB

100k
S

R 100k

Figura 1-2

1.1.3 Flip Flop RS me porta

Në figurën 1-3 parqitet RS FF i sinkronizuar. Pse duhet sinkronizuar? Sepse në kompjuter ka mijëra
FF. Për të koordinuar veprimin e përgjithshëm në secilin FF dërgohet një sinjal sinkronizimi (që
quhet clock). Ky sinjal bën që FF të ndërrojnë gjendjen vetëm në kohën e duhur. Në figurën 1-3 me
qënë se sinjali sinkronizues CLK i drejton të dy portat AND, atëherë CLK (gate enable)=HIGH
pengon që R dhe S të jepen në hyrjet e FF. Pra kur S =1, R =0 kjo sjell që dalja Q bëhet 1 vetëm
pasi CLK të bëhet 1 dhe e kundërta: kur S =0, R =1 dhe kjo sjell që Q =0 vetëm pasi CLK të bëhet
1. Qarqet e thjeshta logjike me porta, qarqet logjike kombinatore, dhe FF S-R quhen pajisje
asinkrone (jo sinkrone) sepse daljet e tyre i përgjigjen menjëherë ndryshimeve të hyrjeve. Kurse
qarqet sinkrone operojnë në mënyrë sekuenciale me anë të hyrjes së kontrollit. Për ta bërë FF S-R
sinkron, duhet të shtojmë një hyrje komanduese me porta, për të aftësuar ose jo hyrjet S dhe R.
Figura 1–3 tregon lidhjen e portave NOR S-R FF.

Figura 1-3 RS-FF me clock

11
Sx dhe Rx në Figurën 1–3 janë hyrjet Set dhe Reset të FF të realizuar me portat NOR. Meqenëse
kemi portat AND, duhet që Sx dhe Rx të jenë në gjendjen LOW–LOW (kushti i ruajtjes së gjendjes)
për sa kohë që Gate Enable është LOW. FF do të punojë normalisht ndërkohë që Gate Enable është
HIGH. Në vijim jepet simboli për këtë FF dhe tabela e vërtetësisë.

𝑮 𝑺 𝑹 𝑸 ̅
𝑸 Përshkrimi
0 0 0 Q ̅
Q Ruan gjendjen
0 0 1 Q ̅
Q Ruan gjendjen Hyrjet S-R nuk
0 1 0 Q ̅
Q Ruan gjendjen shfrytëzohen
0 1 1 Q ̅
Q Ruan gjendjen
1 0 0 Q ̅
Q Ruan gjendjen
1 0 1 0 1 Gjendja Reset Hyrjet S-R
1 1 0 1 0 Gjendja Set shfrytëzohen
1 1 1 0 0 Nuk përdoret

1.2 D Flip Flopi

FF RS ka dy hyrje të dhënash: S dhe R. Për të magazinuar bitin 1 kërkohet S =1, për të magazinuar
bitin 0 kërkohet R=1. Gjenerimi i dy sinjaleve për kontrollin e FF është një disavantazh në shumë
aplikime. Prandaj janë prodhuar D-FF, të cilët kanë vetëm një hyrje të dhënash, hyrjen D.

12
1.2.1 D-FF i pasinkronizuar (unclocked)

Ky tip FF formohet nga RS-FF, të lidhur si në Figurën 1-4. Biti i të dhënave D drejton hyrjen S
̅ drejton hyrjen R. Pra D=1, sjell që Q =1 (domethënë D-FF është set) dhe
ndërsa komplementi i tij 𝐷
kur D=0, sjell që Q=0 (domethënë D-FF është reset). D-FF i pasinkronizuar vendoset ose rivendoset
sapo D kalon nga gjendja HIGH apo LOW. Një D-FF i tillë pothuaj nuk përdoret.

Figura 1-4 D-FF i pasinkronizuar

1.2.2 D-FF i sinkronizuar (clocked)

Në këtë rast kemi dhe hyrjen CLK (figura 1-5) dhe elementët përkatës. Veprimi i D-FF të
sinkronizuar mund të gjykohet nga tabela e vërtetësisë.

D SET
S Q

CLK
R CLR Q

Figura 1-5 D-FF i sinkronizuar

Kur CLK =0, gjendja e D është e parëndësishme (x=0 ose 1) sepse FF qëndron i fiksuar (latched).
Kur CLK =1 kjo sjell që Q =D.
CLK D Qn+1
0 X Qn
1 0 0
1 1 1
X - quhet don`t care
Qn - gjendja e mëparshme

Në figurën 1-6 jepet simboli i D-FF së sinkronizuar.

Figura 1-6 Simboli për D-FF me impus clock

13
Në figurën 1-7 tregohet një qark RC në hyrje të D-FF me konstante kohe më të vogël se gjerësia e
impulsit CLK. Kështu kapaciteti ngarkohet plotësisht kur CLK shkon High. Ky ngarkim
eksponencial prodhon një majë (pikë) të ngushtë tensioni pozitiv në rezistencën R. Kur CLK shkon
Low kjo sjell që kërcimi që fitohet në R është negativ. Majat e ngushta pozitive aftësojnë për një
moment kohe portat AND, ndërsa ato negative nuk shkaktojnë asgjë. Efekti i aktivizimit (aftësimit)
të portave AND është ekuivalent me modelimin e vlerës së D në një moment kohe. Në këtë moment
të vetëm kohe, D dhe D ̅ jepen në hyrjet S, R të FF duke sforcuar Q të vendoset ose rivendoset
(përveç rastit kur Q ka qenë tashmë e barabartë me D).

Figura 1-7 Edge triggered D-FF

Ky lloj sinkronizimi quhet triggerim nga kërcimi (edge triggering) sepse FF përgjigjet vetëm kur
impulsi CLK është në kalimin midis dy gjendjeve (niveleve) të tensionit. Në figurën 1-7
sinkronizimi bëhet vetëm nga kërcimi pozitiv, prandaj quhet positive-edge triggering.
Kodi në VHDL për D-FF jepet në vijim:

library ieee;
use ieee. std_logic_1164.all;
use ieee. std_logic_arith.all;
use ieee. std_logic_unsigned.all;

entity D_FF is
PORT( D,CLOCK: in std_logic;
Q: out std_logic);
end D_FF;

architecture behavioral of D_FF is


begin
process(CLOCK)
begin
if(CLOCK='1' and CLOCK'EVENT) then
Q <= D;
end if;
end process;
end behavioral;

Kur sapo ushqehet FF kalon në një prej gjendjeve në mënyrë të rastit. Për të nisur punën në disa
kompjutera operatori duhet të shtypë butonin Clear (master-reset) që çon sinjalin clear në të gjithë
flip-flopët. Veç kësaj shpesh nevojitet që disa FF të paravendosen (preset). Në figurën 1-8 tregohet
se si mund të përfshihen të dy funksionet (clear dhe preset) në një D-FF.
14
Preset=1 → Q sforcohet në gjendjen 1
Clear=1 → Q sforcohet në gjendjen 0

Në figurë jepen gjithashtu simbolet për D-FF e triggeruar nga kërcimet.

Figura 1-8 D-FF me preset dhe clear

D-FF e integruar nuk kanë qarqe RC për të marrë majat e ngushta sepse kapacitetet është vështirë të
integrohen në një chip. Në vend të kësaj përdoren variante të ndryshme projektimesh me çiftim
direkt. Por megjithatë ideja është e njëjta. D-FF i triggeruar nga kërcimet përgjigjet vetëm gjatë
momentit të shkurtër të kohës së kalimit të sinjalit CLK nga një nivel tensioni në tjetrin.

Në figurën e parë është paraqitur impulsi i triggerimit nga kërcimi pozitiv i impulsit të clock (nga
pjesa e frontit të impluseve), dhe në tjetrën është paraqitur impulsi i triggerimit nga kërcimi negativ
i impulsit të clock.

15
library ieee;
use ieee.std_logic_1164.all;

entity dff is
port (D, Clock, Pre, Clr: in std_logic; Q: inout std_logic);
end entity dff;

architecture LogicOperation of dff is


begin
process
begin
wait until rising_edge (Clock);
if Clr = ‘1’ then
if Pre = ‘1’ then
if D = ‘1’ then
Q <= ‘1’;
else
Q <= ‘0’;
end if;
else
Q <= ‘1’;
end if;
else
Q <= ‘0’;
end if;
end process;
end architecture LogicOperation;

1.3 Flip Flopi J-K (JK-FF)

Kur është fjala për qarqet numëruese, JK-FF është elementi ideal i memories që mund të përdoret.
Në figurën 1-10 tregohet ndërtimi i JK-FF. Hyrjet J dhe K quhen hyrje kontrolli sepse ato
përcaktojnë se çfarë duhet të bëjë FF-i kur vjen kërcimi pozitiv i impulsit CLK. Si më parë qarku
RC me τ të vogël shndërron impulse CLOCK në maja të ngushta, kështu që për shkak të portave
AND, qarku triggerohet nga kërcimi pozitiv. Kur J=K=0 të dyja portat AND janë të paaktivizuara
(paaftësuara) kështu impulset CLOCK nuk kanë efekt dhe Qn+1=Qn. FF është i fiksuar.

J SET Q
S Q

C
K R CLR Q
R

Figura 1-10 JK-FF

16
Për kombinime të ndryshme të hyrjeve J dhe K mund të shfrytëzohet tabela:

J K Qn+1 Veprimi
0 0 Qn (gjendja e fundit) FF qëndron i fiksuar
0 1 0 RESET
1 0 1 SET
1 1 Ǭn (gjendja e fundit) Toggle

Koha e vonesës së përhapjes tp ndalon (pengon) JK-FF nga Racing [domethënë ndërrimin e gjendjes
së FF (toggling) më shumë se një herë gjatë kërcimit pozitiv të impulsit. Në figurën 1-10 daljet
ndryshojnë pas goditjes së çdo kërcimi pozitiv, por këto dalje të reja 𝑄 dhe 𝑄̅ janë tashmë të
vonuara që të mund të koinçidojnë me majat pozitive të impulsit CLK, kështu që ato nuk i
komandojnë dot portat AND. Nëse tp=20nsek atëherë daljet ndryshojnë afërsisht 20 sek pas ardhjes
17
së frontit rritës së impulsit CLOCK. Në qoftë se maja është më e ngushtë se 20 nsek, atëherë Q dhe
𝑄̅ vijnë me vonesë në portat AND për të shkaktuar triggerimin e gabuar (e padëshiruar) të FF.
Simbolet e JK-FF jepen në figurën 1-11.

J Q J PR Q J Q JJ PR
PRQQ J PR Q
CLK CLK CLK CLK
CLK CLK
K Q CLR Q K Q K CLR
CLRQQ K CLRQ

Figura 1-11 Simboli për JK-FF

Kodi në VHDL për JK-FF jepet si në vijim:

library ieee;
use ieee. std_logic_1164.all;
use ieee. std_logic_arith.all;
use ieee. std_logic_unsigned.all;

entity JK_FF is
PORT( J,K,CLOCK: in std_logic;
Q, QB: out std_logic);
end JK_FF;

Architecture behavioral of JK_FF is


begin
PROCESS(CLOCK)
variable TMP: std_logic;
begin
if(CLOCK='1' and CLOCK'EVENT) then
if(J='0' and K='0')then
TMP:=TMP;
elsif(J='1' and K='1')then
TMP:= not TMP;
elsif(J='0' and K='1')then
TMP:='0';
else
TMP:='1';
end if;
end if;
Q<=TMP;
Q <=not TMP;
end PROCESS;
end behavioral;

1.3.1 Master-Slave-Flip-Flop (FF me dy takte)

Është si në figurën 1-12. FF i parë quhet master dhe FF i dytë quhet slave. Masteri triggerohet nga
kërcimi pozitiv i impulsit CLK, slave nga kërcimi negativ i tij. Kështu masteri i përgjigjet hyrjeve të
tij të kontrollit përpara slave. Kur J=1 dalja Q e masterit merr vlerën 1, pas kërcimit pozitiv të
impulsit CLK. Dalja 1 e master-FF kontrollon hyrjen J të FF slave, kështu kur vjen kërcimi negativ
i impulsit CLK, dalja Q e FF slave bëhet 1 duke kopjuar gjendjen (veprimin) e masterit. Kur K=1,
18
dalja Q rivendoset në vlerën 0 dhe kur J=1, K=1 master i toggles, pas tij dhe slave. Kështu pra ky i
fundit është me dy kohë, slave kopjon veprimin e masterit vetëm pas një farë kohe. MS-JK-FF
përdoret shumë në rastet e rrezikut të shfaqjes së Racing.
Master Slave

J Q J Q
CLK CLK CLK

K Q K Q

Figura 1-12 Master-Slave FF


1.4 Flip-Flop T

Flip-flop T (toggle) realizohet nga JK flip flop, duke lidhur sëbashku hyrjet J dhe K dhe pika e
përbashkët emërtohet me T, si në Figurën 1-13. Dalja e FF T ndryshon gjendje sa here që vjen fronti
rritës i impulsit të clock.

Figura 1-13 Ndërtimi dhe simboli i T flip flop-it

Në vijim është dhënë tabela e vërtetësisë së T flip flop me porta NOR.

19
Krahasimi ndërmjet FF T me (a) trigerim pozitiv dhe (b) trigerim negativ

Kodi në VHDL për T-FF jepet si në vijim:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity T_FF is
port( T: in std_logic;
Clock: in std_logic;
Q: out std_logic);
end T_FF;

architecture Behavioral of T_FF is


signal tmp: std_logic;
begin
process (Clock)
begin
if Clock'event and Clock='1' then

if T='0' then
tmp <= tmp;
elsif T='1' then
tmp <= not (tmp);
end if;
end if;
end process;
Q <= tmp;
end Behavioral;

Diagrama e gjendjeve

Të gjitha gjendjet e mundshme që paraqiten në tabelën e vërtetësisë mund të paraqiten grafikisht me


anë të një diagrame gjendjesh.

20
Figura 1-14 Shembulli i një diagrame gjendjesh

Në këtë diagramë, gjendja përfaqsohet me një rreth dhe tranyitimi i gjendjes tregohet nga drejtimi i
përdorur i shigjetës. Vlerat binare brenda në rreth tregojnë vlerën e gjendjes që përfaqson rrethi.
Çdo shigjetë është emërtuar me dy vlera binare të ndara nga (/). Shifra përpara (/) përfaqson vlerën
e hyrjes së jashtme, e cila shkakton tranzitimin e gjendjes, dhe numri pas (/) përfaqson vlerën e
daljes gjatë gjendjes së pranishme. P.sh, shigjeta e drejtuar nga gjendja 11 në 10, ndërkohë në fillim
x = 0 dhe y = 0, dhe pas ardhjes së impulsit të clock-ut, kalojmë në gjendjen pasardhëse 10.

Shembull Të ndërtohet diagrama e gjendjeve për qarkun sekuencial në vijim.

Sjellja e qarkut përcaktohet nga shprehjet e mëposhtme Boolean:


𝐙 = 𝐱 ∗ 𝐐𝟏
𝐃𝟏 = 𝐱̅ + 𝐐𝟏
̅̅̅̅𝟐 + 𝐱̅ ∗ ̅̅̅̅
𝐃𝟐 = 𝐱 ∗ 𝐐 𝐐𝟏

Këto ekuacione mund të shfrytëzohen për të ndërtuar diagramën e gjendjeve. Supozojmë se gjendja
aktuale, p.sh. Q1Q2 = 00 dhe hyrja x = 0. Në këtë rast, kemi që Z = 0, D1 = 1, dhe D2 = 1. Kështu që
gjendja pasardhëse e qarkut D1D2 = 11, do të jetë gjendja aktuale pas ardhjes së impulsit të clock.
Gjendja e daljes do të jetë Q1Q2 = 00 dhe x = 1 kemi Z = 0. Ndërtojmë tabelën e vërtetësisë si në
vijim:

21
Gjendja aktuale Gjendja e mëvonshme Dalja
Q1Q2 x=0 x=1 x=0 x=1
00 11 01 0 0
01 11 00 0 0
10 10 11 0 1
11 10 10 0 1

Diagrama e gjendjeve për qarkun sekuencial jepet në figurën në vijim.

1.4 Karakteristikat kohore për FF

Performanca, kërkesat e funksionimit dhe kufizimet e flip-flopeve specifikohen nga disa parametra
që gjenden në specifikimet e pajisjeve. Disa prej këtyre parametrave janë specifike për familjet
logjike të cilës i përkasin flip-flopet. Disa parametra kanë vlera të ndryshme për flip-flope të
ndryshëm që i përkasin të njëhtës familje logjike. Prandaj, është e rëndësishme që të merren
parasysh këto parametra para se flip-flopi të përdoret në një aplikim të caktuar.

1. Koha e vonesës së përhapjes (propagation delay time)

Vonesa e përhapjes është intervali i kohës që i nevojitet për të ndodhur një ndryshim në sinjalin në
dalje si pasojë e zbatimit të një sinjali në hyrje. Vonesa e përhapjes matet ndërmjet pikave me vlerë
50% të sinjalit në hyrje dhe 50% të vlerës së sinjalit në dalje. Zakonisht përcaktohen vonesa e
përhapjes për të dyja kalimet HIGH-LOW (tpH-L) dhe LOW-HIGH (tpL-H) të sinjalit në dalje. Diodat
dhe tranzistorët nuk mund të konmutohen menjëherë nga një gjendje në tjetrën. Gjithmonë nevojitet
një sasi kohe për komuntim nga on në off dhe e kundërta. Për tranzistorët dhe diodat bipolare kjo
kohë (komuntimi) është e rendit nanosekondë. Koha e komutimit është shkaku kryesor i kohës së
vonesës së përhapjes që shënohet me tp. Koha tp përkufizohet si koha e nevojshme që dalja e portës
ose e FF të ndryshojë gjendjen pas ndryshimit të gjendjes së hyrjes. Kështu nëse të dhënat teknike të
një D-FF japin tp = 10 ns, atëherë 10 ns nevojiten që Q të ndryshojë gjendjen pasi D është modeluar
nga kërcimi i impulsit CLK. Koha e vonesës tp është kaq e vogël sa që në disa aplikime nuk merret
parasysh.

22
Vonesa e përhapjes tpL-H matet në frontin rritës së trigerimit, pra kalimin i daljes nga gjendja LOW
në HIGH me ardhjen e impulsit të clockut. Vonesa e përhapjes tpH-L matet në frontin rritës së
trigerimit, pra kalimin i daljes nga gjendja HIGH në LOW me ardhjen e impulsit të clockut.

2. Koha e ngritjes (setup time)

Koha set-up është intervali kohor minimal për të cilën nivelet logjike duhet të jenë konstante në
hyrjet sinkrone (SR, JK, D, T) dhe hyrjet asinkrone (PRESET dhe CLEAR) përpara ardhjes së
frontit rritës së impulsit të clock, me qëllim që dalja e flip-flopit të reagojë në mënyrë të sigurt. Ajo
zakonisht shënohet me ts dhe përcaktohet për hyrjet asinkrone. Koha set-up për hyrjet sinkrone të
një flip-flopi JK me trigerim negativ ilustrohet në figurën e mëposhtme.

Kapacitetet e shpërndarjes në hyrjen D (plus faktorë të tjerë) bëjnë të nevojshëm praninë e bitit të të
dhënave D në hyrje përpara arritjes së kërcimit të impulsit CLK. Kështu koha Setup është sasia

23
(intervali) minimale e kohës që nevojitet për shfaqjen e bitit të të dhënave përpara ardhjes së
kërcimit të impulsit CLK. P.sh, nëse të dhënat e një D-FF japin ts = 15 ns, atëherë biti i të dhënës që
do të magazinohet duhet të jetë në hyrjen D, 15 ns përpara ardhjes së kërcimit të impulsit CLK,
ndryshe prodhuesi nuk garanton modelim dhe akumulim korrekt. Gjithashtu, nëse daljet e flip-
flopit duhet ti përgjigjen hyrjeve sinkrone, hyrjet asinkrone PRESET dhe CLEAR duhet të jenë
joaktive për një periudhë kohe minimale të caktuar përpara frontit rritës të impulsit të clockut.

3. Koha e mbajtjes (hold-time)

Koha Hold (thold) është periudha minimale e kohës për të cilën nivelet logjike duhet të mbeten
konstante në hyrjet sinkrone (SR, JK, D, T) pas frontit aktiv të trigerimit të impulsit të clockut, me
qëllim që dalja e flip-flopit të reagojë në mënyrë të sigurt. Më tej, biti i të dhënave D duhet të
qëndrojë mjaft kohë, në mënyrë që transistorët përbërës të FF të mund të komutojnë gjendjen.
Vetëm pasi është siguruar kalimi (komutimi) nga njëra gjendje te tjetra, mund të ndryshojë (hiqet)
biti D. Koha e mbajtjes thold përfaqëson sasinë minimale të kohës së kërcimit të impulsit CLK. P.sh,
në qoftë se tsetup=15 ns dhe thold=5 ns atëherë biti i të dhënave D duhet të ndodhet të paktën 15 ns pas
ardhjes së kërcimit të impulsit CLK.

4. Frekuenca maksimale e clock

Ky parametër tregon frekuencën maksimale (vlera më e lartë) që mund të zbatohet për hyrjen clock.
Nëse kjo vlerë tejkalohet, nuk ka asnjë garanci se pajisja do të punojë në mënyrë të besueshme dhe
ashtu siç duhet. Prodhuesi zakonisht e specifikon vlerën e sigurt të frekuencës maksimale.

24
Aplikimet e qarqeve sekuenciale

Numeratorët

Tani që kuptuam mënyrën e operimit të flip-flop, mund t'i përdorim ata për të dizenjuar dhe
aplikuar qarqe sekuenciale. Një nga aplikimet më të përdorura për qarqet sekuenciale janë
numeratorët. Umëruesit dhe regjistrat i përkasin kategorisë së qarqeve logjike sekuenciale. Ata kanë
ndërtim të ngjashëm, pasi numëruesit dhe regjistrat realizohen nga lidhja në kaskadë e disa FF. Të
dy aplikimet e FF janë shumë të rëndësishëm për logjikën sekuenciale pasi tipe të ndryshme të tyre
gjejnë aplikim në qarqet e integruara IC, të cilët përdoren gjerësisht në sistemet dixhitale.
Numëruesit përdoren kryesisht në aplikimet e numërimit, ku ata mund të masin intervalin e kohës
ndërmjet dy çasteve të panjohura të kohës, të masin frekuencën e një sinjali të caktuar, të llogarisin
numrin e ngjarjeve të caktuara etj.
Një nga tipet e numeratorëve më të njohur janë ata me modul, ku numbri i gjendjeve binare të
ndryshme që mund të numërojnë përcaktojnë edhe modulin (MOD) e numeratorit. P.sh, nëse
numeratori numëron vlerat nga 0 deri në 7 quhet numerator me MOD-8. Blokskema e numeratorit
që numëron nga 0 deri në 7, duhet të ketë tre dalje binare dhe hyrjen e impulsit të clock, siç tregohet
në Figurën 2–1. Normalisht, çdo dalje binare merret nga daljet Q të flip-flop. Flip-flopet përdoren
sepse ata mund të ruajnë gjendjen, apo vlerën binare deri sa të vijë impulsi tjetër i clock. Në tabelën
2-1 është paraqitur tabela e vërtetësisë dhe në figurën 2-2 tregohet diagrama kohore e sinjaleve në
dalje të numeratorit.

Figura 2–1 Bllokskema e thjeshtuar e numeratorit binar MOD-8

Figura 2–2 Diagrama kohore për numeratorin binar MOD-8

25
Numeratorët i klasifikojmë në tre kategori:
(i) Asinkron dhe sinkron.
(ii) Single dhe multimode.
(iii) me modul.

Numeratori asinkron është më i thjeshtë në operim dhe zakonisht kërkon më pak hardware për t'u
realizuar. Në numeratorët asinkron, çdo flipflop trigerohet nëpërmjet flip-flopit paraardhës dhe
shpejtësia e operimit është e kufizuar. Në fakt, koha e operimit të numeratorit është shumë e kohëve
të operimit të çdo flip-flopi individual. Ky lloj numeratori njihet edhe si numeratori serial ose
ripple. Kufizimi në shpejtësi i numeratorëve asinkron mund të tejkalohet duke përdorur clock me
frekuencë më të lartë te secili flip-flop. Kjo bën që secili flip-flop të ketë të njëjtën kohë operimi dhe
kjo rritje në shpejtësi ka kosto në hardware. Këto tipe numeratorësh quhen paralel.
Numeratorët ndërtohen që të ndryshojnë me 1 përmbajtjen e tyre sa herë që vjen impulsi i clock
pulse; dhe quhet numeratori count-up. Kurse numeratori i kundërt, që e zvogëlon përmbajtjen e tij
me 1 sa herë që vjen impulsi i clock, quhet numeratori count-down. Në të dyja rastet thuhet që
numeratori është single mode. Nëse numeratori i përmban të dyja këto mënyra, pra UP dhe DOWN,
quhet numerator multimode. Numeratorët me modul e përcaktojnë numrin e gjendjeve në funksion
të numrit të biteve në dalje. Këta lloje numeratorësh mund të klasifikohen në dy tipe: Mod N dhe
MOD < N. P.sh, nëse numeratori përmban n bite, vlera maksimale që mund të numërojë N=2n. Nga
ana tjetër, nëse numeratori është dizenjuar për të numëruar sekuenca më të vogla se vlera
maksimale, ai quhet numerator MOD < N ose MOD < 2n. Për të përcaktuar numrin e FF që
nevojiten për të ndërtuar një numërues me një modul të dhënë, duhet të përcaktojmë numrin e plotë
më të vogël fuqi e 2shit, që është i barabartë ose më i madh se moduli i dëshiruar.

2.1 Numeratorët asinkron

2.1.1 Numeratorët asinkron ripple

Numeratori më i thjeshtë mund të dizenjohet duke përdorur flip-flop të tipeve të ndryshme (D, T,
SR, JK) të lidhur në kaskadë me njëri-tjetrin. Në numeratorin asinkron flip-flopët nuk komandohen
26
nga i njëjti impuls clock. Një numerator asinkron realizohet nga lidhja në kaskadë e flip-flopeve, ku
dalja e njërit flip-flop shërben si hyrje për flip-flopin pauses. Numri i flip-flopeve në lidhjen në
kaskadë varet nga moduli i numëruesit. Në një numërues asinkron, sinjali i clock (CLK) aplikohet
vetëm tek hyrja C e flip-flopit të parë, i cili gjithmonë është biti me peshë më të vogël, i quajtur
gjithashtu flip-flopi hyrës në lidhjen në kaskadë. Hyrja clock për çdo flip-flop pasues vjen nga dalja
e flip-flopit paraardhës. Për pasojë jo të gjithë flip-flopët ndryshojnë gjendje njëkohësisht. Flip-flopi
i dytë do të ndryshojë gjendje vetëm pasi dalja e flip-flopit të parë ka ndryshuar gjendje. Pra, flip-
flopi i dytë do të ndryshojë gjendje me një kohë vonese pas ardhjes së impulsit të clock krahasuar
me ardhjen e impulsit të clockut në hyrje. Kjo kohë vonese është e barabartë me shumën e kohë
vonesave të secilit flip-flop.

Numëruesi asinkron me 2-bit

Numëruesi asinkron me 2-bit përbëhet nga 2 flip-flopë D me front pozitiv trigerimi.

Numeratori është asinkron dhe impulsi i clockut (CLK) aplikohet në hyrjen C të flip-flopit të parë,
FF0, i cili është edhe ai me peshë më të vogël (LSB). Flip-flopi i dytë, FF1, trigerohet nga dalja
komplementare ̅̅̅𝑄0 e FF0. FF0 ndryshon gjendje sa herë që vjen fronti rritës i impulseve të clockut,
por FF1 ndryshon vetëm pasi vjen fronti rritës i impulseve të ̅̅̅𝑄0 . Për shkak të kësaj kohë vonese në
̅̅̅
FF, tranzitimi i gjendjes së impulsit të clockut dhe daljes 𝑄0 nuk ndodh asnjëherë në të njëjtën kohë.
Prandaj të dy FF nuk trigerohen njëkohësisht asnjëherë dhe prandaj numeratori është asinkron në
rendin rritës.
Digrama kohore tregon rezultatin që jep aplikimi i katër impulseve të clockut në numeratorin
asinkron me 2-bit. Fillimisht të dy FF janë në gjendjen fillestare, pra gjendjen Q=LOW (RESET).
Me ardhjen e frontit rritës së impulsit të clockut 1, dalja e FF0 kalon nga gjendja 0 në 1 (HIGH). Në
të njëjtën kohë dalja komplementare ̅̅̅𝑄0 kalon nga gjendja 1 në atë 0 (LOW), por kjo gjendje do të
ndikojë te FF i dytë FF1 sepse për të trigeruar gjendjen e flip-flopit duhet të vijë fronti rritës i ̅̅̅
𝑄0 .
Pas impulsit të parë të clockut kemi që Q0=1 dhe Q1=0. Kurse me ardhjen e frontit rritës së impulsit
të dytë të clockut, kemi që Q0 ndryshn gjendje dhe nga niveli logjik HIGH kalon në nivelin e ulët
LOW. Kurse dalja ̅̅̅ 𝑄0 nga niveli LOW kalon në nivelin HIGH, kjo bën që gjendja e daljes Q1 të
bëhet HIGH. Pas impulsit të dytë të clockut kemi që Q0=0 dhe Q1=1. Ky fenomen ripërsëritet njësoj
si për impulsin e parë dhe të dytë të clockut, kur vjen impulsi i tretë dhe i katërt i clockut.
Numeratori me 2-bit shfaq katër gjendje të ndryshme, dhe njihet si numeratori me modul 2 (22=4).

27
Ky numerator asinkron binary numëron vlerat nga 0 deri në tre në rendin rritës dhe me ardhjen e
impulsit të katërt të clockut rifillon numërimi me të njëjtën procedure siç e shpjeguam më sipër.

Numeratori asinkron me 3-bit

Figura në vijim tregon bllokskemën e numëruesit asinkron me 3-bit me D-FF.

Ky numerator është i ngjashëm në mënyrën e funksionimit si numëruesi me 2-bit, pra është një
numërues asinkron me rend rritës. Në këtë rast meqenëse kemi 3 FF numeratori numëron vlerat
binare nga 0 deri në 7 (mod 8=23=8 gjendje). Tetë gjendjet e ndryshme binare të formuara nga
numeratori me 3-bit janë 000, 001, 010, 011, 100, 101, 110, dhe 111. Diagrama kohore për këtë
numerator jepet në vijim për 8 impulse clocku. Theksojmë se numërues të tillë mund të zgjerohen
duke lidhur FF të tjerë, pra të rritet moduli i tij. Pra, nëse kemi një numerator me n flip-flope, mund
të numërojë deri në N=2n. Impulset që do të numërohen ybatohen në hyrjen clock të flip-flopit të
parë. Për të analizuar këtë numërues ybatohen këto rregulla; dalja e flip-flopit të parë ndryshon
gjendje sa herë që vjen fronti rritës i impulsit të clockut dhe flip-flopët pasardhës ndryshon gjendje
sa herë që vjen fronti rritës i impulsit (nga HIGH në LOW) në daljen komplementare të flip-flopit
paraardhës.

28
Nëse kemi një numerator binar me 4-bit, marrim 16 gjendje të ndryshme binare, nga 0000 deri në
1111. Për të formuar një numerator me 4-bit ndjekim të njëjtën procedure si më parë, duke përdorur
4 flip-flope D.

Impulset e clock shërbejnë për të inkrementuar vlerën binare sa herë që vjen fronti rritës i impulsive
të clockut në flip-flopin e parë. Çdo flip-flop komuton gjendjen sa herë që vjen fronti zbritës
(gjendja High-LOW) i daljes së flip-flopit të mëparshëm. Le të shohim në vijim shembullin e një
numeratori me MOD-16, i cili ka në përbërje të tij katër flip-flope (24=16). Nga format e valëve
shohim që flip-flopet komutojnë gjendje sa herë që vjen fronti rritës i impulsit të clockut. Kur
numeratori arrin vlerën 15 (1111), me ardhjen e frontit zbritës së impulsit të clockut, numeratori
fillon numërimin në gjendjen 0 (0000).

29
Figura 2.4 Numeratori ripple MOD-16: (a) bllokskema; (b) format e valëve

Forma e valës për daljen 20 do të jetë pak e vonuar, pra shfaq zhvendosje të vogël në kohë djathtas.
Gjithashtu dalja 21 do të jetë e spostuar në kohë dhe kështu me rradhë. Po të shohim formën e valës
në daljen 22 do të shikojmë që ajo është e spostuar, me tre vonesa në kohë, krahasuar me impulsin e
clock. Nëse do ju referohemi vlerave të kohëve të vonesës, do të shohim që kjo shkakton
ndryshimin e vlerave binare nga 011 në 100 (nga impulsi 3të te i 4rt) dhe kohë vonesa totale do të
jetë:
𝑡𝑃𝐻𝐿1 + 𝑡𝑃𝐻𝐿2 + 𝑡𝑃𝐻𝐿3 = 30𝑛𝑠 + 30𝑛𝑠 + 20𝑛𝑠 = 80𝑛𝑠

Sa më i madh që të jetë moduli i numeratorit, aq më shumë flip-flopë do të përdoren dhe koha e


vonesës totale do të rritur duke përbërë kështu një problem. Frekuenca maksimale e lejuar për
numeratorin ripple për shkak të kohë vonesës jepet nga ekuacioni:
1
𝑓𝑚𝑎𝑥 =
𝑛 ∙ 𝑡𝑝

ku n është numri i flip-flopëve


tp është kohë vonesa mesatare e çdo flip-flopi

Figura 2–5 Efekti i vonesës në kohë në daljet e numeratorit ripple me trigerim negativ

30
Kodi në VHDL për numeratorin asinkron me 4-bit jepet si në vijim:

library ieee;
use ieee.std_logic_1164.all;

entity AsyncFourBitBinCntr is
port (Clock, Clr: in std_logic; Q0, Q1, Q2, Q3: inout std_logic);
end entity AsyncFourBitBinCntr;

architecture LogicOperation of AsyncFourBitBinCntr is


component jkff is
port (J, K, Clk, PRN, CLRN: in std_logic; Q: out std_logic);
end component jkff;
begin
FF0: jkff port map(J=>‘1’, K=>‘1’, Clk=>Clock, CLRN=>Clr, PRN=>‘1’, Q=>Q0);
FF1: jkff port map(J=>‘1’, K=>‘1’, Clk=>not Q0, CLRN=>Clr, PRN=>‘1’, Q=>Q1);
FF2: jkff port map(J=>‘1’, K=>‘1’, Clk=>not Q1, CLRN=>Clr, PRN=>‘1’, Q=>Q2);
FF3: jkff port map(J=>‘1’, K=>‘1’, Clk=>not Q2, CLRN=>Clr, PRN=>‘1’, Q=>Q3);
end architecture LogicOperation;

2.1.2 Numeratori asikron me rend zbritës (Down-Counters)

Një numërues asinkron me rend zbritës, që përdor n FF, mund të numërojë nga 0 deri në 2n-1. Të
gjithë numeratorët binar që kemi analizuar, e inkrementonin vlerën e tyre, me ardhjen e impulsit të
clockut. Në vijim, do të analizojmë numeratorin binar me 3-bit, i cili dekrementon vlerën e tij. Për
të ndërtuar një numerator të tillë, mjafton që daljet e tij binare të merren në daljen komplementare,
pra të merret dalja komplementare 𝑄̅ në vend të Q. Në figurën 2–7 është paraqitur bllokskema dhe
forma e valëve të sinjaleve në dalje. Meqenëse, daljet e numëruesit merren nga daljet
komplementare të çdo FF, numëruesi fillon me gjendjen 111. Për çdo fron zbritës të impulsit të
clock, Q0 inverton gjendjen e tij. Në mënyrë të ngjashme, për çdo front zbritës të daljes Q0, dalja Q1
inverton gjendjen e saj, gjithashtu dhe dalja Q2 e inverton vlerën sa herë që vjen fronti zbritës i
daljes Q1. Prandaj numërimi është në rend zbritës dhe merr vlera duke filluar nga 7, 6, 5, 4, 3, 2, 1,
0, 7, 6.... e kështu me rradhë për çdo impuls clocku.

(a)
31
(b)
Figura 2–7 Numeratori ripple MOD-8: (a) bllokskema; (b) format e valëve

2.1.3 Numeratorët Pjesëto-me-N

Shpesh numeratorët mund të përdoren si pjesëtues të frekuencës dhe figura 2-8 tregon aplikimin e
numeratorit MOD-8 duke e reduktuar frekuencën e sinjalit të clockut në hyrje. Nga figura shohim
që sinjali i clockut në hyrje të numeratorit ka frekuencë 24 kHz, por përdorimi i numeratorit MOD-
8 i cili në këtë rast përdoret si numerator pjesëto-me-8 të frekuencës, në dalje frekuenca e sinjalit
reduktohet në vlerën 3kHz.

Figura 2–8 Bllokskema e numeratorit MOD-8 të përdorur si pjesëtues frekuence

Po nëse duam të pjesëtojmë-me-5? Kjo mund të realizohet duke modifikuar numeratorin MOD-8, i
cili kur të arrijë vlerën 5 (101), të gjithë flip-flopet të resetohen. Pra, sekuenca e re që numëron
është 0-1-2-3-4-0-1-2-3-4-0 e kështu me rradhë. Për të resetuar numeratorin në vlerën 5 (101), duhet
të kontrollojmë linjën 20 dhe 22, në rast se janë të dyja në vlerën 1 (High), duhet të jepet impulsi
reset te të gjithë flip-flopët. Kjo realizohet nëpërmjet portës NAND. Në figurën 2-9 jepet
bllokskema e numeratorit, forma e valëve të daljeve dhe diagrama e gjendjeve.

32
(a)

(b)

(c)
Figura 2–9 Numeratori pjesëto-me-5: (a) bllokskema; (b) forma e valëve; (c) diagrama e gjendjeve
33
Numëruesi asinkron UP/DOWN

Tashmë kemi shqyrtuar në mënyrë të veçuar numëruesit asinkron me rend rritës dhe zbritës. Në
vijim do të shohim se si funksionon numeratori i cili numëron në të dy rendet UP/DOWN. Në
numëruesin UP çdo flip-flop trigerohet sa herë që vjen fronti rritës i impulsit të clockut, kurse
numeratori DOWN trigerohet sa herë që vjen fronti zbritës i impulsit të clockut. Megjithatë në të
dyja rastet numeratoët trigerohen nga impulse e CLK. Funksionimi i numëruesit asinkron
UP/DOWN komandohet nëpërmjet hyrjeve të kontrollit. Nga skema shikojmë se stade të veçanta
lejojnë kalimin nga mënyra e numërimit me rend rritës UP në mënyrën e numërimit me rend zbritës
DOWN, duke përdorur tre porta logjike për çdo stad.

Portat logjike përdoren për të lidhur daljen Q ose daljen komplementare të flip-flopit në hyrjen e
flip-flopit vijues, në varësi të gjendjes së hyrjes së kontrollit. Një invertues përdoret ndërmjet linjës
së kontrollit të numërimit UP dhe linjës së kontrollit të numërimit DOWN për të siguruar që
numërimi UP dhe DOWN të mos jenë njëkohësisht të aktivizuara (HIGH). Kur linja e kontrollit të
numërimit UP/DOWN, portat AND të poshtme çaktivizohen dhe daljet e tyre do të jenë zero.

Pra, ato nuk do të ndikojnë në daljen e portave OR. Në të njëjtën kohë, portat e sipërme AND d të
jenë të aktivizuara. Për këtë arsye, Q0 do të kalojë nëpërmjet portës OR në hyrjen CLK të flip-flopit
të dytë FF1. Në mënyrë të ngjashme Q1 lidhet me hyrjen CLK të flip-flopit të tretë FF2. Kështu,
ndërsa zbatohen impulse në hyrje, numëruesi numëron në rendin rritës dhe ndjek renditjen binare të
numërimit nga 000 deri në 111. Në mënyrë të ngjashme, kur linja e kontrollit të numërimit
UP/DOWN mbahet në gjendjen LOW, portat AND të sipërme çaktivizohen dhe aktivizohen portat e
poshtme AND, duke lejuar që daljet komplementare ̅̅̅ 𝑄0 dhe 𝑄̅̅̅1 të kalojnë në hyrjet clock të flip-
flopit vijues. Në këto kushte numëruesi numëron në rendin zbritës.

34
Numëruesi asinkron MOD ≤ 2n

Një numërues binary asinkron me n-FF, vlera maksimale që mund të numërojë është 2n, por në
parktikë mund të mos duam të numërojmë të gjithë vlerat e përfshira në modul, pra të realizojmë
numërues me MOD ≤ 2n

2.2 Numeratorët sinkron

Numëruesit asinkron që kemi diskutuar deri tani, flip-flopët në përbërje të tyre nuk e marrin
impulsin e clockut njëkohësisht. Kjo shkakton kohë vonese, dhe vonesa totale do të hetë shuma e të
gjithë kohë vonesave të secilit flip-flop. Për shkak të kësaj kohë vonese kufizohet frekuenca
maksimale e operimit të numëruesit. Ky kufizim në shpejtësinë e operimit mund të tejkalohet duke
e aplikuar sinjalin e clockut njëkohësisht në të gjithë flip-flopët e numëruesit. Kjo bën që të gjithë
flip-flopët të ndryshojnë gjendje në të njëjtën kohë. Vonesa e përhapjes në këtë rast është e pavarue
nga numri i flip-flopëve të përdorur. Ky lloj numëruesi njihet si nnumërues sinkron ose numërues
paralel. Këta lloje numeratorësh evitojnë problemin në kohë të numeratorëve asinkron.

Numëruesi sinkron me 2-bit

Figura në vijim tregon realizimin e numëruesit sinkron me 2-bit të realizuar me anë të flip-flopëve
JK dhe D. Thekjsojmë se në numëruesin sinkron përdoret një lidhje e ndryshme nga ajo e
numëruesit asinkron për hyrjet J1 dhe K1 të FF1, në mënyrë të tillë që të arrihet renditja binare.

35
Në këtë skemë, hyrjet e clockut të çdo flip-flopi lidhen së bashku, në mënyrë që ai të jepet
njëkohësisht te të dy flip-flopët. Flip-flopi i parë FF0 (që përfaqson LSB) i ka të dyja hyrjet e saj J0
dhe K0 në nivelin logki 1, ndyrsa hyrjet J1 dhe K1 të flip-flopit të dytë FF1, lidhen me daljen e FF0.
Së pari, supozojmë se numëruesi është në gjendjen fillestare 00 (i korrespondon vlerës zero
dhjetore), pra të dy flip-flopët janë në gjendjen RESET. Kur aplikohet fronti rritës i impulsit të parë
të clockut, FF0 e inverton gjendjen e daljes nga 0 në HIGH. Dalja Q0 do të aplikohet në hyrje të
FF1 dhe FF1 do të ndryshojë gjendjen pasi të vijë fronti rritës i impulsit të dytë clockut. Kujtojmë
se ka një kohë vonese në përhapje nga trigerimi i impulsit të clockut derisa dalja Q të ndryshojë
gjendje. Pas impulsit të parë të clockut, Q0=1 dhe Q1=0 (vlera ekuivalente e 1 në sistemin dhjetor).
Me ardhjen e impulsit të dytë të clockut, FF0 inverton gjendje dhe Q0=0 kurse FF1 inverton
gjendjen Q1=1 (vlera ekuivalente e 2 në sistemin dhjetor). Kur vjen impulsi i tretë i clockut, FF0
inverton përsëri gjendje Q0=1 (vlera ekuivalente e 3 në sistemin dhjetor) dhe FF1 ruan po të njëjtën
gjendje Q1=1 sepse hyrjet e tij J1 dhe K1 janë në nivelin e ulët logjik LOW.

Diagrama kohore që tregon kohën e vonesës së përhapjes së numëruesit sinkron me 2-bit jepet në
vijim.

Numëruesi sinkron me 3-bit

Numëruesi sinkron me 3-bit është i ngjashëm me atë me 2-bit, por meqenëse përmban 3 FF ai
numëron deri në vlerën maksimale binare 111.

36
Fillimisht shqyrtojmë daljen e parë Q0, e cila ndryshon gjendje sa herë që vjen fronti rritës i
impulsit të clockut, ndërsa numëruesi kalon nga gjendja e tij fillestare në gjendjen e tij të numërimit
të vlerës maksimale dhe pastaj rikthehet përsëri në gjendjen fillestare. Për të realizuar këtë
funksionim, FF0 duhet të mbahet në mënyrën e funksionimit invertues nga një nivel konstant HIGH
në hyrjet e tij J0 dhe K0. Theksojmë që Q1 kalon në gjendken HIGH pas ardhjes së impulsit të dytë
të clockut dhe sa herë që Q0=1. Pra ky ndryshim i gjendjes së FF1 ndodh për impulsin e 2të, 4rt, 6të
të clockut. Me ardhjen e impulsit të tetë të clockut numëruesi resetohet dhe kalon përsëri në
gjendjen fillestare. Për të realizuar këtë funksion duhet që Q0 të lidhet me hyrjet J1 dhe K1 të FF1.
Kur Q0 është 1 dhe zbatohet një impuls clocku, FF1 është në mënyrën e funksionimit invertuese dhe
prandaj ndryshon gjendje. Në rastet e tjera, kur Q0 është 0, FF1 nuk e ndryshon gjendjen dhe ruan
gjendjen që ka. Kurse Q2 do të ndryshojë gjendje vetëm kur daljet Q0 dhe Q1 janë në nivelin logjik
HIGH. Kjo gjë konstatohet nga prezenca e portës logjike AND dhe aplikohet në hyrjet J 2 dhe K2 të
FF2. Sa herë që të dyja daljet janë 1 dhe dalja e portës AND jepet në hyrje të FF2 dhe FF2 inverton
gjendje me ardhjen e impulsit të clockut. Ë të gjitha rastet, hyrjet J2 dhe K2 mbahen në gjendjen
LOW dhe FF2 nuk nndryshon gjendje.

37
Numëruesi sinkron me 4-bit

Në figurën në vijim jepet skema e numëruesit sinkron me 4-bit, i cili numëron vlerat binare nga
0000 deri në 1111. Ndryshe nga rastet e mësipërme ky numerator funksionionon me trigerim
negativ, pra ndryshon gjendje sa herë që vjen fronti zbritës i impulsit të clockut. Nga skema shohim
se FF2 do të ndryshojë sa herë që të dyja hyrjet e portës AND G1 (pra daljet Q0 dhe Q1) janë në
nivelin logjik HIGH. Në mënyrë të ngjashme FF3 do të ndryshojë gjendje kur daljet Q0, Q1 dhe Q2
janë HIGH, për të gjithë rastet e tjera FF3 nuk do të ndryshojë gjendje.

Figura 2–10 Numeratori sinkron 4-bit (MOD-16): (a) bllokskema; (b) format e valëve të daljeve

Nëse duhet të ndërtojmë një numerator me 4-bit sinkron, duhen katër flip-flop, të cilët realizojnë një
numerator MOD-16. Meqenëse të katërt flip-flopët e marrin impulsin e clockut 𝐶 ̅̅̅𝑝 në të njëjtën
kohë, duhet të sigurohemi që ndryshimi i gjendjes së tyre të ndodhë në momentin e duhur. Për të
realizuar skemën e numeratorit sinkron duhet të studiojmë formën e valës së sinjaleve të daljes.
Nga diagrama kohore e mësipërme, shohim se dalja 20 ndryshon gjendje për çdo front zbritës të
impulsit të clockut. Dalja 21 ndryshon gjendje për çdo front zbritës të dalja 20. E njëjta logjikë vlen
edhe për daljet e tjera. Dalja 22 nuk e ndryshon gjendjen derisa të dy dajet 20 dhe 21 të jenë në
gjendjen high. Dalja 23 nuk e ndryshon gjendjen derisa të dy dajet 21 dhe 22 të jenë në gjendjen

38
high. Për të ruajtur këtë logjikë duhet që flip-flopët JK të lenë të lidhura sëbashku hyrjet e tyre me
anë të portës AD e cia siguron gjendjen logjike 1 (high).

Numëruesi sinkron dhjetor (MOD-10)

Numëruesi dhjetor BCD numëron vlerat nga 0000 deri në 1001, dhe kur arrin impulsi i dhjetë i
clockut në vend që të numërojë vlerën 1010 ai resetohet në gjendjen fillestare.

Së pari, theksojmë se FF0 (Q0) ndryshon gjendje sa herë që vjen fronti rritës i impulseve të clockut,
pranddaj ekuacioni që përshkruan këtë funksion logjik për hyrjet J 0 dhe K0 është 𝐽0 = 𝐾0 = 1. Ky
ekuacion implementohet duke lidhur hyrjet J0 dhe K0 me nivelin e lartë logjik HIGH. Kurse FF1
(Q1) ndryshon gjendje sa herë që janë Q0=1 dhe Q3=0 dhe funksioni logjik për hyrjet J1 dhe K1
është 𝐽1 = 𝐾1 = 𝑄0 𝑄̅3. FF2 do të ndryshojë gjendje sa herë që kur vjen impulsi i clockut, Q0=1 dhe
Q1=1, prandaj funksioni logjik për hyrjet J2 dhe K2 është 𝐽2 = 𝐾2 = 𝑄0 𝑄1 . FF3 do të ndryshojë
gjendje sa herë që kur vjen impulsi i clockut, Q0=1, Q1=1 dhe Q2=1, prandaj funksioni logjik për
hyrjet J3 dhe K3 është 𝐽3 = 𝐾3 = 𝑄0 𝑄1 𝑄2 + 𝑄0 𝑄3.

39
Kodi VHDL për numeratorin sinkron dekadik me 4-bit i cili përdor JK-FF jepet si në vijim:

library ieee;
use ieee.std_logic_1164.all;

entity FourBitSynchDecadeCounter is
port (Clk: in std_logic; Q0, Q1, Q2, Q3: inout std_logic);
end entity FourBitSynchDecadeCounter;

architecture LogicOperation of FourBitSynchDecadeCounter is


component jkff is
port (J, K, Clk: in std_logic; Q: out std_logic);
end component jkff;
signal J1, J2, J3: std_logic;
begin
J1 <= Q0 and not Q3;
J2 <= Q1 and Q0;
J3 <= (Q2 and J2) or (Q0 and Q3);
FF0: jkff port map (J => ‘1’, K => ‘1’, Clk => Clk, Q => Q0);
FF1: jkff port map (J => J1, K => J1, Clk => Clk, Q => Q1);
FF2: jkff port map (J => J2, K => J2, Clk => Clk, Q => Q2);
FF3: jkff port map (J => J3, K => J3, Clk => Clk, Q => Q3);
end architecture LogicOperation;

Numëruesi sinkron UP/DOWN

Një numërues UP/DOWN është i aftë të avancojë në secilin prej drejtimeve sipas një rendi të
caktuar. Një numërues binar me 3-bit që e rit verën e numërimit pra nga vlera 0, 1, 2, 3, 4, 5, 6, 7
dhe pastaj mund të ndryshojë drejtim dhe më pas të numërojë në rendin zbritës 7, 6, 5, 4, 3, 2, 1, 0.
Por shumica e numëruesve UP/DOWN mund të kthehen në çdo pikë të rendit të tyre siç tregohet në
vijim:

40
Nga tabela e vërtetësisë së numëruesit UP/DOWN me 3-bit shohim që shigjetat tregojnërendin e
numërimit. Nga analiza e Q0 për të dyja rendet UP dhe DOWN tregon se FF0 inverton gjendjen sa
herë që vjen fronti rritës i impulseve të clockut, prandaj hyrjet J0 dhe K0 janë 𝐽0 = 𝐾0 = 1. Për
rendin rritës, Q1 ndryshon gjendjen në impulsin e ardhshëm të clockut kur Q0=1. Për rendin zbritës,
Q1 ndryshon gjendjen në impulsin e ardhshëm të clockut kur Q0=0. Kështu që, hyrjet J 1 dhe K1 të
FF1 duhet të jenë të barabartë me 1 sipas ekuacionit 𝐽1 = 𝐾1 = (𝑄0 ∙ 𝑈𝑃) + (𝑄̅0 ∙ 𝐷𝑂𝑊𝑁).
Për rendin rritës Q2 ndryshon gjendjen në impulsin e ardhshëm të clockut kur Q0=Q1=1. Për rendin
zbritës, Q2 ndryshon gjendjen në impulsin e ardhshëm të clockut kur Q0=Q1=0. Kështu që, hyrjet
J2 dhe K2 të FF2 duhet të jenë të barabartë me 1 sipas ekuacionit 𝐽2 = 𝐾2 = (𝑄0 ∙ 𝑄1 ∙ 𝑈𝑃) + (𝑄̅0 ∙
𝑄̅1 ∙ 𝐷𝑂𝑊𝑁).
̅̅̅̅̅̅̅̅̅ duhet të jenë HIGH për numërimin në rendin rritës (UP) dhe LOW
Hyrjet e kontrollit 𝑈𝑃/𝐷𝑂𝑊𝑁
për rendin zbritës (DOWN). Kur linja e kontrollit të numërimit 𝑈𝑃/𝐷𝑂𝑊𝑁 ̅̅̅̅̅̅̅̅̅ është HIGH. Atëherë
portat AND të sipërme do të jenë aktive dhe portat AND të poshtme do të jenë joaktive, kështu që
dalja e çdo flip-flopi jepet në flip-flopin vijues. Në këtë rast, numëruesi do të numërojë nga 000 dhe
111. Në të kundërt, kur linja e kontrollit të numërimit është LOW, atëherë portat e sipërme do të
jenë joaktive dhe numeratori numëron nga vlera 111 në 000.

41
Kodi në VHDL për numëruesin UP/DOWN jepet në vijim:

library ieee;
use ieee.std_logic_1164.all;

entity UpDnDecadeCntr is
port (UPDN, Clk: in std_logic; Q0, Q1, Q2, Q3: buffer std_logic);
end entity UpDnDecadeCntr;

architecture LogicOperation of UpDnDecadeCntr is


component jkff is
port (J, K, Clk: in std_logic; Q: buffer std_logic);
end component jkff;
function UpDown(A, B, C, D: in std_logic)
return std_logic is
begin
return((A and B) or (C and D));
end function UpDown;
signal J1Up, J1Dn, J1, J2, J3: std_logic;
begin

J1Up <= UPDN and Q0; J1Dn <= not UPDN and not Q0;
UpDn1: J1 <= UpDown(UPDN, Q0, not UPDN, not Q0);
UpDn2: J2 <= UpDown(J1Up, Q1, J1Dn, not Q1);
UpDn3: J3 <= UpDown(J1Up and Q1, Q2, J1Dn and not Q1, not Q2);
FF0: jkff port map (J =>‘1’, K =>‘1’, Clk => Clk, Q => Q0);
FF1: jkff port map (J => J1, K => J1, Clk => Clk, Q => Q1);
FF2: jkff port map (J => J2, K => J2, Clk => Clk, Q => Q2);
FF3: jkff port map (J => J3, K => J3, Clk => Clk, Q => Q3);
end architecture LogicOperation;

42
Regjistrat

Regjistri përfaqëson një grup elementësh të memories që punojnë së bashku si një njësi (bllok).
Regjistri më i thjeshtë s`bën më shumë se sa magazinimin e fjalëve binare. Regjistrat e tjerë (më të
komplikuar) mund të ndryshojnë me 1 përmbajtjen e akumuluar, mund të kryejnë zhvendosje të
fjalëve binare djathtas apo majtas,ose të kryejnë veprime të tjera. Regjistri zhvendosës është një
pajisje dixhitale që përdoret për ruajtjen dhe transferimin e të dhënave. Regjistrat përdoren kryesisht
për ruajtjen e përkohshme të të dhënave të pranishme në daljen e një qarku dixhital para se të
transmetohen në një qark tjetër dixhital.

Të dhënat që do të ruhen mund të jenë të dhëna të pranishme në daljen e një mikroprocesori para se
të kalojnë në qarqet e kontrollit të pajisjeve të daljes. Kështu, regjistri zhvendosës përbën një hallkë
të rëndësishme ndërmjet sistemit dixhital kryesor dhe kanaleve input/output. Gjithashtu, regjistrat
zhvendosës mund të konfigurohen për të ndërtuar disa tipe të caktuar numëruesish që mund të
përdoren për të kryer disa veprime aritmetike, të tilla si zbritje, shumëzim, pjesëtim, invertim etj.

Blloku kryesor i ndërtimit në të gjithë regjistrat zhvendosës është flip-flopi, kryesisht ai i tipit D.
Kapaciteti i ruajtjes së një regjistri zhvendosës është i barabartë me numrin e përgjithshëm të biteve
të të dhënave dixhitale që ai mund të ruajë. Meqenëse, çdo flip-flop mund të ruajë një bit të të
dhënave dixhitale, kapaciteti i ruajtjes së regjistrit zhvendosës është i barabartë me numrin e flip-
flopeve që përdoren për ta realizuar atë. P.sh., arkitektura e brendshme e një regjistri zhvendosës me
8-bit ka në përbërje të saj 8 FF të lidhur në kaskadë.

Aftësia zhvendosëse e një regjistri lejon lëvizjen e të dhënave nga stadi në stad brenda regjistrit, ose
nga jashtë-brenda ose nga brenda-jashtë, me ardhjen e impulseve të clockut. Të dhënat në një
regjistër mund të zhvendosen në dy mënyra të mundshme: zhvendosje seriale dhe zhvendosje
paralele. Metoda seriale e zhvendosjes, e bën zhvendosjen me një bit sa herë që vjen çdo impuls
clocku, duke filluar nga biti me më pak peshë LSB ose nga biti me më shumë peshë MSB. Nga ana
tjetër, zhvendosja paralele realizohet duke zhvendosur njëkohësisht të gjitha të dhënat me ardhjen e
impulsit të clockut. Për këtë arsye mund të themi se zhvendosja paralele e të dhënave kryhet më
shpejt se zhvendosja seriale.Në bazë të metodës së përdorur për të ngarkuar të dhënat në regjistrat
zhvendosës dhe për të lexuar të dhënat nga regjistrat zhvendosës, ata klasifikohen në katër tipe
kryesore:
1. Hyrje seriale - dalje seriale
2. Hyrje seriale - dalje paralele
3. Hyrje paralele - dalje seriale
4. Hyrje paralele - dalje paralele

43
Katër tipet e regjistrave zhvendosës

Regjistri zhvendosës me hyrje seriale-dalje seriale

Nga vetë emri i regjistrit është e qartë se ky tip regjistri pranon të dhëna në hyrje seriale, dmth. Një
bit për çdo impuls clocku në një linjë të vetme. Gjithashtu, dalja merret në një linjë të vetme në
formë seriale. Në figurën në vijim paraqitet një regjistër zhvendosës me 4-bit dhe i realizuar me D-
FF.

Le të ilustrojmë rastin e të dhënave 1010 në regjistrin zhvendosës SISO, duke filluar me bitin e parë
LSB me vlerë 0. Regjistri fillimisht është në gjendjen RESET. Biti i parë, që është 0 vendoset në
linjën e hyrjes së të dhënave, duke bërë D0=0. Pas frontit rritës të impulsit të parë të clockut
zbatohen në të gjithë FF, kemi D0=Q0=0. Por, FF0 është në gjendjen RESET, kështu që 0 ruhet,
FF1, FF2, FF3 kanë gjendje 0 dhe ajo ruhet. Biti i dytë, që është 1, zbatohet në linjën e të dhënave,
duke e bërë D0=1 për FF0 dhe D1=0 për FF1, sepse hyrja D1 e FF1 lidhet me daljen Q0. Pasi
zbatohet impulsi i dytë i clockut, vlera 1 në FF0 është transferuar në FF1, pra Q0=1 dhe 0 që ishte
në FF0 zhvendoset në FF1, pra Q1=0. Transferimi i biteve në secilin FF bëhet sa herë që vjen
impulsi i clockut dhe tregohet në figurën në vijim. Biti i tretë, që është 0 zhvendoset në linjën e
hyrjes së të dhënave dhe me zbatimin e impulsit t rradhës së clockut, vlera 0 vendoset në FF0, 1 i
ruajtur në FF0 kalon në FF1 dhe biti 0 i ruajtur në FF1 kalon në FF2. Biti i fundit, që ka vlerën 1 do
të aplikohet në FF0 me ardhjen e impulsit të radhës së clockut. Këtë herë biti 1 vendoset në FF0, 0 e
ruajtur në FF0 kalon në FF1, 1 i ruajtur në FF1 zhvendoset në FF2 dhe 1 në FF2 zhvendoset në FF3.

44
45
Regjistri zhvendosës me hyrje seriale-dalje paralele

Një regjistër zhvendosës me hyrje seriale-dalje paralele është identik, përsa i përket ndërtimit, me
regjistrin me hyrje seriale-dalje seriale, përveç se në këtë rast daljet e të gjithë flip-flopeve jepen në
terminalet e qarkut. Në këtë tip regjistri, bitet e të dhënave futen në mënyrë seriale (i pari biti më në
të djathtë LSB), në të njëjtën mënyrë si në regjistrin SISO. Ndryshimi është në mënyrën me të cilët
bitet e të dhënave merren në dalje të regjistrit siç tregohet në figurën në vijim.

Kodi në VHDL për regjistrin serial-paralel jepet në vijim:

library ieee;
use ieee.std_logic_1164.all;

entity SerInParOutShift is
port (D0, Clock, Clr: in std_logic; Q0, Q1, Q2, Q3,
Q4, Q5, Q6, Q7: inout std_logic);
end entity SerInParOutShift;

architecture LogicOperation of SerInParOutShift is


component dffl is
port (D, Clock: in std_logic; Q: inout std_logic);
end component dff1;
begin
FF0: dff1 port map(D=>D0 and Clr, Clock=>Clock, Q=>Q0);
FF1: dff1 port map(D=>Q0 and Clr, Clock=>Clock, Q=>Q1);
FF2: dff1 port map(D=>Q1 and Clr, Clock=>Clock, Q=>Q2);
FF3: dff1 port map(D=>Q2 and Clr, Clock=>Clock, Q=>Q3);
FF4: dff1 port map(D=>Q3 and Clr, Clock=>Clock, Q=>Q4);
FF5: dff1 port map(D=>Q4 and Clr, Clock=>Clock, Q=>Q5);
FF6: dff1 port map(D=>Q5 and Clr, Clock=>Clock, Q=>Q6);
FF>: dff1 port map(D=>Q6 and Clr, Clock=>Clock, Q=>Q7);
end architecture LogicOperation;

Regjistri zhvendosës me hyrje paralele-dalje seriale

Për një regjistër zhvendosës me hyrje paralele të të dhënave, bitet hyjnë njëkohësisht në regjistër në
linja paralele dhe dalja e të dhënave bëhet në mënyrë seriale, pra bitet jepen në dalje njëri pas tjetrit.
Në vijim është dhënë skema e një regjistri zhvendosës me 4-bit me hyrje paralele-dalje seriale dhe
simboli i tij. Vejmë re se ky regjistër ka katër linja të hyrjes së të dhënave D0, D1, D2 dhe D3 dhe
̅̅̅̅̅̅̅̅ që kontrollon ngarkimin në paralel të të dhënave si dhe zhvendosjen e tyre
një hyrje 𝑆𝐻𝐼𝐹𝑇/𝐿𝑂𝐴𝐷
46
̅̅̅̅̅̅̅̅ mbahet në nivelin logjik LOW, njëra nga hyrjet e secilës
në dalje të regjistrit. Kur 𝑆𝐻𝐼𝐹𝑇/𝐿𝑂𝐴𝐷
prej portave AND të hyrjes paralele të të dhënave, G1 deri në G4 është HIGH, duke lejuar kështu që
çdo bit i të dhënave të dhënave të zbatohet në hyrjen D të flip-flopit përkatës. Ndërsa portat AD të
hyrjes seriale të të dhënave janë joaktive. Kur zbatohet një impuls clock, flip-flopet që e kanë hyrjen
D=1 do të vendosin gjendjen SET në dalje të tyre dhe ato me hyrje D=0 do të vendosin gjendjen
RESET, duke ruajtur në këtë mënyrë mënyrë të katër bitet njëkohësisht. Pra të dhënat ngarkohen në
mënyrë paralele në sinkronizim me impulset e clock.
Kur 𝑆𝐻𝐼𝐹𝑇/𝐿𝑂𝐴𝐷 ̅̅̅̅̅̅̅̅ mbahet në nivelin logjik HIGH, portat G1 deri në G4 të hyrjes paralele të të
dhënave janë jo aktive, ndërsa aktivizohen portat G5 deri në G7 të hyrjes seriale të të dhënave, të
cilat lejojnë zhvendosjen e biteve të të dhënave djathtas nga një stad në tjetrin. Pra, informacioni do
̅̅̅̅̅̅̅̅ është në nivelin logjik HIGH.
të shfaqet gjatë kohës kur sinjali 𝑆𝐻𝐼𝐹𝑇/𝐿𝑂𝐴𝐷
Kodi në VHDL për regjistrin paralel-serial jepet në vijim:

library ieee:
use ieee.std_logic_1164.all;

entity ParSerShift is
port (D0, D1, D2, D3, D4, D5, D6, D7, SHLD, Clock:
in std_logic; Q, QNot: inout std_logic);
end entity ParSerShift;

architecture LogicOperation of ParSerShift is


signal S1, S2, S3, S4, S5, S6, S7,
Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7: std_logic;
function ShiftLoad (A,B,C: in std_logic)return std_logic is
begin
return ((A and B) or (not B and C));
end function ShiftLoad;
component dff1 is
port (D, Clock: in std_logic;
Q: inout std_logic);
end component dff1;
begin
SL1:S1 <=ShiftLoad(Q0, SHLD, D1);
SL2:S2 <=ShiftLoad(Q1, SHLD, D2);
SL3:S3 <=ShiftLoad(Q2, SHLD, D3);
SL4:S4 <=ShiftLoad(Q3, SHLD, D4);
SL5:S5 <=ShiftLoad(Q4, SHLD, D5);
SL6:S6 <=ShiftLoad(Q5, SHLD, D6);
SL7:S7 <=ShiftLoad(Q6, SHLD, D7);
FF0: dff1 port map(D=>D0 and not SHLD, Clock=>Clock, Q=>Q0);
FF1: dff1 port map(D=>S1, Clock=>Clock, Q=>Q1);
FF2: dff1 port map(D=>S2, Clock=>Clock, Q=>Q2);
FF3: dff1 port map(D=>S3, Clock=>Clock, Q=>Q3);
FF4: dff1 port map(D=>S4, Clock=>Clock, Q=>Q4);
FF5: dff1 port map(D=>S5, Clock=>Clock, Q=>Q5);
FF6: dff1 port map(D=>S6, Clock=>Clock, Q=>Q6);
FF>: dff1 port map(D=>S>, Clock=>Clock, Q=>Q);
QNot <=not Q;
end architecture LogicOperation;

47
Regjistri zhvendosës me hyrje paralele-dalje paralele

Një regjistër zhvendosës me hyrje paralele/dalje paralele është tipi i katërt i regjistrave të
përmendur. Ky regjistër përdor të dyja metodat, hyrjen paralele si dhë daljen paralele të të dhënave.
Hyrjet në të cilat jepen të dhënat, lidhen direkt me hyrjet D të flip-flopeve përkatës, D0, D1, D2 dhe
D3. Me ardhjen e frontit rritës të impulsit të clock, të gjithë bitet e të dhënave jepen në regjistër
njëkohësisht dhe jepen njëkohësisht në daljet Q0, Q1, Q2 dhe Q3. Gjithashtu në këtë tip regjistri
nuk ka komunikim ndërmjet flip-flopeve, meqenëse nuk është e nevojshme zhvendosja seriale.

48
Kodi në VHDL për regjistrin paralel-paralel jepet në vijim:

library ieee;
use ieee.std logic_1164.all;

entity ParInParOut is
port (D0, D1, D2, D3, Clock: in std_logic;
Q0, Q1, Q2, Q3: inout std_logic);
end entity ParInParOut;

architecture LogicOperation of ParInParOut is


component dff1 is
port (D, Clock: in std_logic;
Q: inout std_logic);
end component dff1;

begin
FF0: dff1 port map (D=>D0, Clock=>Clock, Q=>Q0);
FF1: dff1 port map (D=>D1, Clock=>Clock, Q=>Q1);
FF2: dff1 port map (D=>D2, Clock=>Clock, Q=>Q2);
FF3: dff1 port map (D=>D3, Clock=>Clock, Q=>Q3);
end architecture LogicOperation;

Regjistri zhvendosës dy drejtimësh

Regjistri zhvendosës dy drejtimësh është një regjistër në të cilin të dhënat mund të zhvendosen ose
majtas ose djathtas. Ai mund të implementohet duke përdorur logjikën kombinatore që mundëson
transferimin e të dhënave nga një stad në tjetrin në të djathtë ose në të majtë, në varësi të nivelit
logjik të hyrjes së kontrollit.

49
̅̅̅̅̅̅̅ është në nivelin logjik HIGH, lejon që bitet e të dhënave
Kur linja e kontrollit 𝑅𝐼𝐺𝐻𝑇/𝐿𝐸𝐹𝑇
brenda në regjistër të zhvendosen në të djathtë dhe gjendja LOW mundëson zhvendosjen e të
̅̅̅̅̅̅̅ është HIGH, portat G1 deri në
dhënave në regjistër në të majtë, Kur hyrja e kontrolli 𝑅𝐼𝐺𝐻𝑇/𝐿𝐸𝐹𝑇
G4 janë aktive dhe gjendja e daljes Q të çdo flip-flopi kalon në hyrjen D të flip-flopit vijues. Kur
zbatohet një impuls clocku, bitet e të dhënave zhvendosen një pozicion në të djathtë. Kur hyrja e
̅̅̅̅̅̅̅ është LOW, portat G5 deri në G8 janë aktive dhe dalja Q e çdo flip-flopi
kontrollit 𝑅𝐼𝐺𝐻𝑇/𝐿𝐸𝐹𝑇
kalon në hyrjen D të flip-flopit parardhës. Kur zbatohet një impuls clocku, bitet e të dhënave
zhvendosen një pozicion në të majtë.
Kodi në VHDL për regjistrin jepet në vijim:

library ieee;
use ieee.std_logic_1164.all;
entity FourBitBiDirSftReg is
port (R_L, DataIn, Clock: in std_logic;
Q0, Q1, Q2, Q3: buffer std_logic);
end entity FourBitBiDirSftReg;

architecture LogicOperation of FourBitBiDirSftReg is


component dff1 is
port(D,Clock: in std_logic; Q: out std_logic);
end component dff1;
signal D0, D1, D2, D3: std_logic;
begin
DO <= (DataIn and R_L) or (not R_L and Q1);
D1 <= (Q0 and R_L) or (not R_L and Q2);
D2 <= (Q1 and R_L) or (not R_L and Q3);
D3 <= (Q2 and R_L) or (not R_L and DataIn);
FF0: dff1 port map(D => D0, Clock => Clock, Q => Q0);
FF1: dff1 port map(D => D1, Clock => Clock, Q => Q1);
FF2: dff1 port map(D => D2, Clock => Clock, Q => Q2);
FF3: dff1 port map(D => D3, Clock => Clock, Q => Q3);
end architecture LogicOperation;

Regjistrat Buffer (Buffer-registers)

Regjistri buffer është lloji më i thjeshtë. Ajo që bën është magazinimi për një kohë të shkurtër të
fjalës binare. Në figurën tregohet një regjistër buffer i ndërtuar me D-FF. Bitet X përgatisin (set-up)
FF për ngarkim (Loading).
X3 X2 X1 X0

Q3 D3 Q2 D2 Q1 D1 Q0 D0

Q Q Q Q

CLK

50
Prandaj kur vjen kërcimi pozitiv i impulseve Clock, fjala e magazinuar në regjistër është Q 3Q2Q1Q0
= X3X2X1X0 ose Q=X. Qarku është shumë primitiv. Të paktën kërkon një farë kontrolli mbi bitet
X, një farë mënyre për t`i shkëputur ata nga lidhja me hyrjet D derisa të jemi gati për ti akumuluar
ata.

Bufferi i kontrolluar

Në figurën 6.2 jepet regjistri buffer i kontrolluar. Kur CLR =1 ,të gjithë FF rivendosen dhe fjala
binare e daljes bëhet Q = 0000. Kur CLR bëhet 0, regjistri është gati për veprim. LOAD është një
hyrje kontrolli. Përcakton se çfarë bën regjistri. Kur LOAD=0, bitet X nuk arrijnë dot hyrjet e FF.
Në të njëjtën kohë sinjali i invertuar LOAD=1 sforcon daljen e çdo FF të lidhet mbrapsht në hyrjen
e tij të të dhënave. Prandaj të dhënat qarkullojnë ,domethënë ruhen edhe pse në hyrje vijnë impulse
CLOCK. Me fjalë të tjera përmbajtja e çdo regjistri nuk ndryshon, pavarësisht nga ardhja e
impulseve Clock. Kur LOAD =1, bitet X transmetohen në FF. Pas kohës së shkurtër të mbajtjes
(tsetup), Flip-Flopet janë të gatshëm për ngarkim. Kur vjen kërcimi pozitiv i impulseve Clock, bitet
X ngarkohen dhe fjala e akumuluar tashmë është:
Q3Q2Q1Q0 = X3X2X1X0
ose thjeshtë Q = X.
X3 X2 X1 X0

LOAD

Q3 D3 Q2 D2 11
Q D1 Q0 D0

QCLR Q CLR Q CLR QCCLR


LR

CLR

Regjister buffer i kontrolluar

Duke shtuar numrin e FF frenohen regjistra buffer të çdo gjatësie. Në figurën 6.3 jepet simboli i
regjistrit të kontrolluar. X është fjala që do të ngarkohet dhe Q fjala e magazinuar. Kur LOAD = 0,
Q ngrin (frozen) pavarësisht nëse ndryshojnë bitet X apo vijnë impulset CLK. Vetëm kur LOAD=1,
kërcimi pozitiv i impulseve pasardhës CLK ngarkon X në regjistër.

51
Numeratori Johnson

Në numëruesin Johnson dalja komplementare e flip-flopit të fundit lidhet me hyrjen D të flip-flopit


të parë. Kjo lidhje e kundërt jep një renditje karakteristike të gjendjeve, siç tregohet në figurë dhe
tabelën e vërtetësisë.

Implementimi i numëruesit Johnson është shumë i thjeshtë dhe është i njëjtë pavarsisht numrit të
stadeve. Dalja Q e çdo stadi lidhet me hyrjen D të stadit tjetër dhe përjashtim bën vetëm flip-flopi i
fundit, ku dalja komplementare e tij lidhet me hyrjen D të flip-flopit të parë. Regjistri zhvendos
përmbajtjen e tij në të djathtë për çdo impuls të clockut dhe në të njëjtën kohë, dalja komplementare
e flip-flopit të fundit FF3, transferohet në flip-flopin e parë.

Numeratori unazë

Në vend të numërojë numrat binarë ky numerator përdor fjalë që kanë vetëm një bit të barabartë
me “1”. Në figurën 6.13 tregohet numëratori unazë i përbërë nga 4 FF. Q 0 lidhet me D1,Q1-D2,Q2-
D3,Q3-D0. Pra numëratori unazë përfaqëson një regjistër me zhvendosje majtas, sepse bitet
zhvendosen 1 bit majtas për çdo impuls Clock, por me një ndryshim: sepse Q3 lidhet me D0. Ky lloj
veprimi quhet rrotullim majtas (rotate left). Sinjali CLR rivendos të gjithë FF me përjashtim të të
parit. Kështu fjala fillestare binare është Q=0001. Kur CLR=0 numëratori numëron me çdo impuls
Clk:
Q = 0010
0100
1000
0001 përsëritet cikli.
52
Q3 D3 Q2 D2 Q1 D1 Q0 PR D0

QCLR Q CLR Q CLR Q

CLR
Figura 2-11 Numeratori unazë me 4-bit

Pra biti i magazinuar “1” ndjek një rrugë cirkulare. Prandaj ky numërator quhet numërator unazë.
Duke shtuar numrin e FF merret një numërator unazë i çdo gjatësie. Çdo fjalë e numëratorit unazë
ka vetëm 1 bit me vlerë “1”.Fjalë të tilla njihen me emrin fjalë unazë, sepse ato janë dalja e
natyrshme e një numëratori unazë. Veç kësaj këto fjalë formojnë kodin unazë, një mënyrë tjetër e
paraqitjes së numrave dhjetorë. Në këta numëratorë fjala e fundit unazë përfaqëson decimalin
(shifrën dhjetore) n-1, ku n është numri i FF. Numëratorët unazë kur bëhet fjalë për numërimin e
zakonshëm nuk mund të konkurojnë numëratorët ripple dhe të sinkronizuar. Por ata janë të paçmuar
kur nevojitet të kontrollohet një vazhdimësi veprimesh. Me qenë se çdo fjalë unazë ka vetëm një bit
me vlerë “1”, atëherë vetëm një nga disa pajisje mund të vihet në veprim.
Kodi në VHDL për regjistrin unazor në vijim:

library ieee;
use ieee.std_logic_1164.all;

entity RingCtr is
port (I, Clr, Clock: in std_logic;
Q0, Q1, Q2, Q3: inout std_logic);
end entity RingCtr;

architecture LogicOperation of RingCtr is


component dff1 is
port (D, Clock, Pre, Clr: in std_logic;
Q: inout std_logic);
end component dff1;
begin
FF0: dff1 port map(D=> Q3, Clock=>Clock, Q=>Q0, Pre=> not I, Clr=>‘1’);
FF1: dff1 port map(D=> Q0, Clock=>Clock, Q=>Q1, Pre=>‘1’, Clr=>not Clr);
FF2: dff1 port map(D=> Q1, Clock=>Clock, Q=>Q2, Pre=>‘1’, Clr=>not Clr);
FF3: dff1 port map(D=> Q2, Clock=>Clock, Q=>Q3, Pre=>‘1’, Clr=>not Clr);
end architecture LogicOperation;

53

You might also like