Egy Veriloggal kapcsolatos kerdes: mi a kulonbseg nyelvi szinten a
`define SOME_FEATURE
....
`ifdef SOME_FEATURE
reg ...
wire = ...
...
`else
wire = ...
`endif
es a
parameter SOME_FEATURE = 1;
...
generate
if ( SOME_FEATURE) begin
reg ...
wire = ...
end else begin
wire = ...
end
endgenerate
formaban megadott felteteles szintezis kozott? Ugy tunik mintha ezutobbi valami modon komplexebb RTL-t eredmenyez (az eroforrashasznalatbol), mintha a parameter is egy kulso vezetek lenne... pedig nem igazan kene kulonbsegnek lennie...
- 194 megtekintés
Hozzászólások
ifdeffel csak azt vizsgálod, hogy amit tesztelsz, az van-e vagy nincs.
if ()-el meg komplexebb vizsgálatot csinálhatsz (bármit, amit megadhatsz feltételnek).
Ha csak ennyire használod, mint a példában, szerintem se kéne különbségnek lenni.
A parametert azt persze, hogy kívülről is tudod változtatni, de csak szintézis-időben, egy szimulátor lehet, hogy több erőforrást emészt fel ilyen esetben, de a fizikai eszközön nem kéne, hogy különbség legyen.
- A hozzászóláshoz be kell jelentkezni
Koszi, kozben elkezdtem jatszani es kisebb (~150-200LC-s) design-oknal tenyleg nincs kulonbseg. Egy nagyobbnal (~2300 LC) pedig igy mint a meseben: "hol volt, hol nem volt" kulonbseg. De ez mar siman lehet a Yosys nyigja, mert ott olyat is lattam mar hogy logikai azonossagok eseten is mas-mas a kimenet. Pl egy `wire k = x & y & z;` es egy `wire k = 1 & x & y & z` tud kulonbozni. Mondjuk 4-inputos LUT-ok mellett siman lehet hogy ez varhato is...
Elso korben a parameter-ekbol ugyanis ilyen wire x = 0 meg x = 1 tipusu vezetekek lesznek bizonyos esetekben es ugy megy bele az informacio a kombinacios/szekvencialis reszekbe, abban bizvan hogy a szintezis jol kioptimalizalja.
- A hozzászóláshoz be kell jelentkezni
Nem kellene, hogy kulonbseg legyen. Mit hasznalsz? Regen hasznaltam mar, de Vivadonal (elotte pedig ISE-nel) egy rakas opcio volt RTL-re, ami kulonbozo optimalizaciokat kapcsolt be/ki.
- A hozzászóláshoz be kell jelentkezni
Ezt Yosys-szal csinalom most, de nemsokara egyreszt megnezem egy lebutitott design-on is a kerdest (tenylegesen erre fokuszalva) es megnezem iCEcube2-n is ezt a lebutitott valtozatot. Szoval siman lehet hogy ez valami bug-szeruseg a Yosys-ban. De igen, pont ahogy mondjatok, szerintem sem kellene kulonbsegnek lennie.
- A hozzászóláshoz be kell jelentkezni
Hm, na, ugylatszik van egy kulonbseg. A Yosys-nal (ezt a LUT/LC szamot leszamitva) kb ugyanugy megy a generate + if mint az `ifdef ... `endif, Xilinx Vivado-nal viszont ezt nem ette meg:
parameter have_interrupt = ...;
...
generate
if ( have_interrupt ) begin
wire is_tail_reti = INSTR[4] & iflag;
wire is_interrupt = I & iflag & (state==STATE_NORMAL);
end else begin
wire is_tail_reti = 0;
wire is_interrupt = 0;
end
endgenerate
Csak ezt:
parameter have_interrupt = ...;
...
wire is_tail_reti;
wire is_interrupt;
generate
if ( have_interrupt ) begin
assign is_tail_reti = INSTR[4] & iflag;
assign is_interrupt = I & iflag & (state==STATE_NORMAL);
end else begin
assign is_tail_reti = 0;
assign is_interrupt = 0;
end
endgenerate
Persze ezutobbi is teljesen logikus, de pont az `ifdef logikajanak mond ellent.
- A hozzászóláshoz be kell jelentkezni
Quartus II is megeszi, pedig jó régit használok (13.1), ez az utolsó Cyclone III-hoz.
- A hozzászóláshoz be kell jelentkezni
Ezt talaltam: https://forums.xilinx.com/t5/Design-Methodologies-and/SystemVerilog-gen…
However you cannot access the register "pipe" from outside that generate scope
(ahol ez a "pipe" az valami olyasmi mint nalam a ket wire lenne)
Szoval akkor ez ezekszerint a Verilog ezen tulajdonsaga mar nem annyira sztenderdizalt. Alteraeknal meg Lattice-knel imigy szeretik, Xilinx-eknel meg amugy...
- A hozzászóláshoz be kell jelentkezni
Itt ez a lényeg:
Variables declared within a generate scope are local to that generate scope.
Na most hogy ez mennyire sztenderd, vagy mennyire nem, azt a Verilog (vagy SystemVerilog, mert még ezek közt is van különbség) szabványban kéne megnézni.
- A hozzászóláshoz be kell jelentkezni
https://inst.eecs.berkeley.edu/~cs150/fa06/Labs/verilog-ieee.pdf (182 = 169. oldal):
To support the interconnection between structural elements and/or procedural blocks, generate statements permit the following Verilog data types to be declared within the generate scope: net, reg, integer, real, time, realtime, and event.
Szoval ez is azt mondja hogy "within the generate scope".
- A hozzászóláshoz be kell jelentkezni