Sadržaj:

Digitalni sekvencer u 4 koraka: 19 koraka (sa slikama)
Digitalni sekvencer u 4 koraka: 19 koraka (sa slikama)

Video: Digitalni sekvencer u 4 koraka: 19 koraka (sa slikama)

Video: Digitalni sekvencer u 4 koraka: 19 koraka (sa slikama)
Video: Белый Тигр (4К , военный, реж. Карен Шахназаров, 2012 г., с субтитрами) 2024, Srpanj
Anonim
Digitalni sekvencer u 4 koraka
Digitalni sekvencer u 4 koraka
Digitalni sekvencer u 4 koraka
Digitalni sekvencer u 4 koraka

CPE 133, Cal Poly San Luis Obispo

Kreatori projekta: Jayson Johnston i Bjorn Nelson

U današnjoj glazbenoj industriji jedan od najčešće korištenih "instrumenata" je digitalni sintisajzer. Svaki glazbeni žanr, od hip-hopa do popa, pa čak i countryja, koristi digitalni sintisajzer u studiju za stvaranje ritmova i zvukova koji su im potrebni da ožive svoju glazbu. U ovom ćemo vodiču stvoriti vrlo jednostavan sintisajzer s Basys 3 FPGA pločom.

Sintisajzer će moći reproducirati četiri odabrane četvrtinske note pri konstantnom broju otkucaja u minuti. Korisnici će pomoću prekidača dodijeliti svaku notu četvrtine glazbenoj visini. Za ovaj projekt koristimo 4-bitni digitalno-analogni pretvarač (DAC) za uzimanje izlaza s ploče i pretvaranje u analogni signal. Izlaz iz DAC -a tada će se prenositi na standardni zvučnik računala, stvarajući našu glazbu. Moguće je šesnaest diskretnih nagiba. Ograničit ćemo naš sintisajzer na jednu oktavu od 12 nota, koje se nalaze između sredine C (261,6 Hz) i B4 (493,9 Hz). Korisnik će također imati mogućnost dodjeljivanja više nota u isto vrijeme, kao i dodjeljivanje odmora pritiskom na tipku za dodjelu, a da nijedan prekidač tona nije pomaknut prema gore. Kako se svaka nota odabire i svira, slovna nota prikazuje se na 7-segmentnom zaslonu. Također ćemo koristiti tri gumba na ploči, jedan za reprodukciju i pauziranje glazbe, jedan za resetiranje sintisajzera i stavljanje u način "odabira", a treći za dodjeljivanje visine svake note u načinu odabira.

Nakon što je korisnik zadovoljan svojim odabirom nota, i nakon pritiska na tipku za reprodukciju, sintisajzer će reproducirati svaku notu uzastopno sve dok korisnik ne pritisne pauzu ili odabir.

Evo popisa potrebne opreme:

  • Vivado (ili bilo koji VHDL radni prostor)
  • Basys 3 ili slična FPGA ploča
  • Digitalno-analogni pretvarač (min. 4 bita)
  • Zvučnik s priključkom za slušalice
  • Žičani vodiči

Korak 1: Korisnički rad digitalnog sekvencera

Korisnički rad digitalnog sekvencera
Korisnički rad digitalnog sekvencera

Sljedeći su koraci za upravljanje digitalnim sekvencerom. Digitalni sekvencer podržava reprodukciju 12 različitih tonova (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B), koji se kreću od 261,6 Hz do 493,9 Hz.

1. Pritisnite lijevu tipku za postavljanje ploče u način odabira. U ovom načinu rada, sva četiri lijeva prekidača (prekidači od 13 do 16) će se koristiti za spremanje različite vrijednosti visine tona.

2. Za odabir uključite jedan od lijevih prekidača, a zatim pomoću 4 krajnja desna prekidača (prekidači od 1 do 4) odaberite željenu visinu. Visina tona povezana s određenom kombinacijom desnih prekidača bit će prikazana na ekranu sa sedam segmenata, a zaslon će se ažurirati na novu pridruženu visinu tona kad god se desni prekidači pomaknu u novu kombinaciju. Odmor se može dodijeliti tako da nikad ne dodijelite visinu tona jednom od lijevih prekidača ili ako noti dodijelite visinu tona koja je na zaslonu prikazana kao 0. Nakon što je željena visina zvuka pronađena i prikazana na zaslonu, pritisnite donju tipku za dodjelu kako biste toj specifičnoj visini dodijelili notu.

