57
Generator sinusnog signala 1

projektni zadatak konacna verzija

  • Upload
    mikiimi

  • View
    795

  • Download
    9

Embed Size (px)

Citation preview

Page 1: projektni zadatak konacna verzija

Generator sinusnog signala 1

1. PROJEKTNI ZADATAK

Page 2: projektni zadatak konacna verzija

Generator sinusnog signala 2

Elektronski fakultet u NišuKatedra za elektronikuPredmet: 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

Page 3: projektni zadatak konacna verzija

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.

Page 4: projektni zadatak konacna verzija

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 (<20s) i neizobličenim, tj. spektralno čistim izlaznim signalom.

Page 5: projektni zadatak konacna verzija

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

Page 6: projektni zadatak konacna verzija

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).

Page 7: projektni zadatak konacna verzija

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.

gde je:

f - izlazna frekvencija DDS-a

M- binarna podešavajuća reč

f - 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 dolazi od sempling teoreme.

Frekventna reč je celobrojna. Ovde se frekventna rezolucija dobija za M=1 i jednaka

je: .

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

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.

Page 8: projektni zadatak konacna verzija

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.

Page 9: projektni zadatak konacna verzija

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;

--Definisanje arhitekture za ulazno kolo

architecture behaviour of ulazno_kolo is

begin prihvat:process(reset,clk)

begin if reset='1' then --resetovanje

korak_out<=(others=>'0');

elsif clk'event and clk='1' then if ((poctes or en_korak)='1') then

if test='0' then --normalan rezim radakorak_out<=korak_in;

else --rezim testiranjakorak_out<="0000001";

end if;

end if; end if;

end process;

end architecture behaviour;

clk

en_korak

poctes

reset

test

korak_in(6:0)

korak_out(6:0)

U1

ulazno_kolo

Page 10: projektni zadatak konacna verzija

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 brojanjeend entity brojac;

--Definisanje arhitekture brojaca

architecture behaviour of brojac is

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

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')thenlok_broj:=lok_broj+1;

end if;

end if;

broj<=lok_broj;

end process;

end architecture behaviour;

clk broj(1:0)

en_brojac

reset

U2

brojac

Page 11: projektni zadatak konacna verzija

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); --Koraken_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;

--Vhdl opis arhitekture kola za kontrolu kvadranata

architecture beh of kontrola_kvadranata is

signal x, y : std_logic_vector(9 downto 0);signal pom: std_logic_vector(10 downto 0);

signal pom1: std_logic_vector(10 downto 0); signal pom2: std_logic_vector(10 downto 0);signal pom3: std_logic_vector(10 downto 0); signal pom4: std_logic_vector(10 downto 0);

begin

new_addr<=x;

oduzimac: process (x, korak) is --definisanje uslova za drugu if petljubegin 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

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

brojac(1:0) en_brojac

clk

korak(6:0)

reset

new_addr(9:0)

U3

kontrola_kvadranata

Page 12: projektni zadatak konacna verzija

Generator sinusnog signala 12

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 ybegin

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

end process;

end architecture beh;

Page 13: projektni zadatak konacna verzija

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 data:out std_logic_vector (7 downto 0) --izlazni podatak iz roma );

end entity;

--Definisanje arhitekture za rom

architecture behaviour of rom1023x8 istype 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","00000010","00000010","00000011","00000011","00000100","00000100","00000101","00000101","00000101","00000110","00000110","00000111","00000111","00000111","00001000","00001000","00001001","00001001","00001001","00001010","00001010","00001011","00001011","00001011","00001100","00001100","00001100","00001100","00001101","00001101","00001110","00001110","00001110","00001111","00001111","00010000","00010000","00010000","00010001","00010001","00010010","00010010","00010010","00010011","00010011","00010100","00010100","00010100","00010101","00010101","00010101","00010110","00010110","00010111","00010111","00010111","00011000","00011000","00011001","00011001","00011001","00011010","00011010","00011011","00011011","00011011","00011100","00011100","00011101","00011101","00011101","00011110","00011110","00011111","00011111","00011111","00100000","00100000","00100000","00100001","00100001","00100010","00100010","00100010","00100011","00100011","00100100","00100100","00100100","00100101","00100101","00100110","00100110","00100110","00100111","00100111","00100111","00101000","00101000","00101001","00101001","00101001","00101010","00101010","00101011","00101011","00101011","00101100","00101100","00101100","00101101","00101101","00101110","00101110","00101110","00101111","00101111","00110000","00110000","00110000","00110001","00110001","00110010","00110010","00110010","00110011","00110011","00110011","00110100","00110100","00110101","00110101","00110101","00110110","00110110","00110111","00110111","00110111","00111000","00111000","00111000","00111001","00111001","00111010","00111010","00111010","00111011","00111011","00111011","00111100","00111100","00111101","00111101","00111101","00111110","00111110","00111111","00111111","00111111","01000000","01000000","01000000","01000001","01000001","01000010","01000010","01000010","01000011","01000011","01000011","01000100","01000100","01000101","01000101","01000101","01000110","01000110","01000111","01000111","01000111","01001000","01001000","01001000","01001001","01001001","01001010","01001010","01001010","01001011","01001011","01001011","01001100","01001100","01001100","01001101","01001101","01001110",

