lab8 przyklad


Układy Cyfrowe  laboratorium
Przykład realizacji ćwiczenia nr 8.
Stanowisko laboratoryjne:
1. Komputer PC i oprogramowanie
2. 2 x kabel TRS
3. kabel USB
4. PÅ‚yta Altera DE-2.
Opis stanowiska:
Komputer PC jest używany do syntezy struktury i konfiguracji układu FPGA, dodatkowo
jest używany jako generator i analizator sygnału audio. Generacja i analiza sygnału audio
jest wykonywana w darmowym oprogramowaniu Spectrum Lab.
Analogowy sygnał audio jest wysyłany z wyjścia liniowego karty dzwiękowej komputera
PC do płyty Altera DE-2 kablem TRS. Sygnał analogowy jest przetwarzany na cyfrowy w
zamontowanym na płycie przetworniku analogowo-cyfrowym. Dane w postaci cyfrowej
przechodzą przez układ FPGA na wejście przetwornika cyfrowo-analogowego. Następnie
w postaci analogowej są przesyłane do komputera PC kablem TRS na wejście liniowe
karty dzwiękowej komputera PC.
Kabel USB służy do wysyłania z komputera PC danych konfigurujących układ FPGA
przez urzÄ…dzenie USB-Blaster za pomocÄ… oprogramowania Altera Quartus II.
Zadania do wykonania :
Zadanie. 0 Konfiguracja przetwornika analogowo-cyfowego:
Celem tego zadania jest poprawne skonfigurowanie przetwornika analogowo-cyforwego
cyfrowo-analogowego Wolfson WM8731 zamontowanego na płycie DE-2.
Po włączeniu zasilania płyty DE-2 pobierana jest automatycznie z pamięci FLASH fabryczna
konfiguracja układu FPGA.
Przed rozpoczęciem zadań filtracji sygnału audio w układzie FPGA należy poprawnie
skonfigurować przetwornik analogowo-cyfrowy, cyfrowo-analogowy.
Należy wgrać do układu FPGA konfigurację z zaimplementowanym interfejsem I2C, przez
który zostaną wysłane dane ustawiające przetwornik w pożądany tryb pracy. Ustawienia
parametrów przetwornika mogą być zmienione przez wyłączenie zasilania lub ponowne
przesłanie danych. Przekonfigurowanie układu FPGA, nie zmienia wcześniej ustawionych
parametrów przetwornika.
W celu przesłania danych konfigurujących przetwornik ADC DAC należy:
1. Upewnić się czy poprawnie podłączony jest kabel USB do złącza USB-Blaster
2. Włączyć zasilanie płyty DE-2 czerwonym przyciskiem.
3. Uruchomić plik codec_config.bat w katalogu ./filter_lab/z0/
Zadanie. 1 Opis struktury filtru FIR w języku VHDL:
Struktura projektu fl_z1:
Protokół danych wychodzących i wchodzących do bloku audio_top
- próbki dzwięku wychodzące z modułu audio_top są w formacie U2 i mają zakres
wartości <-1, 1) zapisany na 8 bitach.
- próbki dzwięku wychodzące z modułu audio_top pojawiają się z częstotliwością
48 kHz, obecność nowej wartości na linii danych ADC_OUT jest sygnalizowana wysokim
stanem sygnałem ADC_OUT_EN.
- próbki dzwięku wchodzące do modułu audio_top są pobierane z częstotliwością
48 kHz, próbki są zatrzaskiwane w rejestrach modułu gdy sygnał ADC_OUT_EN jest w
stanie wysokim.
- próbki dzwięku wchodzące do modułu audio_top są w formacie U2 i mają zakres
wartości <-1, 1) zapisany na 16 bitach
Struktura filtru FIR:
Filtr o transmitancji H(z) = -0.2 + 0.6 z-1  0.2 z-2
Opis struktury filtru w języku VHDL
plik direct_fir.vhd :
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_signed.all;
use IEEE.std_logic_arith.all;
entity direct_fir is
port(
clk : in STD_LOGIC; -- sygnal zegara
arst_n : in STD_LOGIC; -- asynchroniczny sygnal zerowania niskim poziomem
data_in : in STD_LOGIC_VECTOR(7 downto 0); -- dane wejsciowe
data_out : out STD_LOGIC_VECTOR(15 downto 0); -- dane wyjsciowe
data_in_en : in STD_LOGIC -- strob danych wejsciowych
);
end entity;
architecture RTL of direct_fir is
-- definicja typu rejestrow przchowujacych wartosci poprzednich probek
type DLY_TYPE is array(2 downto 0) of STD_LOGIC_VECTOR(7 downto 0);
-- deklaracja sygnalow przechowujacych wartosci poprzednich probek
signal taps_r : DLY_TYPE;
signal taps_nxt : DLY_TYPE;
signal data_sum : STD_LOGIC_VECTOR(16 downto 0);
begin
dly_synch_proc:
process(clk,arst_n)
begin
if arst_n = '0' then
for i in 0 to 2 loop
taps_r(i) <= (others => '0');
end loop;
elsif clk = '1' and clk'event then
if data_in_en = '1' then
for i in 1 to 2 loop
taps_r(i) <= taps_r(i-1);
end loop;
taps_r(0) <= data_in;
end if;
end if;
end process;
fir_sum: data_sum <= taps_r(0) * conv_std_logic_vector( 460,9) +
taps_r(1) * conv_std_logic_vector( 154,9) -
taps_r(2) * conv_std_logic_vector( 52,9);
fir_output: data_out <= data_sum(15 downto 0);
end architecture;
zalecenia projektowe:
- należy wystrzegać się przesterowania sygnału:
- zachować odpowiedni rozmiar sygnału przechowującego wynik operacji
arytmetycznych
- pamiętać o propagacji znaku
- należy poprawnie wysterować sygnał, tak aby nie usunąć istotnych informacji
przechowywanych na najmłodszych bitach
- przy mnożeniu liczb ułamkowych należy pamiętać o pozycji kropki dziesiętnej:
identycznie zachowuje się kropka dziesiętna w przypadku liczb binarnych przykład:
fix<8,7>*fix<8,7> = fix<16,14>
1. Umieścić plik direct_fir.vhd w projekcie fl_z1 znajdującym się w podkatalogu
./filter_lab/z1/fl_z1/
z menu głównego wybrać: Project -> Add/Remove Files in Project
nacisnąć przycisk & i wskazać plik direct_fir.vhd w oknie dialogowym, potwierdzić Open
nacisnąć przycisk Add,
zamknąć okno przyciskiem OK
2. Synteza i implementacja
z menu głównego wybrać Processing -> Start Compilation
wyniki implementacji:
liczba elementów logicznych:
maksymalna częstotliwość pracy układu
3. Programowanie układu
Z menu głównego wybrać: Tools -> Programmer
Nacisnąć przycisk Start
4. Analizator widma - program Spectrum LAB
uruchomić program: ./sw/spectrum/spec_lab.exe
5. Włączenie użycia bloków DSP w implementacji filtru:
Z menu głównego wybrać Assignments -> Settings
Nacisnąć przycisk More Settings&
Wybrać w oknie Existing option settings : DSP Block Balancing
W rozwijanej liście Setting: wybrać DSP blocks
Zamknąć okna zatwierdzając wybór przyciskiem OK
6. Wykonanie syntezy i implementacji i programowania układu (powtórzyć kroki 2 i 3)
Zadanie 2. Implementacja filtru FIR w arytmetyce rozproszonej
Struktura projektu fl_z2:
1. Obliczenie współczynników filtru FIR realizowanego w arytmetyce rozproszonej
przykład:
filtr o współczynnikach [-0.2, 0.6 , -0.2]
 zapisując współczynniki na 8 bitach otrzymamy następującą dziesiętną reprezentację [ -26, 77 , -26 ]
