Cyfrowe przetwarzanie sygnalow(kolor).pdf
Transcript of Cyfrowe przetwarzanie sygnalow(kolor).pdf
-
Cyfrowe przetwarzanie sygnaw
CAD
Mariusz Rawski
http://rawski.zpt.tele.pw.edu.pl/
-
Cyfrowe przetwarzanie sygnau
A/D konwersja sygnau analogowego na cyfrowy (prbkowanie, kwantyzacja, kodowanie)
DSP ukady cyfrowego przetwarzania :
filtracja FIR
filtracja IIR
( ) ( )=
=M
mmnxmbny
0( ) ( ) ( ) + = NM filtracja IIR
transformacja Fouriera
funkcja korelacji wzajemnej
Charakterystyczne jest to, e wszystkie te obliczenia posiadaj posta:
Skadaj si z mnoe poczonych z akumulacj MAC (Multiply and Accumulate).
D/A konwersja sygnau cyfrowego na analogowy
Mariusz Rawski 2
( ) ( ) ( )=
+=
=N
kknyka
M
mmnxmbny
10( ) ( ) nkNjeN
nnxkX
)/2(1
0
==
( ) ( ) ( )=
+=N
nmnynx
NmyxR 0
1,
=
+++==N
n NyNxyxyxnynxA 1
...2211
-
Operacja MAC (Multiply and Accumulate)
Podstawowa operacja w cyfrowym przetwarzaniu sygnaw
Skada si z operacji mnoenia i dodawania
Realizowana w procesorach DSP jako jednostka obliczeniowa
RejestrData in
Jednostka MACAlgorytm iteracyjny
Przykad:
Filtr FIR 256 rzdu = 256 operacji mn i przechowaj (MAC) na pojedyncz prbk danych
Mariusz Rawski 3
Data out
-
MAC MAC
MAC MAC
MAC MAC MAC MAC MAC MAC MAC MAC
MAC MAC MAC MAC MAC MAC MAC MAC
MAC MAC MAC MAC MAC MAC MAC MAC
MAC MAC MAC MAC MAC MAC MAC MAC
Wydajne Procesory DSP
Wysoce zrwnoleglone przetwarzanie w FPGA
Procesory DSP vs. FPGA
Staa nieelastyczna architektura Mona realizowa setki przeksztace Staa nieelastyczna architektura Typowo 1- 8 jednostki MAC Staa szeroko danych
Przetwarzanie szeregowe ogranicza przepustowo
Wspdzielone w czasie jednostki MAC Due czstotliwoci taktowania stawiaj
due wyzwania projektantom systemw
Wymagane wiele cykli zegara Filtr FIR 200 stopniowy wymaga bdzie
25+ cykli zegara na prbk w przypadku procesora z 8 jednostkami MAC
Mona realizowa setki przeksztace MAC w jednym ukadzie FPGA
Zrwnoleglona realizacja umoliwia du przepustowo
Filtr FIR 200 stopniowy wymaga 1 cykl zegara na prbk
Mariusz Rawski 4
-
Elastyczno ukadw FPGA
FPGA Optymalizacja realizacji
+
Parallel Semi-Parallel Serial
MAC
+
+
+
+
+
+
+
+
D Q
+
+
+
+
D Q
Szybko Koszt
Q = (A x B) + (C x D) + (E x F) + (G x H)
Mariusz Rawski 5
-
Architektura FPGA vs. DSP wydajno kosztem powierzchni
rdo: WP116, Xilinx Spartan-II FIR Filter Solution, 2000
Mariusz Rawski 6
-
Definicja
Filtr cyfrowy FIR
1,...,0 1
0
==
= Nncxy
L
kknkn
Filtracja proces przetwarzania sygnau w dziedzinie czasu polegajcy na Filtracja proces przetwarzania sygnau w dziedzinie czasu polegajcy na redukowaniu i usuniciu niepodanych skadowych zawartych w sygnale wejciowym. Filtr cyfrowy to algorytm lub proces obliczeniowy w wyniku ktrego jedna sekwencja liczb (tzn.sygna wejciowy) zamieniany jest w inn sekwencj (tzn. sygna wyjciowy).
Jest szeroko stosowana w przetwarzaniu sygnaw. Obliczenie tych sum w sposb bezporedni wymaga O(L2) operacji
arytmetycznych
Mariusz Rawski 7
-
Filtr o skoczonej odpowiedzi impulsowej FIR
L rzd filtru, c[n] wspczynnik, z-1 element opniajcy
1
0
==
L
kknkn cxy
L-1 sumowa, L mnoe
Mariusz Rawski 8
-
Realizacja operacji MAC
X[L-1] X[1] X[0]
Rejestr przesuwajcy Uk. mnocy AkumulatorSumator
= +++==
1
0 11...1100
L
n LcLxcxcxncnxy
Mariusz Rawski 9
C[L-1] C[1] C[0]
+ R
-
Sumatory
Sumowanie jest najpowszechniejsz operacj arytmetyczn
Suy jako cz skadowa innych operacji (np.. mnoenia)
Suy do realizacji odejmowania poprzez sumowanie argumentu ze zmienionym znakiem
BA
argumentu ze zmienionym znakiem
Sumator jest logik kombinacyjn, Mona uy najprostszego sposobu i opisa sumator tablic prawdy
Mariusz Rawski 10
S
-
Prosta realizacja sumatora
library ieee;use ieee.std_logic_1164.all;
entity add_tab isport(
a, b : in std_logic_vector(7 downto 0);cout : out std_logic;s : out std_logic_vector(7 downto 0)
);end add_tab;
architecture arch of add_tab issignal tab_in : std_logic_vector(15 downto 0);signal tab_out : std_logic_vector(8 downto 0);
begintab_in
-
Prosta realizacja sumatora wyniki
Fitter Summary
Top-level Entity Name add_tab
Family StratixFamily Stratix
Device EP1S10F484C5
Total logic elements 29 / 10,570 ( < 1 % )
Total pins 25 / 336 ( 7 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 0 / 48 ( 0 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Prosta koncepcja, ale sposb opisu nie do przyjcia: dla sumatora 8-bitowego tablica ma 216 = 65 536 wierszy dla sumatora 16-bitowego tablica ma 232 = 4 294 967 296 wierszy
Mariusz Rawski 12
-
Sumator 1-bitowy full adder
Rwnania sumatora
Rwnanie boolowskie sumy:
sk = ak xor bk xor ck = ak bk ck
Rwnanie boolowskie przeniesienia:
ck+1 = (ak and bk) or (ak and ck) or (bk and ck) = (ak yk) + (ak ck) + (bk ck) c a b c sk k k k k k
Mariusz Rawski 13
ck ak bk ck+1 sk0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
library ieee;use ieee.std_logic_1164.all;
entity full_adder_1bit isport(
a, b, cin : in std_logic;s, cout : out std_logic
);end;
architecture arch of full_adder_1bit isbegin
s
-
Sumator ripple-carry adder (RCA)
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;
entity rca isgeneric(
WIDTH : integer := 8);port(
a, b : in std_logic_vector(WIDTH-1 downto 0);cout : out std_logic;s : out std_logic_vector(WIDTH-1 downto 0)
);end;
architecture arch of rca is
beginc(0) b(i),cin => c(i),s => s(i),cout => c(i+1)
);end generate;
end;
Mariusz Rawski
-
Sumator ripple-carry adder wyniki
Fitter Summary
Top-level Entity Name rca
Family StratixFamily Stratix
Device EP1S10F484C5
Total logic elements 18 / 10,570 ( < 1 % )
Total pins 25 / 336 ( 7 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 0 / 48 ( 0 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Mariusz Rawski 15
-
Carry-ripple adder - wady
Jaka jest cieka krytyczna tego
ukadu?
Liczba komrek:
O(N) liniowo zalena od wielkoci sumatora
Opnienie:
O(N) liniowo zalene od wielkoci sumatora
Mariusz Rawski 16
-
Przyspieszenie sumowania
Kluczem do przyspieszenia dodawania jest zmniejszenie opnienia sieci propagacji sygnau przeniesienia
Z punktu widzenia propagacji tego sygnau nieistotne s wartoci konkretnych operandw
Znaczenie ma czy w danym stopniu sumatora sygna przeniesienia jest
generowany (generate), propagowany (propagate), pochaniany (anihilate).
Mariusz Rawski 17
-
Optymalizacja propagacji przeniesienia
Warunek generacji przeniesienia:
gi = ai and bi
Warunek propagacji przeniesienia:
pi = ai xor bi
c a b c s
Warunek pochaniania przeniesienia:
anii = (not ai) and (not bi)
Mariusz Rawski 18
ck ak bk ck+1 sk0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
-
Sumator carry lookahead (CLA)
Przewidywanie przeniesienia
ci = gi-1 + ci-1pi-1 Przeniesienia kolejnych stopni sumatora
c1 = g0 + cinp0 c2 = g1 + g0p1 + cinp0p1 c3 = g2 + g1p2 + g0p1p2 + cinp0 p1p2
Mariusz Rawski 19
-
Sumator carry lookahead (CLA)
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;
begin
pstructure:for i in WIDTH-1 downto 0 generate
Warunek generacji przeniesienia:
gi = ai and bi Warunek propagacji przeniesienia:
pi = ai xor bi Przewidywanie przeniesienia
ci = gi-1 + ci-1pi-1
entity cla isgeneric(
WIDTH : integer := 8);port(
a, b : in std_logic_vector(WIDTH-1 downto 0);cout : out std_logic;s : out std_logic_vector(WIDTH-1 downto 0)
);end;architecture arch of cla is
signal c : std_logic_vector(WIDTH-1 downto 0);signal p : std_logic_vector(WIDTH-1 downto 0);signal g : std_logic_vector(WIDTH-1 downto 0);
for i in WIDTH-1 downto 0 generatep(i)
-
Sumator carry lookahead (CLA) wyniki
Fitter Summary
Top-level Entity Name cla
Family StratixFamily Stratix
Device EP1S10F484C5
Total logic elements 15 / 10,570 ( < 1 % )
Total pins 25 / 336 ( 7 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 0 / 48 ( 0 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Mariusz Rawski 21
-
Mnoenie w ukadzie kombinacyjnym
P = A B, n = 4
Mi = bi A 2i
a3 a2 a1 a0
b3 b2 b1 b0
0 0 0 0 a3b0 a2b0 a1b0 a0b0 M0
0 0 0 a3b1 a2b1 a1b1 a0b1 0 M1
0 0 a3b2 a2b2 a1b2 a0b2 0 0 M2
0 a3b3 a2b3 a1b3 a0b3 0 0 0 M3
p7 p6 p5 p4 p3 p2 p1 p0
Mnoenie to w zasadzie wielokrotnie wykonywane dodawanie.
Mariusz Rawski 22
dodawanie.
-
Nowoczesne struktury FPGA
RegReg
RegReg
AdderAdder
AdderAdder12345678
Comb.Logic
AL
M In
pu
ts
ALM
Linie poczeniowe carry-chain o maych opnieniach spinajce wiele blokw logicznych pozwalaj przyspeszy operacje dodawania i odejmowania
Wzgldnie wydajne przy realizacji operacji dodawania i odejmowania. Jednake nie optymalne pod wzgldem kosztu, szybkoci i poboru mocy w przypadku realizacji operacji mnoenia i dzielenia
-
Nowoczesne struktury FPGA
+
Op
tio
nal
Pip
elin
ing
Ou
tpu
t Reg
iste
r U
nit
Ou
tpu
t Mu
ltip
lexe
r
144 144
36
36
36
36
37
37
38
+ -
+ - Inp
ut R
egis
ter
Un
it
Producenci ukadw FPGA wbudowuj w swoje ukady dedykowane bloki realizujce funkcj mnoenia.
Niektrzy poszli nawet dalej ciek integracji udostpniajc w peni funkcjonalne bloki MAC zwane blokami DSP
-
Operacja dodawania
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;
entity add isgeneric(
WIDTH : integer := 8);port(
a, b : in std_logic_vector(WIDTH-1 downto 0);cout : out std_logic;s : out std_logic_vector(WIDTH-1 downto 0)
);end;
architecture arch of add isarchitecture arch of add is
signal result : unsigned(WIDTH downto 0);
beginresult
-
Operacja dodawania wyniki
Fitter Summary
Top-level Entity Name add
Family Stratix
Device EP1S10F484C5
Total logic elements 9 / 10,570 ( < 1 % )
Total pins 25 / 336 ( 7 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 0 / 48 ( 0 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Mariusz Rawski 26
Najszybsza i najoszczdniejsza realizacja.Realizacja wasnego moduu sumatora masens tylko, gdy stosowany jest specyficznyschemat dodawania, np. z wykorzystaniempotokowania lub sumatory wieloargumentowe.
-
Operacja mnoenia
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;
entity mul isgeneric(
WIDTH : integer := 8);port(
a, b : in std_logic_vector(WIDTH-1 downto 0);p : out std_logic_vector(2*WIDTH-1 downto 0)
);end;architecture arch of mul is
signal result : unsigned(2*WIDTH-1 downto 0);signal result : unsigned(2*WIDTH-1 downto 0);
beginresult
-
Operacja mnoenia
Fitter Summary
Top-level Entity Name mul
Family Stratix
Device EP1S10F484C5
Total logic elements 0 / 10,570 ( < 1 % )Total logic elements 0 / 10,570 ( < 1 % )
Total pins 32 / 336 ( 9 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 1 / 48 ( 2 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Mariusz Rawski 28
Bardzo wydajna realizacja. Gdyby jednak niewykorzystywa dedykowanego blokumnocego ukad zajmowaby 106 komrek atpd wynosioby 22,346 ns. Realizacja wasnegomoduu mnocego dopasowanego dokonkretnego algorytmu czsto prowadzi dolepszych rezultatw.
-
Obliczanie wartoci funkcji w DSP
W cyfrowym przetwarzaniu sygnaw zazwyczaj nie jest potrzebne wykorzystanie dokadnych wartoci funkcji matematycznych takich jak logarytm, pierwiastek czy funkcje trygonometryczne. Zazwyczaj dopuszcza si pewien stopie niedokadnoci i kadzie si nacisk na szybko oblicze
Std te obliczanie przyblionych wartoci funkcji matematycznych jest bardzo wanym zagadnieniem w DSP
Jedn z czsto wykorzystywanych funkcji jest pierwiastek stopnia n (najczciej pierwiastek kwadratowy).
Mona do tego celu wykorzysta np. szeregi Taylora.
Jednake znalezienie wartoci np. jest rwnoznaczne z rozwizaniem rwnania
Std te mona do tego celu zastosowa dowolny algorytm znajdowania miejsca zerowego funkcji taki jak np. metoda Newtona
Mariusz Rawski 29
3 q q x 03 =
-
Metoda Newtona
Zwana rwnie metod Newtona-Raphsona lub metod stycznych iteracyjny algorytm wyznaczania przyblionej wartoci miejsca zerowego funkcji.
Dla zadanej funkcji (x) oraz jej pochodnej '(x), zaczynamy od pierwszego przyblienia x0. Lepsze przyblienie x1 otrzymuje si ze wzoru
)('
)(
0
001 xf
xfxx =
)(' 0xf
-
Metoda Newtona
Zadanie:
wyznaczy warto
Dla (x) = x3 17,
std x1 = x0 (x03 17)/(3* x0
2)
713
713
load = 1
T
N
x = data
start = 1
T
N
cnt = 0
Niech next(x) = x (x3 17)/(3* x2).
Obliczanie wartoci mona
przeprowadzi algorytmem iteracyjnym. cnt = 9 T
res = x
ready = 1
cnt 0
cnt = cnt + 1
N
x = fnext(x)
713
-
Metoda Newtona
Algorytm iteracyjny z wczytaniem
pocztkowej wartoci
Wynik: liczba 10 bitowa w formacie U2
Wykorzystanie metodologii RTL Wykorzystanie metodologii RTL
konieczna implementacja moduu
realizujcego funkcj fnext
Jest to najbardziej skomplikowana operacja
Wykorzystanie ASMD
-
Blok fnext
next(x) = x (x3 17)/(3* x2)
= x (x2*x 17)/(3* x2)
Blok fnext zostanie zbudowany z nastpujcych elementw:
power2 obliczanie x2
multiply20b obliczanie x2*x
multiply_by_3 obliczanie 3*x2
divide30b obliczanie dzielenia
Kolejne przyblienia reprezentowane s przez 10
bitow liczb w kodzie U2
x[9..0]
power2_in [9..0]
power2_result [19..0]
multiply_by_3_in [19..0]multiply20b_inA [19..0] multiply20b_inB [9..0]
divide30b obliczanie dzielenia
Bloki power2, multiply20b, multiply_by_3, divide30b zostan wzita z biblioteki gotowych komponentw.
Mariusz Rawski 33
multiply_by_3_result [22..0] multiply20b_result [29..0]
divide30b_inA [22..0] divide30b_inB [29..0]
divide30b_result [29..0]
xn[9..0]
-
Realizacja bloku fnext (1)
library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;
entity fnext isgeneric(
number : integer := 1 );port(
x : in std_logic_vector(9 downto 0);xn : out std_logic_vector(9 downto 0)
);end fnext;
architecture structure of fnext is
signal power2_in : std_logic_vector(9 downto 0);
Interfejs ukadu
Deklaracja sygnaw do poczenia komponentw
Warto, z ktrej liczony jest pierwiastek
signal power2_in : std_logic_vector(9 downto 0); signal power2_result : std_logic_vector(19 downto 0);
signal multiply20b_inA : std_logic_vector(19 downto 0); signal multiply20b_inB : std_logic_vector(9 downto 0); signal multiply20b_result : std_logic_vector(29 downto 0);
signal multiply_by_3_in : std_logic_vector(19 downto 0); signal multiply_by_3_result: std_logic_vector(22 downto 0);
signal divide30b_inA : std_logic_vector(22 downto 0); signal divide30b_inB : std_logic_vector(29 downto 0); signal divide30b_result : std_logic_vector(29 downto 0);
Mariusz Rawski 34
-
Realizacja bloku fnext (2)
component power2port(
dataa : in std_logic_vector(9 downto 0);result : out std_logic_vector(19 downto 0)
);end component;
component multiply20bport(
dataa : in std_logic_vector(19 downto 0);datab : in std_logic_vector(9 downto 0);result : out std_logic_vector(29 downto 0)
);end component;
Deklaracja komponentw
component multiply_by_3port(
dataa : in std_logic_vector (19 downt 0);result : out std_logic_vector (22 downt 0)
);end component;
component divide30bport(
denom : in std_logic_vector(22 downto 0);numer : in std_logic_vector(29 downto 0);quotient : out std_logic_vector(29 downto 0);remain : out std_logic_vector(22 downto 0)
);end component;
Mariusz Rawski 35
-
Realizacja bloku fnext (3)
beginb1 : power2 port map (
dataa => power2_in,result => power2_result
);
b2 : multiply20b port map (dataa => multiply20b_inA,datab => multiply20b_inB,result => multiply20b_result
);
b3 : multiply_by_3 port map (dataa => multiply_by_3_in,result => multiply_by_3_result
);
b4 : divide30b port map(
Konkretyzacja komponentw i podczenie do sygnaw
b4 : divide30b port map(denom => divide30b_inA,numer => divide30b_inB,quotient => divide30b_result
);
power2_in
-
Realizacja bloku fnext wyniki
Fitter Summary
next(1) = 1 (13 17)/(3* 12) = 1 (5,33) = 6,33 next(2) = 2 (23 17)/(3* 22) = 2 (0,75) = 2,75
Pojawiaj si bdy zaokrgle.
Top-level Entity Name fnext
Family Stratix
Device EP1S10F484C5
Total logic elements 1,133/ 10,570 ( 11 % )
Total pins 20 / 336 ( 6 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 16 / 48 ( 33 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Mariusz Rawski 37
-
Metoda Newtona ASMD (1)
entity top isport(
rst : in std_logic;clk : in std_logic;start, load : in std_logic;data : in std_logic_vector(9 downto 0); ready : out std_logic;result : out std_logic_vector(9 downto 0)
);end top;
architecture structure of top isconstant valueToFindTheRootOf : natural := 17;
type STATE_TYPE is (s0, s1, s2, s3, s4, s5, s6);signal state_reg, state_next : STATE_TYPE;
Interfejs
Liczba dla ktrej liczony jest pierwiastek
Stany automatu FSMD
Rejestry modelujce zmienne algorytmu
Sygnay do podczenia moduu fnext
signal state_reg, state_next : STATE_TYPE;
signal ready_reg, ready_next : std_logic;signal cnt_reg, cnt_next : unsigned(3 downto 0); signal x_reg, x_next : signed(9 downto 0); signal result_reg, result_next : std_logic_vector(9 downto 0);
signal xn_function_in : std_logic_vector(9 downto 0); signal xn_function_result : std_logic_vector(9 downto 0);
component fnextgeneric(
number : integer := 99 );port(
x : in std_logic_vector(9 downto 0);xn : out std_logic_vector(9 downto 0)
);end component;
Deklaracja komponentu fnext
-
Metoda Newtona ASMD (2)
beginprocess(clk, rst)begin
if rst = '1' thencnt_reg '0');x_reg '0');result_reg '0');
elsif rising_edge(clk) thencnt_reg
-
Metoda Newtona ASMD (2)
process(state_reg, start, load, cnt_reg, x_reg, result_reg)begin
ready_next
-
Realizacja ASMD wyniki
Ukad oblicza warto z duym bdem.Dla wynik jest 6 Podczas, gdy prawidowa
2,571281 713 =
1213
Fitter Summary
Top-level Entity Name fnext
Family Stratix
Device EP1S10F484C5
Total logic elements 1,162/ 10,570 ( 11 % )
Total pins 25 / 336 ( 7 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 16 / 48 ( 33 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Mariusz Rawski 41
Dla wynik jest 6 Podczas, gdy prawidowa warto to 4,946087
121
-
Liczby w notacji staopozycyjnej (1)
Liczby a = 15,671
b = 2,3
Suma 1 5 , 6 7 1+ 2 , 3 0 0
1 7 , 9 7 1
Przy dodawaniu i odejmowaniu naley pamita by liczby miay ustawiony przecinek w tym samym miejscu.Natomiast przy mnoeniu i dzieleniu naley pamita o odpowiednim ustawieniu przecinka w wyniku
Iloczyn
Mariusz Rawski 42
1 5, 6 7 1
2, 3
3 6, 0 3 3 3
-
Liczby w notacji staopozycyjnej (2)
Liczby a = 15,671 U2Fix5.3 = 01111.101 (15,625) b = 2,3 U2Fix3.5 = 010.01001 (2,28)
Suma
a+b 17,90625 U2Fix5.5
0 1 1 1 1, 1 0 1 0 0
+ 0 1 0, 0 1 0 0 1
1 0 0 0 1, 1 1 1 0 1
Przy dodawaniu i odejmowaniu naley dopasowa liczby w zapisie staopozycyjnym by miay ten sam format (ustawiony przecinek w tym samym miejscu).
Natomiast przy mnoeniu i dzieleniu naley pamita o tym jaki jest format wyniku (odpowiednim ustawieniu przecinka w wyniku)
a+b 17,90625 U2Fix5.5
Iloczyn
ab 35,64453125 U2Fix6.8
Mariusz Rawski 43
0 1 1 1 1, 1 0 1
0 1 0, 0 1 0 0 1
1 0 0 0 1 1 1, 0 1 0 0 1 0 1
-
Blok fnext
Niech x bdzie w formacie U2Fix 4.6 power2_result [19..0] U2Fix 8.12
multiply_by_3_in [19..0] U2Fix 8.12 multiply_by_3_result [22..0] U2Fix 11.12
multiply20b_inA [19..0] U2Fix 8.12 multiply20b_inB [9..0] U2Fix 4.6 multiply20b_result [29..0] U2Fix 12.18
Kolejne przyblienia reprezentowane s przez 10
bitow liczb w kodzie U2Fix4.6
x[9..0]
power2_in [9..0] (4.6)
power2_result [19..0] (8.12)
multiply_by_3_in [19..0] (8.12)multiply20b_inA [19..0] (8.12)
multiply20b_inB [9..0] (4.6)
divide30b_inA [22..0] U2Fix 11.12 divide30b_inB [29..0] U2Fix 12.18 divide30b_result [29..0] U2Fix 24.6
Mariusz Rawski 44
multiply_by_3_result [22..0] (11.12) multiply20b_result [29..0] (12.18)
divide30b_inA [22..0] (11.12) divide30b_inB [29..0] (12.18)
divide30b_result [29..0] (24.6)
xn[9..0]
Naley 17 zapisa w formacie U2Fix12.18
-
Realizacja bloku fnext Fix4.6
beginb1 : power2 port map (
dataa => power2_in,result => power2_result
);
b2 : multiply20b port map (dataa => multiply20b_inA,datab => multiply20b_inB,result => multiply20b_result
);
b3 : multiply_by_3 port map (dataa => multiply_by_3_in,result => multiply_by_3_result
);
b4 : divide30b port map(
Nie ma adnych zmian w uytych komponentach. Operuj one na wektorach binarnych
Zapis liczby 17 w formacie U2Fix12.18 dodanie 18 zer na najmodszych bitach
b4 : divide30b port map(denom => divide30b_inA,numer => divide30b_inB,quotient => divide30b_result
);
power2_in
-
Realizacja ASMD wyniki
165 w zapisie U2Fix4.6 reprezentuje warto 165/64 = 2.578125.
2,571281 713 =Liczba 1 w U2Fix4.6 to 64
Fitter Summary
Top-level Entity Name fnext
Family Stratix
Device EP1S10F484C5
Total logic elements 1,144/ 10,570 ( 11 % )
Total pins 25 / 336 ( 7 % )
Total virtual pins 0
Total memory bits 0 / 920,448 ( 0 % )
DSP block 9-bit elements 16 / 48 ( 33 % )
Total PLLs 0 / 6 ( 0 % )
Total DLLs 0 / 2 ( 0 % )
Mariusz Rawski 46
165/64 = 2.578125.Jest to ju znacznie lepsze przyblienie.