ISE8.1 symulacja

Aug 26, 2007 5 Replies

To mo¿e tutaj mi kto¶ podpowie bo widzê, ¿e wiêkszy ruch niz na pl.comp.programming, a temat tak po ¶rodku. Tworze prosty element w VHDL-u,o taki:



ENTITY cnt IS PORT ( clock: IN STD_LOGIC; sload: IN STD_LOGIC; data: IN integer RANGE 0 TO 31; result: OUT integer RANGE 0 TO 31 ); END cnt;



ARCHITECTURE rtl OF cnt IS SIGNAL result_reg : integer RANGE 0 TO 31; BEGIN PROCESS (clock) BEGIN IF (clock'event AND clock = '1') THEN IF (sload = '1') THEN result_reg <= data; ELSE result_reg <= result_reg + 1; END IF; END IF; END PROCESS;



result <= result_reg; END rtl;



Tworze "Schematic Symbol", wrzucam ten element jako jedyny na schemat, pod³±czam I/O markery, prze³±czam na "Bechavioral Simulation", tworze nowe ¼ród³o "Test Bench WaveForm", wybieram zegar dla odpowiedniego wej¶cia i otrzymujê na wszystkich wyj¶ciach linie proste... Jak wybiore jaki¶ licznik z tych gotowych z biblioteki symulacja dzia³a. Co robie ¼le?



Czy sprawdziłeś wartość sygnału sload w testbench'u ? Jezeli sload=1 , to nie ma się czemu dziwić. Jeżeli sload=0 , to nie wiem. A tak nawiasem mówiąc , to symulacja w ISE jest do d... ! Cholery można z tym dostać. Fajnie było w Foundation.

MH

Problem nie dawał mi spokoju , więc spróbowałem symulację zgodnie z Twoim żródłem (ISE7.1). Efekt ten sam. Popełniasz następujący błąd przy symulacji (kod żródłowy jest OK) :

1) Na początku symulator nie zna wartości rejestru result_reg , w związku z czym nie wiadomo jaki może być wynik inkrementacji tego rejestru.

2) Rozwiązanie bardzo proste (modyfikacja testbench'a) :

- ustaw wejście data na 0 (może być dowolna liczba), następnie sload na 1 , zpowrotem sload na 0.

Co to daje ? Określasz konkretnie zawartość rejestru result_reg , a potem wszystko działa normalnie.

Pozdr. ,

MH

Artur snipped-for-privacy@poczta.onet.pl> napisał(a):

Zakladajac ze wartosc sload nie jest równa '1' to licznik powinien sie krecic, przynajmniej przez pierwsze 32 okresy zegara, zanim nie zostanie przekroczona maksymalna wartosc zadeklarowana dla rejestru licznika.

Moze spróbuj zmienic typ sygnalu rejestru i portów danych na std_logic_vector(4 downto 0)

Eee tam. Guzik prawda. Dlaczego przez pierwsze 32 okresy ?? Skoro jest to licznik 32-bitowy , to do jego "przekręcenia" potrzeba (4294967296 - data) okresów. Mało tego. Powinien kręcić się dalej od zera , niezależnie od wartości podanej na port "data".

Cooo ??? Borygo piłeś ? Ogólna zasada : jak się na czymś nie znam , nie udzielam w danym temacie porad.

MH

P.S. Rozwiązanie (przetestowane) jest w moim poprzednim poście.

Mariusz Hajduk snipped-for-privacy@o2.pl napisał(a):

Ponieważ sygnał sygnał przechowujacy stan licznika to integer z zakresu od 0 do 31.

To nie jest licznik 32 bitowy.

Nie, dzieki. Ale wypij moje zdrowie ;-)

No i tutaj sie z Tobą w pełni zgadzam.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required