Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Qarqet e integruara të programueshme. Plis - hapat e mi të parë

Kohët e fundit, unë ende bëra hapin tim të parë drejt FPGA dhe ju thirra të më ndiqni. Hobi im fanatik për FPGA-të dhe ideja që FPGA-të janë platforma më e mirë për krijimin e çdo pajisjeje ka marrë një karakter fetar. Sekti im FPGA predikon një refuzim të plotë të mikrokontrolluesve, dhe një degë veçanërisht ekstremiste predikon një refuzim jo vetëm të procesorëve të butë, por të llogaritjes sekuenciale në përgjithësi!

Si gjithmonë, zgjidhja e problemeve reale ndihmoi për të kuptuar të vërtetat. Në predikimin e sotëm, do të doja të flisja për sprovat që i ndodhën një shoferi të ri FPGA. Duke kapërcyer sprovat, ne e kuptojmë të vërtetën. Por ka ende pyetje për të cilat nuk kam gjetur përgjigje. Prandaj, do të doja shumë që vëllezërit-Khabrovitët - FPGA me përvojë, të merrnin pjesë në diskutim, t'u jepnin një ndihmë vëllezërve të tyre më të vegjël.

Ky artikull është për fillestarët. Në të, unë do të përshkruaj probleme tipike, pyetje, keqkuptime, gabime që mund të shfaqen që në fillim të trajnimit (sepse ato u shfaqën tek unë). Megjithatë, konteksti i artikullit është i kufizuar nga fakti se zhvillimi kryhet në FPGA nga Altera në mjedisin Quartus në gjuhën Verilog.

Është e vështirë të jetosh pa bërë asgjë, por nuk kemi frikë nga vështirësitë!

Një nga arsyet që shumë nuk fillojnë të mësojnë Verilog tani është mungesa e një FPGA të vërtetë. Dikush nuk mund të porosisë, sepse është i shtrenjtë, dhe dikush sepse nuk di se çfarë të marrë (çështja e zgjedhjes u diskutua në artikullin e mëparshëm). Dikush FPGA po shkon ende me postë.

Por në zhvillimet e mia, arrita në përfundimin se më duhet një FPGA e vërtetë tashmë në fazën përfundimtare të zhvillimit, kur më duhet të testoj projektin "në harduer". Çështja është se pjesën më të madhe të kohës e kaloj duke korrigjuar kodin tim duke përdorur simulatorë.

Kështu që këshilla ime është: mungesa e FPGA nuk është një arsye për të qëndruar pa punë. Shkruani dhe korrigjoni modulet FPGA në simulatorë!

Simulator për Verilog

Pra, çfarë mund të bëni për të argëtuar veten me ditë pune të mërzitshme të gjata (nëse janë)? Sigurisht që ne do të zotërojmë FPGA-të! Por si mund të funksionojë një mjedis i tërë zhvillimi nga Altera nëse peshon 3 kufij mujor të punës në internet? Mund ta sillni me USB! Por nëse lënda e studimit është Verilog, atëherë mund të kufizoni veten në një bllok shënimesh, përpiluesin IcarusVerilog dhe të shikoni rezultatin në GTK Wave.

Provoje tani

Për të filluar në Windows, thjesht shkarkoni skedarin e instalimit iverilog-20130827_setup.exe nga lidhja http://bleyer.org/icarus/ (fotografia e zhvillimit)

Instalimi nuk shkakton vështirësi. Tani le të ecim pak përpara: krijoni një dosje për projektin dhe në të disa skedarë me përmbajtje ende jo të kuptueshme:

Skedari i modulit me kod për testimin e moduleve - bench.v

