Spisu treści:

4-stopniowy sekwencer cyfrowy: 19 kroków (ze zdjęciami)
4-stopniowy sekwencer cyfrowy: 19 kroków (ze zdjęciami)

Wideo: 4-stopniowy sekwencer cyfrowy: 19 kroków (ze zdjęciami)

Wideo: 4-stopniowy sekwencer cyfrowy: 19 kroków (ze zdjęciami)
Wideo: Efalock Curls Up LCD, lokówka do włosów, 13mm lub 19mm 2024, Listopad
Anonim
4-stopniowy sekwencer cyfrowy
4-stopniowy sekwencer cyfrowy
4-stopniowy sekwencer cyfrowy
4-stopniowy sekwencer cyfrowy

CPE 133, Cal Poly San Luis Obispo

Twórcy projektu: Jayson Johnston i Bjorn Nelson

W dzisiejszym przemyśle muzycznym jednym z najczęściej używanych „instrumentów” jest syntezator cyfrowy. Każdy gatunek muzyczny, od hip-hopu po pop, a nawet country, wykorzystuje w studiu cyfrowy syntezator do tworzenia bitów i dźwięków, których potrzebują, aby ożywić swoją muzykę. W tym samouczku stworzymy bardzo prosty syntezator z płytą Basys 3 FPGA.

Syntezator będzie w stanie zagrać cztery wybrane ćwierćnuty ze stałą liczbą uderzeń na minutę. Użytkownicy będą używać przełączników, aby przypisać każdą ćwierćnutę do muzycznej wysokości. W tym projekcie używamy 4-bitowego przetwornika cyfrowo-analogowego (DAC), aby pobrać wyjście z płyty i przetworzyć je na sygnał analogowy. Wyjście z DAC-a zostanie następnie przekazane do standardowego głośnika komputerowego, tworząc naszą muzykę. Możliwych jest szesnaście dyskretnych podziałek. Ograniczymy nasz syntezator do jednej oktawy 12 nut, które mieszczą się między środkowym C (261,6 Hz) a B4 (493,9 Hz). Użytkownik będzie miał również możliwość przypisania wielu nut w tym samym czasie, a także przypisania pauzy przez naciśnięcie przypisania, nie mając żadnego z przełączników wysokości tonu przesuniętych w górę. Gdy każda nuta jest wybierana i odtwarzana, litera jest wyświetlana na wyświetlaczu 7-segmentowym. Będziemy również używać trzech przycisków na tablicy, jednego do odtwarzania i wstrzymywania muzyki, jednego do resetowania syntezatora i wprowadzania go w tryb „wyboru”, a trzeciego do przypisywania każdej nucie wysokości w trybie wyboru.

Gdy użytkownik jest zadowolony ze swojego wyboru nut i po naciśnięciu przycisku odtwarzania, syntezator będzie odtwarzał każdą nutę po kolei, aż użytkownik naciśnie pauzę lub wybierz.

Oto lista wymaganego sprzętu:

  • Vivado (lub dowolna przestrzeń robocza VHDL)
  • Basys 3 lub podobna płyta FPGA
  • Konwerter cyfrowo-analogowy (min. 4 bity)
  • Głośnik z gniazdem słuchawkowym
  • Przewody drutowe

Krok 1: Obsługa sekwencera cyfrowego przez użytkownika

Obsługa przez użytkownika cyfrowego sekwencera
Obsługa przez użytkownika cyfrowego sekwencera

Poniższe kroki dotyczą obsługi cyfrowego sekwencera. Cyfrowy sekwencer obsługuje odtwarzanie 12 różnych dźwięków (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B), w zakresie od 261,6 Hz do 493,9 Hz.

1. Naciśnij lewy przycisk, aby przełączyć tablicę w tryb wyboru. W tym trybie wszystkie 4 przełączniki znajdujące się najbardziej po lewej stronie (przełączniki 13 do 16) będą używane do zapisania odrębnej wartości wysokości dźwięku.

2. Aby dokonać wyboru, włącz jeden z lewych przełączników, a następnie użyj 4 przełączników najbardziej po prawej stronie (przełączniki od 1 do 4), aby wybrać żądaną wysokość dźwięku. Wysokość skojarzona z konkretną kombinacją prawych przełączników zostanie pokazana na siedmiosegmentowym wyświetlaczu, a wyświetlacz zaktualizuje się do nowej skojarzonej tonacji za każdym razem, gdy prawe przełączniki zostaną przesunięte na nową kombinację. Pauzę można przypisać, nigdy nie przypisując tonacji jednemu z lewych przełączników lub przypisując nutę tonację pokazaną jako 0 na wyświetlaczu. Po znalezieniu żądanej wysokości dźwięku i jej wyświetleniu na wyświetlaczu naciśnij dolny przycisk przypisywania, aby przypisać tę konkretną wysokość do nuty.

3. Powtórz krok 2 dla trzech pozostałych nut, włączając każdy z pozostałych lewych przełączników indywidualnie, wybierając odpowiednią wysokość za pomocą prawych przełączników i naciskając dolny przycisk, aby przypisać wysokość nuty. Wiele nut może być przypisanych do tej samej wysokości, przesuwając więcej niż jeden z lewych przełączników w górę w tym samym czasie.

4. Teraz, gdy wszystkie wysokości nut zostały przypisane, cyfrowy sekwencer jest gotowy do gry. Aby odtworzyć nuty na głośniku, po prostu naciśnij prawy przycisk odtwarzania/pauzy, aby rozpocząć odtwarzanie muzyki. Kolejność sekwencji odtwarzania odzwierciedla tony skojarzone z lewymi przełącznikami, od lewej do prawej. Nuty będą grane z określoną liczbą uderzeń na minutę, w kolejności 1, 2, 3, 4, 1, 2…. Wyświetlacz pokaże aktualnie odtwarzaną nutę, gdy głośniki odtwarzają muzykę. Aby wstrzymać odtwarzanie muzyki, wystarczy nacisnąć prawy przycisk, po czym muzyka przestanie grać, a na wyświetlaczu pojawi się symbol pauzy. Ponowne naciśnięcie prawego przycisku wznowi odtwarzanie.

Krok 2: Szczegóły techniczne

Szczegóły techniczne
Szczegóły techniczne

Nasz syntezator wykorzystuje wiele różnych komponentów cyfrowych. W zestawie znajdują się automaty skończone, rejestry, multipleksery, dzielniki zegara i inne. Do budowy naszego syntezatora użyliśmy 10 unikalnych plików modułowych. Zamiast tworzyć z każdego modułu komponent, podzieliliśmy modułowe pliki według funkcji. W rezultacie większość modułów składa się z więcej niż jednego komponentu. Zauważ, że powyższy obrazek pokazuje każdy blok połączony ze sobą w naszym najlepszym projekcie.

Omówimy każdy moduł, opisując wejścia i wyjścia, rozkładając jego komponenty i wyjaśniając jego przeznaczenie w całym projekcie. Plik ZIP znajduje się na dole instrukcji, która zawiera każdy plik kodu VHDL używany w projekcie.

Wejścia

  • Clk (natywny sygnał zegara)
  • PP (odtwórz/pauza)
  • Sel (ustaw syntezator w trybie wyboru)
  • Przypisz (przypisz krok do prezentacji)
  • Krok (notatki pozycyjne)
  • Freq (przełączniki tworzące żądaną wysokość dźwięku)

Wyjścia

  • Anoda (anody 7-segmentowe)
  • Katoda (katody 7-segmentowe)
  • DAC (4-bity sterujące DAC)

Krok 3: Szczegóły techniczne

Szczegóły techniczne
Szczegóły techniczne

Krok 4: 7-segmentowy dzielnik zegara

7-segmentowy dzielnik zegara
7-segmentowy dzielnik zegara

Nasz syntezator wykorzystuje trzy dzielniki zegarowe, z których wszystkie wytwarzają sygnały, które w naszym projekcie służą innym celom. Dzielnik zegara pobiera natywny sygnał zegarowy i wytwarza zmieniony sygnał o częstotliwości mniejszej niż oryginalny sygnał zegarowy. Natywny zegar Basys 3 wynosi 100 MHz. Jest to częstotliwość, z której korzystają nasze dzielniki zegara. Jeśli używasz innej płyty FPGA z inną natywną częstotliwością zegara, być może będziesz musiał zmienić kod.

7-segmentowy dzielnik zegara wytwarza sygnał, który steruje plikiem seg_display. Bardziej szczegółowo wyjaśnimy, jak ten plik działa, gdy przejdziemy do jego sekcji. Zasadniczo ten dzielnik zegara wytwarza sygnał 240 Hz, który będzie używany do przełączania między anodami i katodami na wyświetlaczu. Sygnał wynosi 240 Hz, ponieważ częstotliwość, przy której ludzkie oko nie może rozpoznać braku światła, wynosi 60 Hz. Używamy dwóch cyfr, więc podwajając tę częstotliwość, każda cyfra będzie oscylować z częstotliwością 60 Hz. Następnie podwajamy go, aby uzyskać 240 Hz, ponieważ system zmienia się tylko wtedy, gdy sygnał staje się wysoki, a nie gdy jest niski.

