vhdl - pomocy - co to za blad?? [code included]

Sep 08, 2004 5 Replies

mam taki krotki programik:


use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;



ENTITY dek_zak2 IS PORT (Zegar,Jesli11,Jesli13: IN std_logic; Wyjscie : OUT std_logic); END;



architecture Behavioral of dek_zak2 is signal wartosc : integer range -3 to 12; signal nastepny : integer range -3 to 4; begin



dek_zak2 : process (Zegar,Jesli11,Jesli13)



begin if Zegar'event and Zegar = '1' then if wartosc = 11 then wartosc <= nastepny; nastepny <= 0; else wartosc <= wartosc + 1; end if;



else if rising_edge(Jesli11) then if wartosc < 11 then wartosc <= wartosc + 1; else nastepny <= nastepny + 1; end if; end if;


if rising_edge(Jesli13) then if wartosc > 0 then wartosc <= wartosc - 1; else nastepny <= nastepny - 1; end if; end if; end if;



end process dek_zak2;



end architecture;


Check syntax nie wywala zadnych bledow. Niestety pozniej wyskakuje: ERROR:Xst:827 - D:/Xilinx/mdek_zak2.vhd line 16: Signal wartosc cannot be synthesized, bad synchronous description.



?? O co chodzi?? (srodowisko to webpack xilinxa) Patrzylem na stronie xilinxa ale jakos nie znajduje rozwiazania. Moze ktos pomoc?? Pozdrowienia



5hinka
5hinka snipped-for-privacy@poczta.wp.pl> napisał:

IMHO chodzi o to że wprowadziłeś reakcje na zbocza kilku różnych sygnałów - prawdopodobnie kompilator nie potrafi upchnąć tego w hardware (szczególnie że rożne zbocza modyfikują ten sam sygnał) co gorsza - nawet jeśli się skompiluje może działać w dość nieprzewidywalny sposób. Powinieneś przeprojektować całość tak aby oczekiwał na zbocze tylko na "Zegar" - pozostałe sygnały powinny jedynie sterować wartościami przypisań. Czyli zmiast trzech sekcji if rising_edge(sygnał)...

użyj tylko jednej

if rising_edge(Zegar) end if

i w jej wnetrzu analizuj wartości sygnałów. Pewnie będziesz musiał użyć paru dodatkowych "zmiennych lokalnych" ale powinno zadziałać. GRG

sygna³ów - prawdopodobnie

nieprzewidywalny

Niestety to nie to. Probowalem juz zamieniac pozostale rising_edge na normalne if Jesli11 = '0' i ten sam blad wyskakiwal :-(((

Cześć

5hinka napisał:

Taki układ jest raczej ciężko realizowalny fizycznie. Toteż syntezer słusznie pokazuje błąd.

Masz tutaj układ z trzema różnymi sygnałami zegarowymi: Zegar, Jesli11 i Jesli13, oraz rejestr-licznik:"wartosc". Rejestr-licznik: realizowany jest w przerzutnikach typu:"D" Niemożliwe jest taktowanie przerzutnika "D" TRZEMA różnymi sygnałami zegarowymi.

Napisz - możesz na priva - co chcesz zrealizować to mogę Ci pomóc.

Pozdrawiam

Jerzy Gbur

[...]

No to kompilator powinien skonfigurowac stosowny automat asynchroniczny :-)

J.

J.F. napisał:

Z takiego zapisu raczej nie. Przynajmniej nie ten syntezer od xilinx'a. Co do automatów asynchronicznych to nie polecam ich stosowania, chyba, że do jakichś bardzo prostych zastosowań.

pozdr.

Jerzy Gbur

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required