3. Ponovite korak 2 za tri preostale note, okretanjem svakog od preostalih lijevih prekidača pojedinačno, odabirom odgovarajuće visine s desnim prekidačima i pritiskom na donju tipku da biste dodijelili visinu tonu noti. Više nota može se dodijeliti istoj visini pomicanjem više od jednog lijevog prekidača prema gore u isto vrijeme.

4. Sada kada su svi tonovi dodijeljeni, digitalni sekvencer je spreman za sviranje. Da biste svirali note na zvučniku, jednostavno pritisnite desnu tipku za reprodukciju/pauzu za početak reprodukcije glazbe. Redoslijed reprodukcije odražava tonove povezane s lijevim prekidačima, slijeva nadesno. Bilješke će se svirati određenim brojem otkucaja u minuti, redoslijedom 1, 2, 3, 4, 1, 2…. Na zaslonu će se prikazati nota koja se trenutno svira dok zvučnici puštaju glazbu. Da biste pauzirali reprodukciju glazbe, jednostavno pritisnite desnu tipku i tada će se glazba prestati reproducirati, a na zaslonu će se prikazati simbol pauze. Ponovnim pritiskom desne tipke nastavlja se reprodukcija.

Korak 2: Tehnički detalji

Tehnički detalji
Tehnički detalji

Naš sintisajzer koristi mnoge različite digitalne komponente. Uključeni su strojevi konačnih stanja, registri, multiplekseri, razdjelnici sata i drugo. Za izradu našeg sintetizatora koristili smo 10 jedinstvenih modularnih datoteka. Umjesto da svaki modul učinimo komponentom, razbili smo modularne datoteke prema funkciji. Kao rezultat toga, većina modula ima više od jedne komponente. Imajte na umu da gornja slika prikazuje svaki blok povezan u našem vrhunskom dizajnu.

Raspravljat ćemo o svakom modulu opisujući ulaze i izlaze, razbijajući njegove komponente i objašnjavajući njegovu svrhu u cjelokupnom dizajnu. ZIP datoteka je uključena na dnu instrukcije koja sadrži svaku datoteku VHDL koda korištenu u projektu.

Ulazi

  • Clk (izvorni signal sata)
  • PP (reprodukcija/pauza)
  • Sel (stavite sintetizator u način odabira)
  • Dodijeli (dodijeli korak tonu)
  • Korak (napomene o položaju)
  • Freq (prekidači za stvaranje željene visine)

Izlazi

  • Anoda (7-segmentne anode)
  • Katoda (7-segmentne katode)
  • DAC (4-bitni pogon DAC-a)

Korak 3: Tehnički detalji

Tehnički detalji
Tehnički detalji

Korak 4: 7-segmentni razdjelnik sata

7-segmentni razdjelnik sata
7-segmentni razdjelnik sata

Naš sintisajzer koristi tri razdjelnika sata, od kojih svi proizvode signale koji služe različitim namjenama u našem projektu. Razdjelnik sata uzima izvorni signal sata i proizvodi izmijenjeni signal čija je frekvencija manja od izvornog signala sata. Izvorni sat Basys 3 je 100 MHz. To je frekvencija koju koriste naši razdjelnici sata. Ako koristite drugu FPGA ploču s različitom izvornom frekvencijom takta, možda ćete morati promijeniti kôd.

7-segmentni razdjelnik sata proizvodi signal koji pokreće datoteku seg_display. Objasnit ćemo kako ova datoteka radi detaljnije kada dođemo do njenog odjeljka. U osnovi, ovaj razdjelnik sata proizvodi signal od 240 Hz koji će se koristiti za prebacivanje između anoda i katoda na zaslonu. Signal je 240 Hz jer frekvencija na kojoj ljudsko oko ne može prepoznati odsutnost svjetla iznosi 60 Hz. Koristimo dvije znamenke, pa će udvostručenjem ove frekvencije svaka znamenka oscilirati na 60 Hz. Zatim ga udvostručujemo kako bismo dobili 240 Hz jer se sustav mijenja samo kad signal ide visoko, a ne kad pada.

