You are on page 1of 45

Generator sinusnog signala 1

1. PROJEKTNI ZADATAK
Generator sinusnog signala 2

Elektronski fakultet u Nišu


Katedra za elektroniku
Predmet: Projektovanje VLSI

Projektni zadatak:

Projektovati digitalni generator sinusnog signala kod koga se biranjem odgovarajućih vrednosti
konstanti i podtipova može menjati broj odmeraka i broj bitova po odmerku signala.

Vrednosti odmeraka sinusnog signala čuvaju se u “lookup” tabeli (Napomena: ”Lookup” tabelu
formirati za određen konkretan broj odmeraka i broj bitova po odmerku). Da bi se ostvarila
ušteda u memoriji “lookup” tabela treba da sadrži samo vrednosti odmeraka sinusnog signala u
opsegu od π/2 radiana. Drugih π/2 radiana je slika prvih π/2 radiana po vremenu, a preostalih π
radiana je slika po amplitudi prvih π radiana.

Čip treba da bude testabilan.

Raspored pinova usvojiti proizvoljno.

Rad treba da sadži opis funkcije svakog bloka na VHDL-u, šemu implementacije koja je
rezultat opisa, talasne oblike napona koji dokazuju ispravnost implementacije, projekat layout-a,
i tekstualna objašnjenja.

PREDMETNI NASTAVNIK

Prof.dr Milunka Damnjanović

2. UVOD
Generator sinusnog signala 3

2.1. NASTANAK I ULOGA VHDL-a

Projektovanje bilo kakvog digitalnog sistema nemoguće je bez osnovnih elektronskih


komponenata (gejtova, flip-flopova idr.). Veliki broj logičkih kola zasnovanih na osnovnim
elektronskim elementima se projektuje Bulovim (logičkim) jednačinama.

Tehnike za ovakvo projektovanje zahtevaju pisanje po jedne jednačine za svaki ulaz flip-
flopa ili bloka gejtova. Ova tehnika je zato veoma nepraktična za velike projekte.

Projekti zasnovani na šematskom projektovanju proširili su mogućnost projektovanja pomoću


logičkih jednačina, priključujući kao dodatak gejtovima i flip-flop-ovima neka dodatna kola.
Pošto se ova kola mogu sastojati od gejtova, flip-flop-ova i drugih kola, ona omogućavaju
hijerarhisko projektovanje, gde postoji mogućnost smeštanja velikog broja komponenti sa manje
napora nego što je slučaj kod projektovanja pomoću logičkih jednačina.

Ljudima je najbliže grafičko predstavljanje pošto vizuelno najjasnije prikazuje odnose


između raznih blokova projekta. Šematsko projektovanje predstavlja jednu vrstu grafičkog
projektovanja i njegova upotreba je dosta dugo bila popularna. Dugo su se šeme smatrale
optimalnim izborom za predstavljanje projekta. Današnji stepen gustine uređaja učinio ih je
ograničenim i neisplativim.

Uprkos lakoći upotrebe logičkih jednačina i šematskog projektovanja ovi metodi imaju i
nedostataka. Najvažniji je taj što se sistem uvek predstavlja kao mreža međusobno povezanih
elemenata, a na taj način specifikacija sistema ne treba da bude kreirana i predstavljena.
Specifikacija sistema je uvek data u obliku očekivanog ponašanja sistema tj. šta sistem radi u
određenim slučajevima.

Još jedan nedostatak ovih metoda projektovanja je rešavanje velike složenosti projekta.
Kada se prešlo na šematsko projektovanje, prihvaćeno je da šeme sa preko šest hiljada gejtova
postaju nerazumljive.

Glavni nedostaci tradicionalnih metoda projektovanja je ručno prevođenje opisa projekta u


skup logičkih jednačina. Ovaj korak je u potpunosti eliminisan sa jezikom za opis hardvera
(Hardware Description Language-HDL). Recimo, HDL alati omogućavaju korišćenje konačnih
automata za sekvencijalne sisteme i tabele istinitosti za kombinacione module. Ovakvi spisi
projekta se mogu automatski prevesti u HDL kod kojih se može implementirati alatima za
sintezu.

Jezici za opis hardvera su našli svoju praktičnu primenu u programabilnim logičkim


uređajima (Programmable logic device-PLD) različitih vrsta kompleksnosti, od jednostavnih
PLD do složenih (CPLD) i FPGA (Field Programmable Gate Arrays-Programabilno polje
gejtova). Danas postoji nekoliko HDL jezika u upotrebi. Najpopularniji su VHDL, Verilog i
Abel.
Generator sinusnog signala 4

VHDL je akronim, a sastoji se od alfabetskih znakova “V” koje potiče od Very High Speed
Integrated Circuit (Integrisano kolo velike brzine), i “HDL” koji znači jezik za opis hardvera.
Ovaj jezik, kao i ime, potiče od Američkog ministarstva odbrane koje je prvo koristilo ovakav
vid projektovanja, modelovanja i simulacije elektronskih sistema. VHDL simulatori su se
pojavili ranih devedesetih. Sinteza nije bio jedan od razloga za stvaranje VHDL jezika. VHDL
uglavnom služi za simulaciju i modelovanje. Sinteza je dodata kao način da se automatizuje
proces projektovanja. Prvi VHDL standard uključen u IEEE (Institute of Electrical and
Electronic Engineers-institut inženjera elektrotehnike i elektronike) pojavio se 1987. godine i
postao dostupan širim krugovima za korišćenje. Prateći zakone IEEE revidiran je 1993. godine, i
1998 (Svi IEEE standardi se moraju revidirati svakih pet godina). Različite ekspertske grupe
učinile su VHDL još univerzalnijim. Na taj način je IEEE STD 1164 standard proširio VHDL
jezik sa logikom sa više nivoa koja služi za opis realnih sistema.

VHDL ne ograničava korisnika na samo jedan tip opisa. On se može koristiti kao strukturni
jezik (obezbeđujući tekstualnu verziju šema) i kao jezik ponašanja. Ova dva tipa se mogu mešati.
VHDL se koristi na različitim nivoima složenosti: od jednog tranzistora do kompletnih sistema, a
sve ostaje u istom okruženju VHDL simulacije.

Do pojave VHDL-a je potrošeno desetine hiljada dolara na korišćenje logičkih sinteza.


Danas, veći broj proizvođača programibilnih uređaja i EDA softvera nudi pristupačne alate za
VHDL sintezu.

Iako je VHDL namenjen za elektroniku koristi se i u drugim oblastima, kao sto su:
elektromehanika, hidraulika, hemija i druge, za modelovanje.

U ovom projektu je odabran VHDL jezik. VHDL kod je prvo opisan na funkcijskom nivou,
zatim sledi funkcijska verifikacija VHDL koda i sinteza u gejt nivo kola. Nivo gejta se simulira u
verifikaciji vremenskih ograničenja.

3. METODE SINTEZE GENERATORA SINUSNOG SIGNALA RAZLIČITIH


FREKVENCIJA

Postoje dva najopštija metoda za sintezu generatora sinusnog oblika signala različite frekvencije,
i to:

- Direktni metod sinteze


- Indirektni metod sinteze
Direktnim metodom ostvaruje se na izlazu sintetizatora iz jedne osnovne frekvencije veliki
broj (>109) diskretnih frekvencija. To se postiže operacijama sabiranja, oduzimanja deljenja i
množenja. Ova se metoda ističe finom rezolucijom, mogućnošću brze promene frekvencije (<20
µs) i neizobličenim, tj. spektralno čistim izlaznim signalom.
Generator sinusnog signala 5

3.1. INDIREKTNA METODA SINTEZE

Indirektna metoda omogućava jednostavnije i jeftinije rešenje kada se ne zahteva velika


rezolucija, veliki broj frekvencija i velika brzina njihove promene (može trajati duže od 10ms).
Ovde je princip sinteze malo drugačiji, a realizuje se pomoću jedne ili više faznih povratnih veza
(PLL) i nekoliko elemenata za dobijanje razlike i deljenja frekvencije.

Bitni elementi indirektne metode su naponski upravljan oscilator i fazna povratna veza sa
deliteljem frekvencije. Delitelj je obično u formi digitalnog brojača. Na ovaj način se mogu
dobiti samo celi umnožci frekvencije. U praksi se ovako ne može dobiti širok spektar
frekvencije, zato što komparator ima ograničen frekventni opseg. Takođe, teško je napraviti
visokofrekventni VCO sa širokim frekventnim opsegom. Ovaj princip je prikazan na sledećoj
slici (sl.3.1) .

slika 3.1

3.2. DIREKTNA METODA SINTEZE


Generator sinusnog signala 6

Na slici 3.2 je data šema koja prikazuje princip sa kojim je moguće dobiti periodični signal bilo
kog oblika, upotrebom odgovarajućeg ROM-a.