addr(9:0) data(7:0)

U4

rom1023x8

Page 14: projektni zadatak konacna verzija

Generator sinusnog signala 14

"01001110","01001110","01001111","01001111","01010000","01010000","01010000","01010001","01010001","01010001","01010010","01010010","01010011","01010011","01010011","01010100","01010100","01010100","01010101","01010101","01010101","01010110","01010110","01010111","01010111","01010111","01011000","01011000","01011000","01011001","01011001","01011010","01011010","01011010","01011011","01011011","01011011","01011100","01011100","01011100","01011101","01011101","01011110","01011110","01011110","01011111","01011111","01011111","01100000","01100000","01100000","01100001","01100001","01100010","01100010","01100010","01100011","01100011","01100011","01100100","01100100","01100100","01100101","01100101","01100110","01100110","01100110","01100111","01100111","01100111","01101000","01101000","01101000","01101001","01101001","01101010","01101010","01101010","01101011","01101011","01101011","01101100","01101100","01101101","01101101","01101101","01101101","01101110","01101110","01101110","01101111","01101111","01110000","01110000","01110000","01110001","01110001","01110001","01110010","01110010","01110010","01110011","01110011","01110011","01110100","01110100","01110100","01110101","01110101","01110110","01110110","01110110","01110111","01110111","01110111","01111000","01111000","01111000","01111001","01111001","01111001","01111010","01111010","01111010","01111011","01111011","01111011","01111100","01111100","01111100","01111101","01111101","01111101","01111110","01111110","01111111","01111111","01111111","10000000","10000000","10000000","10000001","10000001","10000001","10000010","10000010","10000010","10000011","10000011","10000011","10000100","10000100","10000100","10000101","10000101","10000101","10000110","10000110","10000110","10000111","10000111","10000111","10001000","10001000","10001000","10001001","10001001","10001001","10001010","10001010","10001010","10001011","10001011","10001011","10001100","10001100","10001100","10001101","10001101","10001101","10001110","10001110","10001110","10001111","10001111","10001111","10010000","10010000","10010000","10010001","10010001","10010001","10010010","10010010","10010010","10010011","10010011","10010011","10010011","10010100","10010100","10010100","10010101","10010101","10010101","10010110","10010110","10010110","10010111","10010111","10010111","10011000","10011000","10011000","10011001","10011001","10011001","10011010","10011010","10011010","10011011","10011011","10011011","10011011","10011100","10011100","10011100","10011101","10011101","10011101","10011110","10011110","10011110","10011110","10011111","10011111","10011111","10100000","10100000","10100000","10100001","10100001","10100001","10100010","10100010","10100010","10100011","10100011","10100011","10100011","10100100","10100100","10100100","10100100","10100101","10100101","10100101","10100110","10100110","10100110","10100111","10100111","10100111","10100111","10101000","10101000","10101000","10101001","10101001","10101001","10101010","10101010","10101010","10101010","10101011","10101011","10101011","10101100","10101100","10101100","10101100","10101101","10101101","10101101","10101110","10101110","10101110","10101111","10101111","10101111","10101111","10110000","10110000","10110000","10110000","10110001","10110001","10110001","10110010","10110010","10110010","10110010","10110011","10110011","10110011","10110100","10110100","10110100","10110100","10110101","10110101","10110101","10110110","10110110","10110110","10110111","10110111","10110111","10110111","10111000","10111000","10111000","10111000","10111001","10111001","10111001","10111001","10111010","10111010","10111010","10111010","10111011","10111011","10111011","10111100","10111100","10111100","10111100","10111101","10111101","10111101","10111101","10111110","10111110","10111