Aby to osiągnąć, dzielnik pobiera natywny sygnał 100 MHz i odlicza przy każdym rosnącym zboczu. Gdy licznik osiągnie 416667, wyjście zmieni się z niskiego na wysoki lub odwrotnie.

Wejścia

Clk (natywny sygnał zegara)

Wyjścia

Clk_7seg (do seg_display)

składniki

  • Rejestr D
  • MUX
  • Falownik
  • Sumator

Krok 5: Dzielnik zegara uderzeń na minutę

Dzielnik uderzeń na minutę
Dzielnik uderzeń na minutę

W podobny sposób działa dzielnik zegara BPM. Ten dzielnik wytwarza częstotliwość zegara, która steruje przełączaniem między czterema krokami podczas wyprowadzania dźwięków w stanie odtwarzania. Zdecydowaliśmy się na przełączanie między nutami przy 100 BPM. Przy 100 BPM każda nuta będzie grana przez 3/5 sekundy. Otrzymany sygnał miałby częstotliwość 1,67 Hz.

Aby wytworzyć sygnał o tej częstotliwości, ponownie użyliśmy systemu liczenia, ale tym razem było to 60 milionów. Za każdym razem, gdy licznik osiągnął 60 milionów, sygnał wyjściowy przełączał się na wysoki lub niski.

Wejścia

Clk (natywna częstotliwość zegara)

Wyjścia

Clk_BPM (do wyjścia_FSM)

składniki

  • Rejestr D
  • MUX
  • Falownik
  • Sumator

Krok 6: Dzielnik zegara na boisko

Dzielnik zegara boiska
Dzielnik zegara boiska

Dzielnik zegarowy Pitches to największy z naszych dzielników zegarowych. Ten dzielnik wyprowadza 12 różnych sygnałów odpowiadających 12 różnym nutom, które może grać nasz syntezator. Korzystając z podstawowej wiedzy z zakresu teorii muzyki, wywnioskowaliśmy, że bit lub autobus może oscylować w tempie odpowiadającym częstotliwości nut. Aby zobaczyć częstotliwości, których użyliśmy, spójrz tutaj. Użyliśmy czwartej oktawy tonów.

Zastosowano tutaj ten sam system liczenia. Aby poznać konkretne wartości, do których obliczyliśmy, zobacz plik oznaczony Clk_div_pitches.

Wejścia

Clk (natywna częstotliwość zegara)

Wyjścia

C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (aby wybrać wyjście)

składniki

  • Rejestr D
  • MUX
  • Falownik
  • Sumator

Krok 7: Odtwórz/wstrzymaj/wybierz maszynę stanu

Graj/Pauza/Wybierz automat stanów
Graj/Pauza/Wybierz automat stanów

W naszym projekcie są dwie maszyny skończone (FSM). FSM to urządzenie logiczne, które może istnieć tylko w jednym stanie ze skończonej liczby stanów. Używając FSM, obwód cyfrowy może przejść do nowego stanu w oparciu o kombinację wejść. Używając logiki wejściowej, stan FSM zmieni się, gdy pojawi się narastające zbocze zegara. Ze stanu i wejść do obwodu można stworzyć logikę wyjściową, która daje wyjścia, które istnieją tylko wtedy, gdy FSM jest w określonym stanie.

Automat stanów PPS jest pierwszym FSM w naszym obwodzie. W tym FSM są trzy stany; Tryb odtwarzania, pauzy i zaznaczania. Do poruszania się po różnych stanach używaliśmy przycisków PP i Wybór. Zobacz diagram stanów powyżej, aby zobaczyć, jak zachodzą przejścia między stanami. Zrobiliśmy to przejście FSM na narastającym zboczu natywnego zegara 100 MHz, aby niemożliwe było, aby maszyna nie przechodziła po naciśnięciu jednego z przycisków, nawet przez bardzo krótki czas. Obecny stan (P_state) jest jedynym wyjściem tego modułu.

Wejścia

  • Clk (natywna częstotliwość zegara)
  • Sel (lewy przycisk)
  • PP (prawy przycisk)

