www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

vhdl-procesor

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Drago_G
Član
Član



Pridružen-a: Ned 12 Dec 2010 15:12
Prispevkov: 288
Aktiv.: 1.78
Kraj: Primorska

PrispevekObjavljeno: Pon Feb 25, 2013 12:17 am    Naslov sporočila:  vhdl-procesor Odgovori s citatom

Pozdravljeni!

Že nekaj dni se ukvarjam s VHDL kodo procesorja, ki sem jo zasnoval sam na osnovi določenih virov.

Sam sem si zamislil stvar tako, kot izgleda na spodnji skici. Procesor naj bi bil zgrajen iz modulov, ki so nato združeni. Temu dodam še spomin (modul memory) in naredim "testbench". Problem je v tem, da mi testbench ne deluje kot si zamišljam, saj mi podaja nedefinirane signale namesto želenih. V čem delam napako?

Opis delovanja:
Modul stanje naj bi generiral stanji zajemi in izvedi glede na zunanji signal ure (clk) in reset (rst), ki postavi stanje na zajemi. Signal jump, ki pride v modul stanje povzroči preskok stanja izvedi. Drugače si stanja sledijo zajemi, izvedi, zajemi,... Izhod modula poskrbi za distribucijo tega signala drugim modulom.

Modul koda prejme prve 4 bite "datain" vodila (podatkovno vodilo), ki predstavljajo ukaze. V modulu te ukaze ob stanju zajemi zajememo in prekodiramo v nov ukaz, ki ga pošljemo aritmetično-logični enoti (modul ALE). Tu je še signal jump, ki v primeru ukaza preskoči stanje izvedi.

Modul ALE sprejema podatke iz podatkovnega vodila (datain) ter iz akumulatorja (povratna vezava-dataout_in) ter izvede ustrezno operacijo glede na ukaz, ki ga posreduje modul koda. Rezultat pošlje v modul akumulator. Ima pa še signal piši (wr), ki omogoči zapis v spomin.

Modul akumulator ob stanju izvedi naloži rezultat iz ALE modula, ven pa stalno oddaja podatkovno zvezo (dataout) s spominom, ki jo zapiše ob aktiviranem "wr" signalu.

Modul adr skrbi za naslove, ki jih prebira iz podatkovnega vodila (zadnjih 8 bitov) ali iz modula PC (števec) glede na stanje. Pri stanju zajemi izbere podatke iz zadnjih 8 bitov "datain vodila", pri stanju izvedi pa iz PC modula ter generira naslov za spomin (modul memory).

Modul PC skrbi za višanje naslova, ki ga dobi preko povratne zanke iz modula adr in ga poveča za ena ob stanju zajemi.

Modul memory je spomin, ki mi dela največ težav. Je kopiran iz drugega vira in tam dela v redu. Pri meni pa se zdi, da je ravno tu težava. Določene konstante so shranjene v knjižnici procpak, ki jo tudi prilagam.

Sedaj prilagam še kodo (uporabljam xilinx ISE webpack 12.1, v prilogi je koda vseh modulov, koda skupnega dela in koda spomina ter "testbench"). Lahko kdo ugotovi zakaj imam nedefinirane signale namesto želenih definiranih (glej sliko v zararani datoteki)?

Hvala za pomoč in LP



shema.jpg
 Opis:
shema procesorja
 Velikost datoteke:  78.74 KB
 Pogledana:  29 krat

shema.jpg



vhdl-procesor.rar
 Opis:

Download
 Ime datoteke:  vhdl-procesor.rar
 Velikost datoteke:  198.22 KB
 Downloadano:  4 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Dorijan
Član
Član



Pridružen-a: Ned 22 Jun 2008 10:48
Prispevkov: 2481
Aktiv.: 12.93
Kraj: južnoprimorska

PrispevekObjavljeno: Pon Feb 25, 2013 3:16 am    Naslov sporočila:   Odgovori s citatom

To je zato, ker nimaš nastavljenih začetnih pogojev. To narediš tako, da v simulaciji na vse vhodne signale daš desen klik in izbereš "force constant" pri clk pa "force clock", kjer nastaviš začetno vrednost, pri uri pa obe vrednosti in periodo ponavljanja.

Da ti pa ne bo potrebno vsakič posebej nastaljati, lahko v kodi, kjer definiraš spremenljivke za spremenljivko dodaš := vrednost.

primer
Koda:
...
4bitni_vhod: in STD_LOGIC_VECTOR(3 downto 0):= "0000";
...

_________________
Če nekaj deluje, razstavi in ugotovi zakaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Drago_G
Član
Član



Pridružen-a: Ned 12 Dec 2010 15:12
Prispevkov: 288
Aktiv.: 1.78
Kraj: Primorska

