Kaaviokuva syntesoituja Koodi

A

appu1985

Guest
Koodi:modulijärjestelmää (CLK, tila, x, p, pim);parametri tekijät = 10, / / Tämä on määrä prosessointiyksiköiden haluamme olla sitä myös suunnittelussa.input CLK;

input [1:0]-tilassa;

input [7:0] x;

input [3:0] p;output [3:0] pim;langallinen [tekijät: 0] Conti;

langallinen [tekijät: 0] contx;

langallinen [tekijät: 0] contp;

langallinen [tekijät: 0] contpsw;

langallinen [tekijät: 0] contpsy;

langallinen [7:0] tempot;

langallinen [7:0] tempx;

langallinen [3:0] tempp;

langallinen [4:0] temppsw;

langallinen [12:0] temppsy;
genvar n;reg [15:0] count;

reg [12:0] arrayy [15:0];

reg [12:0] Sumy;

reg [12:0] temp;

reg [12:0] min;

reg [3:0] index;

integer i;

/ / Alla on instanssien käsittelyn osatekijät voidaan käyttää.
käsiteltäväksiaina @ (posedge CLK)

count <= count 1;määrittää contx [0] = x;

määrittää conti [0] = count;

määrittää contpsw [0] = 0;

määrittää contpsy [0] = 0;tuottaa for (n = 0, n <osia, n = n 1)

alkaa: pelements

pe3 prosessi (CLK, Conti [n], contx [n], contp [n], contpsw [n], contpsy [n], tila, Conti [n 1], contx [n 1], contp [n 1], contpsw [n 1], contpsy [n 1]);

loppu

endgeneratemäärittää tempot = Conti [tekijät];

määrittää tempx = contx [tekijät];

määrittää tempp = contp [tekijät];

määrittää temppsw = contpsw [tekijät];

määrittää temppsy = contpsy [tekijät];aina @ (posedge CLK)

aloittaa