Page 15: projektni zadatak konacna verzija

Generator sinusnog signala 15

110","10111110","10111111","10111111","10111111","10111111","11000000","11000000","11000000","11000000","11000001","11000001","11000001","11000010","11000010","11000010","11000010","11000011","11000011","11000011","11000011","11000100","11000100","11000100","11000100","11000101","11000101","11000101","11000101","11000110","11000110","11000110","11000110","11000111","11000111","11000111","11000111","11001000","11001000","11001000","11001000","11001001","11001001","11001001","11001001","11001010","11001010","11001010","11001010","11001011","11001011","11001011","11001011","11001011","11001100","11001100","11001100","11001100","11001101","11001101","11001101","11001101","11001110","11001110","11001110","11001110","11001110","11001111","11001111","11001111","11001111","11010000","11010000","11010000","11010000","11010001","11010001","11010001","11010001","11010010","11010010","11010010","11010010","11010010","11010011","11010011","11010011","11010011","11010011","11010100","11010100","11010100","11010100","11010100","11010101","11010101","11010101","11010101","11010101","11010110","11010110","11010110","11010110","11010111","11010111","11010111","11010111","11011000","11011000","11011000","11011000","11011000","11011001","11011001","11011001","11011001","11011001","11011010","11011010","11011010","11011010","11011010","11011011","11011011","11011011","11011011","11011011","11011100","11011100","11011100","11011100","11011100","11011101","11011101","11011101","11011101","11011101","11011110","11011110","11011110","11011110","11011110","11011111","11011111","11011111","11011111","11011111","11100000","11100000","11100000","11100000","11100000","11100001","11100001","11100001","11100001","11100001","11100001","11100010","11100010","11100010","11100010","11100010","11100011","11100011","11100011","11100011","11100011","11100011","11100100","11100100","11100100","11100100","11100100","11100101","11100101","11100101","11100101","11100101","11100101","11100110","11100110","11100110","11100110","11100110","11100110","11100111","11100111","11100111","11100111","11100111","11100111","11101000","11101000","11101000","11101000","11101000","11101000","11101001","11101001","11101001","11101001","11101001","11101001","11101010","11101010","11101010","11101010","11101010","11101010","11101010","11101011","11101011","11101011","11101011","11101011","11101011","11101100","11101100","11101100","11101100","11101100","11101100","11101101","11101101","11101101","11101101","11101101","11101101","11101101","11101110","11101110","11101110","11101110","11101110","11101110","11101110","11101111","11101111","11101111","11101111","11101111","11101111","11101111","11101111","11110000","11110000","11110000","11110000","11110000","11110000","11110000","11110001","11110001","11110001","11110001","11110001","11110001","11110001","11110001","11110010","11110010","11110010","11110010","11110010","11110010","11110010","11110010","11110011","11110011","11110011","11110011","11110011","11110011","11110011","11110011","11110100","11110100","11110100","11110100","11110100","11110100","11110100","11110100","11110100","11110101","11110101","11110101","11110101","11110101","11110101","11110101","11110101","11110101","11110110","11110110","11110110","11110110","11110110","11110110","11110110","11110110","11110110","11110111","11110111","11110111","11110111","11110111","11110111","11110111","11110111","11110111","11111000","11111000","11111000","11111000","11111000","11111000","11111000","11111000","11111000","11111001","11111001","11111001","11111001","11111001","11111001","11111001","11111001","11111001","11111001","11111010","11111010","11111010","11111010","11111010","11111010","11111010","11111010","11111010",

Page 16: projektni zadatak konacna verzija

Generator sinusnog signala 16

"11111010","11111010","11111010","11111010","11111010","11111010","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111011","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111100","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111101","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","11111110","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","11111111","11111111","11111111","11111111", "11111111","11111111","11111111","11111111","11111111","11111111","11111111","11111111","11111111","11111111","11111111","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;