Da bi se to postiglo, razdjelnik uzima izvorni signal od 100 MHz i broji na svakom rastućem rubu. Kad brojač dosegne 416667, izlaz će ići s niskog na visoko ili obrnuto.

Ulazi

Clk (izvorni signal sata)

Izlazi

Clk_7seg (na seg_display)

Komponente

  • D registar
  • MUX
  • Pretvarač
  • Guja

Korak 5: Razdjelnik takta u minuti

Razdjelnik sata po minuti
Razdjelnik sata po minuti

Na sličan način radi i razdjelnik sata BPM. Ovaj razdjelnik proizvodi frekvenciju takta koja pokreće prebacivanje između četiri koraka prilikom emitiranja tonova u stanju reprodukcije. Odlučili smo se za prebacivanje između nota pri 100 otkucaja u minuti. Pri 100 otkucaja u minuti svaka će se nota svirati 3/5 sekunde. Rezultirajući signal imao bi frekvenciju 1,67 Hz.

Za proizvodnju signala ove frekvencije ponovno smo upotrijebili sustav brojanja, no ovaj je put broj bio 60 milijuna. Svaki put kad brojač dosegne 60 milijuna, izlazni signal bi se prebacivao visoko ili nisko.

Ulazi

Clk (izvorna frekvencija sata)

Izlazi

Clk_BPM (na izlaz_FSM)

Komponente

  • D registar
  • MUX
  • Pretvarač
  • Guja

Korak 6: Podijeli razdjelnik sata

Razdjelnik tonova
Razdjelnik tonova

Razdjelnik sata Pitches najveći je od naših razdjelnika sata. Ovaj razdjelnik emitira 12 različitih signala koji odgovaraju 12 različitih nota koje naš sintisajzer može odsvirati. Koristeći osnovno znanje o glazbenoj teoriji, zaključili smo da bit ili sabirnica mogu oscilirati brzinom koja odgovara frekvenciji glazbenih nota. Ovdje pogledajte frekvencije koje smo koristili. Koristili smo četvrtu oktavu terena.

Ovdje se koristi isti sustav brojanja. Za specifične vrijednosti na koje smo računali pogledajte datoteku s oznakom Clk_div_pitches.

Ulazi

Clk (izvorna frekvencija sata)

Izlazi

C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (za odabir_izlaza)

Komponente

  • D registar
  • MUX
  • Pretvarač
  • Guja

Korak 7: Reproduciranje/pauziranje/odabir državnog stroja

Reproduciraj/pauziraj/odaberi državni stroj
Reproduciraj/pauziraj/odaberi državni stroj

U našem projektu postoje dva stroja konačnih stanja (FSM). FSM je logički uređaj koji može postojati samo u jednom stanju od konačnog broja stanja. Pomoću FSM -a digitalni krug može preći u novo stanje na temelju kombinacije ulaza. Koristeći ulaznu logiku, stanje FSM -a će se promijeniti kada postoji rastuća ivica sata. Iz stanja i ulaza u krug možete stvoriti izlaznu logiku koja daje izlaze koji postoje samo ako je FSM u određenom stanju.

Stroj stanja PPS -a prvi je FSM u našem krugu. U ovom FSM -u postoje tri države; Način reprodukcije, pauze i odabira. Za kretanje kroz različita stanja koristili smo tipke PP i Odabir. Pogledajte gornji dijagram stanja da vidite kako dolazi do prijelaza između stanja. Ovaj smo prijelaz FSM -a izvršili na rastućem rubu izvornog takta od 100 MHz, tako da bi bilo nemoguće da stroj ne prijeđe kada se pritisne jedna od tipki, čak i na vrlo kratko vrijeme. Trenutno stanje (P_state) jedini je izlaz iz ovog modula.

Ulazi

  • Clk (izvorna frekvencija sata)
  • Sel (lijevo dugme)
  • PP (desno dugme)

