Witam,
chcialbym zaimplementowac kilka algorytmow w VHDL, ktorego sie wlasnie zaczalem uczyc i mam kilka pytan o konwencje notacyjne i implementacyjne. Algorytmy zostaly wczesniej przetestowane w Octave i C++ (napisalem sobie zbior funkcji odpowiadajacy magafunctions Altery i z nich poskladalem moje "hardware" :-)), wiec na pewno sa dobre.
- Moduly generyczne. Dlaczego Quartus odrzuca przypisanie wartosci domyslnej, jesli wartosc ma byc taka sama, jak innego parametru modulu? Chcialbym napisac tak:
generic (
phase_accumulator_size : positive := 32; phase_offset_size : positive := 16; phase_output_size : positive := phase_accumulator_size; phase_step_size : positive := phase_accumulator_size );
a musze tak (mimo, ze w Internecie znalazlem konstrukcje odpowiadajaca powyzszemu zapisowi):
generic (
phase_accumulator_size : positive := 32; phase_offset_size : positive := 16; phase_output_size : positive := 32; phase_step_size : positive := 32 );
- W jaki dokladnie sposob korzysta sie z asercji? Chcialbym miec taki tester:
jesli phase_step_size > phase_accumulator_size, to zglos blad kompilacji.
Jak to zapisac za pomoca assert i (zwlaszcza) w ktorym miejscu to umiescic?
- Czy w konstrukcji generujacej for mozna uzywac arcus tangensa z wyrazenia stalego, obliczanego na podstawie iteratora, jako stalej?
- Chcialbym dodac do 16 starszych bitow 32-bitowej liczby unsigned, zakodowanej w std_logic_vector, 16-bitowa liczbe unsigned, rowniez pamietana w wektorze. W jaki sposob to najlepiej zapisac, jesli nie interesuje mnie przeniesienie generowane przez ten uklad (tzn. wszystko ma sie liczyc modulo 2^32)? A w jaki sposob, gdybym chcial miec informacje o przeniesieniu?
- Ogolniej: w jaki sposob mozna wyciagnac interesujacy mnie podzbior bitow z danego std_logic_vector? Np. chcialbym dostac wektor zlozony z bitow 1,2,3,19, 25 danego wektora
- Jak zrobic, by wynik dzialania jakiegos procesu byl zapamietywany w latchu? Zwiazany z nim modul powinien miec dwa N-bitowe latche, A i R, wejscia clk i N-bitwowe s i wyjscie N-bitowe f, a dzialac tak (zapis w pseudokodzie):
process(clk) if rising_edge(clk) then R := A; A := A + s; f := R; end end
Jak zadeklarowac latche A i R? Czy mozna prosic o kawalek kodu w VHDL realizujacy podana powyzej funkcje?
- Czym sie rozni "signal" od "variable"?
Pozdrawiam Piotr Wyderski