Politechnika Wrocławska

Transkrypt

Politechnika Wrocławska
Politechnika Wrocławska
Logika Układów cyfrowych 2
Projekt
Temat:
Odczyt pliku *.wav z SDCard z wizualizacjami VGA
Autorzy:
Kamil Markuszewski 171016
Matełusz Mikłuszka 171001
Prowadzący:
dr inż. Jarosław Sugier
str. 1
Spis treści
1. Cel projektu
3
2. Teoria problemu
4
3. Opis sprzętu
6
4. Opis projektu
7
4.1 Wykorzystane gotowe moduły
7
4.2 Hierarchia plików źródłowych
12
4.3 Moduł wyświetlający wizualizacje
13
4.4 Moduł wyświetlający wizualizacje – sygnały
14
4.5 Moduł wyświetlający wizualizacje – implementacja
17
4.6 Wykresy czasowe SIM1
22
4.7 Raport z syntezy
23
5. Implementacja
24
6. Bibliografia
26
str. 2
1. Cel projektu
Celem
naszego
projektu
było
zaimplementowanie
układu
wyświetlającego
wizualizacji dźwięku na monitorze VGA. Dźwięk pobierany miał być z karty SD
umieszczonej w czytniku dołączanym do płytki. Odczytywany dźwięk następnie
zamieniany był w pojedyncze próbki wysyłane do głośnika oraz do układu prezentującego
wizualizacje.
Wybrana przez nas prezentacja dźwięku miała polegać na wyświetlaniu dwóch
słupków prezentujących poziomy głośności, postanowiliśmy także nadać im kolory,
niebieski przy najcichszych dźwiękach, zielony przy średnich, oraz czerwony przy
głośnych. Było to jednak wykonane w ten sposób, iż przy dużej głośności słupek
był trzykolorowy. Dodatkowo dodaliśmy kolejne dwa słupki które stale opadały, jednak
nie mogły opaść poniżej wskaźników poziomu dźwięku, one także przybierały różne
kolory, ale zawsze były jednokolorowe.
str. 3
2. Teoria problemu
Planowanie
postanowiliśmy
projektu
rozpoczęliśmy
przeglądać
próbkowany
od
rozważenia
dźwięk
w
sposobu
poszukiwaniu
wizualizacji,
maksimum
w określonym kwancie czasu, a następnie to maksimum prezentować. Dźwięk jest
w naszym przypadku zwykłym ciągiem liczb 16-bitowych. Poniższa ilustracja pozwala
zobrazować naturę problemu.
Sinusoidy ukazują jakiś dźwięk, został on poddany próbkowaniu z większą
częstotliwością niż jego częstotliwość, by zgodnie z twierdzeniem KotielnikowaShannona zachować prawidłowo sygnał. Ilość próbek na kwant czasu jest zatem bardzo
duży i jak się okazuje o wiele większy niż kwant czasu jaki wybraliśmy do robienia
kolejnych partii pomiarów, kwant ten wiązany jest z odświeżaniem monitora. Jeżeli zatem
częstotliwość dźwięku oraz próbkowania jest o wiele większa to najprostsze szukanie
maksymalnej wartości próbki w zbiorze da nam maksymalną amplitudę w określonym
okresie czasu.
str. 4
Głównym
problemem
naszego
projektu
nie
był
jednak
odczyt
z
karty,
ani przetwarzanie sygnału, ale wyświetlanie wyniku na monitorze VGA. Wymagało
to od nas
wysyłania
na
port
RS-232
określonych
bitów
odpowiadających
za synchronizację poziomą oraz pionową, a także kolory (czerwony, zielony, niebieski)
poszczególnych pikseli. VGA jest jednym ze standardów kart graficznych IBM-PC,
urządzenia tego typu rysują piksele na ekranie liniami zaczynając od lewego górnego
rogu, a kończąc na prawym dolnym. Wymaga to ustawiania w trakcie rysowania
odpowiednich bitów synchronizacji, które w zależności od trybu rozdzielczości graficznej
należy obsłużyć inaczej.
Początkowo pracowaliśmy na mniejszej rozdzielczości 640x480, gdzie należało
ustawić bit synchronizacji wertykalnej po osiągnięciu wartości 2 przez licznik wertykalny,
a także bit synchronizacji horyzontalnej po osiągnięciu 96 tyknięć zegara, czyli
osiągnięciu wartości 96 przez licznik horyzontalny. Licznik horyzontalny osiągał
maksymalnie 800, a wertykalny 512.
Po przejściu na rozdzielczość 800x600 inkrementowany co okres zegara licznik
horyzontalny inkrementował co 1040 taktów licznik wertykalny jednocześnie zerując się.
Licznik wertykalny był zerowany po osiągnięciu wartości 666. Synchronizacja pozioma
wymaga osiągnięcia przez licznik horyzontalny wartości 121, a wertykalna osiągnięcia
przez licznik wertykalny wartości 7.
Oczywiście w pozostałych przypadkach bity synchronizacji zawierają wartość
logiczną 0, a bity kolorów odpowiednią dla danego położenia.
str. 5
3. Opis sprzętu
Projekt został zrealizowany przy pomocy platformy sprzętowej S3Estarter oraz
programu Xilinx, oraz języka VHDL.
Układ służący do realizacji projektu:
Urządzenie zostało dodatkowo rozbudowane o czytnik kart SD po jego prawej stronie (1).
Do Portu RS-232
(2)
został podłączony monitor VGA, a do pinów wyjściowych
dodatkowo do włączaniu dźwięku posłużyło pokrętło
na karcie SD przełączniki
(3)
głośnik,
(4)
, a do wyboru pliku umieszczonego
(5)
, do wyświetlania wyświetlacz LCD
oczywiście było zrealizowane za pomocą łącza USB
(8)
(6)
. Programowanie układu
, punkt oznacza zasilanie
(7)
.
Najważniejszym elementem jest tutaj port łączący się z do monitorem VGA, na który
wysyłaliśmy dane rysujące obraz.
str. 6
4. Opis projektu
4.1 Wykorzystane gotowe moduły
Naszym pierwszym zadaniem w projekcie było odczytanie pliku dźwiękowego
w formacie .wav z karty Secure Digital (SD). Do odczytu danych z tej karty postanowiliśmy
użyć gotowego modułu o nazwie WAVreader.
str. 7
Moduł ten wyposażony jest w szereg w szereg wejść i wyjść, oraz korzysta z innego
już stworzonego modułu o nazwie SDC_FileReader, część z tych wejść pokrywa się w obu
modułach co pomoże nam w prostszym opisaniu ich.
Przede wszystkim musimy wprowadzić nazwę pliku. Posłuży nam do tego magistrala
Fname(7:0). Jak widać możemy tam wprowadzić 8 bitów jednocześnie, zatem uzyskujemy
maksymalnie liczbę 255, jest to odpowiednik zapisu pojedynczego znaku w ASCII. Nazwa
pliku nie jest dowolna, musi się ona składać z jednego znaku oraz określonego rozszerzenia,
a plik musi się znajdować w głównym katalogu na karcie SD. Moduł WAVreader oczywiście
nie daje nam możliwości wyboru i domyślnie ustawia rozszerzenie „wav”, jednak gdybyśmy
obsługiwali bezpośrednio SDC_FileReader możemy na wejściu Fext(1:0) podać dwa bity,
które pozwolą nam ostatecznie określić plik.
Mamy do wyboru :
„
”
dla FExt(1:0) = "00"
„bin” dla FExt(1:0) = "01"
„txt”
dla FExt(1:0) = "10"
„wav” dla FExt(1:0) = "11"
str. 8
Format pliku .wav w module WAVreader również jest określony, musi on mieć
8 lub 16 bitów na próbkę oraz jedną ze standardowych częstotliwości próbkowania: 8, 12, 16,
22.05, 24, 32, 44.1 lub 48 kHz.
Aby rozpocząć odczyt z karty podać 1 na wejście start, wyjście Busy natychmiast
przyjmie wartość 1, gdy na wyjściach DO_L(15:0) oraz DO_R(15:0) pojawią się jakieś dane
do odczytu DO_Rdy przyjmie wartość 1. Kolejne dane kierowane na te wyjścia będą
przetrzymywane w strukturze typu FIFO, a wysłanie ich na wyjścia można wykonać
za pomocą pobudzenia wejścia DO_Pop. Gdy dane do odczytu się skończą zarówno Busy
jak i DO_Rdy przyjmą stan logicznego zera. Aby przerwać pracę modułu w trakcie jej
trwania należy podać jedynkę na wejście Abort.
Dodatkowo moduł rozpoznając plik przekazuje nam kilka jego ustawień: na wyjściu
FmtMnS pokaże się informacja o tym czy plik jest w stereo czy w mono, wyjście Fmt8n16
sygnalizuje rozmiar próbek w bitach, a FmtSRate częstotliwość próbkowania. Dodatkowo
w zależności od częstotliwości próbkowania na wyjściu SRate_Tick pojawi się taktowanie
synchroniczne względem zegara 50MHz.
Oba moduły posiadają również wyjście błędów dzięki któremu możemy
się dowiedzieć co w naszym układzie jest nie tak jak być powinno oraz wyjścia SDC_MISO,
SDC_MOSI, SDC_SCK, SDC_SS należy podłączyć je do urządzeń zewnętrznych.
str. 9
Początkowo nasz projekt wyglądał następująco:
Jednak później zrealizowaliśmy go w oparciu o rozbudowany układ znajdujący
się pod następującym adresem:
http://www.zsk.ict.pwr.wroc.pl/zsk_ftp/fpga/Test_WAVreader.pdf
Powyższy układ rozbudowaliśmy jedynie o sporej wielkości moduł wyświetlający
wizualizacje na monitorze VGA. Finalny przerobiony schemat został pokazany na kolejnej
stronie.
str. 10
str. 11
4.2 Hierarchia plików źródłowych
Nasz projekt ma wyjątkowo prostą strukturę plików źródłowych. Cała ogólna
struktura związana z odczytem dźwięku oraz odtwarzaniem go znajduje się w pliku schematu
o nazwie Test_WAVreader.sch. Plik te wykorzystuje zaimplementowany przez nas moduł
służący wyświetlaniu o nazwie vga2222.vhd. Ponadto wykorzystujemy w projekcie gotowy
moduł FSM_SendSamples.vhd służący obsłużeniu wysyłania pobranych próbek dźwięku.
Oczywiście aby połączyć odpowiednie sygnały kodu źródłowego z fizycznymi elementami
płytki należało użyć także plików o rozszerzeniu *.ucf.
Pliki:
- Test_WAVreader.sch – ogólny schemat
- vga2222.vhd – wyświetlanie na VGA
- FSM_SendSamples.vhd – wysyłanie próbek
- PS2_USB_SDC.ucf – połączenie z czytnikiem SD
- LCD.ucf – połączenie z wyświetlaczem LCD
- GenIO.ucf – połączenie z portem RS-232 do wyświetlania na VGA
- ADC_DAC.ucf – odtwarzanie dźwięku
str. 12
4.3 Moduł wyświetlający wizualizacje
Głównym modułem naszego projektu jest moduł vhdl odpowiadający za wizualizacje
na monitorze VGA. Pierwsze linijki kodu oznaczają oczywiście załączenie odpowiednich
bibliotek.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Już na ogólnym schemacie można zobaczyć jak wygląda ten element projektu. Posiada
on 3 wejścia oraz 5 wyjść. Wejścia to zegar taktujący z częstotliwością 50MHz,
a także próbki dźwięku lewego oraz prawego kanału o rozmiarze 16 bitów. Wyjścia
to wysyłane na port RS-232 bity odpowiadające za kolor piksela i bity synchronizacji
pionowej oraz poziomej. Wyjścia są opisane w pliku GenIO.ucf i odnoszą się bezpośrednio
do sprzętu.
entity vga2222 is
port(
clk50_in : in std_logic;
kanal_l : in std_logic_vector (15 downto 0);
kanal_r : in std_logic_vector (15 downto 0);
red_out : out std_logic;
green_out : out std_logic;
blue_out : out std_logic;
hs_out
: out std_logic;
vs_out
: out std_logic);
end vga2222;
str. 13
4.4 Moduł wyświetlający wizualizacje - sygnały
Dodatkowe sygnały wykorzystywane w module:
signal licznik : std_logic_vector (31 downto 0);
signal horizontal_counter : std_logic_vector (10 downto 0);
signal vertical_counter : std_logic_vector (10 downto 0);
signal k_l : std_logic_vector (15 downto 0);
signal k_l2 : std_logic_vector (15 downto 0);
signal k_r : std_logic_vector (15 downto 0);
signal k_r2 : std_logic_vector (15 downto 0);
signal licznik : std_logic_vector (31 downto 0);
signal max_l : std_logic_vector (15 downto 0);
signal max_r : std_logic_vector (15 downto 0);
signal k_l_global : std_logic_vector (15 downto 0) := x"0309";
signal k_r_global : std_logic_vector (15 downto 0) := x"0309";
4.4.1
Sygnał: licznik
Początkowo był licznikiem który zerował się po osiągnięciu określonej
wartości i wtedy wyświetlaliśmy znalezione maksimum ze zbioru próbek
i zaczynaliśmy szukanie maksimum od nowa. Następnie postanowiliśmy
zsynchronizować wyświetlanie z odświeżaniem na monitorze, zatem za każdym
razem gdy wyświetliliśmy pełny obraz szukaliśmy nowego maksimum,
co dało efekt płynności i zredukowało błędy wyświetlania. Częstotliwość
próbowania była na tyle duża, iż uzyskane wyniki były wiarygodne.
str. 14
4.4.2
Sygnał: horizontal_counter
Licznik służący do nadzorowania wyświetlania pikseli w poziomie
oraz ustawiania bitów synchronizacji poziomej. Był on w każdym takcie
inkrementowany razem z sygnałem „licznik”, a po osiągnięciu odpowiedniej
dla danej rozdzielczości ekranu zerowany inkrementując vertical_counter.
4.4.3
Sygnał: vertical_counter
Licznik
służący
do
nadzorowania
wyświetlania
pikseli
w
pionie
oraz ustawiania bitów synchronizacji pionowej. Inkrementowany za każdym
razem gdy zeruje się licznik horizontal_counter. Po osiągnięciu odpowiedniej
dla danej rozdzielczości ekranu zerowany.
4.4.4
Sygnał: k_l
Służy do przechowywania znalezionej do wyświetlenia wartości przed samym
rysowaniem.
4.4.5
Sygnał: k_r
Służy do przechowywania znalezionej do wyświetlenia wartości przed samym
rysowaniem.
4.4.6
Sygnał: k_l2
Przechowuje przed wyświetlaniem wartość pobraną z sygnału max_r, służy
do wykonywania operacji na tej wartości. Następnie wartość przepisywana
jest do k_l.
str. 15
4.4.7
Sygnał: k_r2
Przechowuje przed wyświetlaniem wartość pobraną z sygnału max_r, służy
do wykonywania operacji na tej wartości. Następnie wartość przepisywana
jest do k_r.
4.4.8
Sygnał: max_l
Zmienna przechowująca aktualną maksymalną wartość sygnału kanału lewego.
Gdy skończy się wyświetlanie obrazu na VGA przepisywana jest do innej
zmiennej w celu wyświetlenia znalezionej wartości, a poszukiwanie maksimum
trwa od nowa.
4.4.9
Sygnał: max_r
Zmienna przechowująca aktualną maksymalną wartość sygnału kanału
prawego.
Gdy skończy się wyświetlanie obrazu na VGA przepisywana jest
do innej zmiennej w celu wyświetlenia znalezionej wartości, a poszukiwanie
maksimum trwa od nowa.
4.4.10 Sygnał: k_l_global
Zawiera maksimum kanału lewego w danym kwancie czasu, pod warunkiem
że jest większe od wcześniej przechowywanej wartości. Zatem wartość ta
jest zawsze większa lub równa aktualnemu maksimum, a jednocześnie cały czas
dekrementowana, nie spadając poniżej maksimum.
4.4.11 Sygnał: k_r_global
Zawiera maksimum kanału prawego w danym kwancie czasu, pod warunkiem
że jest większe od wcześniej przechowywanej wartości. Zatem wartość ta
jest zawsze większa lub równa aktualnemu maksimum, a jednocześnie cały czas
dekrementowana, nie spadając poniżej maksimum.
str. 16
4.5 Moduł wyświetlający wizualizacje - implementacja
Całe działanie modułu opiera się o zegar taktujący z częstotliwością 50 Mhz pozostałe
operacje dotyczą działania w obrębie tego taktu.
begin
process (clk50_in) begin
if clk50_in'event and clk50_in = '1' then
W każdym takcie wyszukiwane jest maksimum próbek które posłuży następnie
do wyświetlenia.
if(kanal_l > max_l)
then
max_l <= kanal_l;
end if;
if(kanal_r > max_r)
then
max_r <= kanal_r;
end if;
Za każdym razem inkrementujemy także licznik horyzontalny o którym była już
mowa. Gdy osiągnie on ustaloną dla danej rozdzielczości wartość jest zerowany i
inkrementuje licznik wertykalny, któy także przy określonej dla danej rozdzielczości wartości
się zeruje.
horizontal_counter <= horizontal_counter+"00000000001";
if (horizontal_counter="10000010000") then
vertical_counter <= vertical_counter+"00000000001";
horizontal_counter <= "00000000000";
end if;
if (vertical_counter="01010011010") then
vertical_counter <= "00000000000";
licznik <= x"00207840";
end if;
str. 17
Następnie dla konkretnych wartości licznika wysyłamy bity synchronizacji potrzebne
do wyświetlania. Są to wartości pobrane z odpowiedniego dokumentu opisującego standard
VGA.
if (horizontal_counter > "00000000000" ) and (horizontal_counter < "00001111001" )
then
hs_out <= '0';
else
hs_out <= '1';
end if;
if (vertical_counter > "00000000000" )and (vertical_counter < "00000000111" )
then
vs_out <= '0';
else
vs_out <= '1';
end if;
W chwili gdy licznik osiągnął określoną przez nas wartość zerowaliśmy wartość
licznika, z wcześniej wyszukanych wartości maksymalnych max_l i max_r przepisywaliśmy
9 starszych bitów do sygnałów tymczasowych k-l2 oraz k-r2 po wykonaniu tej czynności
zerowaliśmy max_l i max_r.
Następnie wartości w k_l2 oraz k_r2 musieliśmy przeskalować tak aby ostatecznie
określały wysokość słupków w tym celu odieliśmy od nic 0x307, wartość uzyskana w wyniku
odejmowania zapisaliśmy do k_l oraz k_r. Są to wartości określające wysokość środkowych
słupków. Aby ustalić wysokość zewnętrznych słupków sprawdzaliśmy czy poprzednie
wartości k_l_global oraz k_r_global sa większe od odpowiednio k_l oraz k_r dla danego
kanału. Wartości
słupków zewnętrznych opadają z określoną prędkością do wysokości
odpowiednich im słupków wewnętrznych.
str. 18
licznik <= licznik + x"1";
if(licznik >= x"0207840") -- stary licznik 17D7840
then
licznik <= x"00000000";
--max_l <= x"c100";
k_l2(8 downto 0) <= max_l(15 downto 7);
k_r2(8 downto 0) <= max_r(15 downto 7);
max_l <= x"0000";
max_r <= x"0000";
k_l <= x"307" - k_l2; -- powinno byc od 258 ale to dla kosmetyki
k_r <= x"307" - k_r2;
if (k_r_global >= k_r)
then
k_r_global <= k_r + x"0001";
else
k_r_global <= k_r_global + x"0001";
end if;
if (k_l_global >= k_l)
then
k_l_global <= k_l + x"0001";
else
k_l_global <= k_l_global + x"0001";
end if;
end if;
str. 19
Fragment odpowiedzialny za opadanie słupków:
if (k_l_global >= k_l)
then
k_l_global <= k_l + x"0001";
else
k_l_global <= k_l_global + x"0001";
end if;
Aby
wyświetlić
słupek
należy sprawdzić
w
jakiej
pozycji
jest
obecnie
horizontal_counter oraz vertical_counter. Podany niżej fragment prezentuje rysowanie
zewnętrznego słupka w położeniu od 0x27a do 0x298 o wysokości zadanej przez wcześniej
obliczona wartość k_l_global. Kolor słupka jest zależny od wartości k_l_global. Poniżej
zaprezentowany jest fragment wyświetlający słupek zewnętrzny odpowiadający prawemu
kanałowi.
if ((horizontal_counter >= x"27A" ) and (horizontal_counter < x"298" ))
and ((vertical_counter >= k_r_global ) and (vertical_counter < "01001011000" ))
then
if(k_r_global > x"190")
then
red_out <= '0';
green_out <= '0';
blue_out <= '1';
else
if(k_r_global > x"150" ) and (k_r_global <= x"190" )
then
red_out <= '0';
green_out <= '1';
blue_out <= '0';
else
red_out <= '1';
green_out <= '0';
blue_out <= '0';
end if;
end if;
else
str. 20
Słupki wewnętrzne są rysowane w podobny sposób co słupki zewnętrzne. Wysokość
słupka jest zależna od k_r lub k_l odpowiednio dla danego kanału. Kolor danego słupka
wewnętrznego jest również uzależniony od wysokości z ta różnicą ze słupek może mieć trzy
kolory jednocześnie, granice występowania danego koloru na słupku są określone przez
odpowiednie instrukcje warunkowe.
Poniżej
zaprezentowany
jest
fragment
wyświetlający
słupek
wewnętrzny
odpowiadający prawemu kanałowi.
if ((horizontal_counter >= x"23E" ) and (horizontal_counter < x"25C" ))
and ((vertical_counter >= k_r ) and (vertical_counter < "01001011000" ))
then
if(vertical_counter > x"200")
then
red_out <= '0';
green_out <= '0';
blue_out <= '1';
else
if(vertical_counter > x"150" ) and (vertical_counter <= x"200" )
then
red_out <= '0';
green_out <= '1';
blue_out <= '0';
else
red_out <= '1';
green_out <= '0';
blue_out <= '0';
end if;
end if;
else
red_out <= '0';
green_out <= '0';
blue_out <= '0';
end if;
str. 21
4.6 Wykresy czasowe SIM
Symulacja przedstawia fragment działania modelu polegający na odpowiednim
konwertowaniu sygnału z danego kanału. Symulacja pokazuje wyszukiwanie maksimum z
danych podanych na kalane lewym.
Ponieważ
aby
zaprezentować
działanie
modułu
musieliśmy
odpowiednio
przeskalować symulacje gdyż wyświetlanie odbywa się co określony okres czasu
vertical_counter musi osiągnąć swoja wartość maksymalna w tedy dopiero jest wyświetlany
obraz na monitorze vga.
Poniższa symulacja pokazuje ustawienie red_out będącego wyjściem modułu
powodującym ustawienie wyświetlania na obecnej pozycji na kolo czerwony.
str. 22
4.7 Raport z syntezy
Częstotliwość maksymalna
Raport z syntezy
Device Utilization Summary
Logic Utilization
Number of Slice Flip Flops
[-]
Used Available Utilization
870
9,312
9%
Number of 4 input LUTs
1,655
9,312
17%
Number of occupied Slices
1,136
4,656
24%
1,136
1,136
100%
0
1,136
0%
1,840
9,312
19%
40
232
17%
Number of RAMB16s
1
20
5%
Number of BUFGMUXs
1
24
4%
Number of Slices containing only related
logic
Number of Slices containing unrelated
logic
Total Number of 4 input LUTs
Number used as logic
Number used as a route-thru
Number used as Shift registers
Number of bonded IOBs
Average Fanout of Non-Clock Nets
Note(s)
1,653
185
2
3.27
str. 23
5. Implementacja
Gotowy projekt do swojego działania potrzebuje karty SD na której są umieszczone
pliki w formacie wav mające nazwę będącą cyfra w systemie hexadecymalnym 0-f.
Nazwa pliku jest istotna gdyż aby wybrać utwór należy posłużyć się czterema
przełącznikami, przełączając je w taki sposób aby tworzyły wybrana cyfrę w systemie
hexadecymalnym.
Gdy już wybraliśmy odpowiedni utwór, aby go odtworzyć należało przewinąć Rotary
w prawa stronę, przewiniecie w lewa stronę powodowało zatrzymanie odtwarzania.
Ilustracja poniżej przedstawia działanie projektu który wyświetla za pomaca modułu vga
wizualizacje wybranego przez nas sygnału dźwiękowego w formacie .wav.
Wewnętrzne słupki przedstawiają wartości maksymalne sygnału w określonym
fragmencie czasu będącym czasem potrzebnym na wyświetlenie całego obrazu na ekranie
dla danego kanału. Słupki te mogą mieć trzy kolory niebieski, zielony lub czerwony,
wyświetlenie danego koloru zależy od wartości sygnału.
Zewnętrzne słupki prezentują wartości maksymalne osiągnięte przez słupki
wewnętrzne. Słupki te opadają z określoną przez nas prędkością oraz są „podbijane” przez
słupki wewnętrzne.
Na poniższym zdjęciu widać działanie układu podczas odtwarzania stosunkowo głośnego
dźwięku.
str. 24
Podsumowanie
Podsumowując, projekt ten wniósł wiele nowego w nasze pojmowanie zagadnień
programowania układów cyfrowych. Jest wiele sposobów wizualizacji sygnału
dźwiękowego. Nasz projekt wyświetlał wyliczone słupki będące odzwierciedleniem
maksimum w krótkim odstępie czasu. Moduł napisany przez nas wyświetlał dynamicznie
obraz na monitorze vga, początkowo spora trudność w projekcie stanowiło opanowanie
posługiwaniem się wyświetlania obrazów na monitorze vga oraz odpowiednie
przekonwertowanie danych gdyż stosowaliśmy nieodpowiednio długie wektory sygnałów
przez co pojawiały się nieoczekiwane skoki słupków. Problem ten szybko rozwiązaliśmy.
Koncepcja rozwiązania zmieniała się wraz z rozwojem projektu, stąd też niektóre
archaiczne formy w kodzie.
str. 25
6. Bibliografia
http://www.zsk.ict.pwr.wroc.pl/zsk_ftp/fpga/Test_WAVreader.pdf
http://www.zsk.ict.pwr.wroc.pl/zsk_ftp/fpga/
http://pl.wikipedia.org/wiki/Secure_Digital
http://pl.wikipedia.org/wiki/Video_Graphics_Array
str. 26
Jako załącznik dodajemy logi konsoli
Started : "Synthesize - XST".
Running xst...
Command Line: xst -intstyle ise -ifn "D:/koko4/Test_WAVreader.xst" -ofn
"D:/koko4/Test_WAVreader.syr"
Reading design: Test_WAVreader.prj
=========================================================================
*
HDL Compilation
*
=========================================================================
Compiling vhdl file "D:/koko4/FSM_SendSamples.vhd" in Library work.
Entity <FSM_SendSamples> compiled.
Entity <FSM_SendSamples> (Architecture <Behavioral>) compiled.
Compiling vhdl file "D:/koko4/vga2222.vhd" in Library work.
Entity <vga2222> compiled.
Entity <vga2222> (Architecture <Behavioral>) compiled.
Compiling vhdl file "D:/koko4/Test_WAVreader.vhf" in Library work.
Entity <Test_WAVreader> compiled.
Entity <Test_WAVreader> (Architecture <BEHAVIORAL>) compiled.
=========================================================================
*
Design Hierarchy Analysis
*
=========================================================================
Analyzing hierarchy for entity <Test_WAVreader> in library <work> (architecture
<BEHAVIORAL>).
Analyzing hierarchy for entity <FSM_SendSamples> in library <work> (architecture
<Behavioral>).
Analyzing hierarchy for entity <vga2222> in library <work> (architecture <Behavioral>).
=========================================================================
*
HDL Analysis
*
=========================================================================
Analyzing Entity <Test_WAVreader> in library <work> (Architecture <BEHAVIORAL>).
WARNING:Xst:2211 - "D:/koko4/Test_WAVreader.vhf" line 183: Instantiating black box module
<RotaryEnc>.
WARNING:Xst:753 - "D:/koko4/Test_WAVreader.vhf" line 190: Unconnected output port
'FmtSRate' of component 'WAVreader'.
WARNING:Xst:2211 - "D:/koko4/Test_WAVreader.vhf" line 190: Instantiating black box module
<WAVreader>.
WARNING:Xst:753 - "D:/koko4/Test_WAVreader.vhf" line 226: Unconnected output port 'SF_CE0'
of component 'DACWrite'.
WARNING:Xst:2211 - "D:/koko4/Test_WAVreader.vhf" line 226: Instantiating black box module
<DACWrite>.
WARNING:Xst:2211 - "D:/koko4/Test_WAVreader.vhf" line 246: Instantiating black box module
<LCD1x64>.
WARNING:Xst:753 - "D:/koko4/Test_WAVreader.vhf" line 273: Unconnected output port
'm_kanal_l' of component 'vga2222'.
WARNING:Xst:753 - "D:/koko4/Test_WAVreader.vhf" line 273: Unconnected output port
'm_kanal_r' of component 'vga2222'.
Entity <Test_WAVreader> analyzed. Unit <Test_WAVreader> generated.
Analyzing Entity <FSM_SendSamples> in library <work> (Architecture <Behavioral>).
Entity <FSM_SendSamples> analyzed. Unit <FSM_SendSamples> generated.
str. 27
Analyzing Entity <vga2222> in library <work> (Architecture <Behavioral>).
Entity <vga2222> analyzed. Unit <vga2222> generated
=========================================================================
*
HDL Synthesis
*
=========================================================================
Performing bidirectional port resolution...
Synthesizing Unit <FSM_SendSamples>.
Related source file is "D:/koko4/FSM_SendSamples.vhd".
WARNING:Xst:647 - Input <SampL<3:0>> is never used. This port will be preserved and left
unconnected if it belongs to a top-level block or it belongs to a sub-block and the
hierarchy of this sub-block is preserved.
WARNING:Xst:647 - Input <SampR<3:0>> is never used. This port will be preserved and left
unconnected if it belongs to a top-level block or it belongs to a sub-block and the
hierarchy of this sub-block is preserved.
Found finite state machine <FSM_0> for signal <State>.
----------------------------------------------------------------------| States
| 6
|
| Transitions
| 10
|
| Inputs
| 3
|
| Outputs
| 9
| Clock
| Clk
(rising_edge)
|
| Reset
| Reset
(positive)
|
|
| Reset type
| asynchronous
|
| Reset State
| sreset
|
| Power Up State
| sreset
|
| Encoding
| automatic
|
| Implementation
| LUT
|
----------------------------------------------------------------------Summary:
inferred
1 Finite State Machine(s).
Unit <FSM_SendSamples> synthesized.
Synthesizing Unit <vga2222>.
Related source file is "D:/koko4/vga2222.vhd".
WARNING:Xst:653 - Signal <k_r2<15:9>> is used but never assigned. This sourceless signal
will be automatically connected to value 0000000.
WARNING:Xst:653 - Signal <k_l2<15:9>> is used but never assigned. This sourceless signal
will be automatically connected to value 0000000.
Found 16-bit register for signal <m_kanal_l>.
Found 16-bit register for signal <m_kanal_r>.
Found 1-bit register for signal <blue_out>.
Found 1-bit register for signal <red_out>.
Found 1-bit register for signal <vs_out>.
Found 1-bit register for signal <green_out>.
Found 1-bit register for signal <hs_out>.
Found 11-bit up counter for signal <horizontal_counter>.
Found 11-bit comparator greater for signal <hs_out$cmp_gt0000> created at line 283.
Found 11-bit comparator less for signal <hs_out$cmp_lt0000> created at line 283.
Found 16-bit register for signal <k_l>.
Found 16-bit adder for signal <k_l$sub0000> created at line 122.
Found 9-bit register for signal <k_l2<8:0>>.
Found 32-bit comparator greatequal for signal <k_l2_0$cmp_ge0000> created at line 108.
str. 28
Found 16-bit up counter for signal <k_l_global>.
Found 16-bit adder for signal <k_l_global$add0000> created at line 138.
Found 16-bit comparator greatequal for signal <k_l_global$cmp_ge0000> created at line
136.
Found 16-bit register for signal <k_r>.
Found 16-bit adder for signal <k_r$sub0000> created at line 123.
Found 9-bit register for signal <k_r2<8:0>>.
Found 16-bit up counter for signal <k_r_global>.
Found 16-bit adder for signal <k_r_global$add0000> created at line 130.
Found 16-bit comparator greatequal for signal <k_r_global$cmp_ge0000> created at line
128.
Found 32-bit up counter for signal <licznik>.
Found 16-bit register for signal <max_l>.
Found 16-bit comparator greater for signal <max_l$cmp_gt0000> created at line 89.
Found 16-bit register for signal <max_r>.
Found 16-bit comparator greater for signal <max_r$cmp_gt0000> created at line 95.
Found 11-bit comparator greatequal for signal <red_out$cmp_ge0000> created at line
153.
Found 12-bit comparator greatequal for signal <red_out$cmp_ge0001> created at line
157.
Found 16-bit comparator greatequal for signal <red_out$cmp_ge0002> created at line
157.
Found 12-bit comparator greatequal for signal <red_out$cmp_ge0003> created at line
184.
Found 16-bit comparator greatequal for signal <red_out$cmp_ge0004> created at line
184.
Found 12-bit comparator greatequal for signal <red_out$cmp_ge0005> created at line
217.
Found 16-bit comparator greatequal for signal <red_out$cmp_ge0006> created at line
217.
Found 12-bit comparator greatequal for signal <red_out$cmp_ge0007> created at line
241.
Found 16-bit comparator greatequal for signal <red_out$cmp_ge0008> created at line
241.
Found 16-bit comparator greater for signal <red_out$cmp_gt0000> created at line 161.
Found 16-bit comparator greater for signal <red_out$cmp_gt0001> created at line 167.
Found 12-bit comparator greater for signal <red_out$cmp_gt0002> created at line 188.
Found 12-bit comparator greater for signal <red_out$cmp_gt0003> created at line 194.
Found 16-bit comparator greater for signal <red_out$cmp_gt0004> created at line 221.
Found 16-bit comparator greater for signal <red_out$cmp_gt0005> created at line 227.
Found 12-bit comparator less for signal <red_out$cmp_lt0000> created at line 153.
Found 12-bit comparator less for signal <red_out$cmp_lt0001> created at line 157.
Found 11-bit comparator less for signal <red_out$cmp_lt0002> created at line 157.
Found 12-bit comparator less for signal <red_out$cmp_lt0003> created at line 184.
Found 12-bit comparator less for signal <red_out$cmp_lt0004> created at line 217.
Found 12-bit comparator less for signal <red_out$cmp_lt0005> created at line 241.
Found 11-bit up counter for signal <vertical_counter>.
Found 11-bit comparator greater for signal <vs_out$cmp_gt0000> created at line 289.
Found 11-bit comparator less for signal <vs_out$cmp_lt0000> created at line 289.
Summary:
inferred
5 Counter(s).
str. 29
inferred 119 D-type flip-flop(s).
inferred
inferred
4 Adder/Subtractor(s).
30 Comparator(s).
Unit <vga2222> synthesized.
Synthesizing Unit <Test_WAVreader>.
Related source file is "D:/koko4/Test_WAVreader.vhf".
WARNING:Xst:653 - Signal <XLXN_576<63:16>> is used but never assigned. This sourceless
signal will be automatically connected to value
000000000000000000000000000000000000000000000000.
Unit <Test_WAVreader> synthesized.
=========================================================================
HDL Synthesis Report
Macro Statistics
# Adders/Subtractors
: 4
16-bit adder
: 4
# Counters
: 5
11-bit up counter
: 2
16-bit up counter
: 2
32-bit up counter
: 1
# Registers
: 29
1-bit register
: 23
16-bit register
: 6
# Comparators
: 30
11-bit comparator greatequal
: 1
11-bit comparator greater
: 2
11-bit comparator less
: 3
12-bit comparator greatequal
: 4
12-bit comparator greater
: 2
12-bit comparator less
: 5
16-bit comparator greatequal
: 6
16-bit comparator greater
: 6
32-bit comparator greatequal
: 1
=========================================================================
*
Advanced HDL Synthesis
*
=========================================================================
Analyzing FSM <FSM_0> for best encoding.
Optimizing FSM <XLXI_30/State/FSM> on signal <State[1:3]> with gray encoding.
-------------------State
| Encoding
-------------------sreset | 000
sready | 001
swaitl | 011
ssendl | 010
swaitr | 110
ssendr | 111
-------------------Reading core <RotaryEnc.ngc>.
Reading core <WAVreader.ngc>.
Reading core <DACWrite.ngc>.
Reading core <LCD1x64.ngc>.
str. 30
Loading core <RotaryEnc> for timing and area information for instance <XLXI_1>.
Loading core <WAVreader> for timing and area information for instance <XLXI_2>.
Loading core <DACWrite> for timing and area information for instance <XLXI_31>.
Loading core <LCD1x64> for timing and area information for instance <XLXI_40>.
=========================================================================
Advanced HDL Synthesis Report
Macro Statistics
# FSMs
: 1
# Adders/Subtractors
: 4
16-bit adder
: 4
# Counters
: 5
11-bit up counter
: 2
16-bit up counter
: 2
32-bit up counter
: 1
# Registers
: 119
Flip-Flops
: 119
# Comparators
: 30
11-bit comparator greatequal
: 1
11-bit comparator greater
: 2
11-bit comparator less
: 3
12-bit comparator greatequal
: 4
12-bit comparator greater
: 2
12-bit comparator less
: 5
16-bit comparator greatequal
: 6
16-bit comparator greater
: 6
32-bit comparator greatequal
: 1
========================================================================
=========================================================================
*
Low Level Synthesis
*
=========================================================================
WARNING:Xst:1293 - FF/Latch <k_l_10> has a constant value of 0 in block <vga2222>. This
FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_l_11> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_l_12> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_l_13> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_l_14> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_l_15> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_r_10> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_r_11> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_r_12> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_r_13> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
str. 31
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_r_14> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1896 - Due to other FF/Latch trimming, FF/Latch <k_r_15> has a constant value
of 0 in block <vga2222>. This FF/Latch will be trimmed during the optimization process.
Optimizing unit <Test_WAVreader> ...
Optimizing unit <vga2222> ...
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_15> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_14> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_13> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_12> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_11> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_10> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_9> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_8> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_7> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_6> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_5> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_4> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_3> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_2> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_1> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_r_0> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_15> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_14> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_13> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_12> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_11> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_10> of sequential type is unconnected in block
<Test_WAVreader>.
str. 32
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_9> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_8> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_7> of sequential type is unconnected in block
<Test_WAVreader>.
WARNING:Xst:2677 - Node <XLXI_84/m_kanal_l_6> of sequential type is unconnected in block
<Test_WAVreader>.
Mapping all equations...
Building and optimizing final netlist ...
Found area constraint ratio of 100 (+ 5) on block Test_WAVreader, actual ratio is 23.
INFO:Xst:2260 - The FF/Latch <cntDigit_0> in Unit <XLXI_40> is equivalent to the following
4 FFs/Latches : <cntDigit_0_1> <cntDigit_0_2> <cntDigit_0_3> <cntDigit_0_4>
INFO:Xst:2260 - The FF/Latch <cntDigit_1> in Unit <XLXI_40> is equivalent to the following
2 FFs/Latches : <cntDigit_1_1> <cntDigit_1_2>
INFO:Xst:2260 - The FF/Latch <State_16> in Unit <XLXI_40> is equivalent to the following
FF/Latch : <State_16_1>
INFO:Xst:2260 - The FF/Latch <cntDigit_0> in Unit <XLXI_40> is equivalent to the following
4 FFs/Latches : <cntDigit_0_1> <cntDigit_0_2> <cntDigit_0_3> <cntDigit_0_4>
INFO:Xst:2260 - The FF/Latch <cntDigit_1> in Unit <XLXI_40> is equivalent to the following
2 FFs/Latches : <cntDigit_1_1> <cntDigit_1_2>
INFO:Xst:2260 - The FF/Latch <State_16> in Unit <XLXI_40> is equivalent to the following
FF/Latch
<State_16_1>
Final Macro Processing ...
=========================================================================
Final Register Report
Macro Statistics
# Registers
: 164
Flip-Flops
: 164
=========================================================================
=========================================================================
*
Partition Report
*
=========================================================================
Partition Implementation Status
------------------------------No Partitions were found in this design.
------------------------------=========================================================================
*
Final Report
*
=========================================================================
Clock Information:
----------------------------------------------------+------------------------+-------+
Clock Signal
| Clock buffer(FF name)
| Load
|
-----------------------------------+------------------------+-------+
Clk_50MHz
| BUFGP
| 894
|
----------------------------------+------------------------+-------+
Asynchronous Control Signals Information:
--------------------------------------------------------------------------+------------------------+-------+
Control Signal
| Buffer(FF name)
| Load
|
str. 33
-----------------------------------+------------------------+-------+
BTN_SOUTH
| IBUF
| 3
|
-----------------------------------+------------------------+-------+
Timing Summary:
--------------Speed Grade: -4
Minimum period: 11.111ns (Maximum Frequency: 90.004MHz)
Minimum input arrival time before clock: 10.065ns
Maximum output required time after clock: 7.731ns
Maximum combinational path delay: 7.263ns
=========================================================================
Process "Synthesize - XST" completed successfully
Started : "Translate".
Running ngdbuild...
Command Line: ngdbuild -intstyle ise -dd _ngo -nt timestamp -uc PS2_USB_SDC.ucf -uc
LCD.ucf -uc GenIO.ucf -uc ADC_DAC.ucf -p xc3s500e-fg320-4 Test_WAVreader.ngc
Test_WAVreader.ngd
Command Line: D:\Xlinx\ISE_DS\ISE\bin\nt\unwrapped\ngdbuild.exe -intstyle ise
-dd _ngo -nt timestamp -uc PS2_USB_SDC.ucf -uc LCD.ucf -uc GenIO.ucf -uc
ADC_DAC.ucf -p xc3s500e-fg320-4 Test_WAVreader.ngc Test_WAVreader.ngd
Reading NGO file "D:/koko4/Test_WAVreader.ngc" ...
Loading design module "D:\koko4/RotaryEnc.ngc"...
Loading design module "D:\koko4/WAVreader.ngc"...
Loading design module "D:\koko4/DACWrite.ngc"...
Loading design module "D:\koko4/LCD1x64.ngc"...
Gathering constraint information from source properties...
Done.
Annotating constraints to design from ucf file "PS2_USB_SDC.ucf" ...
Annotating constraints to design from ucf file "LCD.ucf" ...
Annotating constraints to design from ucf file "GenIO.ucf" ...
Annotating constraints to design from ucf file "ADC_DAC.ucf" ...
Resolving constraint associations...
Checking Constraint Associations...
Done...
Checking expanded design ...
WARNING:NgdBuild:452 - logical net 'N31' has no driver
WARNING:NgdBuild:452 - logical net 'N32' has no driver
WARNING:NgdBuild:452 - logical net 'N33' has no driver
WARNING:NgdBuild:452 - logical net 'N34' has no driver
Partition Implementation Status
------------------------------No Partitions were found in this design.
------------------------------NGDBUILD Design Results Summary:
Number of errors:
0
Number of warnings:
4
Writing NGD file "Test_WAVreader.ngd" ...
Total REAL time to NGDBUILD completion:
6 sec
Total CPU time to NGDBUILD completion:
6 sec
Writing NGDBUILD log file "Test_WAVreader.bld"...
NGDBUILD done.
str. 34
Process "Translate" completed successfully
Started : "Map".
Running map...
Command Line: map -intstyle ise -p xc3s500e-fg320-4 -cm area -ir off -pr off -c 100 -o
Test_WAVreader_map.ncd Test_WAVreader.ngd Test_WAVreader.pcf
Using target part "3s500efg320-4".
Mapping design into LUTs...
Running directed packing...
WARNING:Pack:1186 - One or more I/O components have conflicting property values.
For each occurrence, the system will use the property value attached to the
pad.
Otherwise, the system will use the first property value read.
To view
each occurrence, create a detailed map report (run map using the -detail
option).
Running delay-based LUT packing...
Running related packing...
Updating timing models...
Design Summary:
Number of errors:
0
Number of warnings:
1
Logic Utilization:
Number of Slice Flip Flops:
Number of 4 input LUTs:
870 out of
9,312
9%
1,655 out of
9,312
17%
1,136 out of
4,656
24%
Logic Distribution:
Number of occupied Slices:
Number of Slices containing only related logic:
1,136 out of
Number of Slices containing unrelated logic:
0 out of
1,136 100%
1,136
0%
*See NOTES below for an explanation of the effects of unrelated logic.
Total Number of 4 input LUTs:
Number used as logic:
Number used as a route-thru:
Number used as Shift registers:
1,840 out of
9,312
19%
1,653
185
2
The Slice Logic Distribution report is not meaningful if the design is
over-mapped for a non-slice resource or if Placement fails.
Number of bonded IOBs:
40 out of
232
17%
Number of RAMB16s:
1 out of
20
5%
Number of BUFGMUXs:
1 out of
24
4%
Average Fanout of Non-Clock Nets:
Peak Memory Usage:
3.27
188 MB
Total REAL time to MAP completion:
8 secs
Total CPU time to MAP completion:
8 secs
NOTES:
Related logic is defined as being logic that shares connectivity - e.g. two
LUTs are "related" if they share common inputs.
When assembling slices,
Map gives priority to combine logic that is related.
Doing so results in
the best timing performance.
Unrelated logic shares no connectivity.
Map will only begin packing
unrelated logic into a slice once 99% of the slices are occupied through
related logic packing.
Note that once logic distribution reaches the 99% level through related
str. 35
logic packing, this does not mean the device is completely utilized.
Unrelated logic packing will then begin, continuing until all usable LUTs
and FFs are occupied.
Depending on your timing budget, increased levels of
unrelated logic packing may adversely affect the overall timing performance
of your design.
Mapping completed.
See MAP report file "Test_WAVreader_map.mrp" for details.
Process "Map" completed successfully
Started : "Place & Route".
Running par...
Command Line: par -w -intstyle ise -ol high -t 1 Test_WAVreader_map.ncd Test_WAVreader.ncd
Test_WAVreader.pc
Constraints file: Test_WAVreader.pcf.
Loading device for application Rf_Device from file '3s500e.nph' in environment
D:\Xlinx\ISE_DS\ISE\.
"Test_WAVreader" is an NCD, version 3.2, device xc3s500e, package fg320, speed -4
Initializing temperature to 85.000 Celsius. (default - Range: -40.000 to 100.000 Celsius)
Initializing voltage to 1.140 Volts. (default - Range: 1.140 to 1.320 Volts)
Device speed data version:
"PRODUCTION 1.27 2010-06-22".
Design Summary Report:
Number of External IOBs
40 out of 232
Number of External Input IOBs
Number of External Input IBUFs
10
Number of LOCed External Input IBUFs
Number of External Output IOBs
10 out of 10
100%
29
Number of External Output IOBs
29
Number of LOCed External Output IOBs
Number of External Bidir IOBs
29 out of 29
100%
1
Number of External Bidir IOBs
1
Number of LOCed External Bidir IOBs
1 out of 1
100%
Number of BUFGMUXs
1 out of 24
4%
Number of RAMB16s
1 out of 20
5%
Number of Slices
1136 out of 4656
24%
11 out of 2328
1%
Number of SLICEMs
Overall effort level (-ol):
High
Placer effort level (-pl):
High
17%
10
Placer cost table entry (-t): 1
Router effort level (-rl):
High
Starting initial Timing Analysis.
REAL time: 4 secs
Finished initial Timing Analysis.
REAL time: 4 secs
Starting Placer
Total REAL time at the beginning of Placer: 4 secs
Total CPU
time at the beginning of Placer: 4 secs
Phase 1.1
Initial Placement Analysis
Phase 1.1
Initial Placement Analysis (Checksum:c11c9e24) REAL time: 5 secs
Phase 2.7
Design Feasibility Check
Phase 2.7
Design Feasibility Check (Checksum:c11c9e24) REAL time: 5 secs
Phase 3.31
Phase 3.31
Local Placement Optimization
Local Placement Optimization (Checksum:c11c9e24) REAL time: 5 secs
Phase 4.2
Initial Clock and IO Placement
Phase 4.2
Initial Clock and IO Placement (Checksum:2d36981c) REAL time: 18 secs
str. 36
Phase 5.30
Global Clock Region Assignment
Phase 5.30
Global Clock Region Assignment (Checksum:2d36981c) REAL time: 18 secs
Phase 6.36
Local Placement Optimization
Phase 6.36
Local Placement Optimization (Checksum:2d36981c) REAL time: 18 secs
Phase 7.8
Global Placement
............
Phase 7.8
Global Placement (Checksum:8f1d5f68) REAL time: 26 secs
Phase 8.5
Local Placement Optimization
Phase 8.5
Local Placement Optimization (Checksum:8f1d5f68) REAL time: 26 secs
Phase 9.18
Placement Optimization
Phase 9.18
Placement Optimization (Checksum:55b5214e) REAL time: 31 secs
Phase 10.5
Local Placement Optimization
Phase 10.5
Local Placement Optimization (Checksum:55b5214e) REAL time: 31 secs
Total REAL time to Placer completion: 31 secs
Total CPU
time to Placer completion: 30 secs
Writing design to file Test_WAVreader.ncd
Starting Router
Phase
1
: 7366 unrouted;
REAL time: 42 secs
Phase
2
: 6706 unrouted;
REAL time: 42 secs
Phase
3
: 1465 unrouted;
REAL time: 45 secs
Phase
4
: 1465 unrouted; (Setup:0, Hold:0, Component Switching Limit:0)
REAL time:
46 secs
Phase
5
: 0 unrouted; (Setup:0, Hold:0, Component Switching Limit:0)
REAL time: 48
secs
Updating file: Test_WAVreader.ncd with current fully routed design.
Phase
6
: 0 unrouted; (Setup:0, Hold:0, Component Switching Limit:0)
REAL time: 50
7
: 0 unrouted; (Setup:0, Hold:0, Component Switching Limit:0)
REAL time: 50
8
: 0 unrouted; (Setup:0, Hold:0, Component Switching Limit:0)
REAL time: 51
secs
Phase
secs
Phase
secs
WARNING:Route:455 - CLK Net:Clk_50MHz_BUFGP may have excessive skew because
0 CLK pins and 1 NON_CLK pins failed to route using a CLK template.
Total REAL time to Router completion: 51 secs
Total CPU time to Router completion: 50 secs
Partition Implementation Status
------------------------------No Partitions were found in this design.
------------------------------Generating "PAR" statistics.
**************************
Generating Clock Report
**************************
+---------------------+--------------+------+------+------------+-------------+
|
Clock Net
|
Resource
|Locked|Fanout|Net Skew(ns)|Max Delay(ns)|
+---------------------+--------------+------+------+------------+-------------+
|
Clk_50MHz_BUFGP | BUFGMUX_X1Y11| No
|
586 |
0.089
|
0.206
|
+---------------------+--------------+------+------+------------+-------------+
* Net Skew is the difference between the minimum and maximum routing
only delays for the net. Note this is different from Clock Skew which
is reported in TRCE timing report. Clock Skew is the difference between
str. 37
the minimum and maximum path delays which includes logic delays.
Timing Score: 0 (Setup: 0, Hold: 0, Component Switching Limit: 0)
Asterisk (*) preceding a constraint indicates it was not met.
This may be due to a setup or hold violation.
----------------------------------------------------------------------------------------Constraint
|
Timing |
Timing
Errors |
Score
Check
|
| Worst Case |
|
Slack
Best Case |
| Achievable |
----------------------------------------------------------------------------------------NET "Clk_50MHz_BUFGP/IBUFG" PERIOD = 20 n | SETUP
0|
|
6.788ns|
13.212ns|
|
0.972ns|
|
0
s HIGH 50%
0|
| HOLD
0
----------------------------------------------------------------------------------------All constraints were met.
Generating Pad Report.
All signals are completely routed.
Total REAL time to PAR completion: 53 secs
Total CPU time to PAR completion: 52 secs
Peak Memory Usage:
227 MB
Placement: Completed - No errors found.
Routing: Completed - No errors found.
Timing: Completed - No errors found.
Number of error messages: 0
Number of warning messages: 1
Number of info messages: 0
Writing design to file Test_WAVreader.ncd
PAR done!
Process "Place & Route" completed successfully
Started : "Generate Post-Place & Route Static Timing".
Running trce...
Command Line: trce -intstyle ise -v 3 -s 4 -n 3 -fastpaths -xml Test_WAVreader.twx
Test_WAVreader.ncd -o Test_WAVreader.twr Test_WAVreader.pcf -ucf PS2_USB_SDC.ucf -ucf
LCD.ucf -ucf GenIO.ucf -ucf ADC_DAC.ucf
Loading device for application Rf_Device from file '3s500e.nph' in environment
D:\Xlinx\ISE_DS\ISE\.
"Test_WAVreader" is an NCD, version 3.2, device xc3s500e, package fg320,
speed -4
Analysis completed Thu May 26 19:51:27 2011
-----------------------------------------------------------------------------Generating Report ...
Number of warnings: 0
Total time: 6 secs
Process "Generate Post-Place & Route Static Timing" completed successfully
str. 38