liczb binarnych
xb[2] xb[1] xb[0] f(c[n],x[n])
0 0 0 -26·0+77·0-26·0 = 0
0 0 1 -26·0+77·0-26·1 = -26
0 1 0 -26·0+77·1-26·0 = 77
0 1 1 -26·0+77·1-26·1 = 51
1 0 0 -26·1+77·0-26·0 = -26
1 0 1 -26·1+77·0-26·1 = -52
1 1 0 -26·1+77·1-26·0 = 51
1 1 1 -26·1+77·1-26·1 = 25
2. Wyznaczenie rozmiaru tablicy DA
23· (îÅ‚log2 max {0,|-26|,77,51,|-26|,|-52|,25}Å‚Å‚ +1)= 23· ( îÅ‚log2 77Å‚Å‚ +1) = 64 bity
3. Generacja tablicy prawdy przy pomocy oprogramowania filter.exe:
program filter.exe na podstawie podanych współczynników filtra zapisanych w pliku
tekstowym o dowolnej nazwie:
-generuje tablicÄ™ prawdy zapisanÄ… w standardzie Berkeley a i zapisuje jÄ… do pliku o
podanej nazwie przez użytkownika,
-zapisuje wygenerowaną tablicę prawdy w języku VHDL i zapisuje ją w pliku
da_table.vhd.
Plik wejściowy współczynników filtra jest postaci np.: [-26,77,-26]. Pierwszy skrajny lewy
współczynnik jest  najmłodszym współczynnikiem. Dla wygody i zgodności nazw z
projektem fl_z2 nazwa pliku dla generowanej tablicy prawdy powinna mieć nazwę
da_table.pla.
4. Umieszczenie tablicy DA zapisanej w języku VHDL w projekcie fl_z2 znajdującym się w
podkatalogu ./filter_lab/z2/fl_z2/vhdl
Należy dodać plik da_table.vhd do projektu (analogicznie jak w zad.1.1)
Należy zwrócić uwagę czy poprawnie są podane wartości GENERIC dla instancji
U_FILTER_DA_TOP
oraz rozmiary sygnałów łączących moduł U_FILTER_DA_TOP z U_DA_TABLE w pliku:
.filter_lab/z2/fl_z2/vhdl/fl_z2.vhd
5. Wykonanie syntezy i implementacji i programowania układ (analogicznie jak w zad. 1. 2,3)
6. Wykonanie dekompozycji tablicy DA programem GUIDEC i/lub DEMAIN:
6.1 Program Demain ( umieszczony na). Do
uruchomienia wymagana biblioteka cw3220.dll w tym samym katalogu co program. Program
Demain.exe i cw3220.dll znajdują się również w podkatalogu lut_da.
6.1.1 dekompozycja tablicy programem DEMAIN. W podkatalogu >umieszczone sÄ…:
opis.pdf  instrukcja obsługi
strategie.pdf  prosty szkic strategii prowadzÄ…cych do w miarÄ™ optymalnego
rozwiÄ…zania.
przykład.pdf  dekompozycja funkcji bin2bcd.pla
Plikiem wejściowym dla programu Demain jest plik z tablicą prawdy (u nas: da_table.pla )
W wyniku dekompozycji otrzymujemy plik da_table_out z komórkami rozkładu zapisanymi
w standardzie Berkeley a
6.1.2 Konwersja pliku da_table.out na plik da_table.vhd za pomocÄ… programu
demain_VHD_vec.exe Do uruchomienia programu wymagane jest aby
pliki nazwa.pla oraz nazwa.out znajdowały się w tym samym katalogu co program.
6.2 Program GUIDEC(umieszczony na
Plikiem wejściowym dla programu GUIDEC jest plik z tablicą prawdy ( u nas: da_table.pla)
Uwaga: przed uruchomieniem programu należy w tablicy doknać następujących zmian w
dwóch wierszach tablicy prawdy: .ilb oraz .ib. Wszystkie numery występujące po nazwach
zmiennych muszą być ujęte w nawiasy. Np.
.ilb da_i4 da_i3 da_i2 da_i1 da_i0 zamieniamy na: .ilb da_i(4) da_i(3) da_i(2) da_i(1) da_i(0)
i podobnie np.:
.ob da_o3 da_o2 da_o1 da_o0 zamieniamy na: .ob da_o(3) da_o(2) da_o(1) da_o(0)
Obsługa programu: File->Open-> [wybór nazwy z katalogu],
Project ->Set Project to Current File (ustawia nazwÄ™ projektu na nazwÄ™ otwartego pliku),
Option -> Select architecture( ustawamy na FLEX/APEX)
Option->Process control ( ustawiamy w Output formats opcjÄ™ VHDL )
Decompose-> Start process.
Program zapisuje wynik dekompozycji w języku VHDL(opcja process control->VHDL) w
pliku o takiej nazwie jak tablica prawdy i rozszerzeniu .vhd. Przed umieszczeniem pliku
da_table.vhd w projekcie należy dokonać następującej zmiany. Usunąć lub zakomentować
sygnały wejściowe i wyjściowe i zapisać je w postaci logicznych wektorów o odpowiedniej
długości.
ENTITY da_table IS
PORT (
-- da_i(0), da_i(1), da_i(3), da_i(4) : IN STD_LOGIC;
-- da_i(6), da_i(2), da_i(8) : IN STD_LOGIC;
-- da_o(12), da_o(13), da_o(14), da_o(9) : OUT STD_LOGIC;
-- da_o(11), da_o(6), da_o(10), da_o(7) : OUT STD_LOGIC;
-- da_o(8), da_o(2), da_o(5), da_o(3) : OUT STD_LOGIC;
-- da_o(0), da_o(1), da_o(4) : OUT STD_LOGIC
da_i : IN STD_LOGIC_VECTOR(9 downto 0);
da_o : OUT STD_LOGIC_VECTOR (14 downto 0)
);
END da_table;
6.3 Umieścić tablicę DA ( otrzymaną w punkcie 3.1 lub 3.2) zapisaną w języku VHDL w
projekcie fl_z2 znajdującym się w podkatalogu ./filter_lab/z2/fl_z2/. Zaimplementować,
wykonać oraz zanotować na karcie odpowiedzi liczbę zużytych elementów logicznych i
maksymalną częstotliwość pracy układu.


Wyszukiwarka

Podobne podstrony:
cw6 arkusz obliczeniowy przyklad
przykładowy test A
przykladowyJrkusz150UM[1] drukow
OEiM AiR Przykladowy Egzamin
Znaczenie korytarzy ekologicznych dla funkcjonowania obszarów chronionych na przykładzie Gorców
przykladowe zadania redoks
Ćwiczenie 14 przykład
6 6 Zagadnienie transportowe algorytm transportowy przykład 2
Przyklad5 csproj FileListAbsolute
Człowiek wobec przestrzeni Omów na przykładzie Sonetó~4DB
Przykladowe kolokwium 2
Załącznik 3 Przykłady ćwiczeń relaksacyjnych przy muzyce
Przyklad zarz

więcej podobnych podstron