entity komplementator is port(input: in std_logic_vector(7 downto 0); --ulaz u komplementator,dolazi sa izlaza rom-a

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

end entity komplementator;

--Definisanje arhitekture komplementatora

architecture behaviour of komplementator is begin

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

end architecture behaviour;

input(7:0)

output(8:0)

U5

kom

plem

entator

Page 17: projektni zadatak konacna verzija

Generator sinusnog signala 17

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 sa rom-a ulaz2:in std_logic_vector(8 downto 0); -- ulaz sa komplementatora izlaz:out std_logic_vector(8 downto 0); --izlaz iz mux-a.Ujedno i izlaz celok sistema

broj1:in std_logic --signal sa brojaca,koji definise koji signal je na izlazu);

end entity;

--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;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity test_blok is

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

end entity;

broj1 izlaz(8:0)

ulaz1(7:0)

ulaz2(8:0)

U6

mux

Page 18: projektni zadatak konacna verzija

Generator sinusnog signala 18

--Definisanje arhitekture za blok za test

architecture behaviour of test_blok is

signal lokbr:std_logic_vector(11 downto 0); signal Q, Qn, signal1: std_logic;

begin

Qn<= Pocetak_testiranja nor --rs flip-flopQ<= signal1 nor Qn; TestiranjeUToku<=Q;

process (Clk, reset) isbegin

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;

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);

clk

reset

Pocetak_testiranja

TestiranjeUToku

U8

test_blok

clk outtest

muxout(8:0)

reset

testUtoku

U7

izlazni_testbl

Page 19: projektni zadatak konacna verzija

Generator sinusnog signala 19

signal pom: std_logic_vector(5 downto 0);

beginpom<=(others=>muxout(8));

process(clk, reset) isbegin

if reset='1' then suma<=(others=>'0'); --resetelsif clk'event and clk='1' then

if (testUtoku='1') then suma<=suma+(pom&muxout); --test u tokuend 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 Folder\signal_generator\src\generator.bde-- By : Bde2Vhdl ver. 2.01--------------------------------------------------------------------------------------------------------- Description : ------------------------------------------------------------------------------------------------------- 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) );

clk izlaz(8:0)

en_korak outtest

korak(6:0)

poctes

reset

test

U9

generator

Page 20: projektni zadatak konacna verzija

Generator sinusnog signala 20

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;component kontrola_kvadranata port ( brojac : in STD_LOGIC_VECTOR(1 downto 0); clk : in STD_LOGIC; korak : in STD_LOGIC_VECTOR(6 downto 0); reset : in STD_LOGIC; en_brojac : out STD_LOGIC; new_addr : out STD_LOGIC_VECTOR(9 downto 0) );end component;component mux port ( 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;

Page 21: projektni zadatak konacna verzija

Generator sinusnog signala 21

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 );

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

Page 22: projektni zadatak konacna verzija

Generator sinusnog signala 22

);

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;

Page 23: projektni zadatak konacna verzija

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.

Page 24: projektni zadatak konacna verzija

Generator sinusnog signala 24

Slika 5.1 Blok šema generator sinusnog signala

Page 25: projektni zadatak konacna verzija

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).

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.

Page 26: projektni zadatak konacna verzija

Generator sinusnog signala 26

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 .

Page 27: projektni zadatak konacna verzija

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=

Page 28: projektni zadatak konacna verzija

Generator sinusnog signala 28

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).

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

Page 29: projektni zadatak konacna verzija

Generator sinusnog signala 29

24 16777216

28 268435456

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

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.

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

Page 30: projektni zadatak konacna verzija

Generator sinusnog signala 30

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

5.5. KOMPLEMENTATOR

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

Page 31: projektni zadatak konacna verzija

Generator sinusnog signala 31

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).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.

Page 32: projektni zadatak konacna verzija

Generator sinusnog signala 32

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.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 isend generator_tb;

architecture TB_ARCHITECTURE of generator_tb is

-- Component declaration of the tested unit