Na sličnom principu je realizovan i ovaj projekat mada on u sebi ne sadrži deo za DA konverziju
i filtar . Na istoj slici prikazan je projekat generatora funkcija koji proizvodi sinusoidalne talase.
Sinteza talasnih oblika je bazirana na direktnoj digitalnoj sintezi (DDS).

DDS se izvodi na taj način što se prvo generiše vremenski promenljivi signal u digitalnom
domenu. To nam omogućava brzo prelaženje sa jedne na drugu izlaznu (generisanu) frekvenciju,
finu frekventnu rezoluciju i rad u širokom spektru frekvencija.

Danas, ovakvi uređaji imaju veliku gustinu pakovanja, malu snagu, i nisku cenu.

Jezgro DDS uređaja se sastoji iz sledećih delova: faznog akumulatora, memorije (“lookup”
tabele), i D/A konvertora, kao što je prikazano na blok šemi (slici) 3.2.

slika 3.2

Izlazna frekvencija zavisi od dve promenljive: referentne klok frekvencije i binarnog broja
smeštenog u prihvatni registar. Glavni ulaz u fazni akumulator čini ovaj binarni broj. Fazni
akumulator izračunava adresu za svaki klok ciklus i adresira memoriju za “lookup” tabelu. Iz
memorije (“lookup” tabele) se dobija vrednost za izlaznu digitalnu amplitudu (fazni priraštaj
definisan binarnim brojem na serijskom ulazu).
Generator sinusnog signala 7

Ako je fazni priraštaj veliki, akumulator će “protrčati” kroz sinusnu “lookup” tabelu i na
taj način generisati visokofrekventni sinusni talas. Ako je fazni priraštaj mali, akumulator će
“odabrati” mnogo više koraka, i na taj način generiše niskofrekventni sinusni talas.

Fazni akumulator na neki način predstvlja brojač neke osnove M, koji akumulira priraštaje
svaki put kada primi klok impuls. Amplituda priraštaja je definisana sa binarnom ulaznom rečju
M. Ova reč formira veličinu faznog koraka, odnosno broj odmeraka. Broj odmeraka je definisan
rezolucijom akumulatora n, koji definiše podešavanje rezolucije DDS-a.

Mxf c
f out = ∀M < 2 n −1
2n

gde je:

f out - izlazna frekvencija DDS-a

M- binarna podešavajuća reč

f c - frekvencija klok signala

n- dužina faznog akumulatora u bitovima

Promenom vrednosti M rezultira u trenutnoj promeni faze i izlazne frekvencije.

Sampling teorija zahteva da imamo najmanje dva uzorka po ciklusu da bi smo


rekonstruisali izlazni talas. Ograničenje ∀M < 2 n −1 dolazi od sempling teoreme.

Frekventna reč f out je celobrojna. Ovde se frekventna rezolucija dobija za M=1 i jednaka
f clk
je: ∆f = .
2n

Maksimalna izlazna frekvencija DDS-a, teorijski, je f c /2, a u praksi 40-45% od f c .

Kada generišemo konstantnu frekvenciju, izlaz fznog akumulatora povećava se linearno.

U suštini referentna klok frekvencija je izdeljena i smanjena pomoću “faktora deljenja”


postavljenog unapred pomoću programabilne ulazne digitalne reči.

Kvalitet izlaznog signala direktno zavisi od kvaliteta referentnog klok signala. Bitni faktori su
frekventna stabilnost, ivična odstupanja, i fazni šum a ako pritom postoje kod referentnog klok
signala preneće se i na izlaz DDS-a.

Recimo još i to da je broj uzoraka, za koji se smatra da je zadovoljena dobra predstava signala, u
memoriji minimum 16384.
Generator sinusnog signala 8

3.3. PREDNOSTI DDS-a U ODNOSU NA TRADICIONALNU PLL SINTEZU

Postoji mnogo značajnih prednosti DDS sinteze u odnosu na tradicionalnu PLL sintezu.
Neke od tih prednosri su: brzo vreme podešavanja, digitalno kontrolisana frekvencija koja može
biti ispod jednog herca (µHz), fazna rezolucija ispod jednog stepena, nizak fazni šum,
mogućnost daljinske kontrole sistema, eliminisana potreba za manuelno podešavanje sistema i
promene koja su povezana sa starenjem i temperaturnim driftom,eliminisane frekventne
oscilacije i analogno taloženje vremenskih anomalija.Još neke prednosti su vezane za
konkurentnu cenu, integrisanu i malu veličinu pakovnja uz gore navedene visoke performanse.

3.4. METODI ZA POBOLJŠANJE DDS-a

Poboljšanje DDS-a se ogleda kroz racionalno korišćenje memorijskog prostora, i smanjenje


nivoa napajanja (disipacije).

Neki od metoda za smanjenje veličine ROM-a su: Sunderland’s metod ,smanjuje veličinu ROM-a
za 50%, Nicola’s metod, Bellauoar metod, sa samo 16 tačaka u LUT-u a upotrbljava se za žičane
komunikacije, Rom-less metod, na kom je baziran i ovaj projekat pa će o njemu još biti reči
kasnije.

Poboljšanje koje je zapazio Yamagishi a vezano je za smanjenje disipacije je redukcija broja


izlaza ROM-a. On je ustanovio da je redukcija broja izlaza ROM-a efektivnije u smanjenju nivoa
napajanja nego redukcija broja izlaznih reči (sadržaja) ROM-a.

Hegazi je uočio da tradicionalni DDFS ima različit broj uzoraka sinusnog talasa za različite
izlazne frekvencije. On je predložio metod za generisanje fiksnog broja uzoraka sinusnog talasa
za različite izlazne frekvencije. Takođe tu su metodi vezani za polinome i nelinearne funkcije i
drugi koji se mogu naći u literaturi.
Generator sinusnog signala 9

4. OPIS SVIH BLOKOVA U VHDL-u

4.1. ULAZNO KOLO

-- Vhdl opis ulaznog kola.Ovo kolo predstavlja ulazni blok u okviru projekta
--Sluzi za prihvat i definisanje koraka u zavisnosti od rezima rada

--Definisanje entiteta za ulazno kolo

library ieee;
use ieee.std_logic_1164.all;

entity ulazno_kolo is

port(poctes:in std_logic; --dozvola za pocetak testiranja


en_korak: in std_logic; --signal dozvole za upis koraka
reset: IN std_logic; --signal za reset
test: in std_logic; --izbor rezima,testiranje kola
clk: in std_logic; --klok signal
korak_in: in std_logic_vector(6 downto 0); --ulazna programibilna rec
korak_out: out std_logic_vector(6 downto 0) --izlazna programabilna rec
);
end entity ulazno_kolo; U1
--Definisanje arhitekture za ulazno kolo
clk korak_out(6:0)

architecture behaviour of ulazno_kolo is en_korak

korak_in(6:0)
begin poctes
prihvat:process(reset,clk)
reset

begin test

if reset='1' then --resetovanje


korak_out<=(others=>'0');
ulazno_kolo
elsif clk'event and clk='1' then

if ((poctes or en_korak)='1') then

if test='0' then --normalan rezim rada


korak_out<=korak_in;
else --rezim testiranja
korak_out<="0000001";
end if;

end if;
end if;

end process;

end architecture behaviour;


Generator sinusnog signala 10

4.2. BROJAČ
--Vhdl opis brojaca.Ovo kolo sluzi za definisanje kvadranata
--brojac je osnove 2,tj broji do 11(00,01,10,i 11).

--Definisanje entiteta za brojac

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

entity brojac is
port(reset:in std_logic; --signal za reset
clk:in std_logic; --klok signal
broj: out std_logic_vector(1 downto 0); --izlaz iz brojaca
en_brojac: in std_logic); --dozvola za brojanje
end entity brojac;

U2
--Definisanje arhitekture brojaca
clk broj(1:0)
architecture behaviour of brojac is
en_brojac

begin reset
brojac:process(reset,clk)
variable lok_broj:std_logic_vector(1 downto 0); brojac
begin

if reset='1' then --reset


lok_broj:=(others=>'0');

elsif CLK'event and CLK='1' then --dalje funkcionisanje,kada nije aktivan


reset

if (en_brojac='1')then
lok_broj:=lok_broj+1;
end if;

end if;

broj<=lok_broj;

end process;

end architecture behaviour;


Generator sinusnog signala 11

4.3. KONTROLA KVADRANATA

--Vhdl opis kola za kontrolu kvadranata.Ovo kolo generise adresu rom-a


--najslozeniji je deo sistema

--Definisanje entiteta za kolo kontrole kvadranata

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

entity kontrola_kvadranata is
port(reset:in std_logic; --reset signal
brojac:in std_logic_vector(1 downto 0); --ulaz sa brojaca
clk: in std_logic; --klok signal
korak: in std_logic_vector(6 downto 0); --Korak
en_brojac:out std_logic; -- dozvola za promenu dvo-bitnog brojaca (smer i
invertovanje)
new_addr: out std_logic_vector(9 downto 0) --vrednost nove adrese
);
end entity kontrola_kvadranata;

U3
--Vhdl opis arhitekture kola za kontrolu kvadranata