Izlazi

P_state (trenutno stanje, za output_FSM, note_ assignment, seg_dsiplay, final_select)

Komponente

  • MUX
  • D registar

Korak 8: Reproduciranje/pauziranje/odabir državnog stroja

Reproduciraj/pauziraj/odaberi državni stroj
Reproduciraj/pauziraj/odaberi državni stroj

Korak 9: Izlazni FSM

Izlazni FSM
Izlazni FSM

Ovo je drugi FSM naveden u prethodnom odjeljku. Ovaj FSM ima drugačiju funkciju od druge, ali osnova za ovaj je u biti ista.

Izlazni FSM radi samo ako je trenutno stanje iz prvog FSM -a "01" (stanje reprodukcije). U biti, ovo je omogućavanje modula. Ako je stanje "01", tada će se FSM prebacivati između stanja na rastućem rubu signala BPM sata. To činimo jer output_FSM kontrolira koji binarni broj za odabrani pitch se šalje na module output_select i seg_display. FSM ima 16-bitni ulaz koji dolazi iz modula za dodjelu nota, o čemu će biti riječi dalje. U stanju "00" za output_FSM, modul će ispisati "xxxx" za prvu dodijeljenu notu. Zatim će u "01" ispisati "yyyy" za drugu notu i tako dalje za svaku notu prije nego što se vrati na prvu notu. Pogledajte gornji dijagram stanja.

Ovaj se FSM razlikuje od prvog jer nema ulazne logike za upravljanje prebacivanjem između stanja. Umjesto toga, FSM će raditi samo kada je stanje iz prvog FSM -a "01", a zatim će ovaj FSM prelaziti između stanja samo na rastućoj ivici takta signala. Druga razlika je u tome što ovaj modul ima izlaznu logiku, što znači da ne emitira trenutno stanje, već daje binarni broj za visinu tona u tom stanju.

Ulazi

  • Clk_BPM (BPM signal sata sa razdjelnika sata)
  • FSM1_state (PS iz PPS FSM)
  • Pitch_in (parcele iz note_assign)

Izlazi

Pitch_out (jedan korak po korak, za output_select i seg_display)

Komponente

  • MUX
  • D registar

Korak 10: Izlazni FSM

Izlazni FSM
Izlazni FSM

11. korak: Dodijelite bilješku

Napomena Dodijeli
Napomena Dodijeli

Modul za dodjelu note odgovoran je za dodjelu visine tona pozicijskoj noti ili koraku. Ovaj je modul zapravo vrlo jednostavan. Prvo provjerava je li krug u stanju "odabira" i je li stupnjevni prekidač (krajnje lijevo) visok. Ako je to istina i pritisnut gumb za dodjelu, izlaz modula bit će jednak binarnom broju koji predstavljaju frekvencijski prekidači (krajnje desno).

U početku smo pokušali izraditi modul koji bi zapravo spremao jedan od signala takta tona na izlaz, ali imali smo problema s promjenom izlaza prema ulaznim signalima sata. Ovo je jedini modul koji se više puta koristio u konačnom dizajnu. Svaki je korak povezan s modulom note_assign, pa zbog toga svaka instanca modula dobiva jedan bit sabirnice Step.

Ulazi

  • P_stanje (trenutno stanje iz PPS FSM -a)
  • Sel (lijevo dugme)
  • Prekidač (prekidač u jednom koraku)
  • Freq (krajnji desni prekidači za visinu tona)
  • Dodijeli (donji gumb, dodjeljuje bilješku)

Izlazi

Nagib (binarni broj, na izlaz_FSM)

Komponente

  • MUX
  • D ponovno prijaviti

Korak 12: Odabir izlaza

Odabir izlaza
Odabir izlaza

Odabir izlaza odgovoran je za uzimanje binarnog broja za visinu tona i njegovo povezivanje sa odgovarajućim signalom sata. Unatoč veličini, ovo je također relativno jednostavan modul. Output_select je u osnovi binarni dekoder, koji dekodira binarni broj za visinu tona na određeni signal sata. Dodjeljivanje izlaza taktu frekvencije ovdje je bolje funkcioniralo u usporedbi s modulom note_assign, jer je sve što je ovaj modul trebao učiniti bilo MUX signala sata s binarnim brojem koji predstavlja upravljački ulaz.