if (mode == 2'b11)

aloittaa

Sumy <= Sumy temppsy;

jos (contp [tekijät]! = contp [tekijät-1])

aloittaa

arrayy [tempp] <= Sumy;

loppu

loppu

loppuaina @ (posedge CLK)

aloittaa

jos (tempp == 15)

aloittaa

index <= 0;

min <= arrayy [index];

for (i = 1, i <16; i = i 1)

aloittaa

if (min> arrayy )

aloittaa

min <= arrayy ;

index <= i;

/ / Etsi min arrayy ja sitten tunnistaa indeksi sen ja näytön ulostulo

loppu

loppu

loppu

loppu

määrittää pim = indeksi;

endmodulemoduuli pe3 (CLK, i, x, P, PSW, psyi, tila, IO, XO, po, pswo, psyo);

/ / Tässä evey jossa PE viittaa PROCESSING ELEMENT

parametri divfac = 128; / / kerroin toteuttaa desimaalin multipication ja oppia määrä ja paino.

parametri size = 4; / / Kuvan koko ja määrä pikseleitä kuvassa/ Syöttöporteista käsittelyn ELEMENT

input CLK;

input [7:0] I / / indeksi tulo pixel

input [7:0] x, / / arvo pikselin input

input [3:0] p; / / indeksi henkilö, jonka kuva on lähetetty

input [4:0] PSW, / / osittainen summa painon päivittäminen

input [12:0] psyi, / / osittainen summa tuotoksen laskennassa

input [1:0]-tilassa, / / Jos haluat valita toiminnan tunnustuksena vaihe tai koulutuksen vaihe 00,01 - Tunnustaminen

/ / 00 - Projektio Arviointi koulutus vaiheen

/ / 01 - Paino Updation in Training vaihe

/ / 11 - Tunnustaminen vaihe

/ / Ulostuloportteja käsittelyn ELEMENToutput [7:0] IO; / / indeksi pikselin, joka arvioidaan tällä PE ja menee ensi PE

output [7:0] xo, / / arvo pikseli menee ensi PE

output [3:0] po, / / indeksin arvo on henkilö, jonka kuva on jalostusta

output [4:0] pswo, / / lasketaan osittain summa Paino päivitys lähetetään seuraavaan PE sekä varastoidaan tästä

output [12:0] psyo;

/ / Register julistukset sisällä PROCESSING ELEMENTreg [4:0] w [size-1: 0]; / / rekisteröityä processig elementti tallentaa painot Kuva

reg [12:0] ylearn [15:0], / / rekisteröidy tallentaa projektio "Y" jokaisen kuvan max 16 kuvaa

reg [4:0] psw1, / / rekisteröidy tallentaa osittain määrän arvioidaan

reg [12:0] pso1, / / rekisteröidy tallentaa osittain summan arvioidaan tuotoksen projektio "Y".

reg [15:0] count; / / rekisteri, joka laskee kuinka monta kuvapistettä tuli PE ja laskee joka auttaa arvioinnissa Ennusteet

reg [4:0] t; / / rekisteröidy arvioinnissa käytetään osittain Sum aikana Paino updation

reg [12:0] yrcog, / / rekisteri, joka tallentaa ennusteet aikana tunnustamista vaiheessa uuden kuvan

reg [12:0] rectmp;

reg [12:0] psyo, / / rekisteri, jota kerääntyy osittain summa ennen ennuste on arvioitu

/ / Wire julistuksen sisällä käytettävien käsittely elementti

langan [4:0] W1, / / Tämä palauttaa päivitetty paino Out22 moduulin ja tallennetaan W reg.

langallinen [12:0] PSJ, / / Tämä palauttaa osittain summa ennusteen arviointiin alkaen Out11 moduuli

langallinen [4:0] pswo;
out22 S2 (CLK, w , ylearn [P], x, psw1, W1), / / moduuli jota käytetään Paino Updation

out11 S1 (CLK, x, w , psy, PSJ), / / moduuli, jota käytetään arvioitaessa ennusteet/ / First toimintatavan, kun ennusteet on arvioitava.

aina @ (posedge CLK) / / MODE - OO coressponds on PROJECTION arviointivaiheeseen

aloittaa

count <= count 1; / / laskuri on kasvaa asti kuva lopussa on saavutettu

if (mode == 2'b00) / / Se tarkistaa, onko toimintamuoto on lähtö arviointi

aloittaa

pso1 <= pso1 PSJ, / / Pitää siitä keräämällä Osittainen summa Output arviointi

if (count == size) / / Jos kuva on kulunut niin se alkaa siirtää tuotoksia.
koko on parmameter tilalle kuvakoko.

alkaa / / Tämä on vasta N kellopulsseille jos määrä pikseleitä kuvassa on N

ylearn [P] <= PSJ, / / Output on osoitettu Ylearn kunkin projektio

loppu

loppu/ / Kun kaikki lähdöt on arvioitu tila on muutettu 00 tai 01 Päivitys painot.if (mode == 2'b01) / / MODE - 01 vastaa arvioinnista ja päivittämisestä painot.

aloittaa

t <= (w * ylearn [p]) / divfac, / / t rekisteri on liitetty osittain summa, joka on jaettu divfac = 128 jotta desimaalin arithmatic toiminnan

psw1 <= PSW t, / / PSW1 kerääntyy osittain summa painon updation kaava

/ / Nyt jth PE jos PS on evaluattes

w <= W1, / / Uusi päivitetty paino OUT2 moduuli tulee, W1, joka on määrätty w .

loppu

loppu

määrittää pswo = psw1; / / Määrittää arvon psw1 on PSW whenevr se muuttuu./ / Nyt on toimittava tunnustamista vaiheessa.aina @ (posedge CLK) / / MODE - 11 Vastaa viimeiseen vaiheeseen tunnustaminen vaihe, joka merkitsee uutta tulo kuva.

aloittaa

if (mode == 2'b11)

aloittaa

rectmp <= rectmp (x * (w / 128 ));// rekisteriin rectemp jokaisessa PE arvioi ennusteen ja tallentaa ne rekisteriin.

if (i == size) / / Jos koko kuva on läpäissyt processign osan ennuste on laskettu, ja on osoitettu erillinen rekisteri "yrcog".

alkaa / / Tämä on vasta N kellopulsseille jos määrä pikseleitä kuvassa on N

yrcog <= rectmp;

psyo <= (psyi - yrcog);

loppu

loppu

loppu/ / Tunnustaminen vaihe päättyy tähän/ / Nyt panokset tämän PE on siirtää seuraavaan.

määrittää io = I / / indeksi tulo pikseli siirtyy päälle seuraavan PE.

määrittää xo = x; / / pikseli (arvo) käsitellään tämän PE siirretään seuraavalle sen käsittelyä.

antaa po = p; / / kuva indeksi (montako kuvaa se.?) on myös siirtyy seuraavaan.endmodulemoduuli out11 (CLK, XI, w, PSI, PSJ);

parametri divfac = 128;

input CLK;

input [7:0] Xi; / / pikseli Arvo panos PS laskuri ulottuvuus.

input [7:0] w, / / paino vector arvo panos PS laskuri ennusteen arvioinnissa.

input [12:0] psi, / / Input Osittainen summan edellisen kellon pulssi.

reg [12:0] m; / / Uusi arvioitu lähtö projektio

reg [12:0] PSM, / / Se tallentaa arvon Osittainen summa, kunnes koko kuva on kulunut.

/ / output [12:0] t; / / lähtö lähtö vektori Y

output [12:0] PSJ, / / PS koottua rekisteriä PE joka lähetetään tuotokseksi.aina @ (CLK)

aloittaa

m <= xi * (W / divfac), / / Se arvioi projektio ja tallentaa m

PSM <= m psi, / / psma kertyy edellisen osittain summaan vasta arvioitu.

loppu

/ / Määrittää t = m;

määrittää PSJ = PSM, / / ennuste on määritetty tuotoksen.endmodulemoduuli out22 (CLK, w, y, xi, PSW, w2);parametri lrate = 13; / / oppimisen määrä NN, joka on todellakin (13/128) = 0.01.It yksinkertaistaa rakennetta algoritmi.

parametri divfac = 128;input [12:0] y, / / input arvo Projection alkaen PE.

input [7:0] Xi; / / pikseli, jonka saapumisen painot päivitetään.

input [4:0] w, / / paino-arvoa vastaavan pikselin jota päivitetään.

input [4:0] PSW, / / osittainen summa, joka on siirtymässä edellisen moduulin ja joka on kertynyt.

input CLK;reg [12:0] D / / rekisteröidy käytetään varastointiin arvon aikana laskenta painon mukaan Hebbin algoritmi.

reg [20:0] ulos, / / rekisteröidy käyttää varastointiin arvon aikana laskenta painon mukaan Hebbin algoritmi.

reg [20:0] temp; / / rekisteröidy käyttää varastointiin arvon aikana laskenta painon mukaan Hebbin algoritmi.

reg [20:0] temp1; / / rekisteröidy käytetään varastointiin arvon aikana laskenta painon mukaan Hebbin algoritmi.

reg [15:0] Y2; / / rekisteröidy käytetään varastointiin arvon aikana laskenta painon mukaan Hebbin algoritmi.

reg [20:0] W1, / / Tämä on niin uusi paino lasketaan tällä KTH aikaan hetkessä.output [20:0] W2, / / Uusi paino, jota arvioidaan palautetaan.

langallinen [20:0] w2;aina @ (posedge CLK)

aloittaa

d <= (lrate * y) / divfac, / / koko lauseke arvioitava on

out <= D * Xi; / / W (k 1) = lrate * x * y - w (k) summattu (W * y)

temp <= out (W / divfac), / / Nyt oikeastaan, koska saamme pikseliä yksitellen, jotta voimme pitää

y2 <= (W * y) / (128 * 128), / / kertymisen arvo yhteenlaskuoperaattori jossa saa tehdä kussakin tulo

temp1 <= PSW y2; / / Lopuksi kun summattu tehdään päivitämme painoa.

W1 <= (temp - temp1);

loppu

määrittää W2 = W1;endmodule
 
Koodi valitettavasti yksinkertaistaa alas "antaa pim = 0".Syntetisaattorin yksinkertaisesti poistetaan tarpeettomat logiikka (kaikki).

Näen paljon portti koko yhteensopimattomuus, aritmeettinen ylivuoto / underflows, ja muita ongelmia.
Jotkin näistä ongelmista ovat todennäköisesti aiheuttaa "pim" on nolla koko ajan.
Sinun pitäisi debug-koodin simulointi, ennen kuin yrität synteesiä.

 
Mitä sinä juuri tarkoitat arithmatic ylivuodon ja underflow ...ja voit todeta kaikki virheet leveys täsmää pls ..
Aion olla iloinenLisätään 2 minuuttia:pls vain huomauttaa, erilaisia ongelmia, jotka voidaan tunnistaa helposti poistaa tämän ongelman pim = 0, uskon, että asiakirjat minun koodi u olisi helposti voinut saada mitä yritän tehdä.

 
Sinun pitäisi simuloida ja vikojen, eikä odottaa epäluotettavaa apua!

Tässä on yksi underflows.Löydät muut!
(w / 128)
w on 5-bittinen arvo on välillä 0 ja 31.Jakamalla se 128 antaa aina nolla.

Tämä näyttää epäilyttävät:
aina @ (CLK)

"Hae min arrayy" silmukka näyttää epäilyttävältä.Verilog "ja" silmukat eivät toimi näin.

Signal "psy" on epämääräinen.

Tässä ovat ModelSim satamaan koko ei täsmää Varoitukset:
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (13) ei vastaa yhteyttä koko (1) satama "psyi".
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (13) ei vastaa yhteyttä koko (1) satama "psyo".
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (4) ei vastaa yhteyden kokoa (1) satama "P".
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (4) ei vastaa yhteyden kokoa (1) satama "po.
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (5) ei vastaa yhteyttä kokoa (1) satama "PSW.
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (5) ei vastaa yhteyttä kokoa (1) satama "pswo".
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (8) ei vastaa yhteyttä koko (1) satama "i".
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (8) ei vastaa yhteyttä koko (1) satama "IO".
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (8 ei vastaa yhteyttä koko (1) satama "x".
Varoitus: (vsim-3015) system.v (46): [PCDPC] - Port koko (8) ei vastaa yhteyttä koko (1) satama "XO".
Varoitus: (vsim-3015) system.v (129): [PCDPC] - Port koko (21) ei vastaa yhteyttä koko (5) satama "w2".
Varoitus: (vsim-3015) system.v (130): [PCDPC] - Port koko (13) ei vastaa yhteyttä koko (1) satama PSI.
Varoitus: (vsim-3015) system.v (130): [PCDPC] - Port koko (8) ei vastaa yhteyttä koko (5) satama "W".

On varmasti monia muitakin ongelmia.Sinun pitäisi löytää ne itse kirjoittamalla testbench ja käyttämällä simulaattori!

 

Welcome to EDABoard.com

Sponsor

Back
Top