Wyjścia

P_state (stan obecny, do output_FSM, note_assign, seg_dsiplay, final_select)

składniki

  • MUX
  • Rejestr D

Krok 8: Odtwórz/wstrzymaj/wybierz maszynę stanu

Graj/Pauza/Wybierz automat stanów
Graj/Pauza/Wybierz automat stanów

Krok 9: Wyjście FSM

Wyjście FSM
Wyjście FSM

Jest to drugi FSM, o którym mowa w poprzedniej sekcji. Ten FSM pełni inną funkcję niż pozostałe, ale podstawa tego jest zasadniczo taka sama.

Wyjściowy FSM działa tylko wtedy, gdy aktualny stan z pierwszego FSM to „01” (stan odtwarzania). Zasadniczo jest to włączenie modułu. Jeśli stan to „01”, to FSM przełącza się między stanami na zboczu narastającym sygnału zegara BPM. Robimy to, ponieważ output_FSM kontroluje, która liczba binarna dla wybranego skoku jest wysyłana do modułów output_select i seg_display. FSM ma 16-bitowe wejście pochodzące z modułu przypisywania nut, które zostaną omówione w dalszej części. W stanie „00” dla output_FSM, moduł wygeneruje „xxxx” dla pierwszej przypisanej notatki. Następnie w „01” wyświetli „yyyy” dla drugiej nuty i tak dalej dla każdej nuty przed przejściem z powrotem do pierwszej nuty. Zobacz diagram stanu powyżej.

Ten FSM różni się od pierwszego, ponieważ nie ma logiki wejściowej sterującej przełączaniem między stanami. Zamiast tego, FSM będzie działał tylko wtedy, gdy stan z pierwszego FSM to „01”, a wtedy ten FSM będzie przechodził między stanami tylko na zboczu narastającym sygnału zegara. Kolejną różnicą jest to, że ten moduł ma logikę wyjściową, co oznacza, że nie wyprowadza aktualnego stanu, ale wyprowadza liczbę binarną dla skoku w tym stanie.

Wejścia

  • Clk_BPM (sygnał zegarowy BPM z dzielnika zegara)
  • FSM1_state (PS z PPS FSM)
  • Pitch_in (wyciągi z note_assign)

Wyjścia

Pitch_out (po jednym skoku na raz, do output_select i seg_display)

składniki

  • MUX
  • Rejestr D

Krok 10: Wyjście FSM

Wyjście FSM
Wyjście FSM

Krok 11: Przypisanie notatki

Przypisz notatkę
Przypisz notatkę

Moduł przypisywania nut jest odpowiedzialny za faktyczne przypisanie wysokości nuty pozycyjnej lub kroku. Ten moduł jest w rzeczywistości dość prosty. Najpierw sprawdza, czy obwód jest w stanie „wyboru” i czy przełącznik krokowy (z lewej strony) jest wysoki. Jeśli to prawda, a przycisk przypisania zostanie naciśnięty, wyjście modułu będzie równe liczbie binarnej reprezentowanej przez przełączniki częstotliwości (pierwszy z prawej).

Początkowo próbowaliśmy stworzyć moduł, który faktycznie zapisywałby jeden z sygnałów zegara skoku na wyjściu, ale napotkaliśmy problemy ze zmianą wyjścia zgodnie z sygnałami zegara wejściowego. To jedyny moduł użyty więcej niż jeden raz w ostatecznym projekcie. Każdy krok ma skojarzony z nim moduł note_assign iz tego powodu każda instancja modułu otrzymuje jeden bit szyny Step.

Wejścia

  • P_state (stan obecny z PPS FSM)
  • Sel (lewy przycisk)
  • Przełącznik (przełącznik jednostopniowy)
  • Freq (przełączniki skrajnie prawe dla skoku)
  • Przypisz (przycisk dolny, przypisuje notatkę)

Wyjścia

Skok (liczba binarna, do output_FSM)

składniki

  • MUX
  • Rejestr D

Krok 12: Wybór wyjścia

Wybór wyjścia
Wybór wyjścia

Wybór wyjścia jest odpowiedzialny za pobranie liczby binarnej dla skoku i połączenie jej z odpowiednim sygnałem zegarowym. Mimo swoich rozmiarów jest to również stosunkowo prosty moduł. Output_select jest zasadniczo dekoderem binarnym, dekodującym liczbę binarną dla skoku do określonego sygnału zegarowego. Właściwie przypisanie wyjścia do częstotliwości zegara zadziałało tutaj lepiej w porównaniu z modułem note_assign, ponieważ moduł ten musiał jedynie MUX robić sygnały zegarowe z liczbą binarną reprezentującą wejście sterujące.

