plisin käyttö nykyaikaisissa laitteissa. Uutis- ja analyyttinen portaali "elektroniikan aika" Esimerkkejä suurten FPGA-projektien suunnittelusta

Kuvittele, että prosessori sen sijaan että suorittaisi tiettyä käskysarjaa, rakennetaan uudelleen jokaiselle ohjelmalle ja muutetaan algoritmi suoraan laitteistoksi. Näin FPG:t toimivat. Tämän päivän artikkelissa selitän, kuinka tämä on edes mahdollista, ja esittelen sinulle erilaisia ​​FPGA-suunnittelumenetelmiä.

Aloittaaksesi sinun on ymmärrettävä hieman ASIC:ien toiminnan digitaalista logiikkaa, mutta niiden aloittaminen on erittäin vaikeaa ja kallista, ja on parempi aloittaa sen sijaan FPGA: lla.

Mikä on FPGA?

FPGA tarkoittaa kentällä ohjelmoitavaa porttitaulukkoa (käyttäjän ohjelmoitavat porttitaulukot, FPGA). Yleisemmässä tapauksessa niitä kutsutaan FPGA-ohjelmoitaviksi integroiduiksi logiikkapiireiksi.

FPGA:n avulla voit sanan varsinaisessa merkityksessä suunnitella digitaalisia mikropiirejä istuessasi kotona edullinen debug board pöydällä ja kehittäjäohjelmisto useilla tuhansilla vihreillä ruplilla. Mutta on myös ilmaisia ​​vaihtoehtoja. Huomaa: se on suunnittelua, ei ohjelmointia, koska lähdössä saamme fyysisen digitaalisen piirin, joka suorittaa tietyn algoritmin laitteistotasolla, eikä prosessorin ohjelmaa.

Se toimii seuraavasti. Siellä on valmis painettu piirilevy, jossa on sarja liitäntöjä, jotka on kytketty kortille asennettuun FPGA-siruun, vaikkapa sellainen siisti datakeskuksen kortti tai tämä debug-kortti koulutukseen.

Ennen kuin määritämme FPGA:n, sirun sisällä ei yksinkertaisesti ole logiikkaa rajapintojen tietojen käsittelemiseksi, ja siksi mikään ei tietenkään toimi. Mutta suunnittelun tuloksena luodaan laiteohjelmisto, joka FPGA:han lataamisen jälkeen luo tarvitsemamme digitaalisen piirin. Tällä tavalla voit luoda 100G Ethernet-ohjaimen, joka vastaanottaa ja käsittelee verkkopaketteja.

FPGA:n tärkeä ominaisuus on kyky määrittää uudelleen. Oletetaan nyt, että tarvitsemme 100G Ethernet-ohjaimen, ja viikon päästä voidaan samalla levyllä toteuttaa neljä itsenäistä 25G Ethernet-liitäntää.

Markkinoilla on kaksi johtavaa FPGA-sirun valmistajaa: tunnettu Intel ja Xilinx. He hallitsevat 58 % ja 42 % markkinoista. Xilinxin perustajat keksivät ensimmäisen FPGA-sirunsa vuonna 1985. Intel tuli markkinoille melko äskettäin - vuonna 2015 absorboimalla Alteran, joka perustettiin samaan aikaan Xilinxin kanssa. Altera- ja Xilinx-teknologiat ovat monella tapaa samankaltaisia, samoin kuin kehitysympäristöt. Useimmiten olen työskennellyt Xilinx-tuotteiden parissa, joten älä ylläty nähdessäsi hänet jatkuvasti mainittaessa artikkelissa.

FPGA:ita käytetään laajasti eri aloilla: kulutuselektroniikassa, tietoliikennelaitteissa, datakeskuksissa käytettävät kiihdytinlevyt, robotiikka, ASIC-prototyyppi. Käyn alla pari esimerkkiä.

Tutustumme myös laitteiston uudelleenkonfiguroinnin mahdollistavaan tekniikkaan, tutustumme suunnitteluprosessiin ja analysoimme yksinkertaisen esimerkin laitteistolaskurin toteuttamisesta Verilog-kielellä. Jos sinulla on FPGA-virheenkorjauslevy, sinun pitäisi pystyä kopioimaan tämä itse. Jos korttia ei ole, voit silti tutustua Verilogiin simuloimalla piirin toimintaa tietokoneellasi.

Kuinka FPGA toimii

FPGA-siru on sama mukautettu ASIC-siru, joka koostuu samoista transistoreista, joita käytetään kokoamaan kiikkuja, rekistereitä, multipleksereitä ja muita logiikkaelementtejä tavanomaisia ​​piirejä varten. Tietenkin on mahdotonta muuttaa näiden transistorien kytkentäjärjestystä. Mutta arkkitehtonisesti mikropiiri on rakennettu niin ovelalla tavalla, että voit muuttaa signaalien vaihtoa suurempien lohkojen välillä: niitä kutsutaan CLB:iksi - ohjelmoitaviksi logiikkalohkoiksi.

Voit myös muuttaa CLB:n suorittamaa logiikkatoimintoa. Tämä saavutetaan johtuen siitä, että koko siru on täynnä konfiguraatiomuistisoluja Staattinen RAM. Jokainen tämän muistin bitti joko ohjaa jonkinlaista signaalinvaihtonäppäintä tai on osa CLB:n toteuttaman loogisen funktion totuustaulukkoa.

Koska konfigurointimuisti on rakennettu Static RAM -tekniikalla, ensinnäkin, kun FPGA on päällä, mikropiiri on konfiguroitava, ja toiseksi mikropiiri voidaan konfiguroida uudelleen lähes äärettömän monta kertaa.

Erittäin yksinkertaistettu 2D-sirurakenne ilman konfigurointimuistia

CLB:t sijaitsevat kytkentämatriisissa, jotka määrittelevät liitännät CLB:iden tuloille ja ulostuloille.

Kytkentämatriisikaavio

Jokaisessa johtimien risteyksessä on kuusi kytkentänäppäintä, joita ohjaavat omat konfigurointimuistisolunsa. Avaamalla jotkin ja sulkemalla toiset on mahdollista saada aikaan erilainen signaalien kytkentä CLB:iden välillä.

CLB

CLB koostuu hyvin yksinkertaisesti lohkosta, joka määrittelee useiden argumenttien Boolen funktion (se on nimeltään hakutaulukko - Look Up Table, LUT) ja liipaisimesta (flip-flop, FF). Nykyaikaisissa FPGA:issa LUT:ssa on kuusi tuloa, mutta kuvassa on kolme yksinkertaisuuden vuoksi. LUT-lähtö syötetään CLB-lähtöön joko asynkronisesti (suoraan) tai synkronisesti (järjestelmän kellolla toimivan FF-kiikun kautta).

LUT:n toteutusperiaate

On mielenkiintoista tarkastella LUT-toteutuksen periaatetta. Oletetaan, että meillä on jokin Boolen funktio y = (a & b) | ~c. Sen kaavamainen esitys ja totuustaulukko on esitetty kuvassa. Funktiolla on kolme argumenttia, joten se ottaa 2^3 = 8 arvoa. Jokainen niistä vastaa omaa tulosignaaliyhdistelmäään. Nämä arvot laskee FPGA-laiteohjelmiston kehitysohjelma ja kirjoitetaan erityisiin konfigurointimuistisoluihin.

Kunkin solun arvo syötetään sen LUT-lähtömultiplekserin sisääntuloon, ja Boolen funktion tuloargumentteja käytetään valitsemaan yksi tai toinen funktion arvo. CLB on tärkein FPGA-laitteistoresurssi. CLB:n määrä nykyaikaisissa FPGA-siruissa voi vaihdella ja riippuu sirun tyypistä ja kapasiteetista. Xilinxillä on CLB-kiteitä noin neljästä tuhannesta kolmeen miljoonaan.

CLB:n lisäksi FPGA:n sisällä on useita tärkeitä laitteistoresursseja. Esimerkiksi laitteiston kertolasku-keräyslohkot tai DSP-lohkot. Jokainen niistä osaa kertoa ja lisätä 18-bittisiä lukuja joka syklissä. Huippukiteissä DSP-lohkojen määrä voi ylittää 6000.

Toinen resurssi on lohkot sisäinen muisti(Estä RAM, BRAM). Jokainen lohko voi tallentaa 2 kt. Tällaisen muistin kokonaiskapasiteetti voi kristallista riippuen olla 20 kilotavua - 20 megatavua. Kuten CLB:t, BRAM- ja DSP-lohkot on yhdistetty kytkentämatriisilla ja läpäisevät koko sirun. Linkittämällä CLB-, DSP- ja BRAM-lohkot voidaan saada erittäin tehokkaita tietojenkäsittelymenetelmiä.

FPGA:n edut

Ensimmäinen Xilinxin vuonna 1985 luoma FPGA-siru sisälsi vain 64 CLB:tä. Tuolloin transistorien integrointi siruihin oli paljon nykyistä alhaisempaa, ja "löysä logiikka" -siruja käytettiin usein digitaalisissa laitteissa. Rekistereille, laskureille, multipleksereille, kertoimille oli erilliset sirut. Alla tietty laite luotiin painettu piirilevy, jolle nämä matalan integroinnin mikropiirit asennettiin.