component generatorport(

clk : in std_logic; --klok signal

Page 33: projektni zadatak konacna verzija

Generator sinusnog signala 33

en_korak : in std_logic; --dozvola za upis korakapoctes : in std_logic; --dozvola za pocetak testiranjareset : in std_logic; --signal za resettest : in std_logic; --izbor rezima testiranjakorak : in std_logic_vector(6 downto 0); --vrednost korakaouttest : out std_logic; --izlaz za testiranjeizlaz : 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 entitysignal clk : std_logic:='0'; --definisanje klok signala i njegove pocetne vrednostisignal en_korak : std_logic:='0'; --definisanje dozvole za upis i pocetne vrednosti koju imasignal poctes : std_logic:='0'; --definisanje pocetka testiranja i njegove pocetne vrednostisignal reset : std_logic:='0'; --definisanje reset signala i njegove pocetne vrednostisignal test : std_logic:='0'; --definisanje test signala i njegove pocetne vrednostisignal korak : std_logic_vector(6 downto 0):="0000001"; --definisanje prve vrednosti za koraksignal izlaz : std_logic_vector(8 downto 0); --definisanje izlaznog signala za sinusoidu-- Observed signals - signals mapped to the output ports of tested entitysignal 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 mapUUT : 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 signlbegin 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 signalibegin

Page 34: projektni zadatak konacna verzija

Generator sinusnog signala 34

wait for 100 ns; --resetreset<='1';wait for 200 ns;reset<='0';

wait for CLK_PERIOD; -- dozvola za upis korakaen_korak<='1';wait for CLK_PERIOD;en_korak<='0';

wait for CLK_PERIOD;wait for 100 us;

korak<="0011111"; --druga (nova) vrednost korakawait 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 isfor TB_ARCHITECTURE

for UUT : generatoruse entity work.generator(generator);

end for;end for;

end TESTBENCH_FOR_generator;

Page 35: projektni zadatak konacna verzija

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)

Page 36: projektni zadatak konacna verzija

Generator sinusnog signala 36

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

Page 37: projektni zadatak konacna verzija

Generator sinusnog signala 37

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

Page 38: projektni zadatak konacna verzija

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.

Page 39: projektni zadatak konacna verzija

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 isend generator_tb;

architecture TB_ARCHITECTURE of generator_tb is

-- Component declaration of the tested unit

component generatorport(

clk : in std_logic; --klok signalen_korak : in std_logic; --dozvola za upis korakapoctes : in std_logic; --dozvola za pocetak testiranjareset : in std_logic; --signal za resettest : in std_logic; --izbor rezima testiranjakorak : in std_logic_vector(6 downto 0); --vrednost korakaouttest : out std_logic; --izlaz za testiranjeizlaz : 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 vrednostisignal en_korak : std_logic:='0'; --definisanje dozvole za upis i pocetne vrednosti koju imasignal poctes : std_logic:='0'; --definisanje pocetka testiranja i njegove pocetne vrednostisignal reset : std_logic:='0'; --definisanje reset signala i njegove pocetne vrednostisignal test : std_logic:='1'; --definisanje test signala i njegove pocetne vrednostisignal korak : std_logic_vector(6 downto 0):="0000000"; --definisanje prve vrednosti za koraksignal izlaz : std_logic_vector(8 downto 0); --definisanje izlaznog signala za sinusoidu

Page 40: projektni zadatak konacna verzija

Generator sinusnog signala 40

-- Observed signals - signals mapped to the output ports of tested entitysignal 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 mapUUT : 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 signalbegin 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 signalibegin

wait for 100 ns; --resetreset<='1';wait for 200 ns;reset<='0';

wait for CLK_PERIOD; -- dozvola za pocetak testapoctes<='1';wait for CLK_PERIOD;poctes<='0';

wait for 30ns;wait for 100 us;

ENDSIM<=true;wait;

end process;

Page 41: projektni zadatak konacna verzija

Generator sinusnog signala 41

end TB_ARCHITECTURE;

configuration TESTBENCH_FOR_generator of generator_tb isfor TB_ARCHITECTURE

for UUT : generatoruse 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

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.

Page 42: projektni zadatak konacna verzija

Generator sinusnog signala 42

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.

Page 43: projektni zadatak konacna verzija

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.

Page 44: projektni zadatak konacna verzija

Generator sinusnog signala 44

SADRŽAJ

Str.

1.PROJEKTNI ZADATAK…………………………………………………………………… 22.UVOD……………………………………………………………………………………….. 3 2.1.NASTANAK I ULOGA VHDL-a……………………………………………………… 33.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………………………………………………….. 84.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…………………………………………………………………………... 195.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……………………………………………………………………. 306.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………………………………………………………………………………… 428.LITERATURA………………………………………………………………………………...43