architecture beh of kontrola_kvadranata is brojac(1:0) en_brojac

clk new_addr(9:0)
signal x, y : std_logic_vector(9 downto 0);
signal pom: std_logic_vector(10 downto 0); korak(6:0)

signal pom1: std_logic_vector(10 downto 0);


signal pom2: std_logic_vector(10 downto 0); reset
signal pom3: std_logic_vector(10 downto 0);
signal pom4: std_logic_vector(10 downto 0);
kontrola_kvadranata
begin

new_addr<=x;

oduzimac: process (x, korak) is --definisanje uslova za drugu if petlju


begin
pom1<=('0'&x)-("0000"&korak);
end process;

granica2: process (x, korak) is --definisanje donje granice(prelazak u minus)


begin
pom4<=("0000"&korak)-('0'&x);
end process;

granica1: process (x, korak) is --definisanje gornje granice(prekoracenje u plus)


begin
pom3<="11111111101"-('0'&x)-("0000"&korak);
end process;

sabirac: process (x, korak) is --definisanje uslova za prvu if petlju


Generator sinusnog signala 12

begin
pom2<=('0'&x)+("0000"&korak);
end process;

komb_log: process (brojac,x, korak,pom1, pom2) --definisanje vrednosti za y


begin
en_brojac<='0';
if (brojac(0)='0') then

if ((pom2(10)='1') or pom2="01111111111") then


y<=pom3(9 downto 0);
en_brojac<='1';
else
y<=pom2(9 downto 0);
end if;

else

if ((pom1(10)='1') or pom1="00000000000" ) then


y<=pom4(9 downto 0);
en_brojac<='1';
else
y<=pom1(9 downto 0);
end if;

end if;
end process;

acc_reg: process (clk, reset) is --x dobija vrednost y


begin

if reset='1' then x<=(others=>'0');


