webpack suxx
VF
vf at elte.hu
Sun Dec 22 19:28:43 CET 2002
Hi!
Ahogy igertem, itt van a Xilinx WebPack problema reszletezese.
Nagy szuksegem lenne az Abel ertok segitsegere.
Nezzuk a kovetkezo egyszeru fajlt:
MODULE template
TITLE 'Template'
DECLARATIONS
ci0..ci7 pin istype 'reg_t';
clock pin;
cie pin;
EQUATIONS
[ci0..ci7].clk = clock;
ci0.t = cie;
ci1.t = cie & ci0 & !ci3;
ci2.t = cie & ci0 & ci1;
ci3.t = cie & ci0 & (ci1 & ci2 # ci3);
ci4.t = cie & ci0 & ci3;
ci5.t = cie & ci0 & ci3 & ci4 & !ci7;
ci6.t = cie & ci0 & ci3 & ci4 & ci5;
ci7.t = cie & ci0 & ci3 & ci4 & (ci5 & ci6 # ci7);
END
(Ez eddig egy kapuzott 2 dekados szinkron decimalis felfele szamlalo)
Ezt a fajlt az XPLA Designer 8 makrocellaba forditja le, barmelyik
tamogatott eszkozrol is van szo. Probakepp kiprobaltam az XCR3128-at
es XCR5128-at. Rendben lefordul, az eredmeny tokeletes.
Ugyanezt a WebPack4.1 ugyanabba az eszkozbe 10 makrocellaba forditja le!
A fitter reportban a kovetkezok talalhatok:
; Implemented Equations.
/ci0 := ci0
ci0.CLKF = clock ;GCK
ci0.CE = cie
ci0.PRLD = Gnd
/ci1 := ci1
ci1.CLKF = clock ;GCK
ci1.CE = ci0 * cie * /ci3
ci1.PRLD = Gnd
/ci3 := ci3
ci3.CLKF = clock ;GCK
ci3.CE = N_PZ_79
ci3.PRLD = Gnd
N_PZ_79 = ci0 * cie * ci3
+ ci0 * cie * ci1 * ci2
/ci2 := ci2
ci2.CLKF = clock ;GCK
ci2.CE = ci0 * cie * ci1
ci2.PRLD = Gnd
/ci4 := ci4
ci4.CLKF = clock ;GCK
ci4.CE = ci0 * cie * ci3
ci4.PRLD = Gnd
/ci5 := ci5
ci5.CLKF = clock ;GCK
ci5.CE = ci0 * cie * ci3 * ci4 * /ci7
ci5.PRLD = Gnd
/ci7 := ci7
ci7.CLKF = clock ;GCK
ci7.CE = N_PZ_80
ci7.PRLD = Gnd
N_PZ_80 = ci0 * cie * ci3 * ci4 * ci7
+ ci0 * cie * ci3 * ci4 * ci5 * ci6
/ci6 := ci6
ci6.CLKF = clock ;GCK
ci6.CE = ci0 * cie * ci3 * ci4 * ci5
ci6.PRLD = Gnd
Ezt csinalja tetszoleges opciokkal, Abel-XST-VHDL es Abel-XST-Verilog
design flow eseten is. Szerintem mar mindent kiprobaltam, eredmenytelenul.
Magyarul a T flipflopokat onkenyesen atalakitja D flipflopokka, a
bemenetet pedig a makrocellak clock enable bemenetevel oldja meg. Ezek
egyenlete viszont csak 1 product termet tartalmazhat, igy plusz kozbenso
makrocellakat pocsekol el, ahelyett hogy azt csinalna amit mondtam neki...
Szanalmas... Masik problema, hogy kikapcsolhatatlanul collapse-olni
akarja a combinatorial node-okat. Nyilvan ilyeneket nem viccbol tervez
bele az ember, hanem mert kulonben tul sok product termre lenne szukseg,
es a design routolhatatlan lenne. Nem erdekli, ki akarja optimalizalni,
nem sikerul neki, kozli hogy nem fer bele az ic-be, valasszak nagyobbat.
Ha beirom hogy istype 'retain';, akkor meghagyja ugyan a makrocellat,
viszont a logikai egyenletet sem optimalizalja. Ugy nez ki megoldhatatlan,
hogy a logikai egyenletet optimalizalja, de a makrocellat ne collapseolja...
Ez a ket hiba nagyon meglepo eredmenyeket tud okozni: olyan egyszeru
aramkor, melyet kis tulzassal meg fejben is lehetne fittelni, a csodalatos
60 megas fejlesztorendszer szerint routolhatatlan.
Az elso hibara mar talaltam tokeletesen mukodo megoldast:
MODULE template
TITLE 'Template'
DECLARATIONS
ci0..ci7 pin istype 'reg';
clock pin;
cie pin;
EQUATIONS
[ci0..ci7].clk = clock;
ci0 := ci0 $ cie;
ci1 := ci1 $ (cie & ci0 & !ci3);
ci2 := ci2 $ (cie & ci0 & ci1);
ci3 := ci3 $ (cie & ci0 & (ci1 & ci2 # ci3));
ci4 := ci4 $ (cie & ci0 & ci3);
ci5 := ci5 $ (cie & ci0 & ci3 & ci4 & !ci7);
ci6 := ci6 $ (cie & ci0 & ci3 & ci4 & ci5);
ci7 := ci7 $ (cie & ci0 & ci3 & ci4 & (ci5 & ci6 # ci7));
END
Kicsit fura, de mukodik. Rendben leforditja, atalakitja T flipfloppa,
az optimalizalt egyenletek is olyanok, mint az varhato.
Nem tudom hogy en benaztam el valamit, es van ra logikus magyarazat,
vagy a webpack szar?
--
Valenta Ferenc <vf at elte.hu> Visit me at http://ludens.elte.hu/~vf/
"Vetkezz csak, gyonni raersz kesobb is..."
More information about the Elektro
mailing list