Kysymys:
VHDL: '*' -operaattorin käyttö toteutettaessa kertojia suunnittelussa
quantum231
2014-09-17 02:52:51 UTC
view on stackexchange narkive permalink

Nykypäivän FPGA: t ovat rakentaneet DSP-lohkoja, uusimmat FPGA: t ovat jopa rakentaneet IEEE-754-yhteensopivia liukulukuyksiköitä.

DSP-entiteetti / moduuli voidaan luoda GUI: lla sen jälkeen kun olet valinnut tarvittavan parametrit siinä, ja sitten hetkellinen se suunnittelussa.

Milloin meidän on tehtävä tällainen mikrohallinta suunniteltaessa odottamaan todellisia DSP-lohkoja ja milloin kirjoitamme koodiin vain * -operaattorin ja anna synteesityökalun käsitellä matalan tason yksityiskohtia? Kumpi on parempi?

Binaarikertauksessa on monia erityyppisiä kertolaskualgoritmeja. Koska olemme nyt rakentaneet DSP-lohkoja piille ja jopa liukulaskukertoimia, tarkoittaako tämä sitä, että kaikki nuo algoritmit eivät ole käytännössä vanhentuneet.

Minkä FPGA: n kankaassa on 754 yhteensopivaa FPU: ta?
Viisi vastused:
Martin Thompson
2014-09-17 15:34:50 UTC
view on stackexchange narkive permalink

Jos haluat vain kertoa kaksi numeroa ja ne sopivat DSP-lohkoon, * -operaattorin tulisi päätellä DSP-lohko. Jos ei, lähetä synteesityökalu takaisin :)

DSP-toiminnallisuuden monimutkaisempien yhdistelmien hyödyntäminen edellyttää kuitenkin usein suoraa lohkon välitettävyyttä ja sen parametrien konfigurointia. Esimerkkejä asioista, jotka eivät välttämättä kartoita päätelmällä (käyttämällä esimerkkinä Xilinx DSP48E1):

  • pre-summaimen käyttö
  • käyttö pylväsakun
  • kuvionilmaisimen käyttö
  • loogisen yksikön käyttö

Ja erityisesti edellä mainittujen yhdistelmät.

Synteesityökalut eivät ole vielä tarpeeksi hyviä loogisten ja aritmeettisten mielivaltaisten yhdistelmien kartoittamiseen niin tehokkaasti kuin voisit toivoa.

Marcus10110
2014-10-14 01:07:18 UTC
view on stackexchange narkive permalink

Olen tehnyt tämän muutaman kerran itse.

Yleensä suunnittelutyökalut valitsevat kankaan toteutustavan ja DSP-siiven välillä synteesiasetusten perusteella.

Esimerkiksi Xilinx ISE: n synteesiprosessiasetuksissa, HDL-asetuksissa, on asetus "-use_dsp48", jonka vaihtoehdot ovat: Auto, AutoMax, Kyllä, Ei. Kuten voit kuvitella, tämä ohjaa kuinka kovaa työkalut yrittävät sijoittaa DSP-viipaleita. Minulla oli kerran ongelma, jossa kerroin kokonaisluvun 3: lla, mikä johti DSP-viipaleeseen - paitsi että päätin jo manuaalisesti jokaisesta sirun DSP-siivusta, joten syntetisaatio epäonnistui! Vaihdoin asetukseksi Ei, koska käytin jo kaikkia dsp-viipaleita.

Tämä on luultavasti hyvä nyrkkisääntö (olen juuri päättänyt): jos suunnittelusi kellotaajuus on alle 50 MHz, ja aiot käyttää todennäköisesti alle 50% sirun DSP-viipaleista, käytä sitten vain *, + ja - operaattoreita. tämä päättelee DSP-viipaleet ilman putkistorekistereitä. Tämä todella rajoittaa huippunopeutta. (Minulla ei ole aavistustakaan, mitä tapahtuu, kun käytät jakoa)