FPGA:n käyttö mahdollisti tästä lähestymistavasta luopumisen. Jopa 64 CLB FPGA säästää tilaa painetulla piirilevyllä, ja uudelleenkonfiguroinnin saatavuus lisäsi mahdollisuuden päivittää laitteiden toiminnallisuutta valmistuksen jälkeen käytön aikana, kuten sanotaan "kentällä" (siis nimi - kenttäohjelmoitava porttiryhmä) ).

Koska FPGA:n sisään voidaan luoda mikä tahansa laitteiston digitaalinen piiri (pääasia, että resursseja on tarpeeksi), yksi FPGA:n tärkeistä sovelluksista on ASIC-sirujen prototyyppien tekeminen.

ASIC-kehitys on erittäin monimutkaista ja kallista, virhekustannukset ovat erittäin korkeat, ja testauslogiikka on kriittinen. Siksi yksi kehitysvaiheista, jo ennen piirin fyysistä topologiaa koskevan työn aloittamista, oli sen prototyyppien tekeminen yhdelle tai useammalle FPGA-sirulle.

ASIC-kehitystä varten julkaistaan ​​erikoiskortteja, jotka sisältävät monia toisiinsa kytkettyjä FPGA:ita. Mikrosirun prototyyppi toimii paljon alhaisemmilla taajuuksilla (ehkä kymmeniä megahertsejä), mutta säästää rahaa ongelmien ja vikojen tunnistamisessa.

Kuitenkin mielestäni FPGA:lla on mielenkiintoisempia sovelluksia. FPGA:n joustava rakenne mahdollistaa laitteistopiirien toteuttamisen nopeaa ja rinnakkaista tietojenkäsittelyä varten sekä mahdollisuuden muuttaa algoritmia.


Laitteistoalustojen vertailu

Ajatellaanpa peruseroa CPU:n, GPU:n, FPGA:n ja ASIC:n välillä. Prosessori on universaali, sillä voit käyttää mitä tahansa algoritmia, se on joustavin ja helpoin käyttää ohjelmointikielten ja kehitysympäristöjen valtavan määrän vuoksi.

Samaan aikaan CPU-käskyjen monipuolisuuden ja peräkkäisen suorituksen ansiosta suorituskyky laskee ja piirin virrankulutus kasvaa. Tämä johtuu siitä, että jokaista hyödyllistä aritmeettista toimintoa kohden CPU suorittaa monia lisätoimintoja, jotka liittyvät käskyjen lukemiseen, tiedon siirtämiseen rekisterien ja välimuistin välillä sekä muihin eleisiin.

Toisella puolella on ASIC. Tällä alustalla vaadittu algoritmi on toteutettu laitteistossa transistorien suoran kytkennän vuoksi, kaikki toiminnot liittyvät vain algoritmin suorittamiseen, eikä sitä voi muuttaa. Tästä johtuen alustan maksimaalinen suorituskyky ja pienin virrankulutus. Mutta ASIC:in ohjelmointi on mahdotonta.

CPU:n oikealla puolella on GPU. Alun perin nämä sirut suunniteltiin grafiikan käsittelyyn, mutta nyt niitä käytetään myös laskennalliseen louhintaan. yleinen tarkoitus. Ne koostuvat tuhansista pienistä laskentaytimistä ja suorittavat rinnakkaisia ​​toimintoja datajoukolle.

Jos algoritmi voidaan rinnastaa, GPU: lla on mahdollista saavuttaa merkittävä kiihtyvyys prosessoriin verrattuna. Toisaalta peräkkäiset algoritmit toteutetaan huonommin, joten alusta on vähemmän joustava kuin CPU. Lisäksi GPU-kehitystä varten sinulla on oltava erityisiä taitoja, tunnettava OpenCL tai CUDA.

Lopuksi FPGA. Tässä alustassa yhdistyvät ASIC:ien tehokkuus ja mahdollisuus muuttaa ohjelmaa. FPGA:t eivät ole universaaleja, mutta on olemassa joukko algoritmeja ja tehtäviä, jotka näyttävät paremman suorituskyvyn niissä kuin suorittimissa ja jopa GPU:issa. FPGA:n kehitystyö on monimutkaisempaa, mutta uudet kehitystyökalut pienentävät tätä eroa.

FPGA:n ratkaiseva etu on kyky käsitellä tietoja niiden saapumisnopeudella minimaalisella vastausviiveellä. Kuvittele esimerkkinä älykäs verkkoreititin, jossa on suuri määrä portteja: kun Ethernet-paketti saapuu johonkin sen porteista, monet säännöt on tarkistettava ennen lähtöportin valintaa. Saatat joutua muuttamaan joitakin paketin kenttiä tai lisäämään uusia.

FPGA:n avulla voit ratkaista tämän ongelman välittömästi: paketin tavut ovat juuri alkaneet saapua mikropiiriin verkkorajapinnasta ja sen otsikkoa analysoidaan jo. Prosessorien käyttö voi hidastaa merkittävästi verkkoliikenteen käsittelynopeutta. On selvää, että voit tehdä mukautetun ASIC-sirun reitittimille, jotka toimivat tehokkaimmin, mutta entä jos pakettien käsittelyn sääntöjä on muutettava? Vain FPGA voi auttaa sinua saavuttamaan vaaditun joustavuuden yhdistettynä korkeaan suorituskykyyn.

Siten FPGA:ita käytetään, kun tarvitaan korkeaa prosessointikykyä, nopeinta vasteaikaa ja alhaista virrankulutusta.

FPGA pilvessä

Pilvipalveluissa FPGA:ita käytetään nopeaan laskemiseen, verkkoliikenteen kiihdyttämiseen ja tietoryhmien käyttöön. Tämä sisältää myös FPGA:n käytön korkean taajuuden kaupankäynnissä pörsseissä. FPGA-levyt asetetaan palvelimille PCI Express ja Intelin (Altera) tai Xilinxin valmistama optinen verkkoliitäntä.

FPGA:t sopivat erinomaisesti salausalgoritmeihin, DNA-sekvenssien vertailuun ja tieteellisiin tehtäviin, kuten molekyylidynamiikkaan. Microsoft on pitkään käyttänyt FPGA:ta Bing-hakupalvelun nopeuttamiseen sekä Software Defined Networkingin järjestämiseen Azure-pilven sisällä.

Koneoppimisbuumi ei ole myöskään ohittanut FPGA:ta. Xilinx ja Intel tarjoavat FPGA-pohjaisia ​​työkaluja työskentelyyn syvien hermoverkkojen kanssa. Niiden avulla voit saada FPGA-laiteohjelmiston, joka toteuttaa tietyn verkon suoraan puitteista, kuten Caffe ja TensorFlow.

Lisäksi voit kokeilla kaikkea tätä poistumatta kotoa ja käyttämällä pilvipalveluita. Esimerkiksi Amazonissa voit vuokrata virtuaalikone pääsy FPGA-levyyn ja kaikkiin kehitystyökaluihin, mukaan lukien koneoppiminen.

FPGA reunassa

Mitä muuta mielenkiintoista tekemistä FPGA:lla on? Mikseivät he vain tee sitä! Robotiikka, miehittämättömät ajoneuvot, droonit, tieteelliset instrumentit, lääketieteelliset laitteet, tilaustyöt mobiililaitteet, älykkäät turvakamerat ja niin edelleen.

Perinteisesti FPGA:ita käytettiin yksiulotteisten signaalien digitaaliseen käsittelyyn (ja kilpaili DSP-prosessorien kanssa) tutka-laitteissa, radiosignaalin lähetin-vastaanottimissa. Sirujen lisääntyvän integroinnin ja suorituskyvyn lisääntyessä FPGA-alustoja on käytetty yhä enemmän korkean suorituskyvyn laskennassa, esimerkiksi kaksiulotteisten signaalien käsittelyssä "pilven reunalla" (reunalaskenta).

Tämä konsepti on helpoimmin ymmärrettävissä käyttämällä esimerkkiä liikenneanalyysikamerasta, jossa on rekisterikilven tunnistaminen. Voit ottaa kameran, jolla on mahdollisuus lähettää videota Ethernetin kautta ja käsitellä suoratoistoa etäpalvelimella. Kun kameroiden määrä kasvaa, myös verkon kuormitus kasvaa, mikä voi johtaa järjestelmävirheisiin.

Sen sijaan rekisterikilpien tunnistus kannattaa toteuttaa suoraan videokameran runkoon asennetulla laskimella ja siirtää rekisterikilvet pilveen tekstimuodossa. Voit tehdä tämän jopa suhteellisen edullisilla pienitehoisilla FPGA:illa pärjätäksesi akulla. Samalla on edelleen mahdollista muuttaa FPGA:n logiikkaa esimerkiksi muuttaessaan rekisterikilpien standardia.

Mitä tulee robotiikkaan ja droneihin, tällä alueella on erityisen tärkeää täyttää kaksi ehtoa - korkea suorituskyky ja alhainen virrankulutus. FPGA-alusta sopii täydellisesti ja sitä voidaan käyttää erityisesti lennonohjaimien luomiseen droneille. Jo nyt tehdään UAV:ita, jotka voivat tehdä päätöksiä lennossa.

