Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 10
  • Programabilna integrisana kola. Plis - moji prvi koraci

Programabilna integrisana kola. Plis - moji prvi koraci

Nedavno sam ipak napravio svoj prvi korak ka FPGA i pozvao vas da me pratite. Moj fanatični hobi za FPGA i ideja da su FPGA najbolja platforma za kreiranje bilo kojeg uređaja poprimila je religiozni karakter. Moja FPGA sekta propovijeda potpuno odbacivanje mikrokontrolera, a posebno ekstremistička grana propovijeda odbacivanje ne samo mekih procesora, već i sekvencijalnog računarstva općenito!

Kao i uvijek, rješavanje stvarnih problema pomoglo je da se shvati istina. U današnjoj propovijedi želio bih govoriti o iskušenjima koja su zadesila mladog FPGA vozača. Prevazilazeći iskušenja, shvatamo istinu. Ali još uvijek postoje pitanja na koja nisam našao odgovore. Stoga bih jako volio da braća-Khabrovi – FPGA-i sa iskustvom, učestvuju u raspravi, da pruže ruku pomoći svojoj mlađoj braći.

Ovaj članak je za početnike. U njemu ću opisati tipične probleme, pitanja, zablude, greške koje se mogu pojaviti na samom početku treninga (jer su se pojavile kod mene). Međutim, kontekst članka je ograničen činjenicom da se razvoj odvija na FPGA iz Altere u okruženju Quartus na jeziku Verilog.

Teško je živjeti ne radeći ništa, ali se ne bojimo poteškoća!

Jedan od razloga zašto mnogi ne počnu učiti Verilog upravo sada je nedostatak pravog FPGA. Neko ne može naručiti, jer je skupo, a neko zato što ne zna šta da uzme (pitanje izbora je bilo reči u prethodnom članku). Neko FPGA i dalje ide poštom.

Ali u svom razvoju došao sam do zaključka da mi treba pravi FPGA već u završnoj fazi razvoja, kada trebam testirati projekat "u hardveru". Poenta je da većinu svog vremena provodim na otklanjanju grešaka u svom kodu koristeći simulatore.

Dakle moj savjet je: nedostatak FPGA nije razlog da ostanete neaktivni. Pišite i debugirajte FPGA module u simulatorima!

Simulator za Verilog

Dakle, šta možete učiniti da se zabavite dosadnim dugim radnim danima (ako jesu)? Naravno da ćemo savladati FPGA! Ali kako natjerati cijelo razvojno okruženje iz Altere da radi ako teži 3 mjesečna ograničenja rada na Internetu? Možete ga donijeti na USB sticku! Ali ako je predmet proučavanja Verilog, onda se možete ograničiti na notepad, IcarusVerilog kompajler i gledati rezultat u GTK Waveu.

Probaj sada

Da biste započeli sa Windows, samo preuzmite instalacijsku datoteku iverilog-20130827_setup.exe sa veze http://bleyer.org/icarus/ (snimak razvoja)

Instalacija ne uzrokuje poteškoće. Krenimo malo naprijed: kreirajte folder za projekat i u njemu nekoliko fajlova sa još nerazumljivim sadržajem:

Datoteka modula sa kodom za testiranje modula - bench.v

