Artur
Guest
Sun Aug 26, 2007 4:33 pm
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?
--
Artur
Mariusz Hajduk
Guest
Sun Aug 26, 2007 6:45 pm
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
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Mariusz Hajduk
Guest
Sun Aug 26, 2007 11:55 pm
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
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
[g.d.]
Guest
Mon Aug 27, 2007 2:42 pm
Artur <asdfg2@poczta.onet.pl> napisał(a):
Quote:
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?
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)
--
Pozdrawiam,
[g.d.]
--
Wysłano z serwisu Usenet w portalu Gazeta.pl ->
http://www.gazeta.pl/usenet/
Mariusz Hajduk
Guest
Mon Aug 27, 2007 5:56 pm
Quote:
Artur <asdfg2@poczta.onet.pl> napisał(a):
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?
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.
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".
Quote:
Moze spróbuj zmienic typ sygnalu rejestru i portów danych na
std_logic_vector(4 downto 0)
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.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
[g.d.]
Guest
Tue Aug 28, 2007 2:41 pm
Mariusz Hajduk <logison@o2.pl> napisał(a):
Quote:
Eee tam. Guzik prawda. Dlaczego przez pierwsze 32 okresy ??
Ponieważ sygnał sygnał przechowujacy stan licznika to integer z zakresu od 0
do 31.
Quote:
Skoro jest to licznik 32-bitowy , to do jego "przekręcenia" potrzeba
To nie jest licznik 32 bitowy.
Quote:
Cooo ??? Borygo piłeś ?
Nie, dzieki. Ale wypij moje zdrowie ;-)
Quote:
Ogólna zasada : jak się na czymś nie znam , nie udzielam w danym temacie
porad.
No i tutaj sie z Tobą w pełni zgadzam.
--
pozdrawiam,
[g.d.]
--
Wysłano z serwisu Usenet w portalu Gazeta.pl ->
http://www.gazeta.pl/usenet/