Przepraszamy za dziwny routing, Vivado zorganizował alfabetycznie sygnały wysokości dźwięku dla pliku clk_div_pitches, ale dla tego pliku zorganizował je według rosnącej liczby binarnej, powodując, że skoki były w innej kolejności. Zauważ również, że jeśli liczba binarna z output_FSM to „0000” lub cokolwiek większe niż „1100”, to MUX wysyłany przez płaski sygnał „0”.

Wejście

  • Skok (z output_FSM);
  • C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (sygnały zegara wysokości tonu)

Wyjście

Tone (pojedynczy bit, który pasuje do wybranego sygnału zegara, do fali prostokątnej)

składniki

MUX

Krok 13: Generacja fali prostokątnej

Generacja fali prostokątnej
Generacja fali prostokątnej

Moduł square_wave jest generatorem fali prostokątnej, która jest wyprowadzana z płytki do przetwornika cyfrowo-analogowego. Używając sygnału tonu z poprzedniego pliku, ten square_wave odwraca 4-bitową liczbę między „0000” a „1111” na zboczu narastającym Tone. Ton to określona częstotliwość tonu, więc square_wave wytwarza falę o innej częstotliwości, gdy output_FSM przechodzi w inny stan. 4-bitowe wyjście z tego modułu trafia do modułu fin_sel, gdzie logika dyktuje, czy ta magistrala będzie wyprowadzana na podstawie stanu z PPS FSM.

Alternatywą dla tego generatora fal prostokątnych jest wytwarzanie fali sinusoidalnej. Chociaż najprawdopodobniej dałoby to lepszy ton końcowy, jest znacznie trudniejsze do zaimplementowania, więc zdecydowaliśmy się po prostu wygenerować falę prostokątną.

Wejścia

Ton (oscylujący bit z output_select)

Wyjścia

DAC_input (oscylująca 4-bitowa magistrala, która zmienia się z tą samą częstotliwością tonu)

składniki

  • Falownik
  • Rejestr D

Krok 14: 7-segmentowy wyświetlacz

Wyświetlacz 7-segmentowy
Wyświetlacz 7-segmentowy

Moduł seg_display steruje 7-segmentowym wyświetlaczem na naszej płycie bazowej. W module zachodzą dwa procesy. Pierwszy proces dekoduje Freq w stanie „wyboru” lub Pitch w trybie „odtwarzania”. W trybie „pauzy” moduł dekoduje, aby wyświetlić symbol pauzy. Patrząc na kod VHDL, można zauważyć, że dekoder binarny dekoduje dane wejściowe na dwa różne sygnały, katodę1 i katodę2. Cathode1 reprezentuje literę odpowiadającą wysokości, która ma być wyświetlana, a cathode2 reprezentuje płaski symbol (b), jeśli taki istnieje. Powód tego dotyczy drugiego procesu wykonanego przez moduł seg_display.

Na płycie basys3 wyświetlacz segmentowy ma wspólne katody. Podczas gdy anody kontrolują, która cyfra jest włączona, katody kontrolują, które segmenty są włączone. Ponieważ wyświetlacz ma wspólne katody, oznacza to, że można wyświetlać tylko jeden zestaw segmentów na raz. Stanowi to problem dla tego projektu, ponieważ chcemy jednocześnie wyświetlać literę na pierwszej cyfrze i symbol płaskiego, jeśli to konieczne. Pamiętasz teraz sygnał zegara 7seg? Aby obejść ten problem, zmieniamy anody i katody tam iz powrotem na sygnale zegarowym 7seg. Ponieważ sygnał zegara ma 240 Hz i używamy dwóch cyfr, każda cyfra będzie oscylować z częstotliwością 60 Hz. Ludzkiemu oku będzie to wyglądać tak, jakby cyfry w ogóle się nie oscylowały.

Należy również pamiętać, że wyświetlacz płyty basys3 wykorzystuje logikę negatywną. Oznacza to, że jeśli anoda lub katoda są ustawione na „0”, ta cyfra lub segment będą włączone i na odwrót.

Wejścia

  • Pitch (liczba binarna dla nuty, używana w stanie gry)
  • Freq (przełączniki częstotliwości, używane w stanie wyboru)
  • P_state (stan obecny z PPS FSM)
  • Clk_240Hz (sygnał zegarowy z Clk_div_7seg, podwójne 120 bo używamy tylko zbocza narastającego)

