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