Jos näyttää kuitenkin siltä, ​​että aiot suorittaa viipaleet lähempänä DSP-siiven maksiminopeutta (333 MHz Spartan 6 -nopeudella) arvosana) Jos aiot käyttää kaikkia viipaleita, sinun on pääteltävä ne manuaalisesti.

Tässä tapauksessa sinulla on kaksi vaihtoehtoa.

Vaihtoehto 1: käytä raakaa manuaalisesti DSP-ilmentymämalli. Vaihtoehto 2: käytä Xilinx Core Generatorin IP-lohkoa. (Käytän tätä vaihtoehtoa. Samalla opit kaiken ytimen genistä, mikä auttaa tulevaisuudessa)

Lue DSP: n pari ensimmäistä sivua, ennen kuin teet jommankumman näistä. viipaleiden käyttöopas. Spartan 6: n (DSP48A1) tapauksessa se olisi Xilinx-dokumentti UG389: http://www.xilinx.com/support/documentation/user_guides/ug389.pdf

Harkitse ensin Core Generator -vaihtoehtoa. Luon yleensä testausprojektin Core Generator -ohjelmassa osalle, jonka kanssa työskentelen, ja luon minkä tahansa määrän IP-lohkoja vain järjestelmän oppimiseksi. Kun olen valmis lisäämään yhden suunnitteluuni ISE: ssä, napsautan hiiren kakkospainikkeella Suunnitteluhierarkiaa, napsautan uutta lähdettä ja valitsen "IP (CORE Generator & Architecture Wizard)", jotta voin muokata ja uudistaa lohkoa suoraan minun projektistani.

Katsokaa Core gen -ohjelmassa erilaisia ​​IP-lohkoja, joista voit valita - niitä on muutama tusina, joista suurin osa on melko hienoja.

Kertoja Ydin on se, mitä sinun pitäisi tarkastella ensin. Tarkista jokainen sivu ja napsauta taulukkopainiketta. Tärkeitä osia ovat kokonaisluvun bittileveydet, putkilinjan vaiheet (latenssi) ja mahdolliset ohjaussignaalit. Tämä tuottaa yksinkertaisimman mahdollisen eston poistamalla kaikki tarpeettomat portit.

Kun rakensin viime vuonna 5: 3-kertaista IIR-suodatinta, jouduin käyttämään manuaalista instantiation-mallia, koska olin rakennetaan erittäin mukautettu toteutus, jossa 2 DSP-siivua ajoitetaan 4x nopeammin kuin näytteenottotaajuus. Se oli tuskaa.

alex.forencich
2014-09-17 04:32:38 UTC
view on stackexchange narkive permalink

Jos DSP-lohkoja on läsnä, käytä niitä mahdollisuuksien mukaan, koska se on tehokkaampaa kuin LUT: iden käyttäminen saman tekemiseen. Ellet tarvitse korkean suorituskyvyn kertomista, tällöin sinun tulisi ottaa käyttöön esimerkiksi putkilinjainen summain ja siirtorekisteri säästääksesi tilaa.

Haluaisin kuitenkin tarkastella DSP-lohkojen päättelemistä ennen GUI-työkalujen käyttöä. Xilinx XST -käyttöoppaassa on HDL-vastaanottajat DSP-lohkojen ilmentämiseksi puhtaalla verilogilla / VHDL: llä. Pohjimmiltaan, jos lisäät tarpeeksi rekistereitä ennen kertojia ja / tai niiden jälkeen, XST käyttää DSP-lohkoa operaation toteuttamiseen automaattisesti. Voit tarkistaa synteesilokeista, päättääkö se DSP-lohkoista oikein. Oletan, että Alteralla on jotain vastaavaa.

Ensimmäisen passin toteutus ei täytä ajoitusta, mutta toiminnot ovat oikein. XST laittaa myös moninkertaistustoiminnon DSP-lohkoihin, mutta sitä ei ole optimoitu, joten se toimii noin puolet niin nopeasti kuin haluaisin. Täydennän todennäköisesti kerrannan uudelleen käyttämällä siirto ja lisää -tekniikkaa, joka vie 32 kertaa kellojaksojen määrän, mutta ei enää vaadi laitteistokerrointa.
Miksi sen ajoitus epäonnistuu käytettäessä laitteistokerrointa?
32-bittinen 32-bittinen putkistamaton kertolasku kestää ilmeisesti yli 8 ns.
hmm näen, ei ottanut sitä huomioon.Joten DSP-lohkoja ei johdeta.Ihmettelen, kuinka tarkalleen ne toteutetaan kertolasku.Onko se todella kova rinnakkaiskerroin?
Mielestäni se voidaan määrittää toimimaan muutamalla eri tavalla.XST-käsikirjan mukaan lisäämällä tarpeeksi rekistereitä tuloon ja lähtöön XST voi käyttää putkistettua kertojaa DSP48-siivussa.Minun tapauksessani oli vain yksi lähtörekisteri eikä tulorekistereitä, joten se ei voinut hyödyntää tätä.Koska tämä oli vain alustusta varten (PRNG: n kylväminen), korvasin rinnakkaiskertojan bittisarjakertoimella säästääksesi resurssien käyttöä.
TEMLIB
2014-09-17 03:50:58 UTC
view on stackexchange narkive permalink

Se riippuu siitä, kuinka paljon optimointia tarvitset ja kuinka paljon kannettavaa pitäisi olla suunnittelusi. Se on vähän kuin ohjelmisto, joka optimoi käyttämällä vähän kokoonpanoa tai antaa kääntäjän valita ohjeet. Sinulla voi olla myös joitain koon / nopeuden kompromisseja, joten sinulla ei ole varaa kombinatoriseen kaksoistarkkuuskertoimeen.

En tiennyt, missä FPGA: n langalliset FP-kertojat.

Todellinen CPU: lle sopiva IEEE P754 -yhteensopiva kertolaskuoperaattori sisältää enemmän kuin suuren kertoimen: Sinun on lisättävä eksponentit, muutettava normaaliarvoja, hallittava äärettömiä ja muutama enimmäkseen hyödytön lippu (epätarkka, alivirta ...)

Uusimman sukupolven FPGA: lla, kuten Altera 10 -sarjalla, on IEEE-754-yhteensopivat liukulukukertoimet itse laitteistossa!Minulla ei kuitenkaan ole ollut mahdollisuutta käyttää niitä itse.
Jos olemme rakentaneet DSP-lohkoja, niin FPGA: n tulisi käyttää niitä yhdistelmäkertoimen sijaan tai käyttää jotain muuta algoritmia, joka esimerkiksi käyttää muistilohkoa?
hlide
2016-02-14 00:42:30 UTC
view on stackexchange narkive permalink

Luin tämän asiakirjan http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf:

Vaikka yhteen DSP-lohkoon sopivat toiminnot voidaan syntetisoida tehokkaasti putkijohtavasta RTL-koodista, olemme havainneet, että monimutkaisemmat toiminnot, jotka vaativat useita DSP-lohkoja, kärsivät heikommasta suorituskyvystä. Matemaattisen toiminnon tavallinen RTL-kuvaus voidaan vetää voimakkaasti putkilinjaan, esimerkiksi jokaisen operaation jälkeen, mutta koska tämä putkilinjaus ei välttämättä ota huomioon DSP-lohkon rakennetta ja sisäisiä vaiheita, tuloksena olevalla syntetisoidulla rakenteella voi olla alle standardin suorituskyky, koska DSP-lohkot yhdistetään tavalla, joka ei salli niiden ajaa täydellä nopeudella.

Toivon, että voisin löytää heidän työkalujensa lähteen tarkistaakseen löydönsä.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...