VHDL ciag dalszy

Mar 18, 2005 7 Replies

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


Piotr Wyderski snipped-for-privacy@ii.uni.wroc.pl> napisal nam:

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

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

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

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

pozdrawiam Krzychu

"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

to powinno zadziałać : x <= (y(N), y(N), y, others=>'0');

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

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

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

others uzupelni Ci zerami do konca wektora.

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

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).

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

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.

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

Pozdrawiam Piotr Wyderski

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required