Krótszy zapis w VHDL

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

Reply to
Piotr Wyderski
Loading thread data ...

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

Reply to
RobertP.

Piotr Wyderski napisał(a):

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

Pozdrowienia,

Reply to
Andrzej Ekiert

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

Pozdrawiam Piotr Wyderski

Reply to
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.

Reply to
J.F.

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

Reply to
Piotr Wyderski

Nie skracaj. Ma byc dobrze a nie pieknie.

R.

Reply to
nbs

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

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

Dz.

Reply to
Dziadek

Oj chyba nie... ;-)

Pozdrawiam Piotr Wyderski

Reply to
Piotr Wyderski

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

Reply to
Dziadek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.