Ispričavamo se na čudnom usmjeravanju, Vivado je organizirao signale tona po abecednom redu za datoteku clk_div_pitches, ali ih je za ovu datoteku organizirao uzlaznim binarnim brojem, zbog čega su visine tonova bile drugačije. Također imajte na umu da ako je binarni broj iz output_FSM -a bio "0000" ili bilo što veće od "1100", tada se MUX šalje kroz ravni signal "0".

Ulazni

  • Nagib (iz izlaza_FSM);
  • C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (signali takta tona)

Izlaz

Ton (jedan bit koji odgovara odabranom signalu sata, na kvadrat_val)

Komponente

MUX

Korak 13: Square Wave Gen

Square Wave Gen
Square Wave Gen

Modul square_wave je generator kvadratnog vala koji se izlazi s ploče na DAC. Koristeći tonski signal iz prethodne datoteke, ovaj square_wave pretvara 4 -bitni broj između "0000" i "1111" na rastućem rubu tona. Ton je specifična frekvencija tona pa kvadratni val stvara val s različitom frekvencijom kad izlazni_FSM prijeđe u drugo stanje. 4-bitni izlaz iz ovog modula odlazi u modul fin_sel, gdje logika određuje hoće li se ova sabirnica izlaziti na temelju stanja iz PPS FSM-a.

Alternativa ovom generatoru kvadratnih valova je stvaranje sinusnog vala. Iako bi to najvjerojatnije proizvelo bolji završni ton, znatno ga je teže implementirati, pa smo se odlučili samo generirati kvadratni val.

Ulazi

Ton (oscilirajući bit iz izlaznog_izbora)

Izlazi

DAC_input (oscilirajuća 4-bitna sabirnica koja se mijenja pri istoj frekvenciji tona)

Komponente

  • Pretvarač
  • D registar

Korak 14: 7-segmentni zaslon

7-segmentni zaslon
7-segmentni zaslon

Modul seg_display kontrolira 7-segmentni zaslon na našoj basys ploči. Unutar modula događaju se dva procesa. Prvi postupak dekodira Freq u stanju "odabira" ili Pitch u načinu "reprodukcije". U načinu "pauze" modul dekodira kako bi prikazao simbol pauze. Gledajući VHDL kod, možete vidjeti da binarni dekoder zapravo dekodira ulaz u dva različita signala, katodu1 i katodu2. Katoda1 predstavlja slovo koje odgovara visini tona koji se prikazuje, a katoda 2 predstavlja ravni simbol (b) ako postoji. Razlog za to odnosi se na drugi proces koji provodi modul seg_display.

Na ploči basys3, segmentni zaslon ima zajedničke katode. Dok anode kontroliraju koja je znamenka uključena, katode kontroliraju koji su segmenti uključeni. Budući da zaslon ima zajedničke katode, to znači da možete prikazati samo jedan skup segmenata odjednom. To predstavlja problem za ovaj projekt jer želimo prikazati slovo na prvoj znamenci i ravni simbol, ako je potrebno, u isto vrijeme. Sjećate li se sada signala sata od 7 sekundi? Da bismo zaobišli ovaj problem, mijenjamo anode i katode naprijed -natrag na signalu sata od 7 sekundi. Budući da je signal sata 240 Hz i koristimo dvije znamenke, svaka će znamenka oscilirati na 60 Hz. Ljudskom oku će izgledati kao da znamenke uopće ne osciliraju.

Također imajte na umu da zaslon ploče basys3 koristi negativnu logiku. To znači da ako je anoda ili katoda postavljena na '0', ta će znamenka ili segment biti uključeni i obrnuto.

Ulazi

  • Pitch (binarni broj za notu, koristi se u stanju reprodukcije)
  • Freq (frekvencijski prekidači, koriste se u stanju odabira)
  • P_stanje (trenutno stanje iz PPS FSM -a)
  • Clk_240Hz (signal sata iz Clk_div_7seg, dvostruko 120 jer koristimo samo rastući rub)