`Tabela e testimit të modulit të shkallës kohore 1ns / 100 ps (); reg clk; fillimi fillestar i shfaqjes së $ ("fillimi"); $ dumpfile ("test.vcd"); $ dumpvars (0, panel testimi); kliko<= 0; repeat (100) begin #10; clk <= 1; #10; clk <= 0; end $display("finish"); end


Moduli i testimit të testbench përshkruhet në skedarin bench.v, në të krijohet një burim i sinjalit testues clk (meander). Modulet e tjera do të krijohen në skedarë të veçantë, ose logjika mund të testohet fillimisht në këtë modul dhe më pas të zhvendoset në një modul të veçantë. Më pas, shembujt e këtyre moduleve do të shtohen në modulin testbench, ku ne do të dërgojmë sinjale testimi në hyrjet e tyre dhe do të marrim rezultate prej tyre. Ne mund të ndërtojmë një hierarki nga modulet, mendoj se kjo është e qartë për të gjithë.

Skedar BAT që do të përpilojë dhe simulojë modulin kryesor, duke shtuar module të tjera nga dosja aktuale - makev.bat

iverilog -o test -I./ -y./ stol.v vvp provë pauzë


Pas ekzekutimit të këtij skedari, ne do të shohim në ekran tekstin e specifikuar në ekranin $ (ky është prodhimi i korrigjimit), vlerat e sinjaleve dhe regjistrave të qarkut do të jenë në skedarin test.vcd. Klikoni në skedar dhe zgjidhni programin për shikim - GTKWave (në rastin tim, D: \ iverilog \ gtkwave \ bin \ gtkwave.exe). Disa klikime të tjera dhe ne do të shohim klik tonë.



Praktikisht, unë krijoj secilin prej moduleve të mia të reja në notepad dhe korrigjoj IcarusVerilog. Pas një korrigjimi të tillë, hapi tjetër është kontrollimi i moduleve në Quartus. Megjithëse Quartus gjithashtu ka simulatorin e vet, unë e përdor atë më rrallë. Arsyeja është thjeshtësia e azhurnimit të kodit dhe shikimi i rezultatit në IcarusVerilog: ruajti ndryshimet në skedar, nisi BAT, shtypi butonin "përditëso" në GTKWave - kjo është ajo! Në ModelSim, kjo kërkon pak më shumë lëvizje, por gjithashtu nuk është e keqe, veçanërisht në të dhënat e strukturave komplekse.

Pas simulimit, është koha për të nisur Quartus. Por është ende shumë herët për të ngarkuar firmuerin në FPGA. Ne duhet të sigurohemi që makina kompjuterike hyjnore e ka kuptuar saktë se çfarë lloj skeme duam të marrim, duke shprehur mendimet tona në formën e një Verilog.

Dallimi midis simulimit dhe punës në harduer real

Në fillim, si një kotele e verbër, godita kokën në shtalkat e derës. Kodi në dukje i saktë nuk funksionon fare, ose nuk funksionon siç pritej. Ose thjesht funksionoi, por tani u ndal papritur!

Një kotele kureshtare fillon të kërkojë marrëdhënien midis veprimeve të tij dhe rezultatit ("supersticioni i pëllumbave").

Drama më e madhe
Më poshtë është një listë e çudirave, por së pari drama më e madhe që kam hasur: jo të gjitha konstruktet e Verilog mund të sintetizohen në hekur... Kjo për faktin se Verilog përshkruan jo vetëm logjikën e harduerit, e cila është e kombinuar në module dhe funksionon në harduer. Në të njëjtin Verilog, përshkruhen module testimi që kombinojnë modulet e testuara, aplikojnë sinjale testimi në hyrjet e tyre dhe, në përgjithësi, ekzistojnë vetëm për testim në një kompjuter. Ndryshimi në vlerat e sinjalit me kalimin e kohës përcaktohet nga konstruktet që përmbajnë shenjën "#" në tekstin Verilog. Një shenjë e tillë nënkupton një vonesë në kohë. Në shembullin e mësipërm, kjo është mënyra se si gjenerohet sinjali CLK. Dhe mendova se ishte një gjë mëkatare që në të njëjtën mënyrë, brenda një FPGA të vërtetë, mund të gjenerosh, për shembull, një sekuencë bitash për dërgimin e një mesazhi nëpërmjet RS232. Në fund të fundit, një sinjal nga një gjenerator 50 MHz futet në hyrjen FPGA! Ndoshta ajo udhëhiqet disi prej tij. Siç doli, nuk jam i vetmi që shpresoja për një mrekulli:,,,,. Realiteti, si gjithmonë, rezulton të jetë më i rëndë: një FPGA është një grup logjike dhe një vonesë kohore në të mund të shfaqet kur përdoret një numërues, vlera e të cilit rritet në ciklet e orës nga gjeneratori në një vlerë të caktuar. ose në ndonjë mënyrë tjetër (por gjithmonë në harduer).
Lista e çudirave të gjetura
Megjithatë, gjëra të mahnitshme, leximi i librave hedh dritë mbi këtë djallëzi. Për më tepër, hiri gjendet.
Nëse caktoni reg, atëherë nuk është fakt që do të krijohet
Si arrita te problemi? Le të themi se ekziston një modul, hyrjes së të cilit duhet të jap një vlerë (sipas llojit të parametrit). Në të ardhmen, ky parametër do të duhet të ndryshojë me kalimin e kohës në varësi të disa ngjarjeve të jashtme. Prandaj, vlera duhet të ruhet në një regjistër (reg). Por zbatimi i marrjes së ngjarjeve të jashtme nuk është zbatuar ende, kështu që unë nuk e ndryshoj regjistrin, por thjesht e vendos atë në vlerën e tij fillestare, e cila nuk ndryshon në të ardhmen.

// vendos regjistrin 8 bit reg val; // inicializoni atë me val fillestar<= 8"d0240; //wire к которому подключим выход из модуля wire out_data; //неведомый модуль, называется bbox //экземпляр этого модуля называется bb_01 //будем считать, что в модуле есть входной порт in_data и выходной out_data //во входной порт подаем значение с регистра val, а выход подключаем к wire - out_data bbox bb_01(.in_data(val), .out_data(out_data));
Çfarë është kapja, do të duket? Në imperativin PL, ne shpesh vendosim variabla si konstante dhe më pas nuk i ndryshojmë kurrë dhe gjithçka funksionon. Çfarë shohim në gjëndër?


Së pari, ne nuk e shohim regjistrin. Së dyti, 8 "hFF futet në hyrjen e modulit në vend të d0240 tonë 8"! Dhe kjo tashmë mjafton që skema të funksionojë jo siç e kishim planifikuar. Fakti që nuk ka regjistër është normale. Në Verilog, ju mund të përshkruani logjikën në mënyra të ndryshme, në të njëjtën kohë, sintetizuesi gjithmonë optimizon zbatimin e harduerit. Edhe nëse shkruani një bllok gjithmonë dhe punoni me regjistra në të, por vlera e daljes do të përcaktohet gjithmonë nga vlera e hyrjes, atëherë përdorimi i regjistrit këtu do të jetë i tepërt dhe sintetizuesi nuk do ta furnizojë atë. Dhe anasjelltas, nëse për disa vlera të të dhënave hyrëse vlera e daljes nuk ndryshon, atëherë nuk ka asnjë mënyrë për të bërë pa një regjistër shul dhe sintetizuesi do ta krijojë atë. (Libri 1 f. 88-89). Çfarë rrjedh nga kjo? Nëse fillojmë të ndryshojmë vlerën e regjistrit, për shembull, në varësi të shtypjes së butonit, atëherë geristi tashmë do të krijohet dhe gjithçka do të funksionojë siç duhet. Nëse rezulton se butonat nuk ndryshojnë asgjë, atëherë sintetizuesi përsëri do ta hedhë jashtë dhe përsëri gjithçka do të prishet. Çfarë të bëni me një konstante? Ju duhet ta dorëzoni atë drejtpërdrejt në hyrjen e modulit:

Bbox bb_01 (.in_data (8 "d0240), .out_data (out_data));
Tani kemi vlerën e saktë në hyrjen e modulit:

Mbetet një mister pse, kur regjistri reduktohet, vlera e tij fillestare nuk zëvendësohet në hyrjen e modulit.

Është më mirë të vendosni vetë dimensionin e telit.
Kur zhvillohet në mjedisin Quartus, lejohet të mos përcaktohen paraprakisht linjat e telit. Në këtë rast, ato do të krijohen automatikisht, por do të lëshohet një paralajmërim për këtë. Problemi është se gjerësia e telit do të jetë 1-bit, dhe nëse portat janë më shumë se 1-bit, atëherë vlera nuk do të transmetohet.

Bbox bb_01 (.in_data (8 "d0240), .out_data (int_data)); other_bbox bb_02 (.in_data (int_data), .out_data (out_data));
Paralajmërim
Paralajmërim (10236): Paralajmërim i rrjetit të nënkuptuar të Verilog HDL në test.v (15): u krijua një rrjet i nënkuptuar për "int_data"
Rezultati:

Siç mund ta shihni, një bit është i lidhur, dhe 7 bitët e mbetur nuk janë të lidhur (NC). Për të shmangur një problem të tillë, duhet ta krijoni vetë telin. Nuk është e kotë që përpiluesi IcarusVerilog nuk lëshon një paralajmërim, por një gabim nëse teli nuk është specifikuar paraprakisht.

Tela int_data; bbox bb_01 (.in_data (8 "d0240), .out_data (int_data)); other_bbox bb_02 (.in_data (int_data), .out_data (out_data));

Kompjuteri nuk do të ngjitet në module, shikoni se sa është gjerësia e bitit të portave. Për më tepër, gjerësia e bitit mund të jetë e ndryshme dhe jo të gjithë bitet merren në hyrjen e modulit ose nga dalja, por disa të veçanta.

Dalja e funksionit logjik nuk mund të përdoret si sinjal i orës
Ndonjëherë në një projekt është e nevojshme të zvogëlohet frekuenca e orës, ose të futet një vonesë kohore e cikleve të orës N. Një fillestar mund të përdorë një numërues dhe një skemë shtesë për të përcaktuar nëse numëruesi ka arritur një vlerë të caktuar (skema e krahasimit). Sidoqoftë, nëse përdorni drejtpërdrejt daljen nga qarku i krahasimit si orë, atëherë mund të shfaqen probleme. Kjo është për shkak se i duhet pak kohë që qarku logjik të vendosë daljen e tij në një vlerë të qëndrueshme. Kjo vonesë zhvendos skajin e sinjalit që kalon nëpër pjesë të ndryshme të qarkut logjik në lidhje me orën, duke rezultuar në gara, metastabilitet, asinkroni. Madje pata rastin të dëgjoja një herë një vërejtje për këtë si një kritikë ndaj FPGA-ve: "me FPGA ka probleme të vazhdueshme - gara sinjalizuese".

Nëse lexoni të paktën disa artikuj:
Shkakton metastabilitetin dhe sinkronizimin ndërmjet cikleve
Disa fjalë për tubacionet në FPGA

Bëhet e qartë se si zhvillohen pajisjet e bazuara në FPGA: e gjithë detyra ndahet në blloqe harduerike dhe të dhënat midis tyre lëvizin përgjatë tubacioneve, duke u futur në mënyrë sinkronike në regjistra sipas sinjalit të orës. Kështu, duke ditur frekuencën totale të orës, sintetizuesi llogarit frekuencën maksimale të funksionimit të të gjitha qarqeve kombinuese, përcakton nëse shpejtësia e tyre përshtatet në periudhën e ciklit dhe përfundon nëse qarku në FPGA do të funksionojë ose jo. E gjithë kjo ndodh në fazën e sintezës. Nëse qarqet përshtaten në parametrat, atëherë mund të ndezni FPGA.

Kështu, për zhvilluesit e pajisjeve të bazuara në FPGA, janë krijuar të gjitha metodologjitë e nevojshme, dhe nëse i përmbaheni atyre, atëherë nuk do të ketë probleme.

Po sikur të dua të dal kundër sistemit?
Rendi i zhvillimit dhe sjelljes së një sintetizuesi qarku na sjell në përfundimin se çfarë saktësisht është një FPGA në nivelin e harduerit. Këto janë qarqe sinkrone. Prandaj, ndër qëllimet e sintetizuesit është të mbajë brenda intervaleve kohore. Për ta bërë këtë, për shembull, ai thjeshton shprehjet logjike, nxjerr nga sinteza pjesë të qarqeve që nuk përdoren nga qarqet e tjera dhe nuk janë të lidhura me kunjat fizike të FPGA. Zgjidhjet asinkrone dhe truket analoge janë të dekurajuara, sepse puna e tyre mund të jetë e paparashikueshme dhe varet nga çdo gjë (tensioni, temperatura, teknologjia e procesit, grupi, gjenerimi i FPGA) dhe për këtë arsye nuk ofron një rezultat të garantuar, të përsëritshëm, të lëvizshëm. Por të gjithë kanë nevojë për një rezultat të qëndrueshëm dhe qasje të përgjithshme për dizajn!

Por çfarë të bëni nëse nuk pajtoheni me mendimin e sintetizuesit se është e nevojshme të hidhni regjistrat e pandryshueshëm dhe të zvogëloni qarqet logjike? Po sikur të doni të bëni qarqe me logjikë asinkrone? Keni nevojë për një shkulje? Apo ndoshta ju vetë dëshironi të montoni një qark duke përdorur komponentë FPGA të nivelit të ulët? Lehtë! Faleminderit zhvilluesve Altera për këtë mundësi dhe dokumentacion të detajuar!

Si ta bëjmë atë? Mund të provoni një redaktues skematik grafik. Ju mund të keni dëgjuar që Quartus ju lejon të vizatoni diagrame? Ju mund t'i zgjidhni vetë blloqet e ndërtimit dhe t'i lidhni ato. Por kjo nuk është zgjidhje! Edhe qarku i tërhequr do të optimizohet nga sintetizuesi, nëse është e mundur.

Si rezultat, arrijmë te e vërteta e vjetër: nëse gjithçka tjetër dështon, lexoni udhëzimet... Domethënë Manuali Altera pjesa e titulluar Opsionet e sintezës Quartus II.

Për të filluar, duke përshkruar arkitekturën në Verilog në një mënyrë të caktuar, mund të merrni një rezultat të caktuar. Këtu janë disa shembuj kodesh për të marrë një flip-flop sinkron dhe asinkron RS:

// moduli i modulit të këmbëzës sinkron RS (clk, r, s, q); teli i hyrjes clk, r, s; reg q; gjithmonë @ (posedge clk) fillojnë nëse (r) fillojnë q<= 0; end else if (s) begin q <= 1; end end endmodule
Në këtë rast, ju merrni një shkas sinkron.

Duke mos marrë parasysh sinjalin e orës dhe kalimin në varësi të çdo ndryshimi në r dhe s, rezultati është një element me një vlerë të caktuar asinkron - një shul.

// shembull asinkron i modulit të aktivizimit të modulit RS ModuleTester (clk, r, s, q); teli i hyrjes clk, r, s; reg q; gjithmonë @ (r ose s) fillojnë nëse (r) fillojnë q<= 0; end else if (s) begin q <= 1; end end endmodule

Moduli ModuleTester (clk, r, s, q); teli i hyrjes clk, r, s; reg q; DLATCH lt (.q (q), .clrn (~ r), .prn (~ s)); modul fundor

Si rezultat, i gjithë "kompleti i trupit" në hyrjen e shulës, të cilin sintetizuesi e konsideroi të nevojshëm, do të zhduket dhe ne do të marrim saktësisht atë që dëshironim:

Një listë e primitivëve ekzistues mund të shihet në faqen e internetit të Altera.

Dhe tani një shembull i vogël për asinkroninë dhe reduktimin. Mendova, për shembull, të bëj një gjenerator sipas të njëjtit parim siç ishte zakon ta bëja më parë, por vetëm në FPGA:

Por për të rritur periudhën, do të marr 4 elementë, por vetëm njëri prej tyre do të përmbyset:

Moduli ModuleTester (q); teli i daljes q; tel a, b, c, d; cakto a = b; caktoni b = c; cakto c = d; cakto d = ~ a; cakto q = a; modul fundor

Por rezulton të jetë një reduktim (1 element në vend të katër). E cila është logjike. Por më pas ne konceptuam një linjë vonese.

Por nëse vendosim kushtin në sintetizues që rreshtat a, b, c, d të mos priten, atëherë marrim atë që kemi parasysh. Direktivat përdoren për të nxitur sintetizuesin. Një mënyrë për të specifikuar është teksti në një koment:

Moduli ModuleTester (q); teli i daljes q; teli a, b, c, d / * sinteza mbaj * /; // ^^^ --- kjo është një direktivë sintetizuesi cakto a = b; caktoni b = c; cakto c = d; cakto d = ~ a; cakto q = a; modul fundor
Dhe këtu është rezultati - një zinxhir prej katër elementësh:

Dhe kjo nuk është e gjitha! Do ta lë në gëzimin e studimit të pavarur: punën me rast dhe një direktivë për zbatimin e tij si një RAM / ROM ose qark logjik; punë me blloqe memorie të integruar (RAM / ROM); zgjedhja e zbatimit të shumëzimit - një shumëzues harduerësh ose një qark logjik.

Me zhvillimin e mikroqarqeve dixhitale, lindi një kontradiktë midis shkallës së mundshme të integrimit dhe nomenklaturës së mikroqarqeve të prodhuara. Ishte e justifikuar ekonomikisht të prodhoheshin mikroqarqe me integrim të mesëm, si p.sh. Nga këto nyje duhej të krijoheshin qarqe më komplekse. Vendosja e një qarku më kompleks në një kristal gjysmëpërçues nuk ishte problem, por kjo justifikohej ose nga një seri shumë e madhe pajisjesh, ose nga kostoja e pajisjeve (ushtarake, aviacion ose hapësirë). Mikroqarqet e bëra me porosi nuk mund të plotësonin nevojën e shfaqur për miniaturizimin e pajisjeve. Mund të ketë vetëm një zgjidhje - t'u sigurojë zhvilluesve të harduerit aftësinë për të ndryshuar strukturën e brendshme të mikrocirkut (programit).

Historia e zhvillimit të qarqeve të integruara logjike të programueshme (FPGA) fillon me shfaqjen e pajisjeve të memories të programueshme vetëm për lexim. Në fillim, ROM-të e programueshëm u përdorën ekskluzivisht për ruajtjen e të dhënave, por së shpejti ato filluan të përdoren për të zbatuar pajisje kombinimi dixhitale me një tabelë arbitrare të së vërtetës. Si një disavantazh i kësaj zgjidhjeje, duhet theksuar se kompleksiteti i pajisjes rritet në mënyrë eksponenciale në varësi të numrit të hyrjeve. Shtimi i një hyrjeje shtesë të një pajisjeje dixhitale dyfishon numrin e kërkuar të qelizave të memories ROM. Kjo nuk lejon zbatimin e shumë hyrjeve.

Për zbatimin e pajisjeve dixhitale kombinuese me një numër të madh hyrjesh, janë zhvilluar matrica logjike të programueshme (PLM). Në literaturën e huaj, ato quhen vargje logjike të programueshme (PLA). Janë vargjet logjike të programueshme që mund të konsiderohen si qarqet e para të integruara logjike të programueshme (Programmable Logic Devices - PLDs). PLM-të u përhapën si mikroqarqet e para universale të integrimit të madh.

Klasifikimi FPGA

Aktualisht, qarqet e integruara logjike të programueshme po zhvillohen në disa drejtime, kështu që u bë e nevojshme që disi të bëhet dallimi midis këtyre mikroqarqeve. Klasifikimi i qarqeve të integruara logjike të programueshme (FPGA) është paraqitur në Figurën 1.


Figura 1. Klasifikimi i qarqeve të integruara logjike të programueshme (FPGA)

A keni pritur për një shenjë? Ja ku eshte!

Për shumë vite nuk kam guxuar të filloj programimin e FPGA-ve, sepse është e vështirë, e shtrenjtë dhe e dhimbshme (siç më dukej). Por është mirë kur ka miq që të ndihmojnë të hedhësh hapin e parë. Dhe tani një gjë nuk e kuptoj - PSE PRIT KAQ?

Tani unë do t'ju ndihmoj të bëni edhe hapin e parë!

Pse më duhet?

Jeni të lodhur duke lexuar vazhdimisht doke në MK tuaj ose duke pasur një mori informacionesh në kokën tuaj. Ju rishkruat gjithçka në asm, por shpejtësia ende nuk është e mjaftueshme. Lidhët dy pajisje të jashtme me MK-në tuaj, lidhni një të tretën, por ju mbaruan ndërprerjet, ato module që tashmë punonin nuk funksionojnë. Merr një MK tjetër, më të fuqishëm nga e njëjta linjë, por përsëri manuale, regjistra flamujsh, copëza ... dreqin. Ju ndryshoni platformën: kaloni në një MK tjetër dhe hidhni njohuritë tuaja në platformën e mëparshme në grumbullin e plehrave. Çfarëdo që të bëni, është e vështirë. Ju gjeni një platformë popullore në të cilën mund të montoni lehtësisht një projekt nga komponentët, por ende nuk mund të hidheni mbi kufizimet harduerike të kësaj MC ... Diku në skaj të vetëdijes, ndonjëherë kërcen mendimi se në FPGA patjetër do të funksiononte shpejt dhe paralelisht, se është "Pikërisht detyra që duhet zgjidhur në plis", por unë jam i vjetër / budalla / i zënë / etj që të mund / të filloj ta bëj këtë.

Dëshironi më në fund të merrni frymë lirisht? Shkoni përpara!

Gëzimi i zhvillimit të FPGA

Kam pasur një ditë të vështirë në punë. Nga njëra punë erdha në punën e dytë, pastaj në dacha, në mbrëmje punët e shtëpisë, detyrat e shtëpisë, pastaj familja duke parë një film dhe vetëm në orën 23 isha plotësisht i lirë! Të thuash që isha i lodhur do të thotë të mos thuash asgjë. Por në këtë gjendje, u ula në laptop me një qëllim të fortë: të bëj një gjenerator të valëve katrore në 440 Hz. U deshën 20 minuta dhe e dëgjova tashmë në kufje. Nuk u besoja veshëve! M'u deshën edhe 15 minuta të tjera për të bërë PWM dhe për të ndryshuar volumin. Në atë kohë, unë kisha një bord me FPGA për vetëm një javë, dhe më parë kisha shfletuar vetëm disa libra në Verilog.

Atë mbrëmje kuptova: JA KU ESHTE! Kjo është platforma në të cilën unë mund t'i kthej shpejt dhe me lehtësi mendimet e mia në pajisje të vërteta pune!

Pse eshte ajo?

Unë do të përshkruaj avantazhet që janë në studimin dhe aplikimin e FPGA-ve, megjithëse të gjithë i dinë tashmë:
  • Universaliteti i njohurive- kur ndryshoni modelin MK, duhet të lexoni doket. Kur ndryshoni prodhuesin e MK, duhet të lexoni dokumentet. Ju duhet të lexoni vazhdimisht doket, vazhdimisht të mbani shumë informacion në kokën tuaj. Kur zhvilloni në FPGA, nëse dini Verilog ose VHDL, atëherë jo vetëm që mund të programoni çdo FPGA nga linja e një prodhuesi, por edhe nëse dëshironi të kaloni në një tjetër (Altera, Xilinx). Megjithëse do të ketë momente me zhvillimin e një mjedisi të ndryshëm zhvillimi, çështje delikate të harduerit, vetë thelbi i qasjes së dizajnit të pajisjes HDL nuk do të ndryshojë nga kjo.
  • Nga ideja te hardueri- kur zhvilloni një projekt, nëse një mikron nuk ju mjafton, atëherë duhet të zgjidhni një tjetër. Në parim, ju mund të bëni supozime nëse ky MC do të përballet apo jo me projektin. Ose ka ndonjë MK specifike dhe ju po përpiqeni ta përshtatni projektin atje. Ky është rasti më shpesh. Mua kjo më kujton disi afrimin e gjyshit tim, i cili bën një shkallë nga ajo që është në hambar. Edhe pse mund të dizajnoni një shkallë, blini dërrasa që përshtaten ... Nga ideja në hekur, jo anasjelltas.
  • Lehtësia e aplikimit të zhvillimeve të njerëzve të tjerë- mund të merrni modulin e dikujt tjetër dhe ta aplikoni në projektin tuaj. Ju mund ta kuptoni se si funksionon nga kodi. Edhe nëse është për xilinx, dhe ju e bëni atë nën altera. Ndonjëherë kjo nuk funksionon sarzu, por është më e lehtë sesa, për shembull, të shtoni binare në një projekt c ++ / Qt
  • Bllokon pavarësinë. Blloqet në HDL, si funksionet e pastra në JP. Ato varen vetëm nga sinjalet hyrëse. Moduli i zhvilluar dhe i korrigjuar do të vazhdojë të funksionojë si duhet, pavarësisht se si rritet projekti. Asgjë nga jashtë nuk do të ndërhyjë në mënyrën se si funksionon nga brenda. Gjithsesi, mund të harroni se si funksionon - është një kuti e zezë. Përveç kësaj, blloqet funksionojnë paralele.

Problemi i zgjedhjes

Pyetjet se çfarë të zgjidhni: Altera / Xilinx, Verilog / VHDL, çfarë bord korrigjimi për të marrë. Por gjërat e para së pari.

Prodhuesi

une zgjodha Altera... Pse? Epo, unë dhe shoku im vendosëm këtë, megjithëse emri Xilinx është më i bukur për mua. POR. Nëse nuk mund të zgjidhni tani, atëherë unë do ta bëj për ju. Ju duhet një Altera! Pse? Nuk e di. Tani është më e rëndësishme të hedhësh një hap: të bësh një zgjedhje. Zgjodha Altera dhe nuk jam penduar ende.



Gjuhe

Ne marrim Verilog - sepse… Epo, e kuptoni.

Bordi i korrigjimit

U desh koha më e gjatë për të zgjedhur tabelën e korrigjimit. Është e qartë se bordet ndryshojnë në mikroqarkun e instaluar FPGA. Dhe çipat FPGA ndryshojnë nga njëri-tjetri në numrin e elementeve. Por nuk është aspak e qartë se sa do të kërkohen për projektet tuaja të testimit. Prandaj, shumicën e kohës e kalova duke kërkuar për të gjitha llojet e projekteve FPGA për të gjetur se sa konsumojnë burimet FPGA.

Në familjen Altera, për një çmim të arsyeshëm, mund të blejmë pllaka me CPLD MAX II për elementë 240, 570 dhe 1270, ose çipa më të vjetër FPGA, që janë Cyclone 1, 2, 3, 4 me deri në 10,000 ose më shumë qeliza. Si e zgjidhni?

Edhe në bazë të 240 qelizave, projekti Mars Rover po bën vetëm një numër të madh projektesh. Unë rekomandoj fuqimisht që të njiheni në mënyrë që të keni një ide të përafërt të kompleksitetit të projekteve që mund të përshtaten në 240 qeliza. Nga ana tjetër, ka projekte që janë plotësisht të programuara për një kopje harduerike të një kompjuteri specifik, duke përfshirë procesorin dhe të gjithë logjikën rreth tij (NES, Speccy, Orion, UT-88, etj). Kjo tashmë kërkon pesë, dhjetë ose më shumë mijëra qeliza. Plus, këto borde përmbajnë pajisje shtesë të jashtme.

Prandaj, unë do t'ju këshilloja të merrni diçka në mes midis 240 dhe 10,000 qelizave, me një preferencë për rritje, në varësi të fondeve në dispozicion. Në tabelën e korrigjimit, qelizat shtesë nuk janë një punë e madhe dhe nëse nuk janë të mjaftueshme, asgjë nuk mund të bëhet për këtë. Pastaj, kur pajisja të korrigjohet, do të bëhet e qartë se sa qeliza nevojiten, blini për sasinë e kërkuar, pa "komplet të trupit" të panevojshëm, më lirë dhe lini në pajisjen e përfunduar.

Dallimi midis MAX dhe Cikloneve, përveç numrit të qelizave, është:
1) Seria MAX nuk ka PLL brenda. Çdo bord zhvillimi ka një gjenerator, zakonisht 50 MHz. Kjo do të jetë e mjaftueshme për pjesën më të madhe të projekteve. Të gjitha sinkronizimet do të bëhen duke pjesëtuar 50 MHz me një vlerë. Ose, mund të merrni një gjenerator të jashtëm dhe ta aplikoni atë në një hyrje të veçantë FPGA. Po sikur të keni nevojë për një frekuencë më të lartë se 50 MHz? Nuk mund të gjeja gjeneratorë mbi 50 MHz në fluturim. Por këtu vjen në shpëtim PLL, e cila është ndërtuar në Ciklone. Mund të shumëfishojë frekuencën, për shembull, deri në 100 MHz.
2) Seria Cyclone ka njësi të shumëzimit të harduerit të integruar. Numri i tyre varet nga modeli specifik - këtu mund të "shikoni të gjithë në udhëzimet" për të zbuluar se sa. Nëse keni ndërmend të bëni një lloj DSP, atëherë ata do të vijnë në ndihmë: ata do të kursejnë qelizat, do të rrisin shpejtësinë. Nga ana tjetër, nëse nuk ka shumëzues, ato mund të sintetizohen, por një FPGA e vogël mund të mos ketë burime të mjaftueshme për këtë.

Në të gjitha aspektet e tjera, kriteri im është "i përshtatshëm / jo i përshtatshëm". Korrigjimi në një tabelë që është padyshim më e madhe se sa nevojitet, e ndjekur nga derdhja në minimumin e kërkuar për këtë.

Sa para nevojiten?


Programues
Unë besoj se nuk kam kohë të bashkoj programues të lirshëm.

300 rubla. E mora timen në ebee, duket kështu:

Bordi i korrigjimit
Zgjedhja është e gjerë, në varësi të sasisë së parave.

Niveli i parë 350 - 550 rubla. Këto janë tabela në MAX II (ose qeliza). Ato mund të jenë të përshtatshme për njohjen fillestare dhe lidhjen e mëtejshme me pajisjet fundore. Pllaka ka një gjenerator, një palë butona, një palë LED, 80 kunjat e mbetura janë në diskrecionin tuaj.

Furnizimi me energji elektrike
Duhet të jetë, por jo gjithmonë i përfshirë. Do t'ju duhet një PSU 5 volt dhe rrymë 2A.

Niveli mesatar nga 900 në 1500 rubla. Këto janë bordet e ciklonit 1, 2, 3, 4 që ndryshojnë kryesisht në numrin e qelizave.
Shënuar kështu:
EP 2 C 5 T144 - Ciklon 2 përafërsisht 5k qeliza
EP 4 CE 6 E22C8N - Ciklon 4 rreth 6k qeliza
EP 2 C 8 Q208C8N - Ciklon 2 afërsisht 8k qeliza

Ju mund të vini re se Ciklon 3 mund të ketë më shumë qeliza se cikloni 4.

Këtu janë disa opsione:

835 rubla.
Bordi minimal i sistemit ALTERA FPGA CycloneII EP2C5T144 për të mësuar mirë

880 rubla
Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081

1265 rubla
EP2C8 EP2C8Q208C8N ALTERA Cyclone II Bordi Bërthamë i Vlerësimit të Zhvillimit të FPGA

Bordet e avancuara ... Këto janë tabela në të cilat janë instaluar module shtesë (UTP, USB, AUDIO), lidhës (SD, VGA), butona, çelsat, LED, tregues me shtatë segmente, etj. Ose mund të ketë një tabelë bazë dhe mund të vijë me pllaka zgjerimi veçmas.

Unë kam grupin e mëposhtëm të punës - bordi + bordi i zgjerimit:
Altrea EP4CE10E22 FPGA CORE Board + Tabela e pajisjes USB / Tingulli / Ethernet / Karta SD / VGA
2760 rubla

Këtu është bordi kryesor. Ka 2 LED, 2 butona, 4 çelësa, një tregues me shtatë segmente dhe një çip RAM.

Bordi i zgjerimit. SD, VGA, si dhe kontrollues USB (Chip me shpejtësi të lartë USB2.0: CY7C68013A), AUDIO (Kartë zanore deri në 96 kHz / 32 bit ADC / DAC: WM8731S), UTP (ndërfaqe Ethernet 100M: DM9000A):

Këto karta thjesht futen në njëra-tjetrën, por unë ende i kam në kuti. Për zanatet e mia, kam një dërrasë buke me të cilën lidhem me një lak që vjen në komplet. Përfshihet gjithashtu një furnizim me energji 5 volt.

Unë u detyrova ta shkruaj këtë artikull nga shokët e mi që janë shumë të mirë (shumë më mirë se unë) i kuptojnë kontrollorët dhe i përdorin ato kudo që shkojnë. Sidoqoftë, ekziston një grumbull i madh aplikacionesh kur përdorimi i FPGA-ve jo vetëm që justifikohet, por gjithashtu çon në një thjeshtësim të konsiderueshëm të sistemit dhe përmirësim të parametrave të tij. Do të bëj një rezervim menjëherë: në këtë dhe, ndoshta, artikuj pasues, unë i konsideroj vetëm FPGA-të Xilinx, jo sepse më kanë paguar, dhe as sepse janë më të mirët, thjesht ka ndodhur historikisht që unë punoj praktikisht vetëm me ta .

Pra, le të fillojmë me pak teori. FPGA ndahen në dy grupe kryesore: CPLD (Complex Programmed Logic Device) dhe FPGA (Field Programmed Gate Array). CPLD- kjo është zakonisht një FPGA e klasës "ekonomike", d.m.th. kanë një çmim të ulët dhe një sasi mjaft të vogël burimesh, kjo është veçanërisht e dukshme për shkaktarët. FPGA zakonisht më të shtrenjta, përmbajnë më shumë burime (logjikë të thjeshtë - nxitës ...) dhe, më e rëndësishmja, së fundi blloqe shtesë "të vështira", si shumëzuesit, memoria e bllokut, pajisjet e ndërfaqes (Ethernet, PCI-express ...) dhe madje edhe PowerPC bërthamat e procesorit. Më vete, mund të përmendim serinë Zinq nga Xilinx - në përgjithësi, bërthamat ARM ishin të mbushura atje. Dallimi kryesor midis FPGA dhe CPLD është nevoja për të ngarkuar konfigurimin gjatë ndezjes dhe, në përputhje me rrethanat, ROM-in e jashtëm me konfigurimin. Edhe familja SPARTAN-3AN ka një ROM të integruar në bord, nga i cili ngarkohet.

Tani gjëja më e rëndësishme: si ndryshojnë FPGA-të nga kontrolluesi dhe kur t'i përdorin ato. Gjithçka është shumë e thjeshtë këtu: FPGA (ne marrim ato pa zile dhe bilbil) është, në fakt, një qese logjike në një çip, i cili mund të lidhet në mënyrë arbitrare: vetë shkaktarët, AND, OSE dhe primitivë të ngjashëm, si p.sh. , në serinë K155 ose 74ns. Kontrolluesi është një procesor i gatshëm (megjithëse me një numër të vogël instruksionesh), memorie të integruar, autobusë të të dhënave dhe komandave, pajisje periferike, etj. Në përgjithësi, ju mund të bëni një kontrollues të vogël nga një FPGA e madhe, por kjo ide është të paktën marrëzi. Pra, kontrolluesi mprehet për ekzekutimin e zinxhirëve të gjatë të komandave, përsëritjen ciklike të tyre, kalimin nga një zinxhir në tjetrin, etj., Dhe FPGA mprehet për kryerjen e operacioneve të thjeshta logjike dhe, më e rëndësishmja, një numër të madh menjëherë (dhe edhe në frekuenca të ndryshme të orës) ...

Le të kalojmë nga teoria në praktikë. Për të filluar, na duhet një çip CPLD. Ka pak burime, por për zhvillim është më i madhi. Unë do të marr XC95288XL në kutinë TQ144 (përsëri, sapo ndodhi të ishte në magazinë), në përgjithësi rekomandoj të merrni diçka më të freskët, për shembull, nga seria CoolRunner 2. Për të marrë një produkt të përfunduar (edhe nëse pulson minimalisht me një LED), duhet: të lidhim pajisjen (këtu, shpresoj, nuk do të ketë probleme, por do të përmend nuancat), "të shkruajmë" firmuerin ( në rastin tonë, përkundrazi, vizatoni) dhe qepni firmuerin në mikroqark. Në përgjithësi, ne kemi nevojë për softuer që gjeneron firmware dhe një programues. Ne shkarkojmë softuerin (Xilinx ISE Webpack) nga faqja zyrtare (megjithatë, ata do të kërkojnë të regjistrohen), licenca Webpack është falas. Programuesi mund të bëhet sipas skemës në Fig. 1 (për portin LPT) ose të blini një USB-shny të fabrikës (në dyqanet online kineze e takova me një çmim prej rreth 50 dollarë, por nuk e bleva vetë) . Më shumë.

Oriz. një

Pasi e lidhëm FPGA-në në tabelën e bukës, bashkuam ose blemë një programues, shkarkojmë dhe instaluam ISE Webpack (kam versionin 13.2), hapni Project Navigator dhe krijoni një projekt të ri. Për të krijuar një projekt, zgjidhni Skedar -> Projekt i ri, tregoni emrin e projektit dhe ku duhet ta ruani, tregoni gjithashtu llojin e burimit TOP-NIVELI (Fig. 2). Fakti është se për FPGA-të nuk është e nevojshme të vizatoni një qark nga shkaktarët dhe lidhjet e tyre, për shembull, mund të shkruani në gjuhë të nivelit të lartë (VHDL, Verilog) dhe nuk është aspak e nevojshme të përdorni një gjë në kuadër të të njëjtit projekt. Deri më tani, ne përdorim vetëm Skematikën në të gjitha nivelet.


Oriz. 2
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Në dritaren tjetër (Fig. 3), zgjidhni mikroqarkun tonë (mos e prekni pjesën tjetër në fillim); në dritaren që shfaqet pasi klikojmë në butonin "Next", ne admirojmë parametrat e projektit të krijuar, klikojmë "Finish" - dhe keni mbaruar: projekti është krijuar.


Oriz. 3

Tani na duhet, në fakt, të vizatojmë një diagram: kliko me të djathtën në dritaren me projektin dhe burimin e ri (Fig. 4.), emërto këtë kod burimor (ky është emri i skemës sonë, mund të ketë shumë prej tyre në projekt), zgjidhni Skematikën përsëri, klikoni "Next", admironi parametrat e skedarit të sapokrijuar, klikoni" Finish "dhe merrni një skemë të pastër.


Oriz. 4
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Gjëja më interesante fillon: në panelin në të majtë (jo nga skaji), shtypni butonin "shto simbolin" (Fig. 5).


Oriz. 5
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Dhe ne kemi një listë të simboleve të bibliotekës aktuale edhe në të majtë. Si të shtoni, krijoni, modifikoni bibliotekat, do ta kuptojmë më vonë (sipas nevojës). Tani është e rëndësishme për ne që të zgjedhim simbolin e kërkuar. Pra, në dritaren e sipërme shohim një klasifikues të caktuar - një filtër që nuk është i nevojshëm për t'u përdorur (mirë, pse të lëvizni nëpër të gjitha llojet e shkasave dhe elementëve logjikë kur kemi nevojë për një numërues).

Për shembull, merrni parasysh problemin e mëposhtëm: duhet të përcaktoni kohën e vonesës midis skajeve kryesore të 2 pulseve që shfaqen në tela të ndryshëm sa më saktë që të jetë e mundur dhe bashkoni këtë vlerë në kontrollues përmes ndërfaqes SPI. Çdo ngjashmëri e problemit me temën "Rritja e frekuencës së funksionimit të MK" në një nga forumet robotike është e qëllimshme. Pra, në hyrje të pajisjes ka 2 tela për impulse dhe 3 tela për kontrolluesin SPI. Shtojmë një hyrje tjetër të orës (ndërsa nuk e dimë se në cilën frekuencë, mund të supozojmë vetëm se është të paktën 70 MHz). Ne fillojmë të vizatojmë firmuerin: na duhen shkasat e mbylljes që do të "kapin" pulset, një numërues kohore, një regjistër ndërrimi (nuk kemi nevojë t'i krijojmë ato, ato janë bibliotekë). Nuk do të përshkruaj se çfarë janë shkasat dhe numëruesit, shpresoj që lexuesit të jenë "në temë" dhe të mos ketë probleme, përndryshe do t'ju duhet të shkruani disa artikuj të tjerë. Ne morëm vetëm një qark të tillë (Fig. 6), siç mund ta shihni, nuk është e nevojshme të tërhiqni telin nga dalja e simbolit në hyrje, thjesht duhet të emërtoni qarkun. Për të përcaktuar hyrjet dhe daljet e jashtme, përdorni butonin "Shto shënuesin I/O".


Oriz. 6
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Kur qarku është gati, shkoni te skeda Dizajn dhe klikoni dy herë në Implement Design - fillojnë të gjitha llojet e proceseve (për fillim, nuk ka rëndësi se cilat - gjëja kryesore është që gjithçka së bashku është procesi i distilimit burimi në firmware). Kur gjithçka funksionon, ne i shikojmë gabimet me llamba: rregullojmë gjithçka që është e rëndësishme, lëmë pjesën tjetër. Për shembull, nuk kemi nevojë për daljet e SEO dhe TS të numëruesit, dhe 15 bitët e mbetur të daljes paralele të regjistrit të ndërrimit nuk nevojiten gjithashtu, por betohet me varnime. Nëse betohet me fshirje se ne e duam këtë, do të thotë se duam diçka të gabuar. Nëse ne (dhe sintetizuesi) jemi të kënaqur me gjithçka, ne i admirojmë raportet më tej: sa burime janë përdorur, cilat frekuenca të orës janë të disponueshme ... Nëse gjithçka është përsëri në rregull, atëherë është koha të simuloni qarkun dhe të siguroheni që në fakt funksionon sipas detyrës në fjalë. Unë propozoj të kryeni simulimin pasi të kontrolloni oraret për faktin se ndonjëherë i gjithë qarku duhet të tronditet për të marrë frekuencën e dëshiruar të orës, e cila, natyrisht, mund të ndikojë në rezultatin ...

Pra, simulimi: në skedën Design (në panelin e majtë), zgjidhni simulimin (Fig. 7).


Oriz. 7
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Më poshtë, në proceset, në vend të proceseve të sintezës dhe rrugëtimit, u shfaq procesi Simulimi i Modelit të Sjelljes, klikoni dy herë mbi të - fillon simulatori, në të cilin ne shohim sinjalet tona (jo vetëm hyrje-dalje, por edhe ato të ndërmjetme) (Fig. 8).


Oriz. tetë
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Zhvendosni kursorin e miut mbi butona, lexoni komentet mbi butonat. Vendosim kohën e hapit të simulimit (Fig. 9) dhe vlerat fillestare të sinjaleve hyrëse, rregullojmë menjëherë sinjalet e orës (nuk do të simulojmë dhe ndërrojmë orën çdo 5 ns).


Oriz. 9
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Duke kaluar në kohë duke manipuluar hyrjet dhe (nëse është e nevojshme) me hapin e simulimit, marrim një diagram kohor (Fig. 10).


Oriz. 10
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Sigurohemi që gjithçka të funksionojë siç synohet (ose vazhdojmë të korrigjojmë qarkun) dhe vazhdojmë në hapin tjetër - shpërndarja e daljeve dhe hyrjeve përgjatë këmbëve të mikrocirkut. Për ta bërë këtë, shtoni një skedar tjetër burimor (Fig. 11), përkatësisht Skedari i Kufizimeve të Implementimit.


Oriz. njëmbëdhjetë
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Ne përshkruajmë "pinout e microcircuit" (Fig. 12), këtu ne përshkruajmë kërkesat për frekuencat e orës. Dhe tani kemi ardhur te nuanca e lidhur me sinjalet e orës. Fakti është se sinjalet e orës duhet të vijnë në të ashtuquajturat linja globale - linja që kalojnë nëpër të gjithë mikroqarkun, pjesa tjetër e linjave janë të natyrës lokale dhe nga blloku në bllok kalojnë përmes logjikës së ndërrimit. Çipi XC95288XL në paketën TQ144 ka 3 linja të tilla, dhe ato janë të lidhura me këmbët 30, 32, 38. Pjesa tjetër e sinjaleve mund të lidhet me çdo pin I/O.


Oriz. 12
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Klikoni dy herë përsëri Implement Design, prisni, lexoni komentet për paralajmërimet me gabime dhe shkoni te raportet në pinout (Fig. 13) dhe oraret (Fig. 14); ne sigurohemi që gjithçka të na përshtatet dhe lumturinë e kemi në formën e skedarit% project_name% .jed.


Oriz. trembëdhjetë
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)


Oriz. 14
(foto mund të klikohet për tu zmadhuar, do të hapet në një dritare të re)

Skedari i firmuerit është gati. Le të themi se pajisja është gjithashtu. Ne lidhim kabllon JTAG me kompjuterin dhe klikojmë dy herë në Configure Target Device. Programi i firmuerit (Impact.exe) do të fillojë, në fakt, kur bëni disa pajisje për ndezjen e një serie, mund të kufizoheni në lëshimin e vetëm njërës prej tyre. Ne krijojmë një projekt të ri (ky është një projekt për një program firmware), le të gjejë automatikisht programuesin dhe mikroqarkun e lidhur, të shfaqë skedarin e firmuerit dhe klikoni Program. Ne jemi duke pritur për disa dhjetëra sekonda, shohim një mbishkrim se gjithçka është në rregull - pajisja është gati.


Fusha e mbjellë me vargje portash të programueshme

Ne fillojmë një kurs leksionesh se çfarë është logjika e programueshme dhe si të fillojmë ta përdorim atë për të mirën e vetes dhe fqinjëve tanë ...

FPGA- kështu quhet IT në Rusisht. P i programueshëm L logjike DHE integrale ME hema.
Në një mënyrë borgjeze, tingëllon pak më ndryshe - FPGA - F prodhimi i P rogrammueshme G hengra A rrezet. Fjalë për fjalë kjo përkthehet si "Arë e mbjellë me grupe portash të programueshme".
Për të qenë pak më serioz, mund ta quajmë "Matrica e portës së programueshme"

Çfarë është një valvul?
Shumë mirë, në bodrum ka një katrahurë të tillë në tubin e ujit, të cilin nëse e vidhosni, e gjithë shtëpia do të mbetet pa ujë. Me pak fjalë, është diçka që mund të mbyllet dhe të hapet.

Pra, le të jetë një zbulesë për ju, por çdo mikroqark përbëhet nga porta. Vërtetë, ato nuk janë shumë të ngjashme me atë që ju dhe unë kemi në bodrum. Por ata bëjnë të njëjtën gjë - hapen dhe mbyllen.

Valvulaështë një komponent elementar i çdo mikroqarku dixhital.

Edhe supermegaprocesori më i sofistikuar përbëhet nga porta. Ka shumë, shumë prej tyre në të, vetëm një det i tërë. Natyrisht, në çdo mikrocircuit, portat janë të lidhura në një mënyrë të caktuar. Në fakt, funksionaliteti i mikrocirkut varet nga mënyra se si ato janë të lidhura.

Në mikroqarqet konvencionale, skema e lidhjes së valvulave vendoset gjatë prodhimit dhe më pas nuk mund të ndryshohet më.
FPGA na lejon ta vendosim vetë këtë qark dhe ta ndryshojmë sipas dëshirës, ​​tashmë gjatë "jetës" së mikroqarkut. Mjafton vetëm të vizatoni një qark në një kompjuter dhe të përdorni një programues për ta ndezur atë në një mikroqark FPGA.

Kjo është në përgjithësi.

Në fakt, gjithçka është shumë më e ndërlikuar :) Shikoni foton


Kjo është një macrocell - Macrocell në gjuhën e tyre.
Çdo mikroqark FPGA përbëhet nga makroqeliza të tilla ... Siç mund ta shihni nga diagrami i makroqelizës, ai përbëhet nga një tabelë e kërkimit ( LUT) - "Tabela e kërkimit", dhe gjithashtu, shkas me hyrje sinkrone dhe asinkrone dhe disa logjikë në hyrjet e trigerit. Në fakt, vetëm LUT është programuar. Siç shihet ka 4 hyrje dhe një dalje. Ky dalje mund të aplikohet ose drejtpërdrejt në daljen e makrocelës (Q0) ose në hyrjen sinkron të të dhënave të flip-flopit (D).

LUT nuk është asgjë më shumë se një ROM me 16 qeliza 1-bit. Kur një kombinim i caktuar i sinjaleve dixhitale aplikohet në hyrjet LUT (D0 ... D3), ai i percepton ato si një adresë dhe nxjerr përmbajtjen e qelizës në këtë adresë.

Në përgjithësi, çdo qark logjik që ka 4 hyrje (ose më pak) dhe një dalje mund të përshkruhet nga një tabelë e vërtetësisë me 16 rreshta. Për shembull, le të marrim një skemë kaq të thjeshtë dhe të shkruajmë një tabelë të së vërtetës për të:

Tabela e së vërtetës përshkruan nivelin logjik të daljes së qarkut (Q) për të gjitha kombinimet e mundshme të sinjaleve në hyrje (D0… D3). Në mënyrë të ngjashme, në LUT, çdo kombinim i sinjaleve hyrëse (lexo - çdo adresë ROM) ka sinjalin e vet të daljes të lidhur. Kjo do të thotë, tabela e së vërtetës së qarkut që duam të shohim në vend të saj është e qepur në LUT. Është kaq e thjeshtë!

Nëse qarku përmban më shumë se 4 hyrje ose më shumë se 1 dalje, përdoren LUT të disa makrocelulave.

qartë = "të gjitha">

Por gjëja më e rëndësishme është shkasja. Në fund të fundit, siç e dini (ose ndoshta nuk e dini ende), të gjithë regjistrat, numëruesit dhe shumë elementë të tjerë të teknologjisë dixhitale përbëhen nga shkaktarë. Pra, numri i makrocelave në çipin FPGA përcakton numrin e nxitësve. Dhe anasjelltas :) Pra, kur zgjidhni një mikroqark për çdo projekt, së pari duhet të vlerësoni se sa shkas do të jenë në qark dhe të merrni me një diferencë ...

Figura më poshtë tregon një bllok diagram të çipave të serisë EPM7000 nga Altera Kjo foto është nxjerrë nga fleta e të dhënave https://www.altera.com/literature/ds/m7000.pdf Ajo i referohet çipave EPM7032, EPM7064, EPM7096. Pra, dy shifrat e fundit në emër tregojnë saktësisht numrin e makrocelave në mikroqark.


Siç mund ta shihni nga diagrami, makrocelat kombinohen në "blloqe vargjesh logjike" (LAB - Logic Array Block).
Këto blloqe janë të ndërlidhura përmes një grupi ndërlidhës të programueshëm (PIA).
Për më tepër, LAB-të janë të lidhur me kunjat e mikroqarkut përmes blloqeve të kontrollit I/O.

Kur ndizet, secili prej blloqeve ka informacionin e vet të "qepur":
- LUT programohen në Macrocells,
- informacioni për ndërlidhjet e brendshme është i bashkuar në ANP,
- informacioni në lidhje me lidhjet me këmbët e mikroqarkut është i qepur në bllokun e kontrollit I / O.

Seriozisht, "firmware" i FPGA quhet "ngarkimi i konfigurimit".

Çfarë mendoni se do të përdorim për të ngarkuar konfigurimin ???
Epo, sigurisht, me Byte Blaster-in e vjetër! :) Një byte blaster është një gjë universale :) Kam përshkruar se si ta bëj atë në mënyrën më të detajuar këtu

Artikujt kryesorë të lidhur