Kysymys:
FPGA: lasketaanko ylös tai lasketaanko alas?
AMADANON Inc.
2017-12-28 19:10:13 UTC
view on stackexchange narkive permalink

Oppin käyttämään FPGA: ta (Papilio-kehityskortti, jolla on xilinx spartan3e, käyttäen vhdl: tä).

Minun on jaettava saapuva pulssi (kovakoodatulla) luvulla.

Näen 3 vaihtoehtoa - karkeasti, pseudokoodina (käyttäen esimerkkinä 10 lukua):

  1. Alusta arvoon 0, kun syötteen nouseva reuna kasvaa yhdellä, verrattuna 10: een;jos ne ovat yhtä suuret, palauta nollaan ja laukaise lähtöpulssi
  2. Alusta arvoon 10, kun syötteen nouseva reuna pienenee yhdellä, vertaa arvoon 0;jos ne ovat yhtä suuret, palauta arvoksi 10 ja laukaise lähtöpulssi
  3. Alusta arvoon 9, mutta varmista, että vähintään yksi johtava "0" -bitti on lähtöbittini.Syötteen nouseva reuna pienenee 1. Lähtökohdan nousevalla reunalla nollaa.

Käyttöjakso on merkityksetön.

Onko yksi näistä parempi kuin muut?Onko olemassa vielä parempaa menetelmää, jota en ole ajatellut?

Onko olemassa "tavanomainen" tapa, joka antaa kääntäjälle parhaat mahdollisuudet optimointiin?

Se on vain kolme vaihtoehtoa :-) ... Mutta vakavasti, sillä ei todellakaan ole väliä niin paljon FPGA: ssa.Yksittäiset loogiset elementit ovat riittävän yleisiä, jotta se vie suunnilleen saman määrän resursseja ja antaa sinulle saman suorituskyvyn riippumatta siitä, miten teet sen.Päätös riippuu siitä, onko hyödyllistä, että muualla suunnittelussa numerot laskevat ylös tai alas tai jokin muu kuvio.
4. vaihtoehto: 10-bittinen pyöreä siirtorekisteri, johon on ladattu "1000000000" ja siirretty nousevalla reunalla.Käytä siirtorekisterin yhtä bittiä aktivointisi tekemiseen.
Lisähuomautuksena: kääntäjän / asentajan graafisen käyttöliittymän työkalun pitäisi työn päätyttyä olla vaihtoehto, joka näyttää todellisen piirin, jonka se loi eri abstraktiotasoilla, portteihin saakka, joten sinun pitäisi pystyä näkemään, kuinka työkalu sovitti piirisi jasitten voit tehdä tarvittavat muutokset lähteeseen.
Neljä vastused:
pscheidler
2017-12-28 20:31:56 UTC
view on stackexchange narkive permalink

Optimointi tälle tasolle rikkoo sydämesi. Tulos voi muuttua käyttämäsi FPGA: n tekniikan, muiden FPGA: n tekijöiden, mutta myös muiden kuin sinun hallinnassasi olevien tekijöiden, mukaan lukien asentajan satunnaislukujen siemen, vuoksi.

Tämän sanottuani uskon, että vaihtoehto 3 on paras. Vaihtoehdoissa 1 ja 2 vertailija / TAI-portti kulkee laskureiden välillä, jotta se voi ilmoittaa, että tavoitemäärä on saavutettu. Vaihtoehto 2 voi olla hieman nopeampi kuin 1, koska kaikki voi olla suora TAI yhdessä ilman taajuusmuuttajia, mutta taas kohtaat pieniä teknologisia eroja, joissa se voi olla nopeampi AND: lle tai XOR: lle.

Vaihtoehto 3 ohittaa laskurin yhden ylimääräisen bitin edullisen hinnan vertailun. Tämän pitäisi olla sen arvoista, ellet ole vakavasti rajoitettu varvastossuilla.

Yksi hauska tosiasia laskureista on, että ne yleensä ryhmitellään laitekohtaiseen kokoon logiikkalohkossa, ja näet ajoituksen muutoksen odotettua enemmän, jos tämä ylimääräinen bitti työntää sinut pois ryhmästä.

+1, estäen kellonopeudet, jotka ajavat tekniikan rajoituksia, pitäisi antaa ajoitusraportin ohjata heidän ajoitusoptimointejaan.Satojen pikosekuntien jahtaaminen Spartan 3e: llä tai millä tahansa FPGA: lla ilman syytä on yleensä ajanhukkaa.
Dave Tweed
2017-12-28 20:40:10 UTC
view on stackexchange narkive permalink

Yksi toinen vaihtoehto olisi alustaa laskuri arvoon 6 (= 2 4 - 10), laskea ja nollata, kun kantolähtö aktivoituu (ts. kaikki FF: t ovat kaikki).

Tämän etuna on, että se ei vaadi ylimääräistä FF-tiedostoa, ja monissa FGPA: ssa on omistettu apulogiikka nopeuttaakseen tällaista kantotoimintaa laskuri- tai summainpiirissä.

Mitu Raj
2017-12-28 19:29:23 UTC
view on stackexchange narkive permalink

Riippuu.Esimerkiksi: kiikun etenemisviive 0 → 1: lle ja 1 → 0: lle voi olla erilainen, ja siten laskurin siirtoviiveet 000 → 001 ja 001 → 000 voivat olla hieman erilaiset.Se voi olla korkeampi tai pienempi, riippuen FPGA: ssa käytetystä CMOS-tekniikasta.Joten sinun on syntetisoitava ja selvitettävä, kumman ajoitus on parempi.

Simon Richter
2017-12-28 21:28:29 UTC
view on stackexchange narkive permalink

Kääntäjän kirjoittajan näkökulmasta: jos käytät kokonaisluku , sisäistä esitystä ei ole määritelty ja kääntäjä voi vapaasti valita tehokkaimman toteutuksen.

Jos pakotat tietyn sisäisen esityksen, optimoija yrittää silti parantaa sitä, mutta se alkaa hieman huonommasta näkökulmasta.

Joillakin FPGA-tiedostoilla on "esilataus" -ominaisuudet, joissa rekisterit voidaan alustaa mielivaltaisiin arvoihin, jolloin alustetaan \ $ N-1 \ $, lasketaan alaspäin ja käytetään ylintä kantobittiä lähtöön ja nollaukseen (seuraavassa jaksossa ) on tehokkaampi kuin sekä summaimen että vertailijan toteuttaminen. Ilman esikuormitusta summain voi olla parempi.

Ellei tiedä sisäistä rakennetta, muulle logiikalle varatut resurssit (monilla FPGA: lla on oma liukuluku kerrota ja lisää -logiikka, jota voit käyttää myös laskurin toteuttamiseen, jos sinulla on jäljellä olevia yksiköitä) ja olet täysin varma, että voitit '' Vaihda toiseen malliin, vastaus on "älä ajattele sitä".



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...