VHDL - ruzne vysledky pro (predpokladane) stejnou konstrukci (Xilinx)...

David Belohrad david na belohrad.ch
Úterý Únor 1 20:52:35 CET 2011


-->
 Ale ocekavat stejny vysledek syntezatoru pri ruznych zapisech ac napriklad
funkce ekvivalentnich je pro me spis nemyslitelne.


O tomhle bych si dovolil s uspechem pochybovat :) Rozhodne to neplati pro
matematicke funkce, ktere ackoliv jsou asociativni, vysledny kod je jiny.
Alespon tohle nam lili do hlavy chlapci z doulos. Mozna bych jeste nekde
pohledal papiry.

jinak souhlasim s tim 'when others'. tohle opravdu muze generovat jiny kod.
dalsi moznosti je, ze pokud je typ integer unconstrained, vygeneruje se
automaticky 32bitove cislo, ktere ma vetsinou za nasledek to, ze design
'jede' pomaleji.


Kdyz uz jsme tak u tech diskuzi: zajimalo by me, jesli ma nekdo zkusenosti s
Altera Timing questem. Ja jsem doted pouzival pouze klasicky timing
designer. Na novy projekt zkousim timequest a nestacim se divit. neni mi
jasne, jak v SDC zadeklarovat asynchronni casove domeny a osetrit spravne
to, ze veskere signaly jsou propasovane dvojitym flipflopem....

d.





Doporucit reseni bez hlubsi znalosti problemu bude tezke ...
>
> Tosa
>
>
>
> On 1.2.2011 19:00, Marek Sembol wrote:
>
>> Prosim o pomoc s nasledujicim problemem. Doufam ze fragment meho kodu
>> bude stacit:) Mam (v ramci jednoho procesu) konstrukci:
>>                case state_reg is
>>                when "0000" =>
>>                        if (trigfiltered_reg(0) = '1') then
>>                                state_next<=
>> regset(0)(nextStateRange'range);
>>                        end if;
>>                when "0001" =>
>>                        if (trigfiltered_reg(1) = '1') then
>>                                state_next<=
>> regset(1)(nextStateRange'range);
>>                        end if;
>> -- a tak dale a tak dale az po
>>                when "1111" =>
>>                        if (trigfiltered_reg(15) = '1') then
>>                                state_next<=
>> regset(15)(nextStateRange'range);
>>                        end if;
>>                when others =>  null;
>>                end case;
>>
>> Vysledek je funkcni, pise mi to max. hodiny 240MHz.
>> Myslel jsem, ze konstrukce:
>>                        if (trigfiltered_reg(CONV_INTEGER(state_reg)) =
>> '1') then
>>                                state_next<=
>> regset(CONV_INTEGER(state_reg))(nextStateRange'range);
>>                        end if;
>> bude shodna. Problem je, ze to nageneruje zcela jinak a vysledkem je
>> max. takt 212MHz
>>
>> A ted moje otazky:
>> 1) proc?
>> 2) jak to vyresit aniz bych musel rucne psat vsechny ty vetve? (duvod:
>> chci tu cast obecneji a pocet vetvi (4/8/16/32) ridit pomoci genericu.
>> Dik za kazdou radu,
>> Marek
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20110201/c9a1cef8/attachment-0001.htm>


Další informace o konferenci Hw-list