elsif (clk'event and clk='1') then x<=y;
end if;

end process;

end architecture beh;


Generator sinusnog signala 13

4.4. ROM MEMORIJA

--Vhdl opis rom-a.Ovo kolo predstavlja rom memoriju kapaciteta 1023x8.


--U rom-u je smestena "lookup" tabela sa uzorcima za prvu cetvrtinu sinusnog signala

--Definisanje entiteta za rom

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

entity rom1023x8 is
port(addr:in std_logic_vector (9 downto 0); --sdresa rom-
a
U4
data:out std_logic_vector (7 downto 0) --izlazni
addr(9:0) data(7:0)
podatak iz roma
);
end entity; rom1023x8
--Definisanje arhitekture za rom

architecture behaviour of rom1023x8 is


type rom_niz is array (0 to 1023)of std_logic_vector(7 downto 0);

constant rom:rom_niz:=(
"00000000","00000000","00000000","00000001","00000001","00000001","00000010","000
00010","00000010","00000011","00000011","00000100",
"00000100","00000101","00000101","00000101","00000110","00000110","00000111","000
00111","00000111","00001000","00001000","00001001",
"00001001","00001001","00001010","00001010","00001011","00001011","00001011","000
01100","00001100","00001100","00001100","00001101",
"00001101","00001110","00001110","00001110","00001111","00001111","00010000","000
10000","00010000","00010001","00010001","00010010",
"00010010","00010010","00010011","00010011","00010100","00010100","00010100","000
10101","00010101","00010101","00010110","00010110",
"00010111","00010111","00010111","00011000","00011000","00011001","00011001","000
11001","00011010","00011010","00011011","00011011",
"00011011","00011100","00011100","00011101","00011101","00011101","00011110","000
11110","00011111","00011111","00011111","00100000",
"00100000","00100000","00100001","00100001","00100010","00100010","00100010","001
00011","00100011","00100100","00100100","00100100",
"00100101","00100101","00100110","00100110","00100110","00100111","00100111","001
00111","00101000","00101000","00101001","00101001",
"00101001","00101010","00101010","00101011","00101011","00101011","00101100","001
01100","00101100","00101101","00101101","00101110",
"00101110","00101110","00101111","00101111","00110000","00110000","00110000","001
10001","00110001","00110010","00110010","00110010",
"00110011","00110011","00110011","00110100","00110100","00110101","00110101","001
10101","00110110","00110110","00110111","00110111",
"00110111","00111000","00111000","00111000","00111001","00111001","00111010","001
11010","00111010","00111011","00111011","00111011",
"00111100","00111100","00111101","00111101","00111101","00111110","00111110","001
11111","00111111","00111111","01000000","01000000",
"01000000","01000001","01000001","01000010","01000010","01000010","01000011","010
Generator sinusnog signala 14

00011","01000011","01000100","01000100","01000101",
"01000101","01000101","01000110","01000110","01000111","01000111","01000111","010
01000","01001000","01001000","01001001","01001001",
"01001010","01001010","01001010","01001011","01001011","01001011","01001100","010
01100","01001100","01001101","01001101","01001110",
"01001110","01001110","01001111","01001111","01010000","01010000","01010000","010
10001","01010001","01010001","01010010","01010010",
"01010011","01010011","01010011","01010100","01010100","01010100","01010101","010
10101","01010101","01010110","01010110","01010111",
"01010111","01010111","01011000","01011000","01011000","01011001","01011001","010
11010","01011010","01011010","01011011","01011011",
"01011011","01011100","01011100","01011100","01011101","01011101","01011110","010
11110","01011110","01011111","01011111","01011111",
"01100000","01100000","01100000","01100001","01100001","01100010","01100010","011
00010","01100011","01100011","01100011","01100100",
"01100100","01100100","01100101","01100101","01100110","01100110","01100110","011
00111","01100111","01100111","01101000","01101000",
"01101000","01101001","01101001","01101010","01101010","01101010","01101011","011
01011","01101011","01101100","01101100","01101101",
"01101101","01101101","01101101","01101110","01101110","01101110","01101111","011
01111","01110000","01110000","01110000","01110001",
"01110001","01110001","01110010","01110010","01110010","01110011","01110011","011
10011","01110100","01110100","01110100","01110101",
"01110101","01110110","01110110","01110110","01110111","01110111","01110111","011
11000","01111000","01111000","01111001","01111001",
"01111001","01111010","01111010","01111010","01111011","01111011","01111011","011
11100","01111100","01111100","01111101","01111101",
"01111101","01111110","01111110","01111111","01111111","01111111","10000000","100
00000","10000000","10000001","10000001","10000001",
"10000010","10000010","10000010","10000011","10000011","10000011","10000100","100
00100","10000100","10000101","10000101","10000101",
"10000110","10000110","10000110","10000111","10000111","10000111","10001000","100
01000","10001000","10001001","10001001","10001001",
"10001010","10001010","10001010","10001011","10001011","10001011","10001100","100
01100","10001100","10001101","10001101","10001101",
"10001110","10001110","10001110","10001111","10001111","10001111","10010000","100
10000","10010000","10010001","10010001","10010001",
"10010010","10010010","10010010","10010011","10010011","10010011","10010011","100
10100","10010100","10010100","10010101","10010101",
"10010101","10010110","10010110","10010110","10010111","10010111","10010111","100
11000","10011000","10011000","10011001","10011001",
"10011001","10011010","10011010","10011010","10011011","10011011","10011011","100
11011","10011100","10011100","10011100","10011101",
"10011101","10011101","10011110","10011110","10011110","10011110","10011111","100
11111","10011111","10100000","10100000","10100000",
"10100001","10100001","10100001","10100010","10100010","10100010","10100011","101
00011","10100011","10100011","10100100","10100100",
"10100100","10100100","10100101","10100101","10100101","10100110","10100110","101
00110","10100111","10100111","10100111","10100111",
"10101000","10101000","10101000","10101001","10101001","10101001","10101010","101
01010","10101010","10101010","10101011","10101011",
"10101011","10101100","10101100","10101100","10101100","10101101","10101101","101
01101","10101110","10101110","10101110","10101111",
"10101111","10101111","10101111","10110000","10110000","10110000","10110000","101
10001","10110001","10110001","10110010","10110010",
"10110010","10110010","10110011","10110011","10110011","10110100","10110100","101
10100","10110100","10110101","10110101","10110101",
Generator sinusnog signala 15

"10110110","10110110","10110110","10110111","10110111","10110111","10110111","101
11000","10111000","10111000","10111000","10111001",
"10111001","10111001","10111001","10111010","10111010","10111010","10111010","101
11011","10111011","10111011","10111100","10111100",
"10111100","10111100","10111101","10111101","10111101","10111101","10111110","101
11110","10111110","10111110","10111111","10111111",
"10111111","10111111","11000000","11000000","11000000","11000000","11000001","110
00001","11000001","11000010","11000010","11000010",
"11000010","11000011","11000011","11000011","11000011","11000100","11000100","110
00100","11000100","11000101","11000101","11000101",
"11000101","11000110","11000110","11000110","11000110","11000111","11000111","110
00111","11000111","11001000","11001000","11001000",
"11001000","11001001","11001001","11001001","11001001","11001010","11001010","110
01010","11001010","11001011","11001011","11001011",
"11001011","11001011","11001100","11001100","11001100","11001100","11001101","110
01101","11001101","11001101","11001110","11001110",
"11001110","11001110","11001110","11001111","11001111","11001111","11001111","110
10000","11010000","11010000","11010000","11010001",
"11010001","11010001","11010001","11010010","11010010","11010010","11010010","110
10010","11010011","11010011","11010011","11010011",
"11010011","11010100","11010100","11010100","11010100","11010100","11010101","110
10101","11010101","11010101","11010101","11010110",
"11010110","11010110","11010110","11010111","11010111","11010111","11010111","110
11000","11011000","11011000","11011000","11011000",
"11011001","11011001","11011001","11011001","11011001","11011010","11011010","110
11010","11011010","11011010","11011011","11011011",
"11011011","11011011","11011011","11011100","11011100","11011100","11011100","110
11100","11011101","11011101","11011101","11011101",
"11011101","11011110","11011110","11011110","11011110","11011110","11011111","110
11111","11011111","11011111","11011111","11100000",
"11100000","11100000","11100000","11100000","11100001","11100001","11100001","111
00001","11100001","11100001","11100010","11100010",
"11100010","11100010","11100010","11100011","11100011","11100011","11100011","111
00011","11100011","11100100","11100100","11100100",
"11100100","11100100","11100101","11100101","11100101","11100101","11100101","111
00101","11100110","11100110","11100110","11100110",
"11100110","11100110","11100111","11100111","11100111","11100111","11100111","111
00111","11101000","11101000","11101000","11101000",
"11101000","11101000","11101001","11101001","11101001","11101001","11101001","111
01001","11101010","11101010","11101010","11101010",
"11101010","11101010","11101010","11101011","11101011","11101011","11101011","111
01011","11101011","11101100","11101100","11101100",
"11101100","11101100","11101100","11101101","11101101","11101101","11101101","111
01101","11101101","11101101","11101110","11101110",
"11101110","11101110","11101110","11101110","11101110","11101111","11101111","111
01111","11101111","11101111","11101111","11101111",
"11101111","11110000","11110000","11110000","11110000","11110000","11110000","111
10000","11110001","11110001","11110001","11110001",
"11110001","11110001","11110001","11110001","11110010","11110010","11110010","111
10010","11110010","11110010","11110010","11110010",
"11110011","11110011","11110011","11110011","11110011","11110011","11110011","111
10011","11110100","11110100","11110100","11110100",
"11110100","11110100","11110100","11110100","11110100","11110101","11110101","111
10101","11110101","11110101","11110101","11110101",
"11110101","11110101","11110110","11110110","11110110","11110110","11110110","111
10110","11110110","11110110","11110110","11110111",
"11110111","11110111","11110111","11110111","11110111","11110111","11110111","111
Generator sinusnog signala 16

10111","11111000","11111000","11111000","11111000",
"11111000","11111000","11111000","11111000","11111000","11111001","11111001","111
11001","11111001","11111001","11111001","11111001",
"11111001","11111001","11111001","11111010","11111010","11111010","11111010","111
11010","11111010","11111010","11111010","11111010",
"11111010","11111010","11111010","11111010","11111010","11111010","11111011","111
11011","11111011","11111011","11111011","11111011",
"11111011","11111011","11111011","11111011","11111011","11111011","11111011","111
11011","11111100","11111100","11111100","11111100",
"11111100","11111100","11111100","11111100","11111100","11111100","11111100","111
11100","11111100","11111100","11111101","11111101",
"11111101","11111101","11111101","11111101","11111101","11111101","11111101","111
11101","11111101","11111101","11111101","11111101",
"11111101","11111101","11111101","11111101","11111101","11111101","11111110","111
11110","11111110","11111110","11111110","11111110",
"11111110","11111110","11111110","11111110","11111110","11111110","11111110","111
11110","11111110","11111110","11111110","11111110",
"11111110","11111110","11111110","11111110","11111110","11111110","11111111","111
11111","11111111","11111111","11111111","11111111",
"11111111","11111111","11111111","11111111","11111111","11111111",
"11111111","11111111","11111111","11111111","11111111","11111111",
"11111111","11111111","11111111","11111111","11111111","11111111","11111111",
"11111111","11111111","11111111","11111111","11111111",
"11111111","11111111","11111111","11111111","11111111","11111111","11111111","111
11111","11111111", "11111111","11111111","11111111",
"11111111","11111111","11111111","11111111","11111111","11111111","11111111","111
11111","11111111","11111111", "11111111","11111111",
"11111111","11111111","11111111","11111111");

Begin

data<=rom(conv_integer(addr));

end architecture behaviour;

4.5. KOMPLEMENTATOR
--Vhdl opis komplementatora.Ovo kolo je osmobitni dvojicni komplementator.

--Definisanje entiteta komplementatora

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
kom plem entator
output(8:0)

entity komplementator is
port(input: in std_logic_vector(7 downto 0); --ulaz u
input(7:0)

komplementator,dolazi sa izlaza rom-a


U5

output: out std_logic_vector(8 downto 0) --izlaz


komplementatora
);
end entity komplementator;

--Definisanje arhitekture komplementatora

architecture behaviour of komplementator is


Generator sinusnog signala 17

begin

output<=(not ('0'&input)) + "000000001";

end architecture behaviour;

4.6. MULTIPLEKSER

--Vhdl opis multipleksera.Ovo kolo predstavlja devetobitni izlazni multiplekser


--duzina ulazih signala mu se razlikuju zato sto na njegovom izlazu imamo oznacen broj
--(moze se javiti i negativna vrednost)

--Definisanje entiteta za multiplekser

library ieee;
use ieee.Std_logic_1164.all;

entity mux is
port(ulaz1:in std_logic_vector(7 downto 0); --ulaz direktno U6
sa rom-a
ulaz2:in std_logic_vector(8 downto 0); -- ulaz sa
komplementatora broj1 izlaz(8:0)
izlaz:out std_logic_vector(8 downto 0); --izlaz iz ulaz1(7:0)
mux-a.Ujedno i izlaz celok sistema
broj1:in std_logic --signal sa brojaca,koji definise koji ulaz2(8:0)
signal je na izlazu
);
end entity; mux

--Definisanje arhitekture za mux

architecture behaviour of mux is


begin
process(broj1, ulaz1, ulaz2)
begin
if broj1='0' then
izlaz<='0'&ulaz1;
else
izlaz<=ulaz2;
end if;

end process;

end architecture behaviour;

4.7. BLOK ZA TEST

--Vhdl opis bloka za test.Ovo kolo definise vreme potrebno za testiranje

--Definisanje entiteta za blok za test

library ieee;
Generator sinusnog signala 18

use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity test_blok is
U8
port(Pocetak_testiranja: in std_logic; --signal sa ulaza za
pocetak testiranja
TestiranjeUToku
reset: in std_logic; -- signal za reset
clk: in std_logic; --kolok signal clk
TestiranjeUToku: out std_logic); --izlazni signal ovok
Pocetak_testiranja
bloka
end entity; reset

--Definisanje arhitekture za blok za test

architecture behaviour of test_blok is


test_blok

signal lokbr:std_logic_vector(11 downto 0);


signal Q, Qn, signal1: std_logic;

begin

Qn<= Pocetak_testiranja nor --rs flip-flop


Q<= signal1 nor Qn;
TestiranjeUToku<=Q;

process (Clk, reset) is


begin
if reset='1' then lokbr<=(others=>'0'); --reset
elsif clk'event and clk='1' then --normalan rad
if (Q ='1') then
lokbr<=lokbr+1;
end if;
end if;

end process;

signal1<= '1' when lokbr=("111111111101") else '0'; --reset flip-flopa

end architecture behaviour ;

4.8. IZLAZNI TEST BLOK

--Vhdl opis izlaznog test bloka.Ovo kolo generise posle isteka testiranja
--na izlazu logicku jedinicu ako je kolo ispravno,u suprotnom je logicka nula

--Definisanje entiteta ovok kola

library IEEE;
use IEEE.STD_LOGIC_1164.all;
use ieee.std_logic_unsigned.all;
Generator sinusnog signala 19

entity izlazni_testbl is
port(clk : in std_logic; --klok signal
muxout : in std_logic_vector(8 downto 0); --ulaz sa mux-a
reset : in std_logic; --signal za reset
testUtoku : in std_logic; --signal iz bloka za test,odredjuje trajanje testa
outtest : out std_logic --izlaz ovog kola,i izlaz celog sistema
);
end izlazni_testbl;

--Definisanje arhitekture za ovo kolo

architecture izlazni_testbl of izlazni_testbl is

signal suma: std_logic_vector(14 downto 0);


signal pom: std_logic_vector(5 downto 0);

begin
pom<=(others=>muxout(8));

process(clk, reset) is
begin
if reset='1' then suma<=(others=>'0'); --reset
elsif clk'event and clk='1' then
if (testUtoku='1') then suma<=suma+(pom&muxout); --test u toku
end if;
end if;

end process;

outtest<='1' when ((suma="000000000000000")and (testUtoku='0')) else '0';

end izlazni_testbl;

4.9. GENERATOR

---------------------------------------------------------------------------------------------------
--
-- Title : generator
-- Design : signal_generator
-- Author :0
-- Company :0
--
---------------------------------------------------------------------------------------------------
--
-- File : d:\vlsi projekat\New Folder\signal_generator\compile\generator.vhd
-- Generated : Thu Apr 24 12:31:30 2008
-- From : d:\vlsi projekat\New U7
Folder\signal_generator\src\generator.bde
-- By : Bde2Vhdl ver. 2.01
clk outtest
--
--------------------------------------------------------------------------------------------------- muxout(8:0)
--
reset
-- Description :
-- testUtoku
---------------------------------------------------------------------------------------------------

izlazni_testbl
Generator sinusnog signala 20

-- Design unit header --


library IEEE;
use IEEE.std_logic_1164.all;

entity generator is
port(
clk : in std_logic;
en_korak : in std_logic;
poctes : in std_logic;
reset : in std_logic;
test : in std_logic;
korak : in std_logic_vector(6 downto 0);
outtest : out std_logic;
izlaz : inout STD_LOGIC_VECTOR(8 downto 0)
);
end generator;

architecture generator of generator is

---- Component declarations -----

component brojac
port (
clk : in STD_LOGIC;
en_brojac : in STD_LOGIC;
reset : in STD_LOGIC;
broj : out STD_LOGIC_VECTOR(1 downto 0)
);
end component;
component izlazni_testbl
port (
clk : in STD_LOGIC;
muxout : in STD_LOGIC_VECTOR(8 downto 0);
reset : in STD_LOGIC;
testUtoku : in STD_LOGIC;
outtest : out STD_LOGIC
);
end component;
component komplementator
port (
input : in STD_LOGIC_VECTOR(7 downto 0);
output : out STD_LOGIC_VECTOR(8 downto 0)
);
end component; U9
component kontrola_kvadranata
port ( clk izlaz(8:0)
brojac : in STD_LOGIC_VECTOR(1 downto 0); en_korak outtest
clk : in STD_LOGIC;
korak : in STD_LOGIC_VECTOR(6 downto 0); korak(6:0)
reset : in STD_LOGIC; poctes
en_brojac : out STD_LOGIC;
new_addr : out STD_LOGIC_VECTOR(9 downto 0) reset
); test
end component;
component mux
port (
generator
Generator sinusnog signala 21

broj1 : in STD_LOGIC;
ulaz1 : in STD_LOGIC_VECTOR(7 downto 0);
ulaz2 : in STD_LOGIC_VECTOR(8 downto 0);
izlaz : out STD_LOGIC_VECTOR(8 downto 0)
);
end component;
component rom1023x8
port (
addr : in STD_LOGIC_VECTOR(9 downto 0);
data : out STD_LOGIC_VECTOR(7 downto 0)
);
end component;
component test_blok
port (
Pocetak_testiranja : in STD_LOGIC;
clk : in STD_LOGIC;
reset : in STD_LOGIC;
TestiranjeUToku : out STD_LOGIC
);
end component;
component ulazno_kolo
port (
clk : in STD_LOGIC;
en_korak : in STD_LOGIC;
korak_in : in STD_LOGIC_VECTOR(6 downto 0);
poctes : in STD_LOGIC;
reset : in STD_LOGIC;
test : in STD_LOGIC;
korak_out : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;

---- Signal declarations used on the diagram ----

signal en_brojac : std_logic;


signal testUtoku : std_logic;
signal broj : std_logic_vector (1 downto 0);
signal data : std_logic_vector (7 downto 0);
signal datakomp : STD_LOGIC_VECTOR (8 downto 0);
signal new_addr : std_logic_vector (9 downto 0);
signal out_korak : std_logic_vector (6 downto 0);

begin

---- Component instantiations ----

U1 : ulazno_kolo
port map(
clk => clk,
en_korak => en_korak,
korak_in => korak,
korak_out => out_korak,
poctes => poctes,
reset => reset,
test => test
);
Generator sinusnog signala 22

U2 : brojac
port map(
broj => broj,
clk => clk,
en_brojac => en_brojac,
reset => reset
);

U3 : kontrola_kvadranata
port map(
brojac => broj,
clk => clk,
en_brojac => en_brojac,
korak => out_korak,
new_addr => new_addr,
reset => reset
);

U4 : rom1023x8
port map(
addr => new_addr,
data => data
);

U5 : komplementator
port map(
input => data,
output => datakomp
);

U6 : mux
port map(
broj1 => broj(1),
izlaz => izlaz,
ulaz1 => data,
ulaz2 => datakomp
);

U7 : izlazni_testbl
port map(
clk => clk,
muxout => izlaz,
outtest => outtest,
reset => reset,
testUtoku => testUtoku
);

U8 : test_blok
port map(
Pocetak_testiranja => poctes,
TestiranjeUToku => testUtoku,
clk => clk,
reset => reset
);

end generator;
Generator sinusnog signala 23

5. FUNKCIONALNI OPIS

Kao što je već napomenuto ranije, ovaj uređaj se nešto razlikuje u načinu generisanja sinusoide
od onih opisanih u uvodnom delu.On je sačinjen od ulaznok kola (kolo U1 na slici 5.1), brojaca
(kolo U2 na slici 5.1), kontrole kvadranata (kolo U3 na slici 5.1), rom memorije (kolo U4 na slici
5.1), komplementatora (kolo U5 na slici 5.1), multipleksera (kolo U6 na slici), izlaznog test
bloka (koloU7 na slici 5.1), i bloka za testiranje (kolo U8 na slici 5.1). Sa slike 5.1 se vidi da je
blok šema znatno drugačija od blok šeme 3.2. prikazane u uvodnom izlaganju ali su osnovni
principi dosta slični. Ova razlika je rezultat specifičnih zahteva projektnog zadatka koji se
moraju ispuniti u okviru projekta, za razliku od uvodnog dela gde posbni zahtevi nisu od
suštinskog značaja već su princip prikazan na slici 3.2 i predstava o metodama sinteze
prioritetni. Kolo se postavlja u pocetno stanje reset signalom: Ovaj signal ne mora se aktivirati
pri promeni koraka u normalnom radnom režimu. Sistem generiše željeni signal i bez njega.

5.1. ULAZNO KOLO

Ulazno kolo je prvi izdvojeni blok u okviru generatora sinusnog signala. Ovo kolo služi da
prihvati ulaznu programabilnu reč (korak), kojom se definise frekvencija izlaznog signala. Kolo
omogućava dva režima rada i to: normalni režim rada, i režim testiranja. U režimu testiranja
kolo prosledjuje tačno definisanu vrednost koraka na svoj izlaz. Ova vrednost iznosi 0000001.
Ove se vrednosti sa izlaza ulaznog kola prosledjuje dalje, drugim delovima generatora, u
zavisnosti od toga koji su ulazni signali potrebni kom kolu, tako da nisu sva kola direktno vezana
sa ulaznim kolom. Osnovne delove ovog kola čine: ili kolo,multiplekser i registar. Sa ili kola
dolazi dozvola za upis vrednosti koraka na registar. Multiplekser određuje koja će vrednost biti
upisana u registar, u zavisnosti od režima rada. U registru se skladišti vrednost koraka do upisa
nove vrednosti za korak.
Generator sinusnog signala 24

Slika 5.1 Blok šema generator sinusnog signala


Generator sinusnog signala 25

5.2. BROJAČ

Sledeće po redu kolo u okviru generatora je brojač. Ovo kolo je brojač osnove dva, i služi da
definiše kada je nastupio koji kvadrant. Vrednost 00 na izlazu brojača određuje prvi kvadrant,
vrednost 01 drugi, vrednost 10 treći, i vrednost 11 četvrti (slika 5.2). Brojač je povezan sa
multiplekserom i u zavisnosti od vrednosti brojača na izlazu kontroliše rad multipleksera. Ako je
brojač(1)=0 sprovodi pomoću multipleksera na izlaz generatora vrednost sa izlaza rom-a, a ako
je brojač(1)=1 onda na izlaz sprovodi vrednosti sa izlaza komplementatora. Takođe je povezan i
sa kolom kontrola kvadranata sa kojim čini osnovni deo generatora. U ovom kolu brojac
kontrolise kada se primenjuje sabiranje (uvećanje adrese) a kada oduzimanje (smanjenje
vrednosti adrese).

00 01 10 11

0 1 1 1

Q 0 Q 1

Slika 5.2

5.3. KONTROLA KVADRANATA

Modul za kontrolu kvadranata je kontrolna logika koja služi za izračunavanje adrese rom-a
(adresiranje) i generisanje dozvole za brojanje brojača. Ovo kolo vrši uvećanje ili smanjenje
vrednosti adrese za vrednost koraka u zavisnosti od vrednosti na izlazu brojača. Ako je
brojač(0)=0 vrši se sabiranje (uvećanje adrese), a ako je brojač(0)=1 vrši se oduzimanje
(smanjenje adrese). Samo sabiranje i oduzimanje nije dovoljno za generisanje vrednosti za novu
adresu, zato što se javlja prekoračenje za vrednost adrese,u plus i minus. U trenucima kada se
javi prekoračenje ovo kolo generiše signal dozvole za brojanje brojača uz čiju pomoć, na taj
način definiše o kom je kvadrantu reč. Istovremeno definiše i novu početnu vrednost adrese.
Radi lakšeg razumevanja šta se u ovom kolu dešava odnosno šta zapravo radi blok za kontrolu
kvadranata posmatraćemo tri primera na slici 5.3. Uzmimo proste primere da korak uzima
vrednosti UDR=1, UDR=2, UDR=3, i izlazna adresa ima dužinu n=3.
Generator sinusnog signala 26

CLK

UDR=1

111
110
101
100
011
010
001
000

UDR=2

111 0
110
7 1
101
100
6
011
2
010
5
001 3
4
000

UDR=3

111
110
101
100
011
010
001
000

Slika 5.3

Sa slike 5.3 se vidi da za UDR=1 registar menja vrednost od 000 do 111 i da se prekoračenje
rom-a dešava nakon 111 u kom slučaju kolo kontrole kvadranata generiše dozvolu za brojanje
brojača, takođe izračunava vrednost sledeće adrese. Nakon pojave nove početne adrese dozvola
brojanja se ukida. To je trenutak kada je nastala promena kvadranta. Potom kolo kontrole
kvadranata adresira rom unazad dok se ne desi prekoračenje u minus, kada se opet generiše
dozvola brojanja brojača i sledeća adresa i ciklus se na dalje ponavlja. Pošto je ovde korak=001
klok uvećava izlaznu fazu za .
Generator sinusnog signala 27

Za UDR=2, imamo prekoračenje posle 110, a postupak je isti kao u predhodnom slučaju. Modul
za kontrolu kvadranata generiše dozvolu brojanja i novu adresu koja iznosi 110. Zatim nastavlja
sa adresiranjem u nazad sve do narednog negativnog prekoračenja odnosno promene kvadranata
kada opet generiše dozvolu brojanja i novu adresu koja iznosi 000. Na dalje se postupak ponavlja
naizmenično. Ovde promena faze iznosi .

U slučaju kada je UDR=3, prekoračenje nastupa posle 110, modul za kontrolu kvadranata
generiše dozvolu za brojanje brojača i novu vrednost adrese koja iznosi 101. Potom kreće
adresiranje rom-a unazad do ponovnog prekoračenja u minus i promene kvadranta. U tom
trenutku se generiše dozvola za brojanje i nova vrednost adrese koja iznosi 001. Nadalje se
postupak nastavlja i opisane radnje se ponavljaju naizmenično. Slika 5.3, takođe, ilustruje
zavisnost izlazne frekvencije od vrednosti koraka UDR ( o ovom problemu je bilo više reči u
uvodnom delu ).

Kontrola kvadranata služi za izračunavanje faze izlaznog signala, a koja je definisana sa 7-bitnim
korakom (na slici 5.3 označen sa UDR), i frekvencijom referentnog klok signala fclkin sa kojom je
ceo generator sinhronizovan. Vrednost koraka se sabira/oduzima sa vrednošću koja se
generisane unutar ovog kola pri svakom ciklusu klok signala, pa je frekvencija na izlazu:

fout=

gde je: UDR vrednost programibilne reči na ulazu, odnosno koraka koji ima dužinu 7 (D6-D0),
fout izlazna frekvencija i fclkin frekvencija klok signala.

Rezolucija frekvencije i minimalna frekvencija su iste i mogu se izračunati upotrebom sledeće


formule:

Δf = za UDR=1 pa je

∆f = = fmin

Niže izlazne frekvencije dobijaju se upotrebom niže frekvencije klok signala fclkin.

Maksimalna izlazna frekvencija se može lako izračunati iz sledeće jednačine:

foutmax= za UDR=128 odnosno

foutmax=

Za bolje razumevanje zašto su ove vrednosti takve kakve jesu prikazaćemo sinusni signal kao
vektor koji rotira po faznom krugu. Svaka tačka na krugu odgovara ekvivalentnoj tački na
sinusnom signal (vidi sliku 5.4).
Generator sinusnog signala 28

C C
B D
B
D

E UDR A

A 00...0 E A
11...1

F F H
G G

Slika 5.4. Predstava signala na faznom krugu i u xy ravni

Na slici rastojanje između tačaka B i C ili D i E ili bilo koje dve susedne tačke predstavlja a

rastojanje između tačaka A i A , pri čemu je fout= gde je n dužina ulazne


programabilne reči (koraka) (vidi sliku 5.4).

Radi ilustracije zavisnosti broja tačaka na krugu od dužine izlazne adrese iz kontrole kvadranata
pogledajmo tabelu 5.1 gde je ova zavisnost prikazana za neke proizvoljne vrednosti indeksa n.

n Broj tačaka na krugu

7 128

8 256

12 4096

16 65535

20 1048576

24 16777216

28 268435456

Tabela 5.1 Zavisnost broja tačaka od rezolucije kontrole kvadranata n


Generator sinusnog signala 29

Jedan obrt oko faznog kruga, sa konstantnom brzinom, rezultira u jednom kompletnom ciklusu
izlaznog sinusnog signala.Adresa rom-a u direktnoj je vezi sa tačkama na faznom krugu i sa
tačkama na izlaznom sinusnom signalu. Broj diskretnih tačaka na faznom krugu definisan je
rezolucijom n, kontrole kvadranata. Izlaz kontrole kvadranata je linearan i ne može se direktno
upotrebiti za generisanje sinusnog signala, ili bilo kog drugog signala jer su u principu signali
nelinearni, za to služi sledeći stepen.

5.4. ROM ili FAZNO-AMPLITUDSKI KONVERTOR

Sinusna funkcija je nelinearna i nije je lako generisati. S druge strane, informacija o uglu (fazi) je
po prirodi linearna. Fazni ugao rotira kroz fiksne tačke u svakoj jedinici vremena a vrednost ugla
zavisi od frekvencije signala i data je izrazom ω=2πf. LUT ( “look up” tabela) koja je smeštena u
ROM-u, je upotrebljena za pretvaranje informacije o fazi u informaciju o amplitudi sinusnog
signala. Celokupna informacija o sinusnoj amplitudi potrebna za generisanje sinusnog signala
( do 360° ) je sadržana u prvih 90°. Zato se u ROM smešta samo informacija o prvih 90° (vidi
sliku 5.5). Ovo omogućava ekonomičnije korišćenje ROM-a. Ujedno to predstavlja glavnu
razliku između sistema na slici 3.2 i 5.1.

11...1

DATA
BUS

ADRESS
00...0 BUS 11...1

Slika 5.5. Deo signala koji je smešten u ROM-u

Takvo korišćenje ROM-a, u ovom projektu, omogućava modul za kontrolu kvadranata, brojač,
komplementator i multiplekser.

5.5. KOMPLEMENTATOR
Generator sinusnog signala 30

Ovaj blok se nalazi između rom-a i multipleksera i vrši komplementiranje izlazne vrednosti iz
rom-a. Ovo kolo predstavlja devetobitni komplementator zato što MSB bit (bit najveće težine)
predstavlja znak.

5.6. MULTIPLEKSER

Multiplekser određuje, u zavisnosti od vrednosti brojača, kada će se na izlazu generatora pojaviti


vrednosti dobijene direktno iz rom-a ili komplementirane sa izlaza komplementatora. To zavisi
od toga o kom je kvadrantu reč. Za I i II kvadrant multiplekser dovodi na izlaz signal sa ROM-a
a za III i IV kvadrant na izlaz dovodi signal sa komplementatora. (Pogledati opis brojača).

5.7. TEST BLOK

Test blok je kolo koje služi za određivanje trenutka do kojeg traje test. Drugačije rečeno određuje
trajanje jedne periode sinusnog signala za ulazni korak jednak 0000001. Ovo kolo na svom
izlazu generiše dozvolu za testiranje, za rad izlaznog testbl-a. Osnovni deo ovog kola čine RS
flip-flop I brojač osnove brojanja 12.

5.8. IZLAZNI TEST BLOK

Izlazni test blok predstavlja akumulator (akumulacioni sabirač). Ovo kolo vrši sabiranje
vrednosti izlaznog signala od nulte do zadnje vrednosti definisane trajanjem testa i to za vrednost
koraka jednaku 0000001. Praktično kolo vrši određivanje srednje vrednosti izlaznog sinusnog
signala a ona je jednaka nuli. Na izlazu ovog kola nakon vremena potrebnog za testiranje se
generiše logička jedinica ako je suma jednaka nuli (kolo ispravno), u suprotnom se generiše
logička nula.

5.9. BITNE NAPOMENE

Kod ovog generator je predviđen paralelan upis informacije o koraku,zato što ceo sistem nema
mnogo ulaznih i izlaznih pinova pa nemamo potrebu za njihovom redukcijom. Ova rdukcija
može se izvršiti serijskim upisom vrednosti koraka ali bismo na taj način znatno redukovali
frekventni opseg generator a izlazna frekvencija bi znatno zavisila od vremena potrebnog za
serijski upis koraka.
Referentni klok signal za generator predviđen je da se dovede spolja, što je jednostavnije. Znamo
da se referentni klok signal dobija od kristalnog oscilatora paralelnog tipa zbog dobrih
karakteristika koje on ima (tačnost, opseg, drift, i dr.). Kada bi se radilo o unutrašnjem kristalu,
on bi morao biti smešten između CLKIN i DGND (pina za masu digitalnog dela kola).
Generator sinusnog signala 31

Sinhronizacija je sinhronog tipa,a definisana je sa ulaznim klok signalom.


Ovim projektom nisu razmatrani problem napajanja niti se ono razmatra ali evo par korisnih
napomena u vezi sa njim. Ovaj projekat ne sadrži analogni deo pošto se radi o digitalnom
generator sinusnog signala. Kada bi postojao i analogni deo kola morao bi postojati i poseban
priključak za napajanje i masu analognog dela. Digitalni deo se obično napaja sa 5V i to sa
posebnog pina (DVcc). Takođe postoji i poseban pin za masu za digitalnog dela (DGND).
Kada bi postojao analogni deo, priključak za masu analognog dela AGND i priključak za masu
digitalnog dela DGND morali bi biti spojeni u jednu tačku, u uređaju.
Preporučuje se da ako postoji napajanje za analogni deo AVcc i AGND,i napajanje za digitalni
deo DVcc i DGND oni budu prespojeni sa sprežnim kondenzatorom i to što je bliže moguće
uređaju.

6. TEST BENCH I TALASNI OBLICI

Tokom opisivanja projekta neophodno je voditi računa i o načinu potvrde ispravnog


funkcionisanja projekta. Najbolji način da se uverimo da kolo zaista obavlja željenu funkciju
jeste simulacija. VHDL, kao univerzalni jezik za opis projekta, podržava, osim sinteze i
verifikaciju.
Uobičajen način provere ispravnosti elektronskog kola jeste posmatranje odziva za datu pobudu
na probnoj ploči. Simuliranje ove aktivnosti omogućava par entitet-arhitektura koji se naziva
test-bench.
Test bench mora da sadrži tri celine, i to:
- komponentu koja se testira (UUT-Unit Under Test)
- pobudu (generatori test sekvence)
- monitor ( instrument na kome se prati odziv).
S obzirom da su pobuda i odziv sastavni delovi test-bench-a, treba istaći da se radi o
jedinstvenom entitetu koji ne komunicira sa okolinom preko portova. Prema tome, saglasno
definiciji entiteta, opis test-bench entiteta ne zahteva definisanje portova ni generika. S druge
strane UUT je posebna celina koja je predhodno vec opisana parom entitet-arhitektura i kao
takva se stavlja na probnu ploču. Ona je vezana sa pobudnim signalima i monitorom preko
sopstvenih portova. Zato se arhitektura test-bench-a opisuje na strukturnom nivou.
S obzirom da se podrazumeva da je UUT već opisan parom entitet-arhitektura, potrebno je da se
ona unese kao komponenta u arhitekturu test-bench-a. Zato s u okviru test-bench-a nalazi i blok
u kome se deklariše komponenta za entitet koji se testira.
Pored deklarisanja komponenti potrebno je deklarisati i interne signale i konstante.
Osim unošenja opisa komponente koja se testira neophodno je definisati sam proces testiranja.
On se sastoji od zadavanja pobude i tumačenja odziva i može biti podeljen u više procesa ili
komponenti. To se preporučuje za testiranje složenih kola.
Generator sinusnog signala 32

Testni vektor sadrži sve kombinacije promene ulaznih signala koje su potrebne za testiranje kola.
Redosled promene ulaznih signala može da se zadaje konkurentno, direktnim dodeljivanjem
vrednosti pojedinim signalima ili sekvencijalno, u okviru procesa.

U ovom projektu primenili smo dva test bench-a, za dva odvojena procesa koji se testiraju i to:
test bench za generator u normalnom radu i test bench za generator u režimu testa.

6.1. VHDL KOD ZA TEST BENCH GENERATORA U NORMALNOM RADU

---------------------------------------------------------------------------------------------------
--
-- Title : Test Bench for generator
-- Design : signal_generator
-- Author : Borisav Jovanovic
-- Company : Elektronski fakultet Nis
--
---------------------------------------------------------------------------------------------------
--
-- File : $DSN\src\TestBench\generator_TB.vhd
-- Generated : 4/22/2008, 3:06 PM
-- From : $DSN\compile\generator.vhd
-- By : Active-HDL Built-in Test Bench Generator ver. 1.2s
--
---------------------------------------------------------------------------------------------------
--
-- Description : Automatically generated Test Bench for generator_tb
--
---------------------------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

-- Add your library and packages declaration here ...

entity generator_tb is
end generator_tb;

architecture TB_ARCHITECTURE of generator_tb is

-- Component declaration of the tested unit

component generator
port(
clk : in std_logic; --klok signal
en_korak : in std_logic; --dozvola za upis koraka
poctes : in std_logic; --dozvola za pocetak testiranja
reset : in std_logic; --signal za reset
test : in std_logic; --izbor rezima testiranja
korak : in std_logic_vector(6 downto 0); --vrednost koraka
outtest : out std_logic; --izlaz za testiranje
izlaz : inout std_logic_vector(8 downto 0) ); --izlaz sistema( za sinusoidu)
end component;
Generator sinusnog signala 33

-- Stimulus signals - signals mapped to the input and inout ports of tested entity
signal clk : std_logic:='0'; --definisanje klok signala i njegove pocetne vrednosti
signal en_korak : std_logic:='0'; --definisanje dozvole za upis i pocetne vrednosti
koju ima
signal poctes : std_logic:='0'; --definisanje pocetka testiranja i njegove pocetne
vrednosti
signal reset : std_logic:='0'; --definisanje reset signala i njegove pocetne vrednosti
signal test : std_logic:='0'; --definisanje test signala i njegove pocetne vrednosti
signal korak : std_logic_vector(6 downto 0):="0000001"; --definisanje prve
vrednosti za korak
signal izlaz : std_logic_vector(8 downto 0); --definisanje izlaznog signala za
sinusoidu
-- Observed signals - signals mapped to the output ports of tested entity
signal outtest : std_logic; --definisanje izlaznog signala za test

-- Add your code here ...

constant CLK_PERIOD:time:=10 ns;


signal ENDSIM:boolean:=false;

begin

-- Unit Under Test port map


UUT : generator
port map (
clk => clk,
en_korak => en_korak,
poctes => poctes,
reset => reset,
test => test,
korak => korak,
outtest => outtest,
izlaz => izlaz
);

-- Add your stimulus here ...


CLK_GEN: process --klok signl
begin
if ENDSIM=false
then
CLK <= '0';
wait for CLK_PERIOD/2;
CLK <= '1';
wait for CLK_PERIOD/2;
else
wait;
end if;
end process;

main:process is --ostali signali


begin

wait for 100 ns; --reset


reset<='1';
wait for 200 ns;
reset<='0';
Generator sinusnog signala 34

wait for CLK_PERIOD; -- dozvola za upis koraka


en_korak<='1';
wait for CLK_PERIOD;
en_korak<='0';

wait for CLK_PERIOD;


wait for 100 us;

korak<="0011111"; --druga (nova) vrednost koraka


wait for CLK_PERIOD;
en_korak<='1';
wait for CLK_PERIOD;
en_korak<='0';

wait for 100 us;

ENDSIM<=true;
wait;

end process;

end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_generator of generator_tb is


for TB_ARCHITECTURE
for UUT : generator
use entity work.generator(generator);
end for;
end for;
end TESTBENCH_FOR_generator;
Generator sinusnog signala 35

Simulacija je izvršena za sledeće slučajeve ulaznog koraka:


korak=0000001,
i korak=0011111.
Rezultat simulacije je prikazan na sledećim slikama:

Slika 6.1. Sam početak rada (odmah nakon prestanka reset signala)
Generator sinusnog signala 36

Slika 6.2. Trenutak promene frekvencije (levi deo korak=0000001, desni deo korak=0011111)
Generator sinusnog signala 37

Slika 6.3. Ulazni, izlazni i kritični signali za korak=0000001.


Generator sinusnog signala 38

Slika 6.4. Ulazni, izlazni i kritični signali za korak=0011111.

Poređenjem slika 6.3 i 6.4 kao i delova na slici 6.2 može se uočiti razlika u frekvenciji izlaznog
signala u zavisnosti od koraka na ulazu.
Generator sinusnog signala 39

6.2.VHDL KOD ZA TEST BENCH GENERATORA U TESTNOM REŽIMU


---------------------------------------------------------------------------------------------------
--
-- Title : Test Bench for generator
-- Design : signal_generator
-- Author : Borisav Jovanovic
-- Company : Elektronski fakultet Nis
--
---------------------------------------------------------------------------------------------------
--
-- File : $DSN\src\TestBench\generator_TB.vhd
-- Generated : 4/22/2008, 3:06 PM
-- From : $DSN\compile\generator.vhd
-- By : Active-HDL Built-in Test Bench Generator ver. 1.2s
--
---------------------------------------------------------------------------------------------------
--
-- Description : Automatically generated Test Bench for generator_tb
--
---------------------------------------------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;

-- Add your library and packages declaration here ...

entity generator_tb is
end generator_tb;

architecture TB_ARCHITECTURE of generator_tb is

-- Component declaration of the tested unit

component generator
port(
clk : in std_logic; --klok signal
en_korak : in std_logic; --dozvola za upis koraka
poctes : in std_logic; --dozvola za pocetak testiranja
reset : in std_logic; --signal za reset
test : in std_logic; --izbor rezima testiranja
korak : in std_logic_vector(6 downto 0); --vrednost koraka
outtest : out std_logic; --izlaz za testiranje
izlaz : inout std_logic_vector(8 downto 0) ); --izlaz sistema( za sinusoidu)
end component;

-- Stimulus signals - signals mapped to the input and inout ports of tested entity

signal clk : std_logic:='0'; --definisanje klok signala i njegove pocetne vrednosti


signal en_korak : std_logic:='0'; --definisanje dozvole za upis i pocetne vrednosti
koju ima
signal poctes : std_logic:='0'; --definisanje pocetka testiranja i njegove pocetne
vrednosti
signal reset : std_logic:='0'; --definisanje reset signala i njegove pocetne vrednosti
signal test : std_logic:='1'; --definisanje test signala i njegove pocetne vrednosti
Generator sinusnog signala 40

signal korak : std_logic_vector(6 downto 0):="0000000"; --definisanje prve


vrednosti za korak
signal izlaz : std_logic_vector(8 downto 0); --definisanje izlaznog signala za
sinusoidu
-- Observed signals - signals mapped to the output ports of tested entity
signal outtest : std_logic; --definisanje izlaznog signala za test

-- Add your code here ...

constant CLK_PERIOD:time:=10 ns;


signal ENDSIM:boolean:=false;

begin

-- Unit Under Test port map


UUT : generator
port map (
clk => clk,
en_korak => en_korak,
poctes => poctes,
reset => reset,
test => test,
korak => korak,
outtest => outtest,
izlaz => izlaz
);

-- Add your stimulus here ...


CLK_GEN: process --klok signal
begin
if ENDSIM=false
then
CLK <= '0';
wait for CLK_PERIOD/2;
CLK <= '1';
wait for CLK_PERIOD/2;
else
wait;
end if;
end process;
main:process is --ostali signali
begin

wait for 100 ns; --reset


reset<='1';
wait for 200 ns;
reset<='0';

wait for CLK_PERIOD; -- dozvola za pocetak testa


poctes<='1';
wait for CLK_PERIOD;
poctes<='0';

wait for 30ns;


wait for 100 us;
Generator sinusnog signala 41

ENDSIM<=true;
wait;

end process;

end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_generator of generator_tb is


for TB_ARCHITECTURE
for UUT : generator
use entity work.generator(generator);
end for;
end for;
end TESTBENCH_FOR_generator;

Slika 6.5. Ulazni,izlazni I kritični signali pri test režimu rada


Generator sinusnog signala 42

Iz ovih dijagrama i mnogih provera koje su vršene tokom projektovanja, može se zaključiti da
kolo ispravno radi i obavlja ono za šta je dizajnirano.

7.ZAKLJUČAK

Tokom projektovanja ovog sistema, korišćene su prednosti pristupa projektovanja zasnovanog na


VHDL opisu. Kao prvo, proces projektovanja veoma složenih sistema se veoma pojednostavljuje
zato što se ceo sistem sastoji od blokova koji se posmatraju kao crne kutije i opisuju na
funkcionalnom nivou. Ovo rezultira u tome da postoji više načina realizacije projekata a samim
tim i ovog. U ovom projektu generator sinusnog signala je predstavljen samo na jedan od
mnoštva mogućih načina. Zatim omogućava se veoma jednostavna i jeftina tehnika za testiranje
sistema pre njegove realizacije. Kompletan sistem se potom lako realizuje na VLSI nivou.
Takođe VHDL ne samo da kombinuje hardver i softver već obezbeđuje i niz grafičkih predstava i
talasnih oblika korisnih za ojašnjenje rada. U samom projektu je izbegnuta upotreba
matematičkih funkcija, koliko je to bilo moguće što je rezultiralo u relativno jednostavnom
rešenju koje nije izazvalo probleme opisom istih u VHDL-u.
Generator sinusnog signala 43

8. LITERATURA

1.Damnjanović Milunka…,”Praktikum laboratorijskih vežbanja iz projektovanja i testiranja


elektronskih kola i sistema”,Elektronski fakultet, Niš 1999. ISBN 86-80135-28-3.

2.Litovski B. Vančo,”Projektovanje elektronskih kola:simulacija,optimizacija,testiranje,fizičko


projektovanje”,Elektronski fakultet,Niš 2000. ISBN 86-7369-015-3.

3.Petković Predrag,”Osnovni kurs VHDL-a kod prilagođen sintezi (skripta)”,Elektronski


fakultet,Niš 2002.

4.Zwolinski Mark,”Digital System Design with VHDL”,Prentice Hall,London 2000.

5.Živković B. Dejan,Miodrag V. Popović,”Impulsna i digitalna elektronika”,Elektrotehnički


fakultet,Beograd 2000.

6.”VHDL Reference Manual”,Synopsys INC,1999.

Niz radova i brošura od različitih autora dostupnih sa internet,od kojih su neki:

7.”Introduction to direct digital synthesys”,Intel Corporation, Tehnical staff March 1990.

8.Maciej Borlowsli,”Digital generation of signal”

9.”A Tehnical Tutorial on Digital Signal Synthesys”,Analog Devices Inc,1999

I drugi.
Generator sinusnog signala 44

SADRŽAJ

Str.

1.PROJEKTNI ZADATAK…………………………………………………………………… 2
2.UVOD……………………………………………………………………………………….. 3
2.1.NASTANAK I ULOGA VHDL-a……………………………………………………… 3
3.METODE SINTEZE GENERATORA SINUSNOG SIGNALA RAZLIČITIH
FREKVENCIJA………………………………………………………………………………. 4
3.1.INDIREKTNA METODA……………………………………………………………… 5
3.2.DIREKTNA METODA…………………………………………………………………. 6
3.3.PREDNOSTI DDS-a U ODNOSU NA TRADICIONALNU PLL SINTEZU…………. 8
3.4.METODI ZA POBOLJŠANJE DDS-a………………………………………………….. 8
4.OPIS SVIH BLOKOVA U VHDL-u……………………………………………………….... 9
4.1.ULAZNO KOLO……………………………………………………………………….. 9
4.2.BROJAČ………………………………………………………………………………… 10
4.3.KONTROLA KVADRANATA………………………………………………………... 11
4.4.ROM…………………………………………………………………………………….. 13
4.5.KOMPLEMENTATOR………………………………………………………………… 16
4.6.MULTIPLEKSER………………………………………………………………………. 17
4.7.BLOK ZA TEST………………………………………………………………………… 17
4.8.IZLAZNI TEST BLOK…………………………………………………………………. 18
4.9.GENERATOR…………………………………………………………………………... 19
5.FUNKCIONALNI OPIS…………………………………………………………………….. 23
5.1.ULAZNO KOLO………………………………………………………………………... 23
5.2.BROJAČ………………………………………………………………………………… 25
5.3.KONTROLA KVADRANATA………………………………………………………... 25
5.4.ROM ili FAZNO-AMPLITUDSKI KONVERTOR……………………………………. 29
5.5.KOMPLEMENTATOR…………………………………………………………………. 30
5.6.MULTIPLEKSER……………………………………………………………………….. 30
5.7.TEST BLOK…………………………………………………………………………….. 30
5.8.IZLAZNI TEST BLOK…………………………………………………………………. 30
5.9.BITNE NAPOMENE……………………………………………………………………. 30
6.TEST BENCH I TALASNI OBLICI………………………………………………………… 31
6.1.VHDL KOD ZA TEST BENCH GENERATORA U NORMALNOM RADU………… 32
6.2.VHDL KOD ZA TEST BENCH GENERATORA U TESTNOM REŽIMU…………… 39
7.ZAKLJUČAK………………………………………………………………………………… 42
Generator sinusnog signala 45

8.LITERATURA………………………………………………………………………………...43

You might also like