`vremenska skala 1ns / 100 ps modul testbench (); reg clk; početni početak $ display ("start"); $ dumpfile ("test.vcd"); $ dumpvars (0, testbench); clk<= 0; repeat (100) begin #10; clk <= 1; #10; clk <= 0; end $display("finish"); end


Testbench test modul je opisan u bench.v datoteci, u njemu je kreiran izvor test signala clk (meander). Ostali moduli će biti kreirani u zasebnim datotekama, ili se logika može prvo testirati u ovom modulu, a zatim premjestiti u poseban modul. Zatim će se instance ovih modula dodati u testbench modul, gdje ćemo slati test signale na njihove ulaze i primati rezultate od njih. Možemo izgraditi hijerarhiju od modula, mislim da je to svima jasno.

BAT fajl koji će kompajlirati i simulirati glavni modul, dodajući druge module iz trenutnog foldera - makev.bat

iverilog -o test -I./ -y./ bench.v vvp test pauza


Nakon pokretanja ove datoteke, vidjet ćemo na ekranu tekst naveden u $ display (ovo je izlaz za otklanjanje grešaka), vrijednosti signala i registara kola će biti u datoteci test.vcd. Kliknite na datoteku i odaberite program za pregled - GTKWave (u mom slučaju D: \ iverilog \ gtkwave \ bin \ gtkwave.exe). Još par klikova i vidjet ćemo naš clk.



Praktično, kreiram svaki svoj novi modul u notepad-u i otklanjam greške u IcarusVerilogu. Nakon takvog otklanjanja grešaka, sljedeći korak je provjera modula u Quartusu. Iako Quartus ima i svoj simulator, ja ga rjeđe koristim. Razlog je jednostavnost ažuriranja koda i pregled rezultata u IcarusVerilogu: sačuvao promjene u datoteci, pokrenuo BAT, pritisnuo dugme "ažuriraj" u GTKWave - to je to! U ModelSim-u to zahtijeva malo više kretanja, ali isto tako nije loše, posebno na podacima složenih struktura.

Nakon simulacije, vrijeme je za pokretanje Quartusa. Ali još je prerano za učitavanje firmvera u FPGA. Moramo da budemo sigurni da je božanska računarska mašina ispravno shvatila kakvu šemu želimo da dobijemo, izražavajući naše misli u obliku Veriloga.

Razlika između simulacije i rada u stvarnom hardveru

Prvo sam, kao slijepo mače, lupio glavom o dovratak. Naizgled ispravan kod uopće ne radi, ili ne radi kako se očekivalo. Ili je samo upalilo, ali sada je odjednom prestalo!

Radoznalo mače počinje tražiti odnos između njegovih postupaka i rezultata ("golubovo praznovjerje").

Najveća drama
Ispod je lista neobičnosti, ali prvo najveća drama s kojom sam se susreo: ne mogu se svi Verilog konstrukti sintetizirati u željezu... To je zbog činjenice da Verilog ne opisuje samo hardversku logiku, koja je kombinovana u module i radi u hardveru. Na istom Verilog-u su opisani testni moduli koji kombinuju testirane module, primenjuju test signale na njihove ulaze i uopšteno postoje samo za testiranje na računaru. Promjena vrijednosti signala tokom vremena određena je konstrukcijama koje sadrže znak "#" u Verilog tekstu. Takav znak znači kašnjenje u vremenu. U gornjem primjeru, ovako se generira CLK signal. I mislio sam da je grešna stvar da na isti način, unutar pravog FPGA, možete generirati, na primjer, niz bitova za slanje poruke preko RS232. Uostalom, signal iz 50 MHz generatora se dovodi na FPGA ulaz! Možda je ona nekako vođena njime. Kako se pokazalo, nisam jedini koji se nadao čudu:,,,,. Stvarnost se, kao i uvijek, pokazala strožom: FPGA je skup logike i vremensko kašnjenje u njemu može se pojaviti kada se koristi brojač čija se vrijednost povećava u ciklusima takta od generatora do zadane vrijednosti, ili na neki drugi način (ali uvijek hardverski).
Spisak pronađenih neobičnosti
Zadivljujuće stvari, međutim, čitanje knjiga baca svjetlo na ovu vražiju. Štaviše, milost je pronađena.
Ako odredite reg, onda nije činjenica da će biti kreiran
Kako sam došao do problema? Recimo da postoji jedan modul, na čiji ulaz moram dostaviti vrijednost (po vrsti parametra). U budućnosti će se ovaj parametar morati mijenjati tokom vremena ovisno o nekim vanjskim događajima. Stoga vrijednost mora biti pohranjena u registru (reg). Ali implementacija prijema eksternih događaja još nije implementirana, tako da ne mijenjam registar, već ga jednostavno postavljam na početnu vrijednost, koja se ne mijenja u budućnosti.

// postavlja 8-bitni registar reg val; // inicijaliziramo ga početnim valom<= 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));
U čemu je kvaka, čini se? U imperativu PL često postavljamo varijable kao konstante, a onda ih nikada ne mijenjamo i sve funkcionira. Šta vidimo u žlezdi?


Prvo, ne vidimo registar. Drugo, 8 "hFF se dovodi na ulaz modula umjesto našeg 8" d0240! I to je već dovoljno da shema funkcionira ne onako kako smo planirali. To što nema registra je normalno. U Verilog-u možete opisati logiku na različite načine, u isto vrijeme sintisajzer uvijek optimizira implementaciju hardvera. Čak i ako napišete uvijek blok i radite s registrima u njemu, ali će izlazna vrijednost uvijek biti određena ulaznom vrijednošću, tada će korištenje registra ovdje biti suvišno i sintisajzer ga neće opskrbljivati. I obrnuto, ako se za neke vrijednosti ulaznih podataka izlazna vrijednost ne promijeni, onda nema načina da se bez registra zasuna i sintisajzer će ga stvoriti. (Knjiga 1, str. 88-89). Šta iz ovoga slijedi? Ako počnemo mijenjati vrijednost registra, na primjer, u zavisnosti od pritiska na dugme, tada će gerist već biti kreiran i sve će raditi kako treba. Ako se ispostavi da tipke ništa ne mijenjaju, sintisajzer će ga opet izbaciti i opet će se sve pokvariti. Šta učiniti sa konstantom? Morate ga poslati direktno na ulaz modula:

Bbox bb_01 (.in_data (8 "d0240), .out_data (out_data));
Sada imamo ispravnu vrijednost na ulazu modula:

Ostaje misterija zašto, kada se registar smanji, njegova inicijalna vrijednost nije zamijenjena ulazom modula.

Bolje je da sami postavite dimenziju žice.
Prilikom razvoja u Quartus okruženju, dozvoljeno je ne definirati žičane linije unaprijed. U tom slučaju će se automatski kreirati, ali će o tome biti izdato upozorenje. Problem je u tome što će širina žice biti 1-bit, a ako su portovi širine više od 1-bita, tada se vrijednost neće prenositi.

Bbox bb_01 (.in_data (8 "d0240), .out_data (int_data)); other_bbox bb_02 (.in_data (int_data), .out_data (out_data));
Upozorenje
Upozorenje (10236): Verilog HDL Implicit Net upozorenje na test.v (15): kreirana implicitna mreža za "int_data"
rezultat:

Kao što vidite, jedan bit je povezan, a preostalih 7 bitova nije povezano (NC). Da biste izbjegli takav problem, morate sami kreirati žicu. Nije uzalud što kompajler IcarusVerilog ne izdaje upozorenje, već grešku ako žica nije unaprijed navedena.

Wire 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));

Kompjuter se neće penjati na module, pogledajte kolika je bitna širina portova. Osim toga, širina bita može biti različita, a ne ulaze svi bitovi na ulaz modula ili sa izlaza, već neki specifični.

Izlaz logičke funkcije se ne može koristiti kao signal takta
Ponekad je u projektu potrebno smanjiti frekvenciju takta, ili uvesti vremensko kašnjenje od N taktova. Početnik može koristiti brojač i dodatnu šemu za određivanje da li je brojač dostigao određenu vrijednost (šema poređenja). Međutim, ako direktno koristite izlaz iz kola za poređenje kao sat, tada mogu nastati problemi. To je zato što je potrebno neko vrijeme da logičko kolo postavi svoj izlaz na stabilnu vrijednost. Ovo kašnjenje pomera ivicu signala koji prolazi kroz različite delove logičkog kola u odnosu na sat, što rezultira trkama, metastabilnošću, asinhronijom. Čak sam jednom imao priliku da čujem opasku o tome kao kritiku FPGA: “sa FPGA postoje stalni problemi – trke signala”.

Ako pročitate barem par članaka:
Metastabilnost okidača i sinhronizacija između ciklusa
Nekoliko riječi o cjevovodima u FPGA

Postaje jasno kako se razvijaju uređaji zasnovani na FPGA: cijeli zadatak je podijeljen na hardverske blokove, a podaci između njih se kreću duž cjevovoda, sinhrono se ubacujući u registre prema signalu takta. Dakle, znajući ukupnu frekvenciju takta, sintisajzer izračunava maksimalnu radnu frekvenciju svih kombinatornih kola, utvrđuje da li njihova brzina odgovara periodu ciklusa i zaključuje da li će kolo u FPGA raditi ili neće. Sve se to dešava u fazi sinteze. Ako se kola uklapaju u parametre, onda možete flešovati FPGA.

Tako su za programere uređaja baziranih na FPGA stvorene sve potrebne metodologije, a ako ih se pridržavate, onda neće biti problema.

Šta ako želim ići protiv sistema?
Redoslijed razvoja i ponašanja sintisajzera kola dovodi nas do zaključka o tome šta je zapravo FPGA na hardverskom nivou. Ovo su sinhroni krugovi. Stoga je među ciljevima sintisajzera da zadrži vremenske intervale. Da bi to učinio, na primjer, on pojednostavljuje logičke izraze, izbacuje iz sinteze dijelove kola koje ne koriste druga kola i nisu vezani za fizičke pinove FPGA. Asinhrona rješenja i analogni trikovi se obeshrabruju, jer njihov rad može biti nepredvidljiv i ovisi o bilo čemu (naponu, temperaturi, procesnoj tehnologiji, batch, FPGA generaciji), te stoga ne daje zagarantovan, ponovljiv, prenosiv rezultat. Ali svima je potreban stabilan rezultat i opći pristupi dizajnu!

Ali što učiniti ako se ne slažete s mišljenjem sintisajzera da je potrebno izbaciti nepromjenjive registre i smanjiti logička kola? Šta ako želite da napravite kola sa asinhronom logikom? Trebate podešavanje? Ili možda i sami želite sastaviti krug koristeći FPGA komponente niskog nivoa? Lako! Hvala Altera developerima na ovoj prilici i detaljnoj dokumentaciji!

Kako uraditi? Možete isprobati grafički uređivač shema. Možda ste čuli da vam Quartus dozvoljava crtanje dijagrama? Možete sami odabrati građevne blokove i povezati ih. Ali ovo nije rješenje! Čak i nacrtano kolo će biti optimizovano od strane sintisajzera, ako je moguće.

Kao rezultat, dolazimo do stare istine: ako ništa drugo ne uspije, pročitajte upute... Naime Altera Handbook dio pod naslovom Quartus II Synthesis Options.

Za početak, opisujući arhitekturu u Verilog-u na određeni način, možete dobiti određeni rezultat. Evo nekoliko primjera koda da dobijete sinhroni i asinkroni RS flip-flop:

// sinhroni RS modul okidača modul rs (clk, r, s, q); ulazna žica clk, r, s; izlazni reg q; uvijek @ (posedge clk) počinje ako (r) počinje q<= 0; end else if (s) begin q <= 1; end end endmodule
U ovom slučaju dobijate sinhroni okidač.

Zanemarujući signal takta i prebacivanje u zavisnosti od bilo kakve promene r i s, rezultat je element sa asinhronom zadatom vrednošću - zasun.

// primjer modula asinkronog RS triger modula ModuleTester (clk, r, s, q); ulazna žica clk, r, s; izlazni reg q; uvijek @ (r ili s) počinje ako (r) počinje q<= 0; end else if (s) begin q <= 1; end end endmodule

Modul ModuleTester (clk, r, s, q); ulazna žica clk, r, s; izlazni reg q; DATCH lt (.q (q), .clrn (~ r), .prn (~ s)); endmodule

Kao rezultat toga, cijeli "body kit" na ulazu zasuna, koji je sintisajzer smatrao neophodnim, će nestati i dobićemo upravo ono što smo željeli:

Spisak postojećih primitiva može se pogledati na sajtu Altera.

A sada mali primjer o asinhroniji i redukciji. Mislio sam, na primjer, napraviti generator po istom principu kao što je to bilo uobičajeno da se radi ranije, ali samo na FPGA:

Ali da povećam period, uzet ću 4 elementa, ali će samo jedan od njih biti obrnut:

Module ModuleTester (q); izlazna žica q; žica a, b, c, d; dodijeliti a = b; dodijeliti b = c; dodijeliti c = d; dodijeliti d = ~ a; dodijeliti q = a; endmodule

Ali ispostavilo se da je to redukcija (1 element umjesto četiri). Što je logično. Ali onda smo osmislili liniju za kašnjenje.

Ali ako na sintisajzer postavimo uslov da linije a, b, c, d nisu isečene, onda dobijamo ono što imamo na umu. Direktive se koriste za podsticanje sintisajzera. Jedan od načina da se navede je tekst u komentaru:

Module ModuleTester (q); izlazna žica q; žica a, b, c, d / * sinteza zadrži * /; // ^^^ --- ovo je direktiva sintisajzera dodijeli a = b; dodijeliti b = c; dodijeliti c = d; dodijeliti d = ~ a; dodijeliti q = a; endmodule
I evo rezultata - lanac od četiri elementa:

I to nije sve! Ostaviću ga na radost samostalnog proučavanja: rad sa slučajem i direktivom za implementaciju kao RAM/ROM ili logičko kolo; rad s ugrađenim memorijskim blokovima (RAM / ROM); izbor implementacije množenja - hardverski multiplikator ili logičko kolo.

Razvojem digitalnih mikrokola pojavila se kontradikcija između mogućeg stepena integracije i nomenklature proizvedenih mikrokola. Ekonomski je bilo opravdano proizvoditi mikro kola srednje integracije, kao npr. Iz ovih čvorova su se morala kreirati složenija kola. Postavljanje složenijeg kola na poluvodički kristal nije predstavljalo problem, ali je to bilo opravdano ili vrlo velikim serijskim brojem opreme, ili cijenom opreme (vojne, avijacije ili svemira). Mikro kola po narudžbi nisu mogla zadovoljiti nastalu potrebu za minijaturizacijom opreme. Moglo bi postojati samo jedno rješenje - omogućiti programerima hardvera mogućnost promjene unutrašnje strukture mikrokola (programa).

Povijest razvoja programabilnih logičkih integriranih kola (FPGA) počinje pojavom programabilnih memorijskih uređaja samo za čitanje. U početku su se programabilni ROM-ovi koristili isključivo za pohranjivanje podataka, ali su se ubrzo počeli koristiti za implementaciju digitalnih kombinacijskih uređaja s proizvoljnom tablicom istinitosti. Kao nedostatak ovog rješenja treba napomenuti da složenost uređaja eksponencijalno raste ovisno o broju ulaza. Dodavanje jednog dodatnog ulaza digitalnog uređaja udvostručuje potreban broj ROM memorijskih ćelija. Ovo ne dozvoljava implementaciju višestrukog unosa.

Za implementaciju digitalnih kombinacionih uređaja sa velikim brojem ulaza razvijene su programabilne logičke matrice (PLM). U stranoj literaturi nazivaju se programiranim logičkim nizovima (PLA). Programabilni logički nizovi se mogu smatrati prvim programabilnim logičkim integrisanim kolima (Programabilni logički uređaji - PLD). PLM-ovi su postali široko rasprostranjeni kao prva univerzalna mikrokola velike integracije.

FPGA klasifikacija

Trenutno se programibilna logička integrirana kola razvijaju u nekoliko smjerova, pa je postalo potrebno nekako razlikovati ova mikro kola. Klasifikacija programabilnih logičkih integrisanih kola (FPGA) prikazana je na slici 1.


Slika 1. Klasifikacija programabilnih logičkih integrisanih kola (FPGA)

Jeste li čekali znak? Evo ga!

Dugi niz godina nisam se usuđivao početi programirati FPGA, jer je to teško, skupo i bolno (kako mi se činilo). Ali dobro je kada postoje prijatelji koji ti pomažu da napraviš prvi korak. I sad ne razumem jednu stvar - ZAŠTO DA ČEKAM TAKO DUGO?

Sada ću i vama pomoći da napravite prvi korak!

Zašto mi treba?

Jeste li umorni od stalnog čitanja dokova na svom MK-u ili od gomile informacija u glavi. Sve si prepisao u asm-u, ali brzina i dalje nije dovoljna. Priključili ste dva eksterna uređaja na svoj MK, priključili treći, ali vam je ponestalo prekida, oni moduli koji su već radili prestaju da rade. Uzmite još jedan MK, moćniji iz iste linije, ali opet priručnike, flag registre, bitove... pakao. Mijenjate platformu: prelazite na drugi MK i bacate svoje znanje o prethodnoj platformi u smeće. Šta god da radite, teško je. Nađete popularnu platformu u kojoj možete lako sastaviti projekat od komponenti, ali još uvijek ne možete preskočiti hardverska ograničenja ovog MC-a... Negdje na rubu svijesti ponekad skoči misao da bi na FPGA sigurno brzo funkcionirao i uporedo da je to "Upravo zadatak koji treba riješiti na plisu", ali ja sam star/glup/zauzet/itd da mogu/da počnem ovo raditi.

Želite li konačno slobodno disati? Pomakni se!

Radost razvoja FPGA

Imao sam naporan dan na poslu. Sa jednog posla sam došao na drugi posao, pa na daču, uveče kućni poslovi, domaći, pa porodica gledajući film, i tek u 23 sata sam bio potpuno slobodan! Reći da sam bio umoran znači ne reći ništa. Ali u ovom stanju, sjeo sam za laptop sa čvrstim ciljem: da napravim generator pravougaonog talasa na 440 Hz. Trajalo je 20 minuta i već sam to čuo u slušalicama. Nisam mogao vjerovati svojim ušima! Trebalo mi je još 15 minuta da napravim PWM i promijenim jačinu zvuka. Do tada sam imao ploču sa FPGA samo nedelju dana, a pre toga sam prelistao samo nekoliko knjiga o Verilogu.

Te večeri sam shvatio: EVO GA! Ovo je platforma na kojoj mogu brzo i lako svoje misli pretvoriti u pravi radni hardver!

Žašto je to?

Opisat ću prednosti koje postoje u proučavanju i primjeni FPGA, iako ih svi već znaju:
  • Univerzalnost znanja- kada mijenjate MK model, potrebno je pročitati dokove. Prilikom promjene proizvođača MK-a potrebno je pročitati dokumentaciju. Morate stalno čitati dokove, stalno držati puno informacija u svojoj glavi. Kada razvijate na FPGA, ako poznajete Verilog ili VHDL, onda ne možete samo programirati bilo koji FPGA iz linije jednog proizvođača, već i ako želite da se prebacite na drugog (Altera, Xilinx). Iako će biti trenutaka sa razvojem drugačijeg razvojnog okruženja, suptilnih hardverskih problema, sama suština pristupa dizajnu HDL uređaja neće se promeniti od ovoga.
  • Od ideje do hardvera- kada razvijate projekat, ako vam jedan mikron nije dovoljan, onda morate izabrati drugi. U principu, možete pretpostaviti da li će se ovaj MC nositi sa projektom ili neće. Ili postoji neki specifičan MK i pokušavate tamo uklopiti projekat. To je najčešće slučaj. Meni ovo pomalo podsjeća na pristup mog djeda koji pravi ljestve od onoga što je u šupi. Iako možete dizajnirati stepenište, kupite daske koje odgovaraju... Od ideje do pegle, a ne obrnuto.
  • Lakoća primjene razvoja drugih ljudi- možete uzeti tuđi modul i primijeniti ga u svom projektu. Možete razumjeti kako to funkcionira iz koda. Čak i ako je za xilinx, a vi to radite pod altera. Ponekad ovo ne uspije sarzu, ali je lakše nego, na primjer, dodavanje binarnih datoteka u c ++ / Qt projekat
  • Blokira nezavisnost. Blokovi u HDL-u, kao čiste funkcije u JP-u. Zavise samo od ulaznih signala. Razvijeni i otklonjeni moduli će nastaviti da rade ispravno, bez obzira na to kako projekat raste. Ništa izvana neće ometati kako funkcionira iznutra. U svakom slučaju, možete zaboraviti kako to funkcionira - to je crna kutija. Osim toga, blokovi rade paralelno.

Problem izbora

Pitanja šta odabrati: Altera / Xilinx, Verilog / VHDL, koju ploču za otklanjanje grešaka uzeti. Ali prvo stvari.

Proizvođač

ja biram Altera... Zašto? Pa, moj prijatelj i ja smo to odlučili, iako mi je ime Xilinx ljepše. ALI. Ako sada ne možete birati, ja ću to učiniti umjesto vas. Treba ti Altera! Zašto? Ne znam. Sada je važnije napraviti korak: napraviti izbor. Odabrao sam Alteru i još nisam požalio.



Jezik

Mi uzimamo Verilog - jer… Pa, razumete.

Ploča za otklanjanje grešaka

Trebalo je najduže vrijeme za odabir ploče za otklanjanje grešaka. Jasno je da se ploče razlikuju po instaliranom FPGA mikrokolu. A FPGA čipovi se međusobno razlikuju po broju elemenata. Ali uopće nije jasno koliko će biti potrebno za vaše testne projekte. Stoga sam većinu vremena proveo tražeći sve vrste FPGA projekata kako bih saznao koliko oni troše FPGA resurse.

U porodici Altera po razumnoj cijeni možemo kupiti ploče sa CPLD MAX II za 240, 570 i 1270 elemenata ili starije FPGA čipove, a to su Cyclone 1, 2, 3, 4 sa do 10.000 ili više ćelija. Kako birate?

Čak i na bazi 240 ćelija, projekat Mars Rover radi samo ogroman broj projekata. Toplo preporučujem da se upoznate kako biste imali grubu predstavu o složenosti projekata koji mogu stati u 240 ćelija. S druge strane, postoje projekti koji su u potpunosti programirani za hardversku kopiju određenog računara, uključujući procesor i svu logiku oko njega (NES, Speccy, Orion, UT-88, itd.). Za to je već potrebno pet, deset ili više hiljada ćelija. Osim toga, ove ploče sadrže dodatne vanjske uređaje.

Stoga bih vam savjetovao da uzmete nešto u sredini između 240 i 10.000 ćelija, s preferencijom naviše, ovisno o raspoloživim sredstvima. Na ploči za otklanjanje grešaka, dodatne ćelije nisu velika stvar, a ako nisu dovoljne, ništa se ne može učiniti povodom toga. Zatim, kada se uređaj otkloni greške, postat će jasno koliko je ćelija potrebno, kupiti za potrebnu količinu, bez nepotrebnog "body kita", jeftinije i ostaviti u gotovom uređaju.

Razlika između MAX i Cyclones, osim u broju ćelija, je:
1) MAX serija nema PLL unutra. Svaka razvojna ploča ima generator, obično 50 MHz. Ovo će biti dovoljno za većinu projekata. Sve sinhronizacije će se obaviti dijeljenjem 50 MHz sa nekom vrijednošću. Ili, možete uzeti eksterni generator i primijeniti ga na poseban FPGA ulaz. Šta ako vam treba frekvencija veća od 50 MHz? Nisam mogao da nađem generatore iznad 50 MHz u hodu. Ali ovdje u pomoć dolazi PLL, koji je ugrađen u Cyclones. Može pomnožiti frekvenciju, na primjer, do 100 MHz.
2) Cyclone serija ima ugrađene hardverske jedinice za množenje. Njihov broj ovisi o konkretnom modelu - ovdje možete "svejedno pogledati upute" da saznate koliko ih ima. Ako namjeravate napraviti neku vrstu DSP-a, onda će vam dobro doći: sačuvat će ćelije, povećati brzinu. S druge strane, ako nema množitelja, oni se mogu sintetizirati, ali mali FPGA možda neće imati dovoljno resursa za to.

U svim ostalim aspektima, moj kriterijum je „pristajem/ne odgovara“. Otklanjanje grešaka na ploči koja je očigledno veća nego što je potrebno, praćeno ulivanjem u minimum potreban za ovo.

Koliko novca je potrebno?


Programer
Vjerujem da nemam vremena za lemljenje labavih programera.

300 rubalja. Ja sam svoju uzeo na ebee, izgleda ovako:

Ploča za otklanjanje grešaka
Izbor je širok, ovisno o iznosu novca.

Prvi nivo 350 - 550 rubalja. Ovo su ploče na MAX II (ili ćelijama). Mogu biti prikladni za početno upoznavanje i dalje pričvršćivanje na krajnje uređaje. Ploča ima generator, par dugmadi, par LED dioda, preostalih 80 pinova je po Vašem nahođenju.

Napajanje
Mora biti, ali nije uvijek uključeno. Trebat će vam PSU od 5 volti i struja od 2 A.

Prosječan nivo od 900 do 1500 rubalja. To su Cyclone ploče 1, 2, 3, 4 koje se razlikuju uglavnom po broju ćelija.
Označeno ovako:
EP 2 C 5 T144 - Cyclone 2 cca 5k ćelija
EP 4 CE 6 E22C8N - Ciklon 4 približno 6k ćelija
EP 2 C 8 Q208C8N - Ciklon 2 približno 8k ćelija

Možda ćete primijetiti da Ciklon 3 može imati više ćelija od Ciklona 4.

Evo nekoliko opcija:

835 rubalja.
ALTERA FPGA CycloneII EP2C5T144 Minimalna sistemska ploča za učenje dobro

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

1265 rubalja
EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Evaluation Development Core Board

Napredne ploče ... To su ploče na kojima su ugrađeni dodatni moduli (UTP, USB, AUDIO), konektori (SD, VGA), dugmad, prekidači, LED diode, sedmosegmentni indikatori itd. Ili može postojati osnovna ploča, a može doći sa pločama za proširenje zasebno.

Imam sljedeći set radni - ploča + ploča za proširenje:
Altrea EP4CE10E22 FPGA CORE ploča + ploča uređaja USB / zvuk / Ethernet / SD kartica / VGA
2760 rubalja

Ovdje je glavna ploča. Ima 2 LED diode, 2 dugmeta, 4 prekidača, sedmosegmentni indikator i RAM čip.

Ploča za proširenje. SD, VGA, kao i USB kontroleri (High Speed ​​USB2.0 Chip: CY7C68013A), AUDIO (zvučna kartica do 96kHz / 32bit ADC / DAC: WM8731S), UTP (100M Ethernet interfejs: DM9000A):

Ove kartice se jednostavno umetnu jedna u drugu, ali je još uvijek imam u kutiji. Za svoje rukotvorine, imam ploču za izradu sa kojom povezujem petlju koja dolazi u kompletu. Uključeno je i napajanje od 5 volti.

Na ovaj članak su me natjerali moji drugovi koji se jako dobro (mnogo bolje od mene) razumiju u kontrolore i koriste ih gdje god stignu. Ipak, postoji ogromna gomila aplikacija kada je upotreba FPGA ne samo opravdana, već i dovodi do značajnog pojednostavljenja sistema i poboljšanja njegovih parametara. Odmah ću napraviti rezervaciju: u ovom i eventualno narednim člancima FPGA-e razmatram samo od Xilinxa, ne zato što su mi platili, pa čak ni zato što su najbolji, jednostavno se istorijski dogodilo da radim skoro isključivo sa njima.

Pa počnimo s malo teorije. FPGA podijeljeni su u dvije glavne grupe: CPLD (Complex Programmed Logic Device) i FPGA (Field Programmed Gate Array). CPLD- ovo je obično FPGA "ekonomske" klase, tj. imaju nisku cijenu i prilično oskudnu količinu resursa, to je posebno vidljivo na okidačima. FPGA obično skuplji, sadrže više resursa (jednostavna logika - okidači...) i, što je najvažnije, odnedavno dodatne "teške" blokove, kao što su množitelji, blok memorija, pribor za sučelje (Ethernet, PCI-express...) pa čak i PowerPC procesorska jezgra. Odvojeno, možemo spomenuti Zinq seriju iz Xilinxa - općenito, ARM jezgre su bile natrpane tamo. Glavna razlika između FPGA i CPLD je potreba da se učita konfiguracija pri uključivanju i, shodno tome, eksterni ROM sa konfiguracijom. Čak i porodica SPARTAN-3AN ima ugrađeni ROM iz kojeg se učitava.

Sada najvažnija stvar: kako se FPGA razlikuju od kontrolera i kada ih koristiti. Ovdje je sve prilično jednostavno: FPGA (uzimamo one bez zvona) su, u stvari, vreća logike na jednom čipu, koja se može proizvoljno povezati: isti okidači, I, ILI i slični primitivi, kao npr. , u seriji K155 ili 74ns. Kontroler je gotov procesor (iako sa oskudnim brojem instrukcija), ugrađena memorija, sabirnice podataka i komandi, periferije itd. Općenito, možete napraviti mali kontroler od velikog FPGA, ali ova ideja je u najmanju ruku glupa. Dakle, kontroler je izoštren za izvršavanje dugih lanaca naredbi, njihovo ciklično ponavljanje, prebacivanje s jednog lanca na drugi itd., a FPGA je izoštren za izvođenje jednostavnih logičkih operacija i, što je važno, velikog broja odjednom (i čak i na različitim taktovima) ...

Pređimo s teorije na praksu. Za početak nam je potreban CPLD čip. Resursa je malo, ali za razvoj je najviše. Uzeću XC95288XL u kućištu TQ144 (opet, slučajno je bio na lageru), generalno preporučujem da uzmete nešto svježije, na primjer, iz serije CoolRunner 2. Da bismo dobili gotov proizvod (čak i ako LED minimalno treperi), moramo: lemiti hardver (ovdje, nadam se, neće biti problema, ali ću spomenuti nijanse), "napisati" firmver (u našem radije nacrtajte) i ušijte firmver u mikrokolo. Generalno, potreban nam je softver koji generiše firmver i programator. Softver (Xilinx ISE Webpack) preuzimamo sa službene stranice (međutim, zatražit će registraciju), licenca za Webpack je besplatna. Programator se može napraviti prema shemi na slici 1 (za LPT port) ili kupiti tvornički USB-shny (u kineskim internetskim trgovinama sreo sam ga po cijeni od oko 50 dolara, ali ga nisam kupio sam) . Više.

Rice. 1

Nakon što smo zalemili FPGA na matičnu ploču, zalemili ili kupili programator, preuzeli i instalirali ISE Webpack (imam verziju 13.2), pokrenite Project Navigator i kreirajte novi projekat. Da kreirate projekat, izaberite File -> New Project, naznačite naziv projekta i gde da ga sačuvate, takođe navedite tip izvora NAJVRŠNJI NIVO (Sl. 2). Činjenica je da za FPGA nije potrebno crtati sklop iz okidača i njihovih veza, možete, na primjer, pisati na jezicima visoke razine (VHDL, Verilog) i uopće nije potrebno koristiti jednu stvar u okviru istog projekta. Do sada smo koristili samo Schematic na svim nivoima.


Rice. 2
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

U sljedećem prozoru (Sl. 3), odaberite naše mikrokolo (ne dirajte ostatak prvo); u prozoru koji se pojavljuje nakon klika na dugme "Dalje", divimo se parametrima kreiranog projekta, kliknemo "Završi" - i gotovi ste: projekat je kreiran.


Rice. 3

Sada, zapravo, treba da nacrtamo dijagram: desnim klikom na prozor sa projektom i novim izvorom (slika 4.), dajemo naziv ovom izvornom kodu (ovo je naziv naše šeme, može biti mnogi od njih u projektu), ponovo odaberite Shema, kliknite "Dalje", divite se parametrima novostvorene datoteke, kliknite "Završi" i dobijte čistu shemu.


Rice. 4
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Počinje ono najzanimljivije: na panelu s lijeve strane (ne sa same ivice) pritisnite dugme "dodaj simbol" (slika 5).


Rice. 5
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

I dobijamo listu simbola trenutne biblioteke čak i sa leve strane. Kako dodati, kreirati, uređivati ​​biblioteke, shvatit ćemo kasnije (po potrebi). Sada nam je važno da odaberemo traženi simbol. Dakle, u gornjem prozoru vidimo određeni klasifikator - filter koji nije potrebno koristiti (pa, čemu skrolovati kroz sve vrste okidača i logičkih elemenata kada nam treba brojač).

Na primjer, razmotrite sljedeći problem: trebate što preciznije odrediti vrijeme kašnjenja između vodećih rubova 2 impulsa koji se pojavljuju na različitim žicama i spojiti ovu vrijednost u kontroler preko SPI sučelja. Svaka sličnost problema sa temom "Povećanje radne frekvencije MK-a" na nekom od robotskih foruma je namjerna. Dakle, na ulazu uređaja nalaze se 2 žice za impulse i 3 žice za SPI kontroler. Dodamo još jedan ulaz takta (iako ne znamo na kojoj frekvenciji, možemo samo pretpostaviti da je najmanje 70 MHz). Počinjemo crtati firmware: potrebni su nam okidači za zatvaranje koji će "hvatati" impulse, brojač vremena, registar pomaka (ne trebamo ih kreirati, oni su bibliotečki). Neću opisivati ​​šta su okidači i brojači, nadam se da su čitaoci "u temi" i da neće biti problema, inače ćete morati napisati još nekoliko članaka. Dobili smo upravo takvo kolo (slika 6), kao što vidite, nije potrebno povlačiti žicu od izlaza simbola do ulaza, samo trebate imenovati kolo. Da biste odredili eksterne ulaze i izlaze, koristite dugme "Dodaj I/O marker".


Rice. 6
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Kada je krug spreman, idite na karticu Dizajn i dvaput kliknite na Implement Design - počinju svakakvi procesi (za početak, nije važno koji - glavna stvar je da je sve zajedno proces destilacije izvor u firmver). Kada sve bude u redu, pogledamo greške sa modifikacijama: popravimo sve što je važno, ostavimo ostalo. Na primjer, ne trebaju nam izlazi SEO i TS brojača, a preostalih 15 bitova paralelnog izlaza registra pomaka također nisu potrebni, ali se kune sa varijacijama. Ako se zaklinje brisanjem da mi to želimo, to znači da želimo da nešto nije u redu. Ako nam sve odgovara (i sintisajzeru), divimo se dalje u izvještajima: koliko je resursa potrošeno, koje frekvencije takta su dostupne... Ako je opet sve u redu, onda je vrijeme da simuliramo kolo i uvjerimo se da je zapravo radi u skladu sa zadatkom. Predlažem da se izvrši simulacija nakon provjere vremena zbog činjenice da se ponekad cijeli krug mora protresti kako bi se dobila željena frekvencija takta, što, naravno, može utjecati na rezultat ...

Dakle, simulacija: na kartici Dizajn (u lijevom oknu) odaberite simulaciju (slika 7).


Rice. 7
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

U nastavku, u procesima, umjesto procesa sinteze i rutiranja, pojavio se proces Simulate Behavioral Model, dvaput kliknite na njega - pokreće se simulator u kojem vidimo naše signale (ne samo ulazno-izlazne, već i srednje) (Sl. 8).


Rice. osam
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Pređite kursorom miša preko dugmadi, pročitajte komentare na dugmadima. Postavljamo vrijeme koraka simulacije (slika 9) i početne vrijednosti ulaznih signala, odmah prilagođavamo signale sata (nećemo simulirati i mijenjati sat svakih 5 ns).


Rice. devet
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Korak u vremenu manipulisanjem ulazima i (ako je potrebno) korakom simulacije, dobijamo vremenski dijagram (slika 10).


Rice. deset
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Uvjeravamo se da sve radi kako je predviđeno (ili nastavljamo s otklanjanjem grešaka u krugu) i prelazimo na sljedeći korak - distribuciju izlaza i ulaza duž nogu mikro kruga. Da biste to učinili, dodajte još jednu izvornu datoteku (slika 11), odnosno datoteku s ograničenjima implementacije.


Rice. jedanaest
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Propisujemo "pinout mikrokola" (slika 12), ovdje propisujemo zahtjeve za frekvencije takta. A sada dolazimo do nijansi povezanih sa signalima sata. Činjenica je da taktni signali moraju doći na takozvane globalne linije - linije koje prolaze kroz cijeli mikro krug, ostali vodovi su lokalne prirode i od bloka do bloka prolaze kroz logiku prebacivanja. Čip XC95288XL u TQ144 paketu ima 3 takve linije, a spojene su na noge 30, 32, 38. Ostatak signala se može povezati na bilo koje I/O pinove.


Rice. 12
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Ponovo kliknite dvaput na Implement Design, sačekajte, pročitajte komentare na upozorenjima sa greškama i idite na izveštaje o pinoutu (Sl. 13) i vremenima (Slika 14); vodimo računa da nam sve odgovara, i imamo sreću u obliku file% project_name% .jed.


Rice. 13
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)


Rice. četrnaest
(na sliku je moguće kliknuti za povećanje, otvoriće se u novom prozoru)

Datoteka firmvera je spremna. Recimo da je i uređaj. Povezujemo JTAG kabl na računar i dvaput kliknemo na Configure Target Device. Uslužni program firmvera (Impact.exe) će se pokrenuti, u stvari, kada napravite nekoliko uređaja za flešovanje serije, možete se ograničiti na pokretanje samo jednog od njih. Kreiramo novi projekat (ovo je projekat za firmver program), puštamo ga da automatski pronađe programator i povezano mikrokolo, pokazujemo datoteku firmvera i kliknemo na Program. Čekamo nekoliko desetina sekundi, vidimo natpis da je sve u redu - uređaj je spreman.


Polje zasađeno nizovima programabilnih kapija

Započinjemo kurs predavanja o tome šta je programabilna logika i kako da je počnemo koristiti za dobrobit sebe i naših komšija...

FPGA- tako se na ruskom zove IT. NS programabilan L ogic I integralni WITH hema.
Na buržoaski način, zvuči malo drugačije - FPGA - F polje of P rogramable G jeo A rrays. Doslovno se ovo prevodi kao "Polje zasađeno nizovima programabilnih kapija."
Da budemo malo ozbiljniji, možemo je nazvati "Programabilna matrica kapije"

Šta je ventil?
Tacno, u podrumu je takva glupost na vodovodnoj cijevi da ako je zeznete cela kuca ce ostati bez vode. Ukratko, to je nešto što se može zatvoriti i otvoriti.

Dakle, neka vam to bude otkrovenje, ali svako mikrokolo se sastoji od kapija. Istina, nisu baš slične onome što ti i ja imamo u podrumu. Ali rade isto - otvaraju i zatvaraju.

Ventil je elementarna komponenta svakog digitalnog mikrokola.

Čak i najsofisticiraniji supermegaprocesor se sastoji od kapija. U njemu ih ima mnogo, jako puno, samo jedno cijelo more. Naravno, u svakom mikrokrugu, kapije su povezane na određeni način. Zapravo, funkcionalnost mikrokola ovisi o tome kako su spojeni.

U konvencionalnim mikro krugovima, shema povezivanja ventila se postavlja tijekom proizvodnje, a kasnije se više ne može mijenjati.
FPGA nam omogućava da sami podesimo ovo kolo i mijenjamo ga po želji, već tokom "života" mikrokola. Dovoljno je samo nacrtati kolo na računaru i pomoću programatora ga ubaciti u FPGA mikrokolo.

Ovo je općenito.

U stvari, sve je mnogo komplikovanije :) Pogledajte sliku


Ovo je jedna makroćelija - Macrocell na njihovom jeziku.
Svako FPGA mikrokolo se sastoji od takvih makro ... makro ćelija. Kao što možete vidjeti iz dijagrama makroćelije, sastoji se od tabele za traženje ( LUT) - "Tabela za traženje", a takođe, okidač sa sinhronim i asinhronim ulazima i malo logike na ulazima okidača. Zapravo, samo je LUT programiran. Kao što vidite, ima 4 ulaza i jedan izlaz. Ovaj izlaz se može primijeniti ili direktno na izlaz makro ćelije (Q0) ili na sinhroni ulaz podataka flip-flopa (D).

LUT nije ništa drugo do ROM sa 16 1-bitnih ćelija. Kada se određena kombinacija digitalnih signala primeni na LUT ulaze (D0 ... D3), on ih percipira kao adresu i na toj adresi izlazi sadržaj ćelije.

Općenito, bilo koje logičko kolo sa 4 ulaza (ili manje) i jednim izlazom može se opisati tablicom istinitosti od 16 redova. Na primjer, uzmimo samo tako jednostavnu shemu i napišemo tablicu istinitosti za nju:

Tabela istinitosti opisuje logički nivo izlaza kola (Q) za sve moguće kombinacije signala na ulazima (D0… D3). Slično, u LUT-u, svaka kombinacija ulaznih signala (čitaj - svaka ROM adresa) ima svoj pridruženi izlazni signal. To jest, tabela istinitosti kola koju želimo da vidimo na svom mestu je ušivena u LUT. To je tako jednostavno!

Ako kolo sadrži više od 4 ulaza ili više od 1 izlaza, koriste se LUT-ovi od nekoliko makroćelija.

clear = "sve">

Ali najvažnija stvar je okidač. Uostalom, kao što znate (ili možda još ne znate), svi registri, brojači i mnogi drugi elementi digitalne tehnologije sastoje se od okidača. Dakle, broj makroćelija u FPGA čipu određuje broj okidača. I obrnuto :) Dakle, prilikom odabira mikrokola za bilo koji projekt, prvo morate procijeniti koliko će okidača biti u krugu i uzeti s marginom ...

Slika ispod prikazuje blok dijagram čipova serije EPM7000 iz Altera Ova slika je preuzeta iz tablice sa podacima https://www.altera.com/literature/ds/m7000.pdf Odnosi se na EPM7032, EPM7064, EPM7096 čipove. Dakle, posljednje dvije cifre u imenu označavaju tačno broj makro ćelija u mikrokolu.


Kao što možete vidjeti iz dijagrama, makroćelije se kombinuju u "blokove logičkih nizova" (LAB - Logic Array Block).
Ovi blokovi su međusobno povezani preko programabilnog niza interkonekcija (PIA).
Osim toga, LAB-ovi su povezani na pinove mikrokola preko I/O kontrolnih blokova.

Prilikom treptanja, svaki od blokova ima svoje "ušivene" informacije:
- LUT-ovi su programirani u makroćelijama,
- informacije o internim interkonekcijama su spojene u PIA,
- informacije o priključcima na noge mikrokola su ušivene u I/O kontrolni blok.

Ozbiljno, "firmware" FPGA se zove "učitavanje konfiguracije".

Šta mislite da ćemo koristiti za učitavanje konfiguracije???
Pa, naravno, sa dobrim starim Byte Blasterom! :) Bajt blaster je univerzalna stvar :) Ovdje sam opisao kako se to najdetaljnije napraviti

Top srodni članci