A
appu1985
Guest
Kodasmodulinės sistemos (CLK, būdas, X, P, PIM);parametrų elementų = 10; / / Tai tvarkymo elementus, mes norime, kad jis būtų mūsų dizaino registracijos numeris.input CLK;
input [1:0] režimu;
input [7:0] x;
input [3:0] p;output [3:0] PIM;Viela [elementai: 0] Conti;
Viela [elementai: 0] contx;
Viela [elementai: 0] contp;
Viela [elementai: 0] contpsw;
Viela [elementai: 0] contpsy;
Viela [7:0] tempi;
Viela [7:0] tempx;
Viela [3:0] tempp;
Viela [4:0] temppsw;
Viela [12:0] temppsy;
genvar N;reg [15:0] Count;
reg [12:0] arrayy [15:0];
reg [12:0] Sumai;
reg [12:0], temp;
reg [12:0] min;
reg [3:0] Index;
integer I
/ / Žemiau tvarkymo elementai momentinė būti naudojami.
perdirbtivisada @ (posedge CLK)
count <= count 1;priskirti contx [0] = x;
priskirti conti [0] = count;
priskirti contpsw [0] = 0;
priskirti contpsy [0] = 0;generuoti for (n = 0, n <elementus, n = n 1)
Pradžia: pelements
Pe3 procesas (CLK, Conti "[n], contx [n], contp [n], contpsw [n], contpsy [n], būdas, Conti" [n 1], contx [n 1], contp [n 1], contpsw [n 1], contpsy [n 1]);
pabaiga
endgeneratepriskirti tempi = conti [elementų];
priskirti tempx = contx [elementų];
priskirti tempp = contp [elementų];
priskirti temppsw = contpsw [elementų];
priskirti temppsy = contpsy [elementų];visada @ (posedge CLK)
pradėti
if (mode == 2'b11)
pradėti
Sumy <= Sumy temppsy;
if (contp [elementų]! = contp [elementais-1])
pradėti
arrayy [tempp] <= Sumai;
pabaiga
pabaiga
pabaigavisada @ (posedge CLK)
pradėti
if (tempp == 15)
pradėti
indeksas <= 0;
min <= arrayy [index];
for (i = 1, i <16; i = i 1)
pradėti
if (min> arrayy )
pradėti
min <= arrayy ;
indeksas <= i;
/ / Paieška min arrayy ir tada nustatyti jo rodyklės ir ekranas išvesties
pabaiga
pabaiga
pabaiga
pabaiga
priskirti PIM = index;
endmodulemodulis Pe3 (CLK, I, X, P, PSW, psyi, būdas, IO, xo, PO, pswo, psyo);
/ / Čia evey kur PE reiškia TVARKYMO ELEMENTŲ
parametras divfac = 128; / / koeficientas įgyvendinti dešimtųjų multipication ir sužinoti norma ir masė.
parametru size = 4 / / vaizdų dydį ir pikselių skaičių vaizdas/ / Įvesties prievadų perdirbimo ELEMENT
input CLK;
input [7:0] I / / Index of input pixel
input [7:0] x, / / vertė pikselių įvesties
input [3:0] p; / / asmens indeksas, kurio vaizdas yra siunčiamas
input [4:0] PSW; / / dalinis suma svoris atnaujinimas
input [12:0] psyi / / Dalinės sumos už produkcijos apskaičiavimas
input [1:0] režimu; / / Norìdami pasirinkti, kaip pripažinimo fazės ar mokymo etapas 00,01 operacija - Pripažinimas
/ / 00 - Projektavimas Vertinimo į mokymo etapas
/ / 01 - Svoris Updation į mokymo etapas
/ / 11 - pripažinimo etapo
/ / Išvesties prievadai TVARKYMO ELEMENTŲoutput [7:0] IO / / iš taškų, kurie yra vertinamas šiuo PE ir vyksta į kitą PE indeksas
output [7:0] xo / / iš pikselių vertė ketinate Kitas PE
output [3:0] PO / / indekso vertė asmuo, kurio vaizdas yra pagal perdirbimo
output [4:0] pswo / / apskaičiuojama dalinė suma Svoris atnaujinti siunčiami į kitą kūno kultūros taip pat laikomi čia
output [12:0] psyo;
/ / Registre esančių deklaracijų viduje TVARKYMO ELEMENTŲreg [4:0] W [size-1: 0] / / į processig elementas registras saugoti vaizdus masę
reg [12:0] ylearn [15:0] / / registruotis laikyti projekcija "Y" kiekvieno Image Max 16 nuotraukų
reg [4:0] psw1 / / registruotis laikyti dalinė suma įvertinta
reg [12:0] pso1 / / registruotis laikyti Dalinė suma įvertinti produkcijos projekcija "Y".
reg [15:0] Count; / / registrą, kuris skaičiuojamas taškų skaičius įrašomi PE ir kiekis, kuris padeda įvertinti prognozės
reg [4:0] T; / / registruotis naudojamas įvertinti Dalinė suma per Svoris updation
reg [12:0] yrcog / / registrą, kuris saugo prognozės per pripažinimo etapo naujas vaizdas
reg [12:0] rectmp;
reg [12:0] psyo / / registrą, kuriame kaupiami dalinė suma iki projekcija yra vertinamas
/ / Viela Deklaracijos viduje naudojamos apdorojimo elementas
Viela [4:0] W1 / / Tai grąžina atnaujinta svoris nuo Out22 modulis ir saugomi W raj.
Viela [12:0] psj / / Tai grąžina Dalinė suma projekcija įvertinimą Out11 modulis
Viela [4:0] pswo;
out22 S2 (CLK, W , ylearn [p], x, psw1, w1); / / modulis, kuris yra naudojamas svoriui Updation
out11 S1 (CLK, x, w , psy, psj) / / modulis, kuris naudojamas įvertinti prognozės/ / First režimu, kai prognozės turi būti įvertintos.
visada @ (posedge CLK) / / Mode - OO coressponds į PROJECTION vertinimo etapą
pradėti
count <= count 1; / / Counter vertė didinama iki vaizdą pabaigoje pasiekė
if (mode == 2'b00) / / Tikrinama ar veikimo režimas yra išvesties vertinimas
pradėti
pso1 <= pso1 psj / / eina apie kaupiamosios Dalinė suma rezultatas vertinimas
if (count == dydis) / / Jei vienas vaizdas praėjo tada jis pradeda priskirti rezultatų.
dydis parmameter ūkio dydį.
Pradžia / / Tai tik po n takto impulsams, jei taškų skaičius vaizdas buvo N
ylearn [P] <= psj / / rezultatas yra priskirtas Ylearn atitinkamos iškyšos
pabaiga
pabaiga/ / Kai visi rezultatai yra vertinami būdas yra pakeistas į 00 arba 01 atnaujinti svorius.if (mode == 2'b01) / / mode - 01 atitinka vertinimo ir atnaujinimo svorius.
pradėti
T <= (m * ylearn [p]) / divfac / / T registras priskiriama dalinė suma, kuri yra padalinta divfac = 128, kad dešimtųjų arithmatic operacijos
psw1 <= PSW T / / PSW1 kaupiasi dalinė suma svoris updation formulė
/ / Dabar jau jth PE jei PS buvo evaluattes
w <= W1 / / atnaujinta svoris nuo Out2 modulis ateina W1 kuris yra priskirtas W .
pabaiga
pabaiga
priskirti pswo = psw1 / / priskiria psw1 vertės PSW whenevr ji pasikeis./ / Dabar turi veikti pripažinimo etape.visada @ (posedge CLK) / / mode - 11 Atitinka paskutinis etapas pripažinimo etapą, kuris reiškia, nauja įvesties vaizdas.
pradėti
if (mode == 2'b11)
pradėti
rectmp <= rectmp (x * (m / 128 ));// registras rectemp kiekvienos PE įvertinti projekcija ir saugo juos registre.
if (i == dydis) / / Kai visas vaizdas praėjo per processign elemento projekcijos buvo apskaičiuota ir yra priskiriamas atskiras registras "yrcog".
Pradžia / / Tai tik po n takto impulsams, jei taškų skaičius vaizdas buvo N
yrcog <= rectmp;
psyo <= (psyi - yrcog);
pabaiga
pabaiga
pabaiga/ / Pripažinimo etapas baigiasi čia/ / Dabar įėjimai į šį PE turi būti perkelti į kitą.
priskirti io = i; / / įvesties pikselių indeksą patenka ant kito PE.
priskirti xo = x; / / pixel (vertė) tvarkomi pagal šį PE perduotas šalia jos perdirbimas.
paskirti PO = p / / vaizdas indekso (Kuris numeris vaizdas tai?.) taip pat perkeltos į kitą.endmodulemodulis out11 (CLK, XI, W, PSI, psj);
parametras divfac = 128;
input CLK;
input [7:0] Xi; / / pixel vertės įvesties PS Skaičiuoklė projekcija.
input [7:0] W / / svoris vektoriaus vertė, prisidedant prie PS Skaičiuoklė projekcija vertinimas.
input [12:0] psi / / Įvedimo Dalinė suma iš ankstesnių laikrodis pulsas.
reg [12:0] m; / / naujas įvertintas produkcijos projekcija
reg [12:0] PSM; / / Jis saugo dalinės sumos vertė, kol vaizdas visiškai praėjo.
/ / output [12:0] T; / / išvesties Produkcija vektorius "Y"
output [12:0] psj / / PS kaupiamąją registre PE kuris siunčiamas kaip produkcija.visada @ (CLK)
pradėti
m <= xi * (m / divfac) / / Jis įvertina projektavimo ir sandėlių m
PSM <= m psi / / psma kaupiasi Ankstesnis dalinė suma su naujai įvertinti.
pabaiga
/ / Priskiria T = m;
priskirti psj = PSM / / projekcija yra priskirtas produkcija.endmodulemodulis out22 (CLK, W, Y, XI, PSW, W2);parametras lrate = 13; / / mokymosi kursas NN, kuris iš tiesų (13/128) = 0.01.It supaprastina algoritmo struktūra.
parametras divfac = 128;input [12:0] y / / pirkimo vertė iš PE Projektavimas.
input [7:0] Xi; / / pixel apie kurių atvykimą svoriai yra atnaujinami.
input [4:0] W / / svorio vertę atitinkantis taškų, kurie bus atnaujinami.
input [4:0] PSW; / / dalinę sumą, kuri atvyksta iš ankstesnių modulis ir kuri turi būti kaupiami.
input CLK;reg [12:0] d / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0] Out; / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0], temp; / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0] temp1 / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [15:0] Y2; / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0] W1 / / Tai tada svorį apskaičiuoti ne KTH momentu.output [20:0] W2 / / naujas kurių svoris yra vertinamas yra grąžinamas.
Viela [20:0] W2;visada @ (posedge CLK)
pradėti
d <= (lrate * y) / divfac / / visą išraiška turi būti įvertinta iš
out <= D * xi; / / W (k 1) = lrate * x * y - w (k) summation (m * y)
temp <= out (w / divfac) / / Dabar tikrai, nes mes gauname taškų po vieną, kad mes nuolat
y2 <= (m * y) / (128 * 128) / / kaupiantys į Sumavimo kuris pasireiškia Priimta kiekvienos pirkimo etape vertė
temp1 <= PSW y2 / / Pagaliau, kai vienas summation daroma mes atnaujinti svorio.
W1 <= (temp - temp1);
pabaiga
priskirti W2 = W1;endmodule
input [1:0] režimu;
input [7:0] x;
input [3:0] p;output [3:0] PIM;Viela [elementai: 0] Conti;
Viela [elementai: 0] contx;
Viela [elementai: 0] contp;
Viela [elementai: 0] contpsw;
Viela [elementai: 0] contpsy;
Viela [7:0] tempi;
Viela [7:0] tempx;
Viela [3:0] tempp;
Viela [4:0] temppsw;
Viela [12:0] temppsy;
genvar N;reg [15:0] Count;
reg [12:0] arrayy [15:0];
reg [12:0] Sumai;
reg [12:0], temp;
reg [12:0] min;
reg [3:0] Index;
integer I
/ / Žemiau tvarkymo elementai momentinė būti naudojami.
perdirbtivisada @ (posedge CLK)
count <= count 1;priskirti contx [0] = x;
priskirti conti [0] = count;
priskirti contpsw [0] = 0;
priskirti contpsy [0] = 0;generuoti for (n = 0, n <elementus, n = n 1)
Pradžia: pelements
Pe3 procesas (CLK, Conti "[n], contx [n], contp [n], contpsw [n], contpsy [n], būdas, Conti" [n 1], contx [n 1], contp [n 1], contpsw [n 1], contpsy [n 1]);
pabaiga
endgeneratepriskirti tempi = conti [elementų];
priskirti tempx = contx [elementų];
priskirti tempp = contp [elementų];
priskirti temppsw = contpsw [elementų];
priskirti temppsy = contpsy [elementų];visada @ (posedge CLK)
pradėti
if (mode == 2'b11)
pradėti
Sumy <= Sumy temppsy;
if (contp [elementų]! = contp [elementais-1])
pradėti
arrayy [tempp] <= Sumai;
pabaiga
pabaiga
pabaigavisada @ (posedge CLK)
pradėti
if (tempp == 15)
pradėti
indeksas <= 0;
min <= arrayy [index];
for (i = 1, i <16; i = i 1)
pradėti
if (min> arrayy )
pradėti
min <= arrayy ;
indeksas <= i;
/ / Paieška min arrayy ir tada nustatyti jo rodyklės ir ekranas išvesties
pabaiga
pabaiga
pabaiga
pabaiga
priskirti PIM = index;
endmodulemodulis Pe3 (CLK, I, X, P, PSW, psyi, būdas, IO, xo, PO, pswo, psyo);
/ / Čia evey kur PE reiškia TVARKYMO ELEMENTŲ
parametras divfac = 128; / / koeficientas įgyvendinti dešimtųjų multipication ir sužinoti norma ir masė.
parametru size = 4 / / vaizdų dydį ir pikselių skaičių vaizdas/ / Įvesties prievadų perdirbimo ELEMENT
input CLK;
input [7:0] I / / Index of input pixel
input [7:0] x, / / vertė pikselių įvesties
input [3:0] p; / / asmens indeksas, kurio vaizdas yra siunčiamas
input [4:0] PSW; / / dalinis suma svoris atnaujinimas
input [12:0] psyi / / Dalinės sumos už produkcijos apskaičiavimas
input [1:0] režimu; / / Norìdami pasirinkti, kaip pripažinimo fazės ar mokymo etapas 00,01 operacija - Pripažinimas
/ / 00 - Projektavimas Vertinimo į mokymo etapas
/ / 01 - Svoris Updation į mokymo etapas
/ / 11 - pripažinimo etapo
/ / Išvesties prievadai TVARKYMO ELEMENTŲoutput [7:0] IO / / iš taškų, kurie yra vertinamas šiuo PE ir vyksta į kitą PE indeksas
output [7:0] xo / / iš pikselių vertė ketinate Kitas PE
output [3:0] PO / / indekso vertė asmuo, kurio vaizdas yra pagal perdirbimo
output [4:0] pswo / / apskaičiuojama dalinė suma Svoris atnaujinti siunčiami į kitą kūno kultūros taip pat laikomi čia
output [12:0] psyo;
/ / Registre esančių deklaracijų viduje TVARKYMO ELEMENTŲreg [4:0] W [size-1: 0] / / į processig elementas registras saugoti vaizdus masę
reg [12:0] ylearn [15:0] / / registruotis laikyti projekcija "Y" kiekvieno Image Max 16 nuotraukų
reg [4:0] psw1 / / registruotis laikyti dalinė suma įvertinta
reg [12:0] pso1 / / registruotis laikyti Dalinė suma įvertinti produkcijos projekcija "Y".
reg [15:0] Count; / / registrą, kuris skaičiuojamas taškų skaičius įrašomi PE ir kiekis, kuris padeda įvertinti prognozės
reg [4:0] T; / / registruotis naudojamas įvertinti Dalinė suma per Svoris updation
reg [12:0] yrcog / / registrą, kuris saugo prognozės per pripažinimo etapo naujas vaizdas
reg [12:0] rectmp;
reg [12:0] psyo / / registrą, kuriame kaupiami dalinė suma iki projekcija yra vertinamas
/ / Viela Deklaracijos viduje naudojamos apdorojimo elementas
Viela [4:0] W1 / / Tai grąžina atnaujinta svoris nuo Out22 modulis ir saugomi W raj.
Viela [12:0] psj / / Tai grąžina Dalinė suma projekcija įvertinimą Out11 modulis
Viela [4:0] pswo;
out22 S2 (CLK, W , ylearn [p], x, psw1, w1); / / modulis, kuris yra naudojamas svoriui Updation
out11 S1 (CLK, x, w , psy, psj) / / modulis, kuris naudojamas įvertinti prognozės/ / First režimu, kai prognozės turi būti įvertintos.
visada @ (posedge CLK) / / Mode - OO coressponds į PROJECTION vertinimo etapą
pradėti
count <= count 1; / / Counter vertė didinama iki vaizdą pabaigoje pasiekė
if (mode == 2'b00) / / Tikrinama ar veikimo režimas yra išvesties vertinimas
pradėti
pso1 <= pso1 psj / / eina apie kaupiamosios Dalinė suma rezultatas vertinimas
if (count == dydis) / / Jei vienas vaizdas praėjo tada jis pradeda priskirti rezultatų.
dydis parmameter ūkio dydį.
Pradžia / / Tai tik po n takto impulsams, jei taškų skaičius vaizdas buvo N
ylearn [P] <= psj / / rezultatas yra priskirtas Ylearn atitinkamos iškyšos
pabaiga
pabaiga/ / Kai visi rezultatai yra vertinami būdas yra pakeistas į 00 arba 01 atnaujinti svorius.if (mode == 2'b01) / / mode - 01 atitinka vertinimo ir atnaujinimo svorius.
pradėti
T <= (m * ylearn [p]) / divfac / / T registras priskiriama dalinė suma, kuri yra padalinta divfac = 128, kad dešimtųjų arithmatic operacijos
psw1 <= PSW T / / PSW1 kaupiasi dalinė suma svoris updation formulė
/ / Dabar jau jth PE jei PS buvo evaluattes
w <= W1 / / atnaujinta svoris nuo Out2 modulis ateina W1 kuris yra priskirtas W .
pabaiga
pabaiga
priskirti pswo = psw1 / / priskiria psw1 vertės PSW whenevr ji pasikeis./ / Dabar turi veikti pripažinimo etape.visada @ (posedge CLK) / / mode - 11 Atitinka paskutinis etapas pripažinimo etapą, kuris reiškia, nauja įvesties vaizdas.
pradėti
if (mode == 2'b11)
pradėti
rectmp <= rectmp (x * (m / 128 ));// registras rectemp kiekvienos PE įvertinti projekcija ir saugo juos registre.
if (i == dydis) / / Kai visas vaizdas praėjo per processign elemento projekcijos buvo apskaičiuota ir yra priskiriamas atskiras registras "yrcog".
Pradžia / / Tai tik po n takto impulsams, jei taškų skaičius vaizdas buvo N
yrcog <= rectmp;
psyo <= (psyi - yrcog);
pabaiga
pabaiga
pabaiga/ / Pripažinimo etapas baigiasi čia/ / Dabar įėjimai į šį PE turi būti perkelti į kitą.
priskirti io = i; / / įvesties pikselių indeksą patenka ant kito PE.
priskirti xo = x; / / pixel (vertė) tvarkomi pagal šį PE perduotas šalia jos perdirbimas.
paskirti PO = p / / vaizdas indekso (Kuris numeris vaizdas tai?.) taip pat perkeltos į kitą.endmodulemodulis out11 (CLK, XI, W, PSI, psj);
parametras divfac = 128;
input CLK;
input [7:0] Xi; / / pixel vertės įvesties PS Skaičiuoklė projekcija.
input [7:0] W / / svoris vektoriaus vertė, prisidedant prie PS Skaičiuoklė projekcija vertinimas.
input [12:0] psi / / Įvedimo Dalinė suma iš ankstesnių laikrodis pulsas.
reg [12:0] m; / / naujas įvertintas produkcijos projekcija
reg [12:0] PSM; / / Jis saugo dalinės sumos vertė, kol vaizdas visiškai praėjo.
/ / output [12:0] T; / / išvesties Produkcija vektorius "Y"
output [12:0] psj / / PS kaupiamąją registre PE kuris siunčiamas kaip produkcija.visada @ (CLK)
pradėti
m <= xi * (m / divfac) / / Jis įvertina projektavimo ir sandėlių m
PSM <= m psi / / psma kaupiasi Ankstesnis dalinė suma su naujai įvertinti.
pabaiga
/ / Priskiria T = m;
priskirti psj = PSM / / projekcija yra priskirtas produkcija.endmodulemodulis out22 (CLK, W, Y, XI, PSW, W2);parametras lrate = 13; / / mokymosi kursas NN, kuris iš tiesų (13/128) = 0.01.It supaprastina algoritmo struktūra.
parametras divfac = 128;input [12:0] y / / pirkimo vertė iš PE Projektavimas.
input [7:0] Xi; / / pixel apie kurių atvykimą svoriai yra atnaujinami.
input [4:0] W / / svorio vertę atitinkantis taškų, kurie bus atnaujinami.
input [4:0] PSW; / / dalinę sumą, kuri atvyksta iš ankstesnių modulis ir kuri turi būti kaupiami.
input CLK;reg [12:0] d / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0] Out; / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0], temp; / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0] temp1 / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [15:0] Y2; / / registruotis naudojamas saugojimo vertė per svorio apskaičiavimas pagal Hebbian algoritmas.
reg [20:0] W1 / / Tai tada svorį apskaičiuoti ne KTH momentu.output [20:0] W2 / / naujas kurių svoris yra vertinamas yra grąžinamas.
Viela [20:0] W2;visada @ (posedge CLK)
pradėti
d <= (lrate * y) / divfac / / visą išraiška turi būti įvertinta iš
out <= D * xi; / / W (k 1) = lrate * x * y - w (k) summation (m * y)
temp <= out (w / divfac) / / Dabar tikrai, nes mes gauname taškų po vieną, kad mes nuolat
y2 <= (m * y) / (128 * 128) / / kaupiantys į Sumavimo kuris pasireiškia Priimta kiekvienos pirkimo etape vertė
temp1 <= PSW y2 / / Pagaliau, kai vienas summation daroma mes atnaujinti svorio.
W1 <= (temp - temp1);
pabaiga
priskirti W2 = W1;endmodule