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, Novembar
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 muzičkoj industriji jedan od najčešće korištenih "instrumenata" je digitalni sintisajzer. Svaki muzički žanr, od hip-hopa do popa, pa čak i kantri, koristi digitalni sintisajzer u studiju za stvaranje ritmova i zvukova koji su im potrebni da ožive svoju muziku. 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 muzičkoj 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čunara, stvarajući našu muziku. 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 istovremeno, kao i dodjeljivanje odmora pritiskom na dodelu, a da nijedan prekidač tona nije pomaknut prema gore. Kako se svaka nota bira i svira, slovna nota se prikazuje na 7-segmentnom ekranu. Također ćemo koristiti tri dugmeta na ploči, jedno za reprodukciju i pauziranje muzike, jedno za resetovanje sintisajzera i stavljanje u režim „odabira“, a treće za dodjeljivanje visine tona svakoj noti u načinu odabira.

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

Evo spiska 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 sa 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 koraci su 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 lijevo dugme da biste ploču prebacili 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 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 prebace na novu kombinaciju. Odmor se može dodijeliti tako što nikada ne dodijelite visinu tona jednom od lijevih prekidača ili dodijelite tonu noti koja je na ekranu prikazana kao 0. Nakon što je željena visina zvuka pronađena i prikazana na ekranu, 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 sa desnim prekidačima i pritiskom na donje dugme za dodjelu visine 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 reprodukciju. Da biste svirali note na zvučniku, jednostavno pritisnite desno dugme za reprodukciju/pauzu da biste započeli reprodukciju muzike. Redoslijed sekvence reprodukcije odražava tonove povezane s lijevim prekidačima, s lijeva na desno. Bilješke će se svirati sa zadanim brojem otkucaja u minuti, redoslijedom 1, 2, 3, 4, 1, 2…. Na ekranu će se prikazati nota koja se trenutno svira dok zvučnici puštaju muziku. Da biste pauzirali reprodukciju muzike, jednostavno pritisnite desno dugme i tada će muzika prestati da se reprodukuje i simbol pauze će se prikazati na ekranu. Ponovnim pritiskom desne tipke nastavljate reprodukciju.

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 koja se koristi 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 koji stvaraju željenu visinu tona)

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 promijenjeni signal čija je frekvencija manja od izvornog signala sata. Izvorni sat Basys 3 je 100 MHz. Ovo 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 ekranu. 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 sistem mijenja samo kada signal postane visok, a ne kada padne.

Da bi se to postiglo, razdjelnik uzima izvorni signal od 100 MHz i odbrojava 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 register
  • MUX
  • Inverter
  • Adder

Korak 5: Razdjelnik takta u minuti

Razdjelnik takta u minuti
Razdjelnik takta u minuti

BPM razdjelnik sata radi na sličan način. Ovaj razdjelnik proizvodi frekvenciju sata 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. Dobiveni signal bi imao frekvenciju 1,67 Hz.

Za proizvodnju signala ove frekvencije ponovo smo koristili sistem brojanja, ali ovaj put je broj bio 60 miliona. Svaki put kada brojač dosegne 60 miliona, izlazni signal bi se prebacivao visoko ili nisko.

Ulazi

Clk (izvorna frekvencija sata)

Izlazi

Clk_BPM (na izlaz_FSM)

Komponente

  • D register
  • MUX
  • Inverter
  • Adder

Korak 6: Podijeli razdjelnik sata

Uređaj za dijeljenje sata
Uređaj za dijeljenje sata

Razdjelnik satova 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 teoriji muzike, zaključili smo da bit ili sabirnica mogu oscilirati brzinom koja odgovara frekvenciji muzičkih nota. Ovdje pogledajte frekvencije koje smo koristili. Koristili smo četvrtu oktavu visina.

Ovdje se koristi isti sistem brojanja. Za specifične vrijednosti na koje smo računali pogledajte datoteku označenu Clk_div_pitches.

Ulazi

Clk (izvorna frekvencija sata)

Izlazi

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

Komponente

  • D register
  • MUX
  • Inverter
  • Adder

Korak 7: Reproducirajte/pauzirajte/odaberite državnu mašinu

Reproduciraj/pauziraj/odaberi državnu mašinu
Reproduciraj/pauziraj/odaberi državnu mašinu

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

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

Ulazi

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

Izlazi

P_stanje (trenutno stanje, za izlaz_FSM, napomenu_priznanja, seg_dsiplay, konačni_izbor)

Komponente

  • MUX
  • D register

Korak 8: Reproducirajte/pauzirajte/odaberite državnu mašinu

Reproduciraj/pauziraj/odaberi državnu mašinu
Reproduciraj/pauziraj/odaberi državnu mašinu

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 osnovi ista.

