Wybaczcie mi pytanie jeśli jest banalne, ale trochę się z tym głowię. Mam w AHDL dane wejściowe w postaci:
WE[15..0] : OUTPUT;
dane te ulegają pewnej operacji (np *8).
Oraz dane wyjściowe WY[15..0] : OUTPUT; oraz przekroeczenie zakresu P: OUTPUT;
Jak mogę w czasie wykonywania operacji sprawdzić czy zakres WY został przekroczony i ustawić wtedy P na 1?
Didn't find your answer? Ask the community — no account required.
J
J.F.
INPUT ?
Formalnie to chyba powinienes zrobic operacje na odpowiedniej ilosci bitow, 16 mlodszych wyprowadzic dalej, a starsze sprawdzic czy sa zerowe [albo 111... o ile wynik jest ujemny], a jak nie - ustawiamy P.
Ale .. jesli to naprawde jest *8 - to wystarczy sprawdzic czy 3 najstarsze bity WE sa zerowe przed mnozeniem.
J.
J
JA
"s.slawek':
moze tak:
******************************* include "lpm_mult";
-- mnozenie liczb 16 bitowych daje wynik 32 bity p_tmp :lcell;
-- powinno byc 'node', jest lcell zeby kompilator
-- zachowal nazwe
begin
mpy_result[] = lpm_mult(in_A[], in_b[],,,,) with (lpm_widtha = 16, lpm_widthb = 16, lpm_widthp = 32, lpm_widths = 1 ) returns (.result[]) ; -- lpm_mult to macro Altery mnozace -- zobacz Help -> Megafunctions/LPM -> lpm_mult
for i in 15 to 0 generate out_dat[i] = dff(mpy_result[i],clk,,); end generate; -- zapisanie mlodszych bitow wyniku mnozenia w rejestrach WY
p_tmp = (mpy_result[31..16]) == 0; -- sprawdzenie, czy starsze bity mnozenia sa = 0
p = dff(!p_tmp,clk,,);
end;
****************************
to jest wariant ogolny, obie liczby wejsciowe moga przybierac dowolna, 16 bitowa wartosc, jesli w Twoim przypadku mnozenie jest przez stala, to JF podpowiedzial, jak to zrobic naprawde prosto :)
JA
I
invalid unparseable
Wielkie dzięki wszystkim
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.