schema susintetintas Kodas

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
 
Deja, Jūsų kodas supaprastina iki "priskirti PIM = 0".Kompozitorius tiesiog pašalinti nereikalingą logika (viską).

Matau daug uosto dydžio neatitikimus, aritmetinio perpildymo / underflows ir kitas problemas.
Kai kurios iš šių problemų tikriausiai sukelia "pim" nulinis visą laiką.
Jums reikia derinti ir treniruoklius kodą prieš bandant sintezė.

 
Ką tiksliai reiškia "arithmatic perkrautas ir Perkrautas apačios ...ir galite nurodyti visas pločio nesutapimas pls klaidas ..
Aš džiaugiuosiSkelbimas po 2 minučių:pls tik pabrėžti įvairių problemų, kurios jums gali lengviau pašalinti šį PIM = 0 problema, manau, pagal savo kodą ir dokumentacija būtų lengvai galima gauti tai, ko aš bandau daryti.

 
Jūs turite būti modeliuoti ir derinti, o ne laukti nepatikimas padėti!

Štai vienas iš underflows.Jums susirasti kitus!
(m / 128)
w yra 5 bitų reikšmę tarp 0 ir 31.Dalijant 128 visada suteikia nulį.

Tai atrodo įtartinas:
visada @ (CLK)

"Ieškok min arrayy" loop atrodo įtartinas.Verilog "už" kilpų neveikia, kad taip.

Signalas "Psy" yra neapibrėžta.

Čia yra ModelSim uosto dydžio nesutapimas įspėjimai:
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydis (13) nesutampa ryšys dydis (1) uosto "psyi".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydis (13) nesutampa ryšys dydis (1) uosto "psyo".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydis (4) neatitinka ryšys dydis (1) uosto "p".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydis (4) neatitinka ryšys dydis (1) uosto "PO".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydį (5) neatitinka ryšys dydis (1) uosto "PSW".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydį (5) neatitinka ryšys dydis (1) uosto "pswo".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydį (8) neatitinka ryšys dydis (1) uosto "i".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydį (8) neatitinka ryšys dydis (1) uosto "IO".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydį (8 neatitinka ryšys dydis (1) uosto "X".
Įspėjimas: (vsim-3015) system.v (46): [PCDPC] - Port dydį (8) neatitinka ryšys dydis (1) uosto "Blessed".
Įspėjimas: (vsim-3015) system.v (129): [PCDPC] - Port dydis (21) nesutampa ryšys dydį (5) uosto "W2".
Įspėjimas: (vsim-3015) system.v (130): [PCDPC] - Port dydis (13) nesutampa ryšys dydis (1) uosto "psi".
Įspėjimas: (vsim-3015) system.v (130): [PCDPC] - Port dydį (8) neatitinka ryšys dydį (5) uosto "w".

Yra tikriausiai daug kitų problemų.Turėtumėte rasti patys raštu testbench ir naudodami simuliatorius!

 

Welcome to EDABoard.com

Sponsor

Back
Top