Izlazi

  • Katoda (sabirnica koja kontrolira segmente na zaslonu, konačni izlaz)
  • Anoda (sabirnica koja kontrolira znamenke na zaslonu, konačni izlaz)

Komponente

  • Zasun
  • MUX
  • D registar

Korak 15: Završni odabir

Konačni odabir
Konačni odabir

Konačni odabir posljednji je modul korišten u ovom projektu. Još jedan jednostavan modul, ovaj modul kontrolira konačni izlaz koji će ići do DAC -a. U stanju "odabira" ili "pauze", modul će emitirati statičko "0000" tako da se iz zvučnika neće reproducirati glazba. U stanju "reprodukcije" modul će emitirati oscilirajuća 4-bita kako je određeno square_wave.

Ulazi

  • P_stanje (trenutno stanje iz PPS FSM -a)
  • DAC_input (oscilirajuća 4-bita iz kvadratnog_talasa)

Izlazi

DAC (jednak DAC_input u stanju reprodukcije, konačni izlaz)

Komponente

MUX

Korak 16: Vanjski uređaji: DAC

Vanjski uređaji: DAC
Vanjski uređaji: DAC

Digitalno -analogni pretvarač (DAC) uzima diskretni signal i pretvara ga u kontinuirani signal. Naš DAC ima četiri bita i izrađen je od zbrajajućeg pojačala. Koristeći omjer otpornika u petlji napajanja i povratne sprege, uspjeli smo stvoriti sustav koji emitira na 16 različitih razina stvarajući "zbrajanjem" svake grane. Bit0, gornja grana, ima najmanju težinu i doprinosi najmanjem potencijalu kada je visoka zbog toga grane imaju veći otpor. Težina se povećava dok se spuštate niz grane. Ako biste računali binarno prema gore, a zatim prema dolje pomoću bitskih ulaza, izlazni naponi bi izgledali poput stepenastog sinusnog vala. Ulaz u DAC bio je spojen na jedan od PMOD-ova na ploči za prijenos 4-bitnog signala.

DAC je izvorno sastavljen za razred elektrotehnike, a mi smo ga dizajnirali i lemili, a ne kupovali u trgovini. Gore je slika datoteke dizajna za izradu tiskane ploče.

Korak 17: Vanjski uređaji: Zvučnik

Vanjski uređaji: Zvučnik
Vanjski uređaji: Zvučnik

Za ovaj projekt nećete htjeti kupiti super lijep par zvučnika. Kao što možete vidjeti, zvuk je prilično jednostavan. Otišli smo i kupili kompjuterske zvučnike za 8 dolara od kompanije Best Buy. Sve s priključkom za slušalice radi dobro. Monotone također dobro funkcionira. Možete čak koristiti i slušalice, ali ih možete ispuhati!

Za spajanje izlaza DAC -a na zvučnike upotrijebili smo kratkospojne kabele, a zatim smo izlazni kabel držali na vrhu priključka za slušalice, a kabel za uzemljenje na podnožje. Pokušali smo pomoću električne trake držati kabele na mjestu, ali to je uzrokovalo mnogo smetnji. Pokušaj drugačijeg stila trake mogao bi riješiti ovaj problem.

Za naše smo zvučnike okrenuli najviše postavke i dobili pristojno glasnu buku.

I to je posljednji korak za stvaranje digitalnog sekvencera s FPGA ploče! Idite na sljedeća dva odjeljka da biste preuzeli sav naš VHDL kôd i vidjeli sekvencer na djelu.

Korak 18: Video demonstracija

Ovaj video prikazuje konačnu verziju radnog projekta, uključujući proces dodjeljivanja prekidača na 4 različite visine, te zvučnike koji sviraju odgovarajuće note.

Korak 19: VHDL kôd

Ovdje je kôd za cijeli projekt, uključujući datoteke ograničenja i sim -a korištene pri izgradnji sekvencera. Imajte na umu da neiskorištene datoteke dizajna tako govore u arhitekturi.

Preporučeni: