VHDL - cteni vstupu v processu

Danhard danhard@volny.cz
Úterý Říjen 5 12:32:52 CEST 2004


To je tak, kdyz se pise ve VHDL bez hlubsi znalosti HW struktury na ktere se
to implementuje !

Modelovat LATCH zpusobem, ktery tu byl uveden pro HDL, a ktery je
bezproblemovy pro CPLD
Q = L*D + !L*Q + Q*D;
pro FPGA nejde pouzit, protoze tam neni ta funkce tvorena AND-OR matici, ale
multiplexem tabulky (obsahu RAM) a je hazardni, nakonec na asynchronni zpetnou
vazbu vas upozorni prekladac.
Pokud to namodelujete jako asynchronni RS klopny obvod ve schematu, tak se to
prelozi skutecne do dvou LUT tabulek krizene propojenych, ale zase to bude
rvat, ze tam mate nezadouci zpetnou vazbu. Nicmene se to nafituje spravne, ale
takovy KO je rozhodne nachlnejsi k metastabilte, nez vnitrni registr. Kromtoho
zpozdeni, ktera jsou v ceste zalezi skutecne jak se konkretni implementace
nafituje, zatimco u CPLD jsou zpozdeni dana vicemene pevne propojovaci matici.
Ale proc to takhle bastlit, kdyz se da registr v CLB naprogramovat primo jako
LATCH ?

Jestli to VHDL korektne jednoznacne nedela, tak je to bud blbe pouzita
syntaxe, nebo to proste VHDL blbe preklada.
Jak se to potom konkretne zadratuje, muzete potom zjistit treba v FPGA Editoru
:o)
Problem je spis v tom, ze kazda asynchronni funkce generovana LUT tabulkou
muze byt hazardni, a jestli takto generujete hodiny toho LATCHe, tak tam muzou
byt hyzardy, ktere zpusobi falesne nahrani latche :(

Synchronni design je samozrejme u FPGA zadouci, a vsechny vstupy jsou na to
pripraveny tim, ze maji vstupni registr.

U CPLD se daji pouzit na funkci LATCH take asynchronni S/R vstupy, takze to
vypada nejak takto:

Q pin istype"reg";

Q := 1;
Q.clk = 1;
Q.ap = D*L;
Q.ar = !D*L;

V podstate asynchronni load toho klopaku, ten samozrejme muze delat jeste
synchronni funkci, ktera je tady nevyuzita.

Danhard

> Stalo sa mi ze implementacia korektne napisaneho LATCHu vo VHDL menila
> preklad od prekladu chovanie /a nie v jednom pripade i ked uznavam ze to
> boli vsetko FPGA/. Takze teraz robim iba synchronne, bez LATCH a viem ze ak
> fitovanie  neprekroci oneskorenie definovane pouzitymi hodinami, opakovane
> fitovanie je 100%. Co vobec neplati pre pre hazardy a rozne oneskorenia pri
> asynchronnych dejoch.
> Takze:
> -zatial som sa vzdy uspesne asynchronnym rieseniam vyhol
> -ak prekrocite max. oneskorenie klopak-klopak dane pouzitymi hodinami, tak
> je to mozne
> -nie preto ze by asynchronny navrh nevedeli, ale vnutorna struktura FPGA ho
> neumoznuje spolahlivo implementovat /hlavna pricina-log. funkcia je
> realizovana pomocou RAM!!!/
> -a tie LATCH su fakt pravda i ked Xilinx sa tym nechvali, stalo sa mi to a
> nie raz /ak nema suciastka priamo LATCH moznost, VHDL je vskutocnosti
> implementovane asynchronne!!!/.
>
> Milan





Další informace o konferenci Hw-list