Krótszy zapis w VHDL

Jun 24, 2005 9 Replies

Witam,



czy zakładając, że



variable x, y, r : std_logic_vector(7 downto 0);



można skrócić zapis takiego wyrażenia (chodzi mi o wektor tych iksów):



r := y and (x(0) & x(0) & x(0) & x(0) & x(0) & x(0) & x(0) & x(0));



Próbowałem



r := y and (others => x(0));



ale niestety Quartus nie chce tego skompilować.



Pozdrawiam Piotr Wyderski


Chyba tak łatwo nie ma. Ja używam funcji którą wcześniej sobie zdefiniowałem w swoim pakiecie, gdzie wykorzystuję pętlę indeksowaną w zakresie długości wektora wejściowego robiąc to element po elemencie. W samym module VHDL wywołanie funkcji wygląda elegancko i syntezuje się (w XST Xilinxa).

Piotr Wyderski napisał(a):

Spróbuj r := y and (y'range => x(0));

Pozdrowienia,

O, zadziałało. Dziękuję. :-)

Pozdrawiam Piotr Wyderski

Czy ja dobrze rozumiem ze chodzi Ci o: if (x(0)='1') then r := y else r := B"00000000"

A moze zadziala r=x(0)*y

J.

Ty tak, kompilator nie za bardzo: ten kod to fragment dłuższej sekwencji, a konkretnie układu mnożącego dwa elementy ciała Galois GF(2^8) modulo pewien wielomian -- po wywaleniu z niej ifów i zastąpieniu ich "obliczanymi" warunkami złożoność spadła z 68 do 59 LE, a czas spadł z 18,8ns do 15,4 ns. :-)

Przy czym układ jest czysto kombinacyjny i dość głęboki, jeszcze się nie brałem za pipelining, bo mi inny problem przeszkadza.

Pozdrawiam Piotr Wyderski

Nie skracaj. Ma byc dobrze a nie pieknie.

R.

Jezeli r to std_logic_vector(8 downto 0), to:

r <= ( 9 => y, others => x(0) );

Dz.

Oj chyba nie... ;-)

Pozdrawiam Piotr Wyderski

Sorry, oczywiscie ... 8 => y, ... Dz.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required