Izlazni FSM radi samo ako je trenutno stanje prvog FSM -a "01" (stanje reprodukcije). U osnovi, ovo je omogućavanje modula. Ako je stanje "01", tada će se FSM prebacivati između stanja na rastućoj ivici 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 prikazati "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 kontrolu prebacivanja 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 signala takta. Druga razlika je u tome što ovaj modul ima izlaznu logiku, što znači da ne prikazuje 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 register

Korak 10: Izlazni FSM

Izlazni FSM
Izlazni FSM

Korak 11: Dodijelite bilješku

Napomena Dodijeli
Napomena Dodijeli

Modul za dodjelu note odgovoran je za dodjeljivanje visine pozicijske note ili koraka. Ovaj modul je zapravo prilično jednostavan. Prvo provjerava je li krug u stanju "odabira" i je li stupnjevni prekidač (krajnje lijevo) visok. Ako je to istina i pritisnuto dugme za dodjelu, izlaz modula bit će jednak binarnom broju koji predstavljaju frekventni prekidači (krajnje desno).

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

Ulazi

  • P_stanje (trenutno stanje iz PPS FSM)
  • Sel (lijevo dugme)
  • Prekidač (prekidač u jednom koraku)
  • Freq (krajnje desni prekidači za visinu tona)
  • Dodeli (donje dugme, dodeljuje belešku)

Izlazi

Nagib (binarni broj, na izlaz_FSM)

Komponente

  • MUX
  • D resgister

Korak 12: Odabir izlaza

Output Select
Output Select

Odabir izlaza odgovoran je za uzimanje binarnog broja za visinu tona i njegovo povezivanje sa odgovarajućim signalom sata. Uprkos svojoj veličini, ovo je takođe relativno jednostavan modul. Output_select je u osnovi binarni dekoder, koji dekodira binarni broj za visinu tona na određeni signal sata. Zapravo, dodjeljivanje izlaza taktu frekvencije ovdje je bolje funkcioniralo u odnosu na modul note_assign, jer je sve što je ovaj modul trebao učiniti bilo MUX taktnih signala 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 za ovu datoteku ih je organizirao uzlaznim binarnim brojem, zbog čega su tonovi bili u drugom redoslijedu. 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".

Ulaz

  • Pitch (from output_FSM);
  • C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (signali takta tona)

Output

Ton (jedan bit koji odgovara odabranom signalu sata, do kvadratnog_talasa)

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 invertira 4 -bitni broj između "0000" i "1111" na rastućoj ivici tona. Ton je specifična frekvencija tona, pa kvadratni_talas stvara val s različitom frekvencijom kada izlazni_FSM pređe u drugo stanje. 4-bitni izlaz iz ovog modula odlazi u modul fin_sel, gdje logika diktira hoće li se ova sabirnica izlaziti na osnovu stanja iz PPS FSM-a.

Alternativa ovom generatoru kvadratnih valova je stvaranje sinusnog vala. Iako bi ovo 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

  • Inverter
  • D register

Korak 14: 7-segmentni ekran

7-segmentni ekran
7-segmentni ekran

Modul seg_display kontrolira 7-segmentni zaslon na našoj basys ploči. Unutar modula javljaju se dva procesa. Prvi proces dekodira Freq u stanju "odabira" ili Pitch u načinu "reprodukcija". 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 izvodi modul seg_display.

Na basys3 ploči segmentni prikaz ima zajedničke katode. Dok anode kontroliraju koja je cifra 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 cifra oscilirati na 60 Hz. Ljudskom oku će izgledati kao da cifre uopće ne osciliraju.

Također imajte na umu da displej basys3 ploče 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)
  • Clk_240Hz (signal sata sa Clk_div_7seg, dvostruko 120 jer koristimo samo rastuću ivicu)

Izlazi

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

Komponente

  • Zasun
  • MUX
  • D register

Korak 15: Konačni odabir

Final Select
Final Select

Konačni odabir je posljednji 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 muzika. U stanju "play", modul će emitirati oscilirajuća 4-bita kako je određeno square_wave.

Ulazi

  • P_stanje (trenutno stanje iz PPS FSM)
  • 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 napravljen je od zbrajajućeg pojačala. Koristeći omjer otpornika u petlji napajanja i povratne sprege, uspjeli smo stvoriti sistem koji emituje na 16 različitih nivoa stvaranjem "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 nazad pomoću bitskih ulaza, izlazni naponi bi izgledali poput sinusnog koraka. 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 se nalazi slika dizajnerske datoteke za stvaranje 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 USD od kompanije Best Buy. Sve sa priključkom za slušalice radi dobro. Monoton takođe radi dobro. Možete čak koristiti i slušalice, ali ih možete ispuhati!

Za povezivanje izlaza DAC -a sa zvučnicima koristili 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 koristiti električnu traku za držanje kabela na mjestu, ali to je uzrokovalo mnogo smetnji. Pokušaj drugačijeg stila trake mogao bi riješiti ovaj problem.

Za naše zvučnike, okrenuli smo ih na najveću postavku i dobili pristojno glasnu buku.

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

Korak 18: Video demo

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

Evo koda 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čuje se: