VHDL ciag dalszy



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: VHDL ciag dalszy
Date: Fri, 18 Mar 2005 16:33:27 +0100


Witam,

dlaczego w Quartusie nie chce sie skompilowac wyrazenie

for k in depth-1 downto 0 GENERATE

cas('1', pipe(k).x, pipe(k-1).x, shift_right(pipe(k-1).y, k));
cas('0', pipe(k).y, pipe(k-1).y, shift_right(pipe(k-1).x, k));
end generate;

a po zamianie generate na loop wszytsko jest OK? Co robie zle?

Druga sprawa: chcialbym, by wewnatrz powyzszego for-a
zostalo wyliczone pewne wyrazenie booleowskie typu std_logic,
a nastepnie uzyc jego wartosci w kilku miejscach, m.in. jako
pierwszego parametru funkcji cas, ktory obecnie jest ustawiony
na sztywno. Niestety napisanie

(*) variable/signal c : std_logic := wartosc_wyrazenia;

if c then ...

powoduje przerwanie kompilacji i zgloszenie bledu w linii (*).
W takim razie w jaki sposob to zrobic?

Trzecie pytanie: mam wektory x i y typu signed, przy czym
x jest M downto 0, a y N downto 0 i M > N. Chcialbym, by
dwom najstarszym bitom x zostal przypisany bit znaku y,
kolejnym N bitom y, a pozostalym bitom 0. Jak to zapisac?
Dla ustalonych wartosci M=N+4 dziala

x := y(N) & y(N) & y & "00"

ale chcialbym, by liczba ostatnich zer sie automatycznie
dostosowywala do roznicy w dlugosciach wektorow, bo
wersja ostateczna tego modulu bedzie generyczna.

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: "Krzys-iek" <root.a.krionix.ten<->
Subject: Re: VHDL ciag dalszy
Date: Fri, 18 Mar 2005 16:42:58 +0100


Piotr Wyderski <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl> napisal nam:

Witam,

dlaczego w Quartusie nie chce sie skompilowac wyrazenie


witam i mam pytanko, nie pomoge niestety ;)

Znalazles gdzies w VHDL jak wysterowac popularny LCD 2x16 (Albo podobny)? Do
spartana 2 to podlacze ale nie wiem za co sie zabrac :)

dzieki


Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: VHDL ciag dalszy
Date: Fri, 18 Mar 2005 16:56:02 +0100


Krzys-iek wrote:

Znalazles gdzies w VHDL jak wysterowac popularny LCD 2x16 (Albo podobny)?

Niestety nie, wcale nie uzywam wyswietlaczy
alfanumerycznych (bo wygladaja obrzydliwie :-)).

Do spartana 2 to podlacze ale nie wiem za co sie zabrac :)

Wsadz w FPGA najmniejszego Niosa (czy jak sie to na Xilinxie nazywa,
Microblaze???) i oprogramuj sobie ten wyswietlacz jak na zwyklym
mikrokontrolerze. :-)

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: Krzysiek Kubicki <coobix_at_nospam_gazeta.plBeZTeGo>
Subject: Re: VHDL ciag dalszy
Date: Sun, 20 Mar 2005 14:48:43 +0100


Piotr Wyderski wrote:

Trzecie pytanie: mam wektory x i y typu signed, przy czym
x jest M downto 0, a y N downto 0 i M > N. Chcialbym, by
dwom najstarszym bitom x zostal przypisany bit znaku y,
kolejnym N bitom y, a pozostalym bitom 0. Jak to zapisac?
Dla ustalonych wartosci M=N+4 dziala

x := y(N) & y(N) & y & "00"


moze tak?
x := y(N) & y(N) & y & (others=>'0')

pozdrawiam
Krzychu

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: VHDL ciag dalszy
Date: Mon, 21 Mar 2005 14:03:12 +0100


Krzysiek Kubicki wrote:

moze tak?
x := y(N) & y(N) & y & (others=>'0')

"Error: VHDL aggregate error at rf_frontend.vhd(216):
OTHERS choice used in aggregate for unconstrained
record or array type is not supported"

Co mnie zupelnie nie dziwi, bo VHDL ma bardzo
slabiutkie automatyczne wnioskowanie o typach.

Pozdrawiam
Piotr Wyderski


Poprzedni Następny
Wiadomość
Spis treści
From: Krzysiek Kubicki <coobix_at_nospam_gazeta.plBeZTeGo>
Subject: Re: VHDL ciag dalszy
Date: Mon, 21 Mar 2005 23:37:57 +0100


Piotr Wyderski wrote:

moze tak?
x := y(N) & y(N) & y & (others=>'0')


"Error: VHDL aggregate error at rf_frontend.vhd(216):
OTHERS choice used in aggregate for unconstrained
record or array type is not supported"

Co mnie zupelnie nie dziwi, bo VHDL ma bardzo
slabiutkie automatyczne wnioskowanie o typach.

to powinno zadziałać :
x <= (y(N), y(N), y, others=>'0');
--
Pozdrawiam
Krzysiek Kubicki
http://www.kubi.rox.pl

Poprzedni Następny
Wiadomość
Spis treści
From: jerry1111 <pleaseJERRY1111nomorespam_at_nospam_wp.pl>
Subject: Re: VHDL ciag dalszy
Date: Tue, 22 Mar 2005 16:33:23 +0000


Piotr Wyderski wrote:

Witam,

dlaczego w Quartusie nie chce sie skompilowac wyrazenie

for k in depth-1 downto 0 GENERATE

cas('1', pipe(k).x, pipe(k-1).x, shift_right(pipe(k-1).y, k));
cas('0', pipe(k).y, pipe(k-1).y, shift_right(pipe(k-1).x, k));
end generate;

a po zamianie generate na loop wszytsko jest OK? Co robie zle?

w miejscu pipe(k-1) bedziesz mial -1, moze to przeszkadza?
Akurat nie mam dostepu do kompilatora zeby sprawdzic.

Druga sprawa: chcialbym, by wewnatrz powyzszego for-a
zostalo wyliczone pewne wyrazenie booleowskie typu std_logic,
a nastepnie uzyc jego wartosci w kilku miejscach, m.in. jako
pierwszego parametru funkcji cas, ktory obecnie jest ustawiony
na sztywno. Niestety napisanie

(*) variable/signal c : std_logic := wartosc_wyrazenia;

if c then ...
powoduje przerwanie kompilacji i zgloszenie bledu w linii (*).
W takim razie w jaki sposob to zrobic?

Znaczy w srodku for deklarujesz signal c ? Nie bardzo rozumiem
w/w problem.

Trzecie pytanie: mam wektory x i y typu signed, przy czym
x jest M downto 0, a y N downto 0 i M > N. Chcialbym, by
dwom najstarszym bitom x zostal przypisany bit znaku y,
kolejnym N bitom y, a pozostalym bitom 0. Jak to zapisac?
Dla ustalonych wartosci M=N+4 dziala

x := y(N) & y(N) & y & "00"


x:=cos tam 'others=>'0'

others uzupelni Ci zerami do konca wektora.
ale chcialbym, by liczba ostatnich zer sie automatycznie
dostosowywala do roznicy w dlugosciach wektorow, bo
wersja ostateczna tego modulu bedzie generyczna.

Aha - ja teraz pisze z pamieci, znaczy nie mam jeszcze dostepu
do VHDLa.

--
Jerry


Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <wyderskiREMOVE_at_nospam_ii.uni.wroc.pl>
Subject: Re: VHDL ciag dalszy
Date: Tue, 22 Mar 2005 19:43:28 +0100


jerry1111 wrote:

for k in depth-1 downto 0 GENERATE

cas('1', pipe(k).x, pipe(k-1).x, shift_right(pipe(k-1).y, k));
cas('0', pipe(k).y, pipe(k-1).y, shift_right(pipe(k-1).x, k));
end generate;

a po zamianie generate na loop wszytsko jest OK? Co robie zle?

w miejscu pipe(k-1) bedziesz mial -1, moze to przeszkadza?

Nie, tablica jest zadeklarowana wlasnie jako array(-1 to depth-1) of...
Ale, jak napisalem, z loop dziala, a z generate nie -- nawet wyswietla
blad skladniowy "expecting 'loop'" (czy cos takiego, ale sens jest
zachowany).

Akurat nie mam dostepu do kompilatora zeby sprawdzic.

A ja z kolei do zrodel, by wkleic odpowiedni fragment. :-)

Znaczy w srodku for deklarujesz signal c ? Nie bardzo rozumiem
w/w problem.

Wykonanie pewnych operacji w srodku petli zalezy od
bitu znaku zmiennej z (scislej: jej odpowiedniej kopii na
danym poziomie pipeline). Poniewaz od tego warunku
jest uzaleznionych kilka operacji, to nie chce za kazdym
razem wpisywac pipe(k-1).z(cordic_phase_width-1),
czy jak to tam wyglada, lecz chcialbym do tego bitu
dokleic wire i poslugiwac sie skrocona nazwa tego
drutu. A do czego ten drut prowadzi, to juz niech sie
kompilator martwi -- mnie sie nie chce N razy wpisywac
tego samego skompliowanego wyrazenia.

x:=cos tam 'others=>'0'

Nie wiem, czy nawiasy sa istotne, ale z (others => '0') nie dziala.
W czwartek sprawdze bez nawiasow.

Pozdrawiam
Piotr Wyderski