Verilog while, for je synthesisable??

Cyklus for je přijatelná, ale while cyklu je závislá na nástroj a to nebude dobré pro FPGA
 
Musím napsat kód Verilog kombinací strukturální a chování prohlášení. Ale musím vykonat tyto strukturální kód v každém hodinovém cyklu. Mohu psát tyto Strustural statemnets uvnitř bloku vždy?? jinak hw to mám udělat? rychlou odpověď se budete hodně pomoci ...
 
Myslím, že všechny smyčky, které mohou být jednoduše napsána rozvinuté jsou synthesisable. , Jak toho dosáhnout, myslím, že jako preprocesor, který rozbalte smyčky, nahradit proměnnou smyčky, a je to ...
 
[Quote = ankit12345] for (i = 0, i <10, i + +) Myslím, že to funguje ..... kde je to ...... For (i = 0, i
 
žádné smyčky syntetizovatelné-li dvě věci se stará .. 1. by měla být konečná smyčka 2. bez zpoždění prohlášení ve smyčce
 
Z nějakého důvodu po Verilog kód nefunguje správně v Quartus II 10.0. Snažím se napsat funkci, která nastaví všechny bity vpravo nejvýznamnější sada bit:
Code:
 funkci [31:0] Maska (vstup [31:0] TAP); index integer, mask = kohoutek, pro ( index = 1, index <32, index = index * 2) začne mask = maska | (maska>> index), konec endfunction
kód syntetizuje jako by různých iterací cyklu for jsou souběžné. Žádné vysvětlení ocenil. TM
 
Kód můžete napsat, je současně, pak se zdá syntézu pochopení, ale nechápu, co chcete dělat
 
To, co chci udělat, je jednoduchá. Vzhledem k tomu, žádné vstupní slovo, chci se vrátit slovo s 1 ve všech polohách vpravo vlevo 1. Například, daný 32b'00000001000000000000000000000000 chci 32b'00000001111111111111111111111111 nebo daný 32b'00010100101001010101001010010011 Chci 32b'00011111111111111111111111111111 Ta by měla udělat, protože používá blokování úkol. Od 32b'00000001000000000000000000000000 po každé iteraci bych měl dostat 32b'00000000110000000000000000000000 / / index == 1 32b'00000000111100000000000000000000 / / index == 2 32b'00000000111111110000000000000000 / / index == 4 32b'00000000111111111111111100000000 / / index == 8 32b'00000000111111111111111111111111 / / index == 16 Nicméně, na konci kódu ve skutečnosti produkuje 32b'00000000110100010000000100000000, jako by všechny iterace dojde concurrantly.
 
Proč používáte funkci a ne modul? V modulu je možné použít původní výraz a to by nefungovalo.
 
Díky za odpověď jducluzeau, ale pokud to nefunguje ve funkci, proč by to fungovat v modulu? Kromě toho existují i další problémy při propojení pomocí modulů. S funkcí, každý modul, který používá mít vlastní kopii.
 
Nikdy jsem proto použít funkci místo modulu. Můžete použít modul v jiném modulu. Tento kód by měl fungovat. Modul Masker (maska, TAP); výstup [31:0] maska, vstup [31:0] kohoutku, genvar jsem, přiřadit maska [31] = na [31], vytvářet for (i = 1; i
 
Díky za příklad použití generovat. Nikdy jsem nebral, které budují dříve. Potřebuji zjistit, že je s původní kód, protože pokud je to špatné jsem mít problémy s projektem v jiných oblastech.
 
zkuste mask = maska | (TAP>> index), myslím, že problém je od této linie. Otevřené schéma prohlížeč, uvidíte ten problém.
 
Byl jsem vlastně chtěl navrhnout přesný opak - že původní kód se používá maska mask = | (TAP>> index), místo toho, mask = masky | (maska>> index), i tak, nechápu, kde jste dostat výstup dostanete. Například, já očekávám, že vzor 11101000100000001 v důsledku 1 posunul být 0, 1, 2, 4, 8 krát. Zdá se, že posunutí kohoutku v té době, nebo 1,2,4,8-ing výsledek. Ty mohou způsobit přechodné proměnné, jestli to pomůže.
 
Osobně bych se to s na smyčce. Někdy pomáhá jak k lepší čitelnosti, ale vy, není příliš jasné na první pohled. Raději bych jít s case pro lepší čitelnost, pokud to vyžaduje 100 je linek.
 
For je synthesisable případě, že běží na konstantní dobu .. Představte si, že hardware, který to, co se stane, když váš kód provádí jednorázově, a pak jeho repliky budou syntetizovány po použití cyklu for .... Pamatujte si, že je něco dynamická, nikoli syntetizován .. Jde o to, že můžeme představit scénář, to je to ..
 
Děkuji všem, kteří zaslali. Správné tvrzení je mask = maska | (maska>> index), jsem dumpingové výsledkem této funkce se na 7-segmentový LED na desce dev a ověřil, že index * 2 a index +1 ve skutečnosti ke stejnému správné výsledky nyní . Nejsem si jistý, co se stalo s původní chybu. Rozhodl jsem se použít funkci psán jako jducluzeau s cyklu for, ne vytvářet smyčku. To je práce a je pochopitelné.
Code:
 funkci [31:0] Maska (vstup [31:0] TAP); index integer, maska [31] = na [31], pro (index = 30, index> = 0, index = index - 1) začít maska [index] = kohoutek [index] | masky [index + 1]; konec endfunction
 

Welcome to EDABoard.com

Sponsor

Back
Top