Verilog while-silmukka, käytettäessä loop on synthesisable????

For-silmukka on hyväksyttävää, mutta kun silmukka on riippuvainen työkalu ja se ei ole hyväksi FPGA
 
Olen kirjoittaa verilog koodi yhdistyvät rakenteellisia ja käyttäytymiseen lausuntoja. Mutta minun täytyy suorittaa nämä rakenteelliset koodia jokaisella kellojakso. Voinko kirjoittaa nämä Strustural statemnets sisällä aina estää???? muuten HW teen sen? nopean vastauksen ll olla paljon apua ...
 
Uskon, että kaikki silmukat voidaan easely kirjoitettuna rullaamattomia ovat synthesisable. Jos teet tämän, ajatella kuin esikäsittelijään joka vyöryttää silmukka, korvaamalla silmukan muuttuja, ja siellä mennään ...
 
[Quote = ankit12345] for (i = 0, i <10, i + +) Minusta tämä toimii ..... jossa sillä tämä ...... For (i = 0, i
 
tahansa silmukka synthesizable jos kaksi asiaa ovat kunnossa .. 1. pitäisi olla rajallinen silmukka 2. ei viivästystä koskevan ilmoituksen silmukka
 
Jostain syystä Seuraa Verilog koodi ei toimi oikein Quartukselta II 10.0. Yritän kirjoittaa funktio, joka asettaa kaikki bitit oikealle merkittävimmistä asettaa bittinen:
Code:
 funktio [31:0] maski (input [31:0] TAP), kokonaisluku indeksi, maski = kosketa, sillä ( index = 1; index <32; index = index * 2) alkaa maski = maski | (maski>> index); loppuun endfunction
koodi syntetisoi ikään kuin eri toistojen silmukan ovat yhtäaikaisia. Mitään selitystä arvostetaan. TM
 
Koodi kirjoitat on samanaikaista sitten synteesi tuntuu ymmärtämystä, mutta en ymmärrä mitä haluat tehdä
 
Mitä haluan tehdä on yksinkertainen. Koska tahansa syöttää sanan haluan palata sanan kanssa 1: n kaikissa asennoissa oikeus vasemmanpuoleisin 1. Esimerkiksi annetaan 32b'00000001000000000000000000000000 haluan 32b'00000001111111111111111111111111 tai annetaan 32b'00010100101001010101001010010011 Haluan 32b'00011111111111111111111111111111 silmukan pitäisi tehdä, koska se käyttää estää tehtävän. Alkaen 32b'00000001000000000000000000000000 jälkeen jokaisen iteraation minun pitäisi saada 32b'00000000110000000000000000000000 / / index == 1 32b'00000000111100000000000000000000 / / index == 2 32b'00000000111111110000000000000000 / / index == 4 32b'00000000111111111111111100000000 / / index == 8 32b'00000000111111111111111111111111 / / index == 16 kuitenkin lopulta koodi todellisuudessa tuottaa 32b'00000000110100010000000100000000 ikään kuin kaikki toistojen tapahtuu concurrantly.
 
Miksi käytät toimintoa eikä moduuli? Moduulissa voit alustava lausunto ja se olisi toiminut.
 
Kiitos vastauksesta jducluzeau, mutta jos se ei toimi toiminnon, miksi se työskentelevät moduuli? Lisäksi muitakin yhteen ongelmat käytettäessä moduuli. Kun toiminto, jokainen moduuli, joka käyttää se voi olla se oma kopio.
 
En koskaan käyttänyt miksi käytetään funktion sijaan moduuli. Voit käyttää moduulia toisessa moduulissa. Tämän koodin pitäisi toimia. moduuli masker (maski, TAP), ulostulo [31:0] maski; input [31:0] napauta; genvar I määrittää maskin [31] = kosketa [31], luovat for (i = 1; I
 
Kiitos esimerkiksi käyttämällä tuottaa. En ole koskaan käyttänyt, että rakentaa ennen. En täytyy selvittää, että vikaa on alkuperäisen koodin, koska jos se on väärin en voi olla ongelma projektin muilla alueilla.
 
kokeile maski = maski | (napauta>> index); Uskon, että ongelma tulee tätä linjaa. Avaa kaavamaisen katsojan Näet ongelma.
 
Olin todella tulee ehdottaa juuri päinvastaista - että alkuperäinen koodi käytetty maski = maski | (napauta>> index); sijaan maski = maski | (maski>> index); silloinkin, en näe missä saada lähdön saat. Esimerkiksi olin odottaa mallia 11101000100000001 seurauksena 1 alettaisiin 0, 1, 2, 4, 8 kertaa. Se näyttää olevan siirtymässä napauta mennessä 1,2,4,8 kertaa sitten tai-ING tulosta. Saatat tehdä väli muuttujan nähdä, jos tämä auttaa.
 
Itse en tekisi sitä varten silmukka. Joskus lenkki auttaa luettavuutta, mutta sinun ei ole kovin selvä ensi silmäyksellä. Olen mieluummin mennä jos lausumia parempi luettavuus ellei se vaatii 100: n linjat.
 
For silmukka synthesisable jos se kestää jatkuvaa aikaa .. Voit ajatella laitteisto, jossa Mitä tapahtuu jos koodi suoritetaan yhden kerran, ja sitten sen jäljennöksiä on yhdistää jälkeen käyttäen silmukka .... Muista, mitään dynaaminen ei syntetisoidaan .. asia on, että voimme visualisoida skenaarion thats it ..
 
Kiitos kaikille, jotka lähetetty. Oikea lausunto on maski = maski | (maski>> index); I polkumyynnillä tuloksena toiminnon ulos 7-segmentti LED dev hallituksen ja varmisti, että index * 2 ja indeksi +1 tosiasiallisesti tuottavat samoja oikeita tuloksia nyt . En ole varma mitä tapahtui alkuperäisen bug. Päätin käyttää toimintoa kirjallista kuten jducluzeau n kanssa on silmukka, eikä tuottaa silmukka. Tämä toimii ja on ymmärrettävää.
Code:
 funktio [31:0] maski (input [31:0] TAP), kokonaisluku indeksi, maski [31] = kosketa [31] varten (index = 30; index> = 0, index = index - 1) alkaa maski [index] = kosketa [index] | Mask [index + 1]; loppuun endfunction
 

Welcome to EDABoard.com

Sponsor

Back
Top