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