FPGA-projektin kehittäminen

Suunnittelutasoja on erilaisia: matala, lohko ja korkea. Matalalla tasolla käytetään kieliä, kuten Verilog tai VHDL, joissa ohjaat kehitystä rekisterin siirtotasolla (RTL). Tässä tapauksessa muodostat rekistereitä, kuten prosessorissa, ja määrittelet logiikkafunktiot, jotka muuttavat niiden välistä dataa.

FPGA-piirit toimivat aina tietyillä kellotaajuuksilla (yleensä 100-300 MHz), ja RTL-tasolla määrittelet piirin käyttäytymisen järjestelmän kellon sisällä. Tämä huolellinen työ johtaa tehokkaimpiin piireihin suorituskyvyn, FPGA-suuttimen resurssien kulutuksen ja virrankulutuksen suhteen. Mutta täällä vaaditaan vakavia piiritaitoja, eikä prosessi ole nopea niiden kanssa.

Lohkotasolla yhdistät periaatteessa valmiita suuria lohkoja, jotka suorittavat tiettyjä toimintoja saadaksesi tarvitsemasi system-on-chip (system-on-chip) toiminnallisuuden.

Suunnittelun korkealla tasolla et enää hallitse dataa jokaisella kellojaksolla, vaan keskityt algoritmiin. On olemassa kääntäjiä tai kääntäjiä C- ja C++-kielistä RTL-tasolle, kuten Vivado HLS. Se on melko älykäs ja antaa sinun kääntää laajan luokan algoritmeja laitteistotasolle.

Tämän lähestymistavan tärkein etu RTL-kieliin verrattuna on kehityksen ja erityisesti algoritmien testauksen nopeus: C++-koodi voidaan ajaa ja todentaa tietokoneella, ja se on paljon nopeampi kuin algoritmien muutosten testaus RTL-tasolla. Tietysti joudut maksamaan mukavuudesta - piiri ei ehkä ole niin nopea ja vie enemmän laitteistoresursseja.

Usein olemme valmiita maksamaan tämän hinnan: jos käytät kääntäjää oikein, tehokkuus ei kärsi paljon, ja nykyaikaisissa FPGA: issa on tarpeeksi resursseja. Maailmassamme, jossa on kriittinen aika-indikaattori markkinoille, tämä osoittautuu oikeutetuksi.

Usein kaikki kolme kehitystyyliä on yhdistettävä yhdeksi malliksi. Oletetaan, että meidän on tehtävä laite, jonka voisimme rakentaa robotiksi ja antaa sille kyvyn tunnistaa videovirran kohteet - esimerkiksi liikennemerkit. Otetaan videoanturisiru ja liitetään se suoraan FPGA:han. Virheenkorjaukseen voimme käyttää HDMI-näyttö, liitetty myös FPGA:han.

Kameran kehykset siirretään FPGA:lle anturin valmistajan ennalta määrittämän rajapinnan kautta (USB ei toimi tässä), käsitellään ja näytetään näytöllä. Kehysten käsittelyyn tarvitaan kehyspuskuri, joka yleensä sijaitsee ulkoisessa DDR muisti asennettu piirilevylle FPGA-sirun viereen.


Tyypillinen FPGA-suunnittelun lohkokaavio

Jos videoanturin valmistaja ei tarjoa Interface IP:tä FPGA-sirullemme, meidän on kirjoitettava se itse RTL-kielellä laskemalla kellot, bitit ja tavut tiedonsiirtoprotokollan spesifikaatioiden mukaisesti. Esikäsittely-, DDR-ohjain- ja HDMI-IP-lohkot, otamme todennäköisesti valmiit ja yhdistämme niiden liitännät. Ja HLS-lohko, joka suorittaa saapuvan tiedon haun ja käsittelyn, voimme kirjoittaa C ++ -kielellä ja lähettää Vivado HLS:n avulla.

Todennäköisesti tarvitsemme vielä jonkinlaisen valmiin liikennemerkkitunnistimen ja luokitinkirjaston, joka on sovitettu käytettäväksi FPGA:ssa. Tässä esimerkissä annan tietysti suuresti yksinkertaistetun suunnitteluvuokaavion, mutta se heijastaa työn logiikkaa oikein.

Harkitse suunnittelupolkua RTL-koodin kirjoittamisesta konfigurointitiedoston lataamiseen FPGA:han.

Suunnittelupolku

Joten kirjoitat RTL-koodia, joka toteuttaa tarvitsemasi skeeman. Ennen kuin testaat sen oikealla laitteistolla, sinun on varmistettava, että se on oikea ja ratkaisee oikein vaaditun ongelman. Tätä varten käytetään RTL-mallinnusta tietokoneen simulaattorissa.

Otat piirisi, joka on toistaiseksi edustettuna vain RTL-koodissa, ja asetat sen virtuaalipenkkiin, jossa syötät digitaalisten signaalien sarjoja piirin tuloihin, rekisteröit lähtökaavioita, lähtösignaalien aikariippuvuuksia ja vertaat odotettuihin tuloksiin. . Yleensä löydät virheet ja palaat RTL:n kirjoittamiseen.

Lisäksi loogisesti varmennettu koodi syötetään syntetisaattoriohjelman tuloon. Se muuntaa piirin tekstikuvauksen linkitetyksi luetteloksi digitaalisista elementeistä kirjastosta, joka on saatavilla tietylle FPGA-sirulle. Tämä luettelo näyttää elementtejä, kuten LUT:t, triggerit ja niiden väliset linkit. Tässä vaiheessa elementtejä ei ole vielä sidottu tiettyihin laitteistoresursseihin. Tätä varten sinun on asetettava rajoituksia (Constraints) piirille - erityisesti määritettävä, mitkä FPGA-sirun fyysiset I / O-nastat on kytketty piirisi loogisiin tuloihin ja lähtöihin.

Nämä rajoitukset edellyttävät myös, että määrität, millä kellonopeuksilla piirin tulee toimia. Syntetisaattorin lähtö ja rajoitustiedosto annetaan toteutusprosessorille, joka käsittelee mm. Paikka ja Reitti.

Place-prosessi sitoo jokaisen vielä persoonattoman elementin verkkoluettelosta tiettyyn elementtiin FPGA-sirun sisällä. Seuraavaksi alkaa toimia Route-prosessi, joka yrittää löytää näiden elementtien optimaalisen yhteyden FPGA-kytkentämatriisin vastaavaa konfiguraatiota varten.

Paikka ja reitti toimivat piirille asettamiemme rajoitusten perusteella: I/O-nastat ja kellonopeus. Kellojaksolla on erittäin vahva vaikutus toteutukseen: se ei saa olla pienempi kuin kriittisen piirin logiikkaporttien aikaviive kahden peräkkäisen kiikun välillä.

Usein tätä vaatimusta ei voida täyttää heti, ja sitten on palattava alkuvaiheeseen ja vaihdettava RTL-koodi: esimerkiksi yritä vähentää logiikkaa kriittisessä ketjussa. Kun toteutus on suoritettu onnistuneesti, tiedämme mitkä elementit ovat missä ja miten ne on yhdistetty.

Vasta sen jälkeen binaarisen FPGA-laiteohjelmistotiedoston luonti alkaa. On vielä ladattava se todelliseen laitteistoon ja tarkistettava, toimiiko se odotetulla tavalla. Jos tässä vaiheessa ilmenee ongelmia, se tarkoittaa, että mallinnus oli epätäydellinen ja tässä vaiheessa kaikkia virheitä ja puutteita ei ole poistettu.

Voit palata simulointivaiheeseen ja simuloida epänormaalia tilannetta, ja jos tämä ei toimi, ääritapauksissa virheenkorjausmekanismi tarjotaan suoraan käynnissä olevaan laitteistoon. Voit määrittää, mitä signaaleja haluat seurata ajan mittaan, ja kehitysympäristö luo ylimääräisen logiikka-analysaattoripiirin, joka sijoitetaan sirulle suunnittelupiirisi viereen, muodostaa yhteyden kiinnostaviin signaaleihin ja tallentaa niiden arvot ajan myötä. Haluttujen signaalien tallennetut ajoituskaaviot voidaan ladata tietokoneelle ja analysoida.

FPGA-PROJEKTIN TOTEUTUS

Kun logiikkapiiri on työstetty toiminnallisen mallintamisen avulla, se on asetettava sirulle. Simuloi sitten piiri ottaen huomioon elementtien todelliset viiveet, jotka saadaan piirin asettamisen jälkeen sirulle. Korjaa saatuja ratkaisuja tarvittaessa. Sen jälkeen piiri ladataan FPGA:han ja testataan jalustalla.

Riisi. 82. Digitaalisen laitteen suunnittelun vaiheet FPGA:lle

FPGA-suunnittelun päävaiheet (luennoista):

    Laitekaavio kehitetään ja syötetään XILINX:iin.

    TOTEUTUS suoritetaan (käännös, piirin muodostus poimimalla kirjastoelementtejä, optimointi, sijoittaminen sirulle).

    Ohjelmointi.

  1. assosiatiivinen muisti. Organisaatio, näytteenottomenetelmä, erot osoitemuistista.