Wyjścia

  • Katoda (magistrala, która kontroluje segmenty na wyświetlaczu, wyjście końcowe)
  • Anoda (magistrala, która kontroluje cyfry na wyświetlaczu, wyjście końcowe)

składniki

  • Zatrzask
  • MUX
  • Rejestr D

Krok 15: Ostateczny wybór

Ostateczny wybór
Ostateczny wybór

Final select to ostatni moduł używany w tym projekcie. Kolejny prosty moduł, ten moduł kontroluje końcowe wyjście, które trafi do przetwornika cyfrowo-analogowego. W stanie „wybór” lub „pauza” moduł wygeneruje statyczny „0000”, aby z głośników nie była odtwarzana muzyka. W stanie "play" moduł wyprowadza oscylujące 4-bity, jak określono przez square_wave.

Wejścia

  • P_state (stan obecny z PPS FSM)
  • DAC_input (oscylujące 4-bity z square_wave)

Wyjścia

DAC (równa DAC_input w stanie odtwarzania, końcowe wyjście)

składniki

MUX

Krok 16: Urządzenia zewnętrzne: DAC

Urządzenia zewnętrzne: DAC
Urządzenia zewnętrzne: DAC

Przetwornik cyfrowo-analogowy (DAC) pobiera sygnał dyskretny i przekształca go w sygnał ciągły. Nasz DAC ma cztery bity i jest zbudowany ze wzmacniacza sumującego. Stosując stosunek rezystorów w pętli zasilania i sprzężenia zwrotnego, udało nam się stworzyć układ, który wyprowadza na 16 różnych poziomach, tworząc przez „sumowanie” każdej gałęzi. Bit0, górna gałąź, ma najmniejszą wagę i ma najmniejszy potencjał, gdy jest wysoka, dzięki czemu gałęzie mają wyższy opór. Waga wzrasta, gdy schodzisz po gałęziach. Jeśli miałbyś liczyć binarnie w górę, a następnie w dół za pomocą wejść bitowych, napięcia wyjściowe wyglądałyby jak schodkowa fala sinusoidalna. Wejście do przetwornika cyfrowo-analogowego zostało podłączone do jednego z PMOD na płycie, aby przesłać 4-bitowy sygnał.

DAC został pierwotnie zmontowany dla klasy elektrotechniki i został przez nas zaprojektowany i przylutowany, a nie kupiony w sklepie. Powyżej znajduje się obraz pliku projektu do tworzenia płytki drukowanej.

Krok 17: Urządzenia zewnętrzne: Głośnik

Urządzenia zewnętrzne: Głośnik
Urządzenia zewnętrzne: Głośnik

W przypadku tego projektu nie będziesz chciał kupować super ładnej pary głośników. Jak widać, dźwięk jest dość prosty. Poszliśmy i kupiliśmy zestaw głośników komputerowych za 8 USD od Best Buy. Wszystko z gniazdem słuchawkowym działa dobrze. Monotone również działa dobrze. Możesz nawet używać słuchawek, ale możesz je wysadzić!

Aby podłączyć wyjście DAC-a do głośników, użyliśmy kabli połączeniowych, a następnie przyłożyliśmy kabel wyjściowy do końcówki gniazda słuchawkowego, a kabel do masy do podstawy. Próbowaliśmy użyć taśmy elektrycznej, aby utrzymać kable na miejscu, ale spowodowało to wiele zakłóceń. Wypróbowanie innego stylu taśmy może rozwiązać ten problem.

W przypadku naszych głośników ustawiliśmy je na najwyższe ustawienie i uzyskaliśmy przyzwoicie głośny dźwięk.

I to jest ostatni krok do stworzenia cyfrowego sekwencera z płyty FPGA! Przejdź do następnych dwóch sekcji, aby pobrać cały nasz kod VHDL i zobaczyć sekwencer w akcji.

Krok 18: Demo wideo

Ten film przedstawia ostateczną wersję działającego projektu, w tym proces przypisywania przełączników do 4 różnych tonów oraz głośniki grające odpowiednie nuty.

Krok 19: Kod VHDL

Oto kod całego projektu, łącznie z plikami z ograniczeniami i sim używanymi podczas budowania sekwencera. Zauważ, że nieużywane pliki projektowe mówią tak w architekturze.

Zalecana: