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