PrispevekObjavljeno: Tor Feb 26, 2013 12:30 am    Naslov sporočila:   Odgovori s citatom

Hvala za pomoč, vendar ni to to. Krivda je v sami kodi, ker sem se nekaj zapletel ter ustvaril situacijo, ki povzroči nedefinirane izhode. Nekaj sem že popravil, še nekaj pa moram pregledati jutri. Na žalost sem opazil tudi druge napake, tako da se bom verjetno še oglasil. Hvala.
_________________
Neumnih vprašanj ni, so le neumni odgovori
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Dorijan
Član
Član



Pridružen-a: Ned 22 Jun 2008 10:48
Prispevkov: 2481
Aktiv.: 12.93
Kraj: južnoprimorska

PrispevekObjavljeno: Tor Feb 26, 2013 12:58 am    Naslov sporočila:   Odgovori s citatom

kaj pa je v tem tvojem rar-u primarna koda? (se mi ne da ravno vseh pregledovati) in v katerem delu imaš probleme?
_________________
Če nekaj deluje, razstavi in ugotovi zakaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Drago_G
Član
Član



Pridružen-a: Ned 12 Dec 2010 15:12
Prispevkov: 288
Aktiv.: 1.78
Kraj: Primorska

PrispevekObjavljeno: Sre Feb 27, 2013 1:13 am    Naslov sporočila:   Odgovori s citatom

Mislim, da sem rešil zadevo, samo moram še malo pretestirati. Ko preverjam vsak modul posebej, mi vse deluje tako kot MISLIM da bi moralo. Nisem pa 100%, da je tako prav. Lahko malo pogledaš datoteki PC.vhdl in adr.vhdl, ki skrbita za naslovni del procesorja. Datoteka naslovna.vhd je v bistvu le združitev teh dveh datotek za namen testiranja, naslovna_tb pa je testbench za to združbo. Za razlago je shema.

Druga stvar, ki je problematična je, da se mi v določenih pogojih ko vse module združim v celoto in naredim testbench, pojavijo oscilacije in mi prekine simulacijo.
Za krivo pa mi predlaga en nedolžen stavek (nahaja se v ALE.vhdl)
if ukaz="0010" then wr_enable <='1'; --write enable ukaz
else wr_enable <='0';
end if;


Drugače pa mislim da dela, edino podrobno moram simulirati celoto, kar me čaka jutri. Sem pa zakompliciral stvari do amena, se strinjam.

Prilagam še novo verzijo kode. Stara ni več aktualna, saj je imela kopico nesmiselnih napak.



koda-v2.rar
 Opis:

Download
 Ime datoteke:  koda-v2.rar
 Velikost datoteke:  53.5 KB
 Downloadano:  3 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Dorijan
Član
Član



Pridružen-a: Ned 22 Jun 2008 10:48
Prispevkov: 2481
Aktiv.: 12.93
Kraj: južnoprimorska

PrispevekObjavljeno: Sre Feb 27, 2013 5:04 pm    Naslov sporočila:   Odgovori s citatom

Opozorila so mi vrnila:

stanje.vhd
vrstica 43. manjka jump pri sensitivity list
process(clk, rst, jump)

ALE.vhd
vrstica 46. manjka rst pri sesitivity list
process (stanje, ukaz, vhod1, vhod2, rst) --/clk

verjetni krivec:
imaš datoteki Procesor in Naslovna, ki pa med sabo nista povezana. Če kličeš eno datoteko recimo PC.vhd ali adr.vhd iz 2eh ne povezanih, se bo za vsako ustvarila svoja. Za povrh pa še poizkušaš naslavljat izhod address iz obeh.

predlagam da zavržeš datoteko naslovna, in prestaviš, če imaš kaj v procesor.

_________________
Če nekaj deluje, razstavi in ugotovi zakaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Drago_G
Član
Član



Pridružen-a: Ned 12 Dec 2010 15:12
Prispevkov: 288
Aktiv.: 1.78
Kraj: Primorska

PrispevekObjavljeno: Sre Feb 27, 2013 6:47 pm    Naslov sporočila:   Odgovori s citatom

Narobe sva se razumela. Datoteka procesor je končna verzija, ki vključuje vse preostale module. Datoteka naslovna pa vključuje le 2 modula (ki sta sicer vključena tudi v datoteko Procesor), je namenjena zgolj testiranju delovanja izhoda address in je ne poganjam skupaj z datoteko procesor, temveč kot ločen projekt. V glavnem vse kar je v datoteki Naslovna, je že vstavljeno v datoteko Procesor.
Se opravičujem za nesporazum.

_________________
Neumnih vprašanj ni, so le neumni odgovori
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Dorijan
Član
Član



Pridružen-a: Ned 22 Jun 2008 10:48
Prispevkov: 2481
Aktiv.: 12.93
Kraj: južnoprimorska

PrispevekObjavljeno: Sre Feb 27, 2013 9:13 pm    Naslov sporočila:   Odgovori s citatom

ok. Ko dam za ukaz 10xx in neko naključno cifro vse skupaj zmrzne.

Po moje je nekaj narobe z spremenljivko vhod2, ker jo v akumulatorju zapišeš kot std_logic_vector v ALE ga pa hočeš uporabiti kot unsigned integer.

_________________
Če nekaj deluje, razstavi in ugotovi zakaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Drago_G
Član
Član



Pridružen-a: Ned 12 Dec 2010 15:12
Prispevkov: 288
Aktiv.: 1.78
Kraj: Primorska

PrispevekObjavljeno: Sre Feb 27, 2013 10:53 pm    Naslov sporočila:   Odgovori s citatom

Da, tudi meni se je dogajalo podobno. Toda ne pri vseh ukazih, tako da gre očitno za težave pri določeni kombinaciji. Sam pa sem ugotovil (vsaj mislim, da sem), da je težava v pomanjkanju "clocka" v določenih modulih. Sem poskusil "sintentizirati" kodo in mi je javljalo zapahe (latch) ter nevarnost zakasnitev. Po mojem mnenju je bilo to krivo, sedaj sem dodal urin signal v vsak modul in težava se mi ne pojavlja več. Ali pa zgolj nisem zadel prave kombinacije, saj vseh itak ne morem preveriti ker jih je preveč.
Očitno sem samega sebe zavedel, da ura ni potrebna razen v modulu stanje, ker naj bi samo stanje (0 ali 1) nadomeščalo uro. Očitno napaka, sem preveril drug primer in ura očitno mora biti.

Prilagajam 3 verzijo, počasi napredujem proti cilju. Ampak še vedno je koda živa..



koda-v3.rar
 Opis:

Download
 Ime datoteke:  koda-v3.rar
 Velikost datoteke:  7.79 KB
 Downloadano:  2 krat


_________________
Neumnih vprašanj ni, so le neumni odgovori
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Dorijan
Član
Član



Pridružen-a: Ned 22 Jun 2008 10:48
Prispevkov: 2481
Aktiv.: 12.93
Kraj: južnoprimorska

PrispevekObjavljeno: Sre Feb 27, 2013 11:11 pm    Naslov sporočila:   Odgovori s citatom

zamenjaj vhod2 za navadno številko in bo vse delalo bp. Tako da je po moje krivo kar to, ker je vhod2 vector, vendar compiler ne opazi tega ker se zgodi v drugem modulu.
poizkusi narediti v ALE signal, ki vhod2 prevede kot unsigned.

Pa za preverjanje glej samo tiste cifre, ki so v ALE, kot operacije, kaj daš kot spremenljivko zaenkrat(dokler ALE ne dela kot bi moral) še nima pomena.

p.s. Nove kode še nisem preveril, ker nimam časa danes. Mogoče jutri.

_________________
Če nekaj deluje, razstavi in ugotovi zakaj.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Drago_G
Član
Član



Pridružen-a: Ned 12 Dec 2010 15:12
Prispevkov: 288
Aktiv.: 1.78
Kraj: Primorska

PrispevekObjavljeno: Pet Mar 01, 2013 8:47 pm    Naslov sporočila:   Odgovori s citatom

Mislim, da vhod2 ni problematičen, temveč je bil problem nekje drugje. Vsekakor pa je to v novi kodi odpravljeno, zato mislim da je nesmiselno nadaljevati s tem. Sedaj me čaka še podrobno testiranje nove kode, tebe pa prosim (če imaš kakšno minutko časa) da malo pogledaš za morebitnimi neumnostmi v kodi. Glej pa samo zadnjo verzijo, kajti prejšnje verzije so nesmiselne. Težava ni bila v vhodu 2, temveč v latchih, bi rekel.
_________________
Neumnih vprašanj ni, so le neumni odgovori
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Drago_G
Član
Član



Pridružen-a: Ned 12 Dec 2010 15:12
Prispevkov: 288
Aktiv.: 1.78
Kraj: Primorska

PrispevekObjavljeno: Čet Mar 14, 2013 12:51 am    Naslov sporočila:   Odgovori s citatom

Dorijan, hvala za pomoč. Projekt je v teoriji (testbench) delujoč v novejši verziji, trenutno pa je na "stand-by" poziciji, ponuja pa še ogromno možnosti za izboljševanje. Ampak o tem morebiti kdaj drugič, sedaj so druge prioritete. Hvala za pomoč.
_________________
Neumnih vprašanj ni, so le neumni odgovori
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group