Assosiatiivinen pääsy toteuttaa tiedon haun jonkin määritteen perusteella, ei sen sijainnin perusteella muistissa (osoite tai paikka jonossa). Täydellisimmässä versiossa kaikkien muistiin tallennettujen sanojen yhteensopivuus tietyn ominaisuuden kanssa tarkistetaan samanaikaisesti, esimerkiksi tiettyjen sanakenttien (tunnisteet - englanninkielisestä sanatunnisteesta) yhteensovittamiseksi syötesanan (tunnisteen osoite) määrittämän ominaisuuden kanssa. . Tulokselle annetaan sanat, jotka täyttävät määritteen. Sanojen antamisen kurinalaisuus, jos useat sanat täyttävät tunnisteen, sekä uuden tiedon kirjoittamisen kurinalaisuus voivat olla erilaisia. Assosiatiivisen muistin pääasiallinen sovellusalue nykyaikaisissa tietokoneissa on tiedon välimuisti.

Assosiatiivisissa tallennuslaitteissa tietoa etsitään kuhunkin muistisoluun tallennetun assosiatiivisen ominaisuuden avulla.

Maskirekisteriin kirjoitetaan sana, joka mahdollistaa assosiatiivisen ominaisuuden kaikkien tai vain joidenkin numeroiden kyselyn, maskin käyttö mahdollistaa hakualueen pienentämisen tai laajentamisen.

Tietoa haetaan rinnakkain kaikista soluista vertaamalla kyselyä kunkin solun assosiatiiviseen ominaisuuteen.

Hakutuloksen tuottaa erityinen yhdistelmäpiiri, joka tuottaa signaaleja, jotka osoittavat hakuehdot täyttävien sanojen puuttumisen, vain yhden sanan olemassaolon, useiden sanojen läsnäolon, joilla on tällainen assosiaatioominaisuus.

Hälytyssignaalien muodostamisen ja käsittelyn jälkeen ohjauspiiri lukee tarvittavat tiedot. Kirjoitettaessa vapaata solua etsitään varatun bitin arvon perusteella, tiedot kirjoitetaan ensimmäiseen löydettyyn vapaaseen soluun.

Varausbitin tarkistus suoritetaan asettamalla maskin n:s bitti (varattu bitti). Kun käytät ylimääräisiä yhdistelmäpiirejä assosiatiivisessa muistissa, voit suorittaa erilaisia ​​loogisia operaatioita, määrittää maksimi- tai vähimmäismäärän, sanojen määrän, joilla on sama assosiaatioominaisuus jne. Assosiatiivisen tallennuslaitteen muistisolujen tulee olla staattisen muistin elementtejä, assosiatiivisessa muistissa kaikkiin soluihin päästään samanaikaisesti, eikä niitä saa katkaista päivitysjaksoilla. Assosiatiivinen muisti on nopein, mutta erittäin kallis, koska se vaatii lisävertailupiirin, jonka avulla voit etsiä jokaista muistisolua. Siksi tällaista muistia ei yleensä käytetä puhtaassa muodossaan, ja nopeat välimuistityyppiset muistilaitteet toteutetaan yleensä osittain assosiatiivisina.

SISÄÄNtäysin assosiatiivista välimuisti (FACM, Fully Associated Cache Memory), jokainen solu tallentaa tiedot, ja "tunniste"-kenttään - tietojen täydellinen fyysinen osoite, josta tallennetaan kopio. Mahdollisen vaihdon aikana pyydetyn tiedon fyysistä osoitetta verrataan kaikkien solujen "tag"-kenttiin, ja jos ne täsmäävät, osumasignaali asetetaan mihin tahansa soluun.

Kun luetaan ja signaalin arvo Hit = 1, data lähetetään dataväylään, mutta jos osumia ei ole (Osuma = 0), niin päämuistista luettaessa data osoitteen kanssa on sijoitettu vapaaseen tai eniten käyttämättömään välimuistisoluun.

Kirjoitettaessa data osoitteen kanssa sijoitetaan pääsääntöisesti ensin välimuistiin (havaittuun soluun kohdassa Osuma = 1 ja vapaaksi kohdassa Osuma = 0). Tietojen kopiointi päämuistiin tapahtuu erityisen ohjaimen ohjauksessa, kun muistia ei ole.

FACM-tyyppinen muisti on erittäin monimutkainen laite ja sitä käytetään vain pienille kapasiteeteille, pääasiassa erikoissovelluksissa. Samalla tämäntyyppinen välimuisti tarjoaa suurimman toiminnallisen joustavuuden ja osoitteen konfliktittomuuden, koska mikä tahansa tietoyksikkö voidaan ladata mihin tahansa välimuistin soluun.

Luennoilta:

Assosiatiiviset tallennuslaitteet

Olennainen ero on se, että järjestelmää tiedon poimimiseksi niistä ei toteuta yksilöllinen osoite tiedon löytämiseksi, vaan jokin merkki, joka itse asiassa on osa etsittävää tietoa.

Tiedot

Tunniste on erottuva ominaisuus, jonka sattuman kautta saadaan tieto.

Yksinkertaistettu assosiatiivisen muistin kaavio:

Tallennusalue on osoitettavissa oleva muisti, jossa on numeroidut solut ja joka tallentaa tietoja ja tunnisteita.

Assosiatiiviseen muistiin pääsyä varten näyte halutusta tunnisteesta sijoitetaan pyyntörekisteriin. Vertailukaavio vertaa kyselyä. Vastaavuus muodostetaan täsmäysrekisteriin, jossa muistitunniste vastasi kuviota. Reaktiot ovat mahdollisia (ei vastaavuuksia; on vähintään yksi vastaavuus - tässä tapauksessa löydetty solu sijoitetaan tietorekisteriin; useita vastaavuuksia - COP:n on päätettävä, mitkä soluista saa käsitellä).

Sovellus: tietokanta, tietokanta, PC välimuistina.

FPGA:n KÄYTTÖ MODERNILAITTEISSA

Tupikov Pavel Andreevich

5. vuoden opiskelija, taiteen laitos OmSTU, Venäjä, Omsk

Nykyään ohjelmoitavia logiikkaa integroituja piirejä (FPGA) käytetään yhä enemmän erilaisissa nykyaikaisissa laitteissa, mikä johtuu siitä, että FPGA:illa on merkittäviä etuja perinteisiin digitaalisiin mikropiireihin verrattuna. Näitä etuja ovat:

· Tuotteen parempi suorituskyky.

· Tuotteen hintaa alennettu.

Tuotteen pienemmät mitat.

Tuotteen luotettavuus paranee (erillisten mikropiirien määrä vähenee)

Tuotteen joustavuus lisääntyy (FPGA voidaan aina ohjelmoida uudelleen)

FPGA-arkkitehtuurilla on monimutkainen rakenne (kuva 1)

Kuva 1. FPGA:n sisäinen rakenne

Kuten kuvasta 1 nähdään, pääosa FPGA:sta koostuu ohjelmoitavista logiikkalohkoista ja ohjelmoitavista sisäisistä liitännöistä.

Itse FPGA:n ohjelmointiprosessi (firmware) koostuu tarvittavien yhteyksien muodostamisesta laitteen tulojen ja lähtöjen välille.

Tähän mennessä maailmassa on kaksi johtavaa FPGA-valmistajaa. Nämä ovat amerikkalaisia ​​yrityksiä Xilinx ja Altera.

Jokainen yritys tarjoaa oman CAD:n työskentelyyn FPGA:n kanssa. Xilinx tarjoaa Xilinx Software Development Kit (SDK). Altera tarjoaa Max+Plus II:n ja Quartus II:n sekä ModelSim-simulointijärjestelmän.

Laiteohjelmisto-ohjelmien luomiseen käytetään yleensä laitteiden toiminnan kuvaamiseen tarkoitettuja kieliä, seuraavat kielet ovat yleisimpiä nykyään:

Verilog HDL.

VHDL on vaikein kieli oppia, mutta se on suurimmat mahdollisuudet abstraktion toiminnallisilla ja käyttäytymistasoilla, mutta sillä on vähemmän kykyjä rakenteellisella abstraktion tasolla kuin Verilog HDL, VITAL-kirjasto kehitettiin laajentamaan VHDL-kielen ominaisuuksia (kuva 2).


Kuva 2. Abstraktiokerrokset Verilog Ja VHDL

Esimerkki Verilog HDL -kielen toiminnasta on Mini-DiLab-telineen CYCLONE III EP3C5E1444C8N FPGA:lle toteutettu ohjelma, jonka yleiskuva on esitetty kuvassa 1. 3.


Kuva 3. Taulun yleiskuva Mini - DiLab

Tämä ohjelma toteuttaa led0-led7 LEDien peräkkäisen vaihdon, jolloin voidaan lisätä "valo"-liike pba- ja pbb-painikkeilla sekä ohjata kytkentänopeutta kytkimillä sw0, sw1.

//Ohjelman teksti

moduuli projekti( ulostulo johti, syöttö clk_25mhz, syöttö pba, syöttö pbb,

syöttö sw);

// Projektin sisäisten yhteyksien kohde

lanka s1;

lanka s2;

lanka s3;

// Muiden projektiin yhdistettyjen tiedostojen (alirutiinien) kutsuminen

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Laskurilaskuri_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.out(led), .in(s3));

loppumoduuli// ohjelman loppu

Aliohjelma tr

moduuli tr(out, set, res); // Luo ohjelma

// I/O-tehtävä

ulostuloreg ulos;

syöttö aseta;

syöttö res;

// alustus

alkukirjain

alkaa

ulos<= 1"d0;

// Pääohjelman koodi

aina @(negedge asettaa tai negedge res)

alkaa

jos(~(set))

ulos<= 1"d1;

muu

ulos<= 1"d0;

loppumoduuli // Ohjelman loppu

Aliohjelmalaskuri

moduuli laskuri(con, q, clk, ylös); // Ohjelma käynnistyy

ulostuloreg con;

ulostulo q = con;

syöttö ylös, clk;

// Pääohjelman koodi

aina @(poseeraa clk)

alkaa

jos(clk)

jos(ylös)

Con<= con - 1"d1;

muu

Con<= con + 1"d1;

loppumoduuli// Ohjelman loppu

Aliohjelma mx (multiplekseri)

moduuli mx( output.reg a, syöttö sisään, syöttö ladata);

// Pääohjelman koodi

aina @*

alkaa

tapaus(ladata)

2"b00: a = in;

2"b01: a = sisään;

2"b10: a = sisään;

2"b11: a = sisään;

päätekotelo

loppumoduuli // Ohjelman loppu

Aliohjelma dc3_8 (multiplekseri)

moduuli dc3_8(ulos, sisään); // Ohjelma käynnistyy

// I/O-tehtävä

output.reg ulos;

tulojohto sisään;

// Pääohjelman koodi

aina @*

alkaa

tapaus(sisään)

3"d0: ulos = 8"b11111110;

3"d1: ulos = 8"b11111101;

3"d2: ulos = 8"b11111011;

3"d3: ulos = 8"b11110111;

3"d4: ulos = 8"b11101111;

3"d5: ulos = 8"b11011111;

3"d6: ulos = 8"b10111111;

3"d7: ulos = 8"b01111111;

päätekotelo

loppumoduuli // Ohjelman loppu

Ohjelma toteutettiin CAD Quartus II:lla.

Ohjelman kääntämisen jälkeen kääntäjä ei luonut ohjelmaan ohjelman analysointiin ja syntaksiin liittyviä virheitä tai huomautuksia (kuva 4).


Kuva 4. Projektin viestiikkuna

Kääntäjän huomautukset osoittavat Quartus II:n lisenssin puuttumisen (koulutukseen käytettiin ohjelman ilmaista versiota) ja projektin mallintamiseen tarvittavien tiedostojen puuttumista.

RTL Tämän projektin rakenne on esitetty kuvassa. 5.


Kuva 5. Hankkeen toteutus ( RTL rakenne)

Kuten kuvasta näkyy. 6 tässä ohjelmassa vain pieni osa tämän FPGA:n ominaisuuksista on käytössä.

Kuva 6. Osa hankkeessa mukana olevasta FPGA:sta

Johtopäätökset: Ohjelmoitavia integroituja logiikkapiirejä käytetään monissa laitteissa. Niiden kanssa työskentelyn oppimiseksi on tarpeen sisällyttää radioelektronisten laitteiden suunnitteluun ja rakentamiseen liittyvien erikoisalojen koulutusohjelmaan perehtyneisyys laitteiston kuvauskieliin (Verilog HDL ja VHDL).

Bibliografia:

1. Grushevitzky R.I. Ohjelmalogiikan mikropiireihin perustuvien järjestelmien suunnittelu / R.I. Grushevitzky, A.X. Mursaev, E.P. Synkkä. Pietari: BHV Petersburg, 2002. - 608 s.

2. Kolomov D.A. Altra MAX+plus II:n ja Quartus II:n tietokoneavusteiset suunnittelujärjestelmät. Lyhyt kuvaus ja opetusohjelma / D.A. Kolomov, R.A. Myalk, A.A. Zobenko, A.S. Filippov. M.: IP RadioSoft, 2002. - 126 s.

3. Maxfield K. FPGA-suunnittelu. Nuoren taistelijan kurssi / K. Maxfield. M.: Kustantaja "Dodeka-XXI", 2007. - 408 s. (käännös englannista).

Lomien aikana tein Verilogiin pienen projektin, jota halusin kokeilla pitkään.

Projektin olemus on seuraava: FPGA:han on kytketty nopea (suhteellisen tietysti) ADC, jossa on kaksi kanavaa ja rinnakkaisliitäntä (14-16 bittiä kanavaa kohti). FPGA lukee tietoja ADC:stä ja tallentaa sen puskuriin (sisäiseen BRAM-muistiin). Kun puskuri on täynnä, lukeminen pysähtyy ja ulkoinen laite (mikro-ohjain) voi lukea puskurin tiedot SPI-liitännän kautta. Voit myös määrittää joitain parametreja SPI:n kautta (tätä käsitellään seuraavassa viestissä).

Projektitesti (klikkattava kuva).

Synteesitulos Cyclone IVE:lle

Syntetisoin tuloksen Quartus II:ssa Cyclone IVE -perheen FPGA:lle (EP4CE6E22A7). Tämä on yksi yksinkertaisimmista ja edullisimmista FPGA:ista QFP144-paketissa 6272 logiikkaelementeille. Sirun muistikapasiteetti on 30K * 9 bittiä. Käyttäjän nastat - 92.

siru EP4CE6E22A7
logiikkaelementit - 301 (5 %)
nastat - 41 (45 %)
muisti - 65536 bittiä (24%)
pahimman tapauksen taajuus (125 C) - 151 MHz.

Muisti 8 KB, tämä on itse asiassa puskuri, johon tiedot kirjoitetaan. Kahdella 16-bittisellä kanavalla saadaan 32 bittiä näytettä kohti ja 2048 näytettä. Päätin, että tämä riittää, vaikka puskuria voi laajentaa jopa koko volyymiksi.

Taajuus on varsin tyydyttävä, odotin, että kellotaajuus olisi 50 MHz ja ADC 25 MHz. Eli saadaan kolminkertainen taajuuden marginaali.

Logiikkaelementtien määrä on sellaiselle FPGA:lle melko merkityksetön, ts. Voit halutessasi kiinnittää sinne paljon muuta, varsinkin kun nastaa on jäljellä peräti 51.

Siellä on uudempi Cyclone 10 -perhe.

Synteesitulos syklonille 10

Valitsemme sirun 10CL006YE144C8G. Siinä on sama määrä portteja (6272) kuin Cyclone 4 -versiossa ja sama määrä muistia (30K x 9). Kotelo on sama kuin QFP144, käyttäjänappeja on vielä vähemmän - 89.

siru 10CL006YE144C8G
logiikkaelementit - 289 (5 %)
nastat - 41 (46 %)
muisti - 65536 bittiä (24%)
pahimman tapauksen taajuus (85 C) on 145,5 MHz.

On outoa, että projekti on tiivistynyt loogisten elementtien suhteen. Eli samalla logiikalla monimutkaisempi projekti sopii sykloni 10:een. Kaikki muu on suunnilleen samalla tasolla.

Herää järkevä kysymys: onko mahdollista säästää rahaa asentamalla toinen FPGA tai CPLD?

Kokeillaan FPGA MAX10:tä.

Synteesitulos MAX 10:lle

Tässä lukija (jos hän on aiheesta) voi huudahtaa: ei, se ei ole niin! MAX-perhe on CPLD, ei FPGA, ja näiden käsitteiden sekoittaminen on räikeää epäammattimaisuutta!

Intel-markkinoijien ponnistelujen ansiosta (tietävätkö kaikki, että puhumme Intel-siruista?) MAX10-perhe on kuitenkin muuttunut FPGA:ksi, vaikka siinä on sisäinen haihtumaton konfigurointimuisti, kuten missä tahansa CPLD:ssä.

Joten valitsemme sirun, esimerkiksi 10M02SCE144A7G (2304 LE, 101 GPIO, 12Kx9 BRAM), QFP144-paketin.

siru 10M02SCE144A7G.
logiikkaelementit - 298 (13 %)
nastat - 41 (41 %)
muisti - 65536 bittiä (59%)
pahimman tapauksen taajuus (125 C) - 153 MHz.

Näemme, että absoluuttiset indikaattorit pysyivät käytännössä samoina, vain kiteiden täyttöaste kasvoi, mikä on ymmärrettävää - 2304LE vs. 6272 LE.

Voidaanko MAX II:ta käyttää?

Nyt kysymys kuuluu: onko mahdollista käyttää jotain erittäin halpaa CPLD:tä, kuten MAX II? Täällä kaikki on monimutkaisempaa. Niissä ei ole BRAM-muistia, ts. tarvitset myös ulkoisen nopean SRAM-muistin.

SRAM-muistin yhdistämiseen tarvitaan tietysti lisälogiikkaa. Jos käytämme 4K x 16 muistia, tarvitsemme vielä 16 nastaa datalle, 12 osoitteelle ja 3 ohjausta varten (/cs, /we, /oe), yhteensä 31 lisänastaa varten.

Myös logiikka kasvaa. On vaikea sanoa tarkalleen kuinka paljon, mutta se ei aluksi mahdu CPLD:hen 240 LE:llä, mutta ehkä se mahtuu 570 LE: lle.

Valitsemme QFP100-pakettiin CPLD EPM570. Tarvitsemme vain 72 nastaa, kotelossa on 76 nastaa GPIO:lle, ts. pitäisi riittää kaikkeen, mutta laajentumiselle on jo hyvin vähän tilaa.

Tämän ratkaisun plussat: mahdollisesti alhaisempi hinta (jopa ylimääräisellä SRAM-sirulla), miinukset: suurempi piirin monimutkaisuus ja kortin pinta-ala.

Emissiohinta

Tässä on mitä löysin efindin avulla. Mikropiirit ovat hieman erilaisia, mutta lopussa oleva numero ja kirjain ovat suorituskykyindeksi ja lämpötila-alue (kaupallinen). Koska meillä on kolminkertainen marginaali taajuudessa, nämä luvut eivät ole meille ehdottoman tärkeitä.

EP4CE6E22C8N - 456.55 R (Promelectronics, EKB, vähittäismyynti)
10CL006YE144C - 754.71 (Viides elementti, Pietari, tukkumyynti)
10M02SCE144C8G - 456 R (Elitan, Ekb, tukkumyynti)
EPM570F100C5N - 368 R (Hitech, Pietari) + muisti (CY7C1021DV33-10ZSXI, SRAM 1MBIT 10NS 44TSOP) - 92,51 R (Teollisuuselektroniikka, EKB, vähittäismyynti)

Tietysti voit löytää halvempia, nämä ovat vain vähittäismyyntihintoja myymälässä, mutta suhde on suunnilleen sama.

Voidaan nähdä, että CPLD-vaihtoehto ei voita millään tavalla hinnan suhteen, vaikka sillä on monia haittoja. Muut vaihtoehdot ovat suunnilleen vastaavia, paitsi että Cyclone 10 on edelleen hieman kalliimpi ja harvalla on sitä varastossa. Tämä on kuitenkin täysin uusi perhe, toistaiseksi kaikki jakelijat eivät ole tuoneet sitä.

Itse pidän eniten MAX 10 -vaihtoehdosta.Sillä on yksi etu: FPGA-kokoonpanoa ei tarvitse ladata käynnistyksen yhteydessä. Cyclone 4 -versiossa sinun on ladattava FPGA-kokoonpano, joka voidaan tehdä joko käyttämällä lisäkonfiguraatiomuistisirua tai käyttämällä mikro-ohjainta. On olemassa kolmas vaihtoehto: flash kautta JTAG äläkä koskaan poista virtaa siru. Kuulin, että joku teki tämän, en tiedä onko se vitsi vai ei, mutta en todellakaan tee sitä.

Variantilla, jossa on Cyclone 4 -laiteohjelmisto mikro-ohjaimen kautta, on kuitenkin etu: mahdollisuus päivittää FPGA-laiteohjelmisto käyttöliittymien kautta: USB, Ethernet jne.

Toinen ei-triviaali vaihtoehto on mahdollinen: älä asenna mikro-ohjainta ollenkaan, vaan flash-asenna jokin sulautettu prosessori FPGA:han. Mutta tämä ei ehkä ole kovin hyvä vaihtoehto, koska. tämä vaatii ehdottomasti ulkoisen ROM- ja RAM-muistin sekä ainakin USB-sillan. Tätä vaihtoehtoa ei tietenkään tarvitse tietoisesti kieltäytyä, mutta se näyttää minusta vaikeammalta toteuttaa kuin mikro-ohjaimella.

Kirjoitan seuraavassa viestissä siitä, mitä toimintoja tämä laiteohjelmisto suorittaa.

Artikkelissa yritetään määrittää ohjelmoitavien logiikkapiirien (FPGA) kehitettyjen digitaalisten moduulien mukana tulevan dokumentaation koostumus. Kehittäjien on toimitettava tämä mukana oleva dokumentaatio kuluttajalle/asiakkaalle kehitetyn digitaalimoduulin menestyksekkään jatkokäyttöä varten projekteissaan digitaalisten laitteiden suunnitteluvaiheessa FPGA:lle.

Johdanto

Millaista suunnitteludokumentaatiota siis kannattaisi kysyä kehittäjältä, jos yritys tai asiakasyritys tai muu kehittäjä käyttää jatkossa projekteissaan "ulkomaista" kehitettyä laitetta? Tämä artikkeli voi toimia "huijauslehtenä", jotta ensin voidaan antaa oikein FPGA:n digitaalisen laitteen kehittämisen toimeksianto ja pyytää sitten kehittäjältä suunnitteludokumentaatiota jo kehitetylle digitaaliselle laitteelle. Suunnitteludokumentaatiosta saadun aikaisemman kokemuksen perusteella yritys tai yritys käyttää yleensä seuraavia standardeja ja määräyksiä:

  • GOST 2.102-68 ESKD. Suunnitteluasiakirjojen tyypit ja täydellisyys.
  • GOST 15.101-98. Järjestelmä tuotteiden kehittämiseen ja tuotantoon. Menettely tutkimustyön suorittamiseksi.
  • GOST R 15.201-20-00. Järjestelmä tuotteiden kehittämiseen ja tuotantoon. Tuotteet teollisiin ja teknisiin tarkoituksiin. Tuotteiden kehittämisen ja tuotannon menettely.

Yleensä nämä olivat laiteohjelmistotiedosto ja ohjelma (kuvaus digitaalisesta laitteesta VHDL / Verilogissa tai joukko digitaalisia piirejä, jotka on kehitetty piirieditorissa käyttämällä digitaalisia logiikkakirjastoelementtejä, kuten flip-flops, rekisterit, laskurit, dekooderit jne.) CD- tai DVD-levyllä ja ohjelmointiohjeet. Ja siinä kaikki.

Kirjoittaja kohtasi esimerkiksi seuraavan ongelman. Yksi työntekijöistä kehitti monimutkaisen monimoduulisen digitaalisen laitteen. Kuvasin kaikki moduulit VHDL:ssä ja katsoin syklogrammeja näiden moduulien toiminnasta ja digitaalisesta laitteesta kokonaisuutena hyvällä ja kalliilla oskilloskoopilla. Hän ei tiennyt Test Bench -tiedostoista ja mahdollisuudesta suorittaa simulaatioita tai ei osannut kirjoittaa niitä, muuten ei myöskään ollut kommentteja projektista ja moduulien kuvauksista. Tilanne voi olla vieläkin pahempi, jos moduuleita edustavat digitaaliset piirit, jotka on suunniteltu kirjastoelementtejä käyttävässä kaavaeditorissa. Tässä piilee yksi suurimmista haitoista: itse kehittäjää lukuun ottamatta on epätodennäköistä, että kukaan muu ymmärtää tätä digitaalista laitetta, varsinkin jos projekti on monimoduulinen ja kunkin moduulin kuvaus on yli 100 riviä tai enemmän. kuin yksi näyttöruutu. Joten jos toinen kehittäjä haluaa tuoda tällaisen jo kehitetyn digitaalisen laitteen FPGA:lle uuteen kehitykseen tai projektiin, hänen on jälleen käytettävä aikaa tämän digitaalisen laitteen kehittämiseen.

FPGA:n suunnitteluongelman historia

Tällä hetkellä FPGA-markkinat ovat yksi dynaamismmin kehittyvistä. FPGA:ita käytetään monilla tekniikan aloilla. Tällä hetkellä ei ole olemassa yksiselitteistä menetelmää, joka tyydyttäisi kaikkia laitteistokehittäjiä FPGA-konfiguraation saamiseksi laitteen toiminnallisesta mallista järjestelmätasolla. Suosituin tapa ratkaista tämä ongelma on IP-ydinteknologian (Intellectual Property Cores) käyttö. IP-ytimet ovat valmiita komponentteja, joiden avulla voit helposti sisällyttää ne omaan projektiisi monimutkaisemman järjestelmän luomiseksi. Tällä lähestymistavalla on yksi merkittävä haittapuoli - IP-ytimien kiinnittyminen alkuainepohjaan. Jokainen IP-ydin on optimoitu tietyn valmistajan tietylle sirusarjalle, mikä heikentää merkittävästi mahdollisuutta siirtää jo luotuja laitteita elementtipohjalta toiseen. Kaupallisten CAD-arkkitehtuurien suljettu luonne tekee mahdottomaksi lisätä omia toiminnallisia laitemalleja järjestelmätasolla, jotta niiden perusteella saadaan laitemalleja rekisterin siirtotasolle (RTL). Digitaalisen moduulin kehitys toteutetaan piirieditorissa piirretyn digitaalisen piirin muodossa käyttämällä valmistajan sisäänrakennettua CAD-kirjastoa peruspiirielementeistä, kuten flip-flops, dekooderit, laskurit, summaimet jne.

Toinen suosittu lähestymistapa, joka mahdollistaa siirtymisen toiminnallisesta mallista järjestelmätasolla laitemalliin rekisterinsiirtojen tasolla, on järjestelmätason suunnittelukielten (SLDL) käyttö. Tällaisia ​​kieliä ovat SystemC, Handel-C, VHDL, Verilog, System Verilog. Suurin etu on riippumattomuus laitteistopohjasta, jolla laite toteutetaan.

Siten toisaalta IP-ydintekniikkaa käytettäessä laitekehittäjä saa korkealaatuisen ratkaisun, mutta tiukasti sidottuna laitteistopohjaan, jossa laite on toteutettu. Toisaalta, kun käytetään laitteiston kuvauskieliä järjestelmätasolla, laitetoteutus on laitteistosta riippumaton. Edellä olevasta seuraa, että tällä hetkellä on tärkeää käyttää digitaalisten moduulien yhteiskäyttöä valmistajan (Xilinx, Altera, Actel jne.) ja kolmannen osapuolen kehittäjien laitteiston kuvauskielessä ja IP-ytimissä nopeuttamiseksi. digitaalisten moduulien suunnitteluprosessi. Kolmannen osapuolen valmistajien digitaalisia moduuleja käytettäessä mukana tulevasta dokumentaatiosta puuttuu joskus tietoja.

Tietojen tarjoaminen kehitetystä digitaalisesta FPGA-moduulista

Riippuen menetelmästä, jolla FPGA-konfiguraatio saadaan hankittua laitteen toiminnallisen mallin mukaan järjestelmätasolla, kehittäjä voi erottaa seuraavat FPGA:n digitaaliset moduulit:

  • Ohjelmisto - kehitetty digitaalinen moduuli, joka lähetetään kuluttajalle kuvauksen muodossa laitteiston kuvauskielellä (VHDL, Verilog) tai/ja joka on kehitetty Schematic Editorissa käytettäväksi jatkossa logiikkapiirien automatisoituun synteesiin tarkoitetuissa ohjelmissa ja optimoitu toiminnalliset parametrit.
  • Laiteohjelmisto - kolmannen osapuolen kehittäjäyrityksen kehittämä digitaalinen moduuli, jota kutsutaan IP-ytimeksi ja joka lähetetään kuluttajalle logiikkapiirin (netlist) muodossa, joka perustuu FPGA-valmistajan logiikkaelementtikirjastoon ja on optimoitu toiminnallisesti ja sähköiset parametrit.

Dokumentaation kehittämisvaiheessa henkilökohtaiseen kokemukseen perustuvan tavanomaisen suunnitteludokumentaation ja spesifikaatioiden lisäksi, jotka suoritetaan GOST 15.101, GOST 15.201, GOST 2.102, GOST 2.114 mukaisesti, asiakirjat kaikentyyppisille malleille (järjestelmä, logiikka, piirit), jotka on luotu digitaalisten laitteiden suunnittelun vaiheissa FPGA: lle.

Toisin sanoen FPGA:n digitaalisen laitteen suunnitteludokumentaatiosarjan tulee sisältää laiteohjelmistotiedoston, ohjelmointiohjeiden ja CD-/DVD-levylle tallennetun projektin lisäksi myös mukana tulevat asiakirjat.

Pöytä. Luettelo tukiasiakirjoista

Osion nimi Näytä
Ohjelmisto Laiteohjelmisto
Yleistä tietoa
Tarkoitus ja laajuus NOIN R
Tekniset tiedot NOIN NOIN
Nollaussignaalien kuvaus NOIN NOIN
Synkronointisignaalien kuvaus NOIN NOIN
Liitäntöjen kuvaus NOIN R
Ajoituskaaviot R NOIN
Ohjausrekisterien kuvaus NOIN NOIN
Rakenne (toiminnallinen) kaavio R R
Ohjelmointiopas NOIN NOIN
FPGA-malli tai perhe,
yrityksen valmistaja
R NOIN
Digimoduulin esittely
FPGA:n logiikkasuunnitteluun
RTL malli NOIN Ei
Looginen malli Ei NOIN
Suunnittelun rajat NOIN NOIN

Tässä on luettelo osioista (taulukko), jotka tulisi sisällyttää FPGA:n digitaalimoduulin projektin mukana tulevaan dokumentaatioon. Jokaisen osan kohdalla näytetään merkkejä tarpeesta sisällyttää osio asiakirjajoukkoon:

  • "O" - pakollinen toimitettu osa;
  • "R" - osa, jota suositellaan toimitettavaksi.

Suositeltavat tiedostomuodot tukidokumenttien lähettämiseen ovat MS Word, PDF (paras muoto), HTML. Kuvaustiedostot laitteiston kuvauskielellä (VHDL, Verilog) ja/tai Schematic Editorissa kehitetyt tiedostot toimitetaan CAD-suunnitteluohjelmiston edellyttämällä tavalla. Poikkeuksena voi olla Schematic Editorissa kehitettyjen digitaalisten piiritiedostojen lisätoimitus graafisessa muodossa (JPEG, BMP).

Yleistä tietoa

Tässä osiossa kuvataan yleiset tiedot kehitetystä digitaalimoduulista kuvauksen muodossa:

  • toimintakaavio ja sen lohkot/osat;
  • nollaa signaalit, synkronointi;
  • sovelletut rajapinnat;
  • valvontarekisterit;
  • ajoituskaavio;
  • ohjelmointi.

Tarkoitus ja laajuus

Digitaalisen moduulin käyttötarkoitus, sen käyttöalue määritellään.

Tekniset tiedot

Kuvaus annetaan sen tärkeimmistä teknisistä ominaisuuksista, kuten suorituskyvystä, tietyn FPGA-sirun tehonkulutuksesta, käytössä olevien porttien määrästä, käytetyn FPGA-sirun tyypistä. Lisäksi ilmoitetaan digitaalisen CAD-moduulin kehittämisessä käytetty FPGA-valmistaja sekä mallinnukseen ja todentamiseen käytetyt ohjelmistot. Kaikkien käytettyjen ohjelmien versio ja asennetut päivitykset ilmoitetaan. Digitaalimoduulin graafinen esitys "mustan laatikon" muodossa, jossa on ulkoisten tulojen / lähtöjen nimitys, ja lyhyt kuvaus niiden tarkoituksesta on annettu.

Nollaussignaalien kuvaus

Yksityiskohtaiset tiedot palautussignaaleista annetaan:

  • Luettelo ulkoisista ja sisäisistä nollaussignaaleista.
  • Nollaussignaalien ajoitusparametrit ja ajoituskaaviot.
  • Piirit sisäisten palautussignaalien generoimiseksi, jos sellaisia ​​​​on sisällytetty digitaalimoduuliin.
  • Suhteet muihin signaaleihin (erityisesti synkronointisignaaleihin).

Synkronointisignaalien kuvaus

Yksityiskohtaiset tiedot synkronointisignaaleista annetaan:

  • ulkoisten synkronointisignaalien kuvaus;
  • synkronointisignaalien ajoitusparametrit;
  • kuvaus sisäisistä synkronointisignaaleista ja niiden muodostuskaavioista;
  • ajoitussuhteet eri lähteistä tulevien synkronointisignaalien välillä;

Liitäntöjen kuvaus

Kaikkien kehitettyyn digitaalimoduuliin sisältyvien, mieluiten yhtenäistettyjen vuorovaikutuksen organisoimiseksi järjestelmän muiden solmujen kanssa sirulla olevien liitäntöjen käytön ominaisuudet on annettu. Lisäksi tarjotaan Internet-linkki vakiorajapinnan täydelliseen kuvaukseen tai itse käyttöliittymän kuvaus. Tällä hetkellä liitännät AMBA-, PLB-, Wishbone-väylään hyväksytään yhtenäisiksi liitäntöiksi digitaalisille moduuleille.

Ajoituskaaviot

Tiedonsiirron järjestämiseen liitäntöjen ja digitaalimoduulin muiden tulojen/lähtöjen kautta tarjotaan tarvittavat tiedot: aikakaavioiden graafinen esitys, tiedonsiirtoprotokollien kuvaus, vaatimukset digitaalimoduuliin kohdistetuille ulkoisille signaaleille (kesto, taajuus jne.) ja muita tietoja.

Ohjausrekisterien kuvaus

Kuvaus kaikista digitaalimoduulin ohjausrekistereistä on annettu. Tyypillinen ohjausrekisterin kuvaus sisältää rekisterin nimen, rekisterin osoitteen sisäisessä osoiteavaruudessa, alkuarvon nollaussignaalin poistamisen jälkeen, pääsyn tyypin (luku/kirjoitus), kuvauksen sisäisestä kentät.

Rakenne (toiminnallinen) kaavio

Kuvassa on kuva digitaalimoduulin sisäisten pääsolmujen / -lohkojen liitäntöjen sisäisestä rakenteesta sekä niiden lyhyt tekstikuvaus. Lisäksi annetaan kuvaus digitaalimoduulin tärkeimmistä sisäisistä lohkoista. Tämän asiakirjan tarkoituksena on tarjota kuluttajalle tarvittavat tiedot digitaalisen moduulin toimintaperiaatteiden ymmärtämiseksi.

Kuvattujen lohkojen lukumäärän ja kuvauksen laajuuden määrittää digitaalimoduulin kehittäjä. Edullisesti kuvattujen moduulien vähimmäismäärä vastaa digitaalimoduulin rakenne- (toiminnallisen) kaavion elementtien lukumäärää.

Tyypillinen sisäyksikön kuvaus sisältää:

  • lohkon määritys;
  • rakenteellinen (toiminnallinen) lohkokaavio (tarvittaessa);
  • toimintatilat ja algoritmit;
  • työaikakaaviot;
  • yksikön hallinnan organisointi;
  • Viestinnän järjestäminen muiden yksiköiden kanssa;
  • mitään muuta tietoa.

Ohjelmointiopas

Tarjoaa kaikki tarvittavat tiedot ohjelmointiprosessista käyttämällä digitaalisen moduulin valmistajan CAD:ia FPGA:ssa, tarvittavat työkalut ohjelmistojen kehittämiseen ja virheenkorjaukseen sekä ohjelmistokirjastoja.

FPGA-malli tai -perhe, valmistaja

Digitaalisen moduulin laiteohjelmistolle ilmoitetaan FPGA-valmistaja, FPGA-malli tai -perhe ja sen nopeusominaisuudet. Ohjelmisto-digitaalimoduulissa on tietoa varatun resurssin määrästä, käytetyn FPGA:n vaatimuksista.

Logiikkasuunnittelun digitaalisen moduulin esitys

Artikkelissa käsiteltiin "vieraan" VHDL-projektin käytön vaikeuksia - sopivien ohjeiden puutetta ohjelmien nimeämiseen ja kirjoittamiseen. Lisäksi annettiin yleisohjeita nimistä, hyvistä ohjelmien kirjoitustavoista sekä ohjeita synteesiin. Näistä asioista tulee keskustella mahdollisimman yksityiskohtaisesti kehittäjän kanssa, jos aiot jatkossa jatkaa kehitystä tai päivittämistä itse, ennen kuin hän alkaa kehittää FPGA:n digitaalimoduulin RTL-mallia. Tämä pätee erityisesti FPGA:n ohjelmisto-digitaalimoduuliin. Samassa artikkelin osassa kuvataan yleiset vaatimukset kehitetyn digitaalimoduulin koko projektille FPGA:lle. Tässä on asioita, joihin sinun tulee kiinnittää huomiota FPGA:n digitaalisen moduulin kehittämisen toimeksiantoa laadittaessa, ja tämä koskee erityisesti työn tulosten siirtoa.

RTL malli

Verilog- tai VHDL-kielen syntetisoidussa osajoukossa kuvattu tai/ja Schematic Editorissa kehitetty digitaalinen moduuli on tarkoitettu käytettäväksi FPGA-logiikan synteesivaiheessa. Toimitetaan ohjelmistolle koottuna digitaalisen moduulin projektina FPGA-valmistajan CAD-järjestelmään. Firmware-digitaalimoduulille RTL-malli toimitetaan erillisellä sopimuksella.

RTL-mallitiedostojen lisäksi siirretään seuraavat tiedot:

  • Ohjeet mallin käyttöön.
  • Malliin sisältyvien muistilohkojen kuvaus, mukaan lukien muistin tyyppi, koko, muistilohkojen lukumäärä, muistilohkon hierarkkinen nimi.
  • Kuvaa valmiiden ytimien luomista käytettäessä ohjelmia niiden luomiseen (esimerkiksi CoreGenerator for Xilinx ISE). Kuvausten puuttuessa uudelleensuunnittelussa ja sovelluksessa voi olla rajoituksia tekniikan ja valmistajariippuvuuden vuoksi.
  • Jos käytät valmistajan mikroprosessoria (esimerkiksi Altera - Nios -prosessori; Xilinx - Microblaze, PowerPC-mikroprosessorit), tarvitaan kuvaus prosessorin ytimen ja sen oheislaitteiden konfigurointiprosessista.
  • Joukko testejä (Test Bench -tiedostoja) Verilog- ja/tai VHDL- tai/tai System Verilog -kielellä kirjoitetun digitaalisen moduulin tarkistamiseksi ja simuloimiseksi.
  • Kaikki muut lisätiedot.

Looginen malli

Malli on verkkolista, joka on kuvattu Verilog- tai VHDL-kielillä FPGA-valmistajan kirjaston pohjalta ja se toimitetaan Digital Module Firmware -ohjelmistoon.

Loogisten mallitiedostojen lisäksi siirretään seuraavat:

  • Tämän mallin käyttöohjeet.
  • Joukko testejä (Test Bench -tiedostoja) Verilog- ja/tai VHDL- tai/tai System Verilog -kielellä kirjoitetun digitaalisen moduulin tarkistamiseksi ja simuloimiseksi.
  • Opas digitaalisen moduulin mallintamiseen ja todentamiseen tarkoitettujen testien kanssa työskentelemiseen.
  • Kaikki muut lisätiedot.

Suunnittelun rajat

Suunnittelurajoitukset tarjotaan tiedostona, joka kuvaa digitaaliselle moduulille asetettuja rajoituksia, kun se sisältyy system-on-chip -logiikkamalliin. Tämä joukko sisältää rajoituksia synkronointisignaaleille (kellorajoitukset), ajoitusrajoitukset (ajoitusrajoitukset), rajoitukset digitaalisen moduulin vuorovaikutukselle muiden moduulien kanssa ja digitaalisen moduulin toimintaolosuhteille. Tiivistelmä Design Constraints (SDC) tai FPGA-valmistajan CAD-muoto on suositeltava.

Esimerkkiluettelo synkronointisignaalien rajoituksista:

  • ajoituskaavio (Kello-aaltomuoto);
  • kellotaajuuden epävakaus (Jitteri);
  • kellon vaiheen muutos;
  • kytkentäaikojen kesto (Siirtymäajat);
  • johdettujen kellosignaalien ajoituskaaviot (generoidut kelloaaltomuodot);
  • muita lisätietoja.

Joukko rajoituksia synkronointisignaaleille on pakollinen digitaalisten moduulien ohjelmistoille ja laiteohjelmistoille.

Esimerkki luettelo aikarajoista:

  • signaalien esiintymisaika tuloissa (saapumisajat tuloissa);
  • signaalien ilmestymisaika lähdöissä (Vaaditut ajat lähdöissä);
  • useita pyöräteitä;
  • vääriä polkuja (False paths);
  • datasignaalin siirtymäaikojen kesto;
  • muita lisätietoja.

Johtopäätös

Kehitettyjen FPGA:iden digitaalisten moduulien mukana tulevan dokumentaation kokoonpano annetaan kuluttajan ja kehittäjän välisellä sopimuksella. Useimmiten kehittäjä tarjoaa vain digitaalisen moduulin, joka on kuvattu VHDL:ssä, Verilogissa, System Verilogissa ja/tai kehitetty kaavamaisessa editorissa. Lisädokumentaation osalta kehittäjän vastaus on useimmiten seuraava: ”Digitaalinen moduuli toimii, joten ota ja käytä. Piirin kuvailemisessa laitteiston kielellä ei ole mitään vaikeaa: sen keksit itse.”

Kirjoittajan mielestä voit ymmärtää mitä tahansa, kaikki riippuu halusta ja käytetystä ajasta, ja aika, joka kuluu "vieraan" projektin ymmärtämiseen jo kehitetyssä digitaalisessa moduulissa, on suoraan verrannollinen kokemukseen laitteiden kuvaamisesta VHDL:ssä, Verilog- ja tietodigitaali- ja mikroprosessoripiirit. Tämä voidaan välttää, jos sovit ensin kehittäjän kanssa mukana tulevan dokumentaation koostumuksesta, jolloin digitaalisen moduulin käyttö projektissasi helpottuu ja sen toteuttaminen on nopeampaa.

Yhteenvetona kirjoittaja haluaa huomauttaa, että kun muotoillaan tehtävää digitaalisen laitteen kehittämiseksi FPGA:lle, on noudatettava artikkelissa annettuja suosituksia, niin ei ole ongelmia aiemmin kehitetyn digitaalisen uudelleenkäytön tai päivityksen yhteydessä. laite.

Kirjallisuus

  1. Denisov A. Useita vinkkejä digitaalisten laitteiden suunnitteluun VHDL:llä FPGA:lle // Komponentit ja tekniikat. 2009. Nro 12.
  2. GOST 2.102-68 ESKD. Suunnitteluasiakirjojen tyypit ja täydellisyys.
  3. GOST 2.114-95 ESKD. Tekniset tiedot.
  4. GOST 15.101-98. Järjestelmä tuotteiden kehittämiseen ja tuotantoon. Tieteellisen tutkimustyön suorittamismenettely.
  5. GOST R 15.201-20-00. Järjestelmä tuotteiden kehittämiseen ja tuotantoon. Tuotteet teollisiin ja teknisiin tarkoituksiin. Tuotteiden kehittämisen ja tuotannon menettely.