Kazalo:

4 -stopenjski digitalni zaporedje: 19 korakov (s slikami)
4 -stopenjski digitalni zaporedje: 19 korakov (s slikami)

Video: 4 -stopenjski digitalni zaporedje: 19 korakov (s slikami)

Video: 4 -stopenjski digitalni zaporedje: 19 korakov (s slikami)
Video: От нуля до 10000 долларов с помощью партнерского маркети... 2024, November
Anonim
4 -stopenjski digitalni sekvencer
4 -stopenjski digitalni sekvencer
4 -stopenjski digitalni sekvencer
4 -stopenjski digitalni sekvencer

CPE 133, Cal Poly San Luis Obispo

Ustvarjalca projekta: Jayson Johnston in Bjorn Nelson

V današnji glasbeni industriji je eden najpogosteje uporabljenih "instrumentov" digitalni sintetizator. Vsak glasbeni žanr, od hip-hopa do popa in celo countryja, v studiu uporablja digitalni sintetizator za ustvarjanje taktov in zvokov, ki jih potrebujejo za oživitev svoje glasbe. V tej vadnici bomo ustvarili zelo preprost sintetizator s ploščo Basys 3 FPGA.

Sintetizator bo lahko predvajal štiri izbrane četrtinske note s konstantnim številom udarcev na minuto. Uporabniki bodo s stikali dodelili vsako četrtinsko noto glasbeni višini. Za ta projekt uporabljamo 4-bitni digitalno-analogni pretvornik (DAC), da vzamemo izhod iz plošče in ga pretvorimo v analogni signal. Izhod iz DAC -a se nato posreduje v standardni računalniški zvočnik, ki ustvarja našo glasbo. Možnih je šestnajst diskretnih višin. Sintetizator bomo omejili na eno oktavo z 12 notami, ki se nahaja med srednjim C (261,6 Hz) in B4 (493,9 Hz). Uporabnik bo imel tudi možnost dodelitve več zapiskov hkrati, pa tudi dodelitev počitka s pritiskom na dodeli, pri čemer nobeno od stikal za višino tona ni pomaknjeno navzgor. Ko je vsaka nota izbrana in predvajana, se na 7-segmentnem zaslonu prikaže črkovna nota. Uporabili bomo tudi tri gumbe na plošči, enega za predvajanje in začasno ustavitev glasbe, enega za ponastavitev sintetizatorja in preklop v način "izbire", tretjega pa za dodelitev tona vsake note v načinu izbire.

Ko je uporabnik zadovoljen z izbiro not in po pritisku na gumb za predvajanje, bo sintetizator večkrat zaporedoma predvajal vsako noto, dokler uporabnik ne pritisne premora ali izbire.

Tu je seznam potrebne opreme:

  • Vivado (ali kateri koli delovni prostor VHDL)
  • Basys 3 ali podobna plošča FPGA
  • Digitalno-analogni pretvornik (najmanj 4-bitni)
  • Zvočnik s priključkom za slušalke
  • Žični vodi

1. korak: Uporabniško delovanje digitalnega zaporedja

Uporabniško delovanje digitalnega zaporedja
Uporabniško delovanje digitalnega zaporedja

Naslednji koraki so za upravljanje digitalnega sekvencera. Digitalni sekvencer podpira predvajanje 12 različnih višin (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B), ki segajo od 261,6 Hz do 493,9 Hz.

1. Pritisnite levi gumb, da ploščo preklopite v način izbire. V tem načinu bodo vsa štiri leva stikala (stikala od 13 do 16) uporabljena za shranjevanje ločene vrednosti višine tona.

2. Če želite izbrati, vklopite eno od levih stikal in nato s skrajnimi 4 desnimi stikali (stikala od 1 do 4) izberite želeno višino. Nagib, povezan z določeno kombinacijo desnih stikal, bo prikazan na zaslonu sedmih segmentov, zaslon pa se bo vsakič, ko se desna stikala premaknejo v novo kombinacijo, posodobil na novo povezano višino. Počitek lahko dodelite tako, da nikoli ne dodelite višine tona enemu od levih stikal ali da opombi dodelite višino tona, prikazano kot 0 na zaslonu. Ko najdete želeno višino in se prikaže na zaslonu, pritisnite spodnji gumb za dodelitev, da to noto dodelite določeni višini.

3. Ponovite 2. korak za tri preostale note, tako da vsako od preostalih levih stikal vklopite ločeno, z desnimi stikali izberete ustrezno višino in pritisnete spodnji gumb, da tonu dodelite višino. Več notam lahko dodelite isto višino, tako da hkrati premaknete več kot eno levo stikalo navzgor.

4. Zdaj, ko so bile dodeljene vse note, je digitalni sekvencer pripravljen za predvajanje. Če želite predvajati note na zvočniku, preprosto pritisnite desni gumb za predvajanje/premor, da začnete predvajati glasbo. Vrstni red zaporedja predvajanja odraža višine, povezane z levim stikalom, od leve proti desni. Zapiski se bodo predvajali z nastavljenim številom udarcev na minuto v vrstnem redu 1, 2, 3, 4, 1, 2…. Na zaslonu bo prikazana nota, ki se trenutno predvaja, ko zvočniki predvajajo glasbo. Če želite začasno ustaviti predvajanje glasbe, preprosto pritisnite desni gumb, nato pa se glasba neha predvajati in na zaslonu se prikaže simbol za premor. Če znova pritisnete desni gumb, se predvajanje nadaljuje.

2. korak: Tehnične podrobnosti

Tehnične podrobnosti
Tehnične podrobnosti

Naš sintetizator uporablja številne različne digitalne komponente. Vključeni so končni avtomati, registri, multiplekserji, delilniki ure in drugo. Za izdelavo našega sintetizatorja smo uporabili 10 edinstvenih modularnih datotek. Namesto da bi vsak modul postali komponenta, smo modularne datoteke razčlenili po funkcijah. Zato je večina modulov več kot ena komponenta. Upoštevajte, da zgornja slika prikazuje vsak blok, povezan v našem vrhunskem dizajnu.

O vsakem modulu bomo razpravljali z opisom vhodov in izhodov, razčlenjevanjem njegovih komponent in razlago njegovega namena v celotni zasnovi. Datoteka ZIP je vključena na dnu navodila, ki vsebuje vsako datoteko kode VHDL, uporabljeno v projektu.

Vhodi

  • Clk (izvorni signal ure)
  • PP (predvajanje/premor)
  • Sel (postavi sintetizator v način izbire)
  • Dodelite (dodelite korak smoli)
  • Korak (opombe o položaju)
  • Freq (stikala ustvarijo želeno višino)

Izhodi

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

3. korak: Tehnične podrobnosti

Tehnične podrobnosti
Tehnične podrobnosti

4. korak: 7-segmentni delilec ure

7-segmentni delilec ure
7-segmentni delilec ure

Naš sintetizator uporablja tri delilnike ure, od katerih vsi proizvajajo signale, ki imajo v našem projektu drugačen namen. Ločilnik ure sprejema izvorni signal ure in proizvaja spremenjen signal, katerega frekvenca je manjša od izvirnega signala ure. Izvorna ura Basys 3 je 100 MHz. To je frekvenca, ki jo uporabljajo naši delilniki ur. Če uporabljate drugo ploščo FPGA z različno urono frekvenco, boste morda morali spremeniti kodo.

7-segmentni delilnik ure proizvaja signal, ki poganja datoteko seg_display. Ko pridemo do njenega razdelka, bomo podrobneje razložili, kako ta datoteka deluje. V bistvu ta delilnik ure proizvaja signal 240 Hz, ki se bo uporabljal za preklapljanje med anodami in katodami na zaslonu. Signal je 240 Hz, ker je frekvenca, pri kateri človeško oko ne more prepoznati odsotnosti svetlobe, 60 Hz. Uporabljamo dve števki, zato bo s podvojitvijo te frekvence vsaka številka nihala pri 60 Hz. Nato ga podvojimo, da dobimo 240 Hz, ker se sistem spreminja le, ko je signal visok, ne pa tudi, ko pade nizko.

Da bi to dosegel, delilec sprejme izvorni signal 100 MHz in šteje na vsakem naraščajočem robu. Ko števec doseže 416667, bo izhod prešel iz nizkega v visoko ali obratno.

Vhodi

Clk (izvorni signal ure)

Izhodi

Clk_7seg (do seg_display)

Sestavni deli

  • D register
  • MUX
  • Pretvornik
  • Seštevalnik

5. korak: delilec ure na minuto

Delilnik ure na število utripov na minuto
Delilnik ure na število utripov na minuto

Na podoben način deluje tudi delilnik ure BPM. Ta razdelilnik proizvaja urono frekvenco, ki poganja preklapljanje med štirimi koraki pri oddajanju tonov v stanju predvajanja. Odločili smo se za preklop med zapiski pri 100 BPM. Pri 100 BPM se bo vsaka nota predvajala 3/5 sekunde. Nastali signal bi imel frekvenco 1,67 Hz.

Za izdelavo signala te frekvence smo ponovno uporabili sistem štetja, vendar je bilo tokrat 60 milijonov. Vsakič, ko števec doseže 60 milijonov, bi se izhodni signal preklopil visoko ali nizko.

Vhodi

Clk (izvirna ura)

Izhodi

Clk_BPM (za izhod_FSM)

Sestavni deli

  • D register
  • MUX
  • Pretvornik
  • Seštevalnik

Korak 6: Razdelilnik ure

Premer delilnika ure
Premer delilnika ure

Delitelj ure Pitches je največji od naših delilnikov ure. Ta razdelilnik oddaja 12 različnih signalov, ki ustrezajo 12 različnim notam, ki jih lahko predvaja naš sintetizator. Z osnovnim poznavanjem glasbene teorije smo ugotovili, da lahko bit ali vodilo niha s hitrostjo, ki ustreza frekvenci glasbenih not. Če si želite ogledati frekvence, ki smo jih uporabljali, poglejte tukaj. Uporabili smo četrto oktavo smol.

Tu se uporablja isti sistem štetja. Za posebne vrednosti, na katere smo šteli, si oglejte datoteko z oznako Clk_div_pitches.

Vhodi

Clk (izvirna ura)

Izhodi

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

Sestavni deli

  • D register
  • MUX
  • Pretvornik
  • Seštevalnik

7. korak: Predvajaj/začasno ustavi/izberite državno napravo

Predvajaj/začasno ustavi/izberi državni stroj
Predvajaj/začasno ustavi/izberi državni stroj

V našem projektu obstajata dva stroja s končnim stanjem (FSM). FSM je logična naprava, ki lahko obstaja v samo enem stanju od omejenega števila stanj. Z uporabo FSM se lahko digitalno vezje premakne v novo stanje na podlagi kombinacije vhodov. Z uporabo vhodne logike se bo stanje FSM spremenilo, ko bo ura naraščala. Iz stanja in vhodov v vezje lahko ustvarite izhodno logiko, ki daje izhode, ki obstajajo le, če je FSM v določenem stanju.

Državni stroj PPS je prvi FSM v našem vezju. V tem FSM so tri države; Način predvajanja, premora in izbire. Za premikanje po različnih stanjih smo uporabili gumba PP in Izbor. Oglejte si zgornji diagram stanja, da vidite, kako prihaja do prehodov med stanji. Ta prehod FSM smo naredili na naraščajočem robu izvorne ure 100 MHz, tako da bi bilo nemogoče, da stroj ne bi prešel, ko je bil pritisnjen eden od gumbov, tudi za zelo kratek čas. Trenutno stanje (P_state) je edini izhod tega modula.

Vhodi

  • Clk (izvirna ura)
  • Sel (levi gumb)
  • PP (desni gumb)

Izhodi

P_state (trenutno stanje, za output_FSM, note_assign, seg_dsiplay, final_select)

Sestavni deli

  • MUX
  • D register

8. korak: Predvajaj/začasno ustavi/izberite državno napravo

Predvajaj/začasno ustavi/izberite državno napravo
Predvajaj/začasno ustavi/izberite državno napravo

9. korak: Izhodni FSM

Izhodni FSM
Izhodni FSM

To je drugi FSM, omenjen v prejšnjem razdelku. Ta FSM opravlja drugačno funkcijo kot druga, vendar je osnova za to v bistvu enaka.

Izhodni FSM deluje le, če je trenutno stanje prvega FSM "01" (stanje predvajanja). V bistvu je to omogočanje modula. Če je stanje "01", bo FSM preklapljal med stanji na naraščajočem robu signala ure BPM. To počnemo, ker output_FSM nadzoruje, katero binarno število za izbrano višino tona se pošlje modulom output_select in seg_display. FSM ima 16-bitni vhod, ki prihaja iz modula za dodelitev beležk, ki bo obravnavan v nadaljevanju. V stanju "00" za output_FSM bo modul izpisal "xxxx" za prvo dodeljeno noto. Nato v "01" izpiše "yyyy" za drugo noto in tako naprej za vsako opombo, preden se premakne nazaj na prvo noto. Oglejte si zgornji diagram stanja.

Ta FSM se razlikuje od prvega, ker ni vhodne logike za nadzor preklapljanja med stanji. Namesto tega bo FSM deloval le, ko je stanje iz prvega FSM "01", nato pa bo ta FSM prehajal med stanji le na naraščajočem robu signala ure. Druga razlika je v tem, da ima ta modul izhodno logiko, kar pomeni, da ne oddaja trenutnega stanja, ampak oddaja binarno število za smolo v tem stanju.

Vhodi

  • Clk_BPM (signal ure BPM iz delilnika ure)
  • FSM1_state (PS iz PPS FSM)
  • Pitch_in (parcele iz note_assign)

Izhodi

Pitch_out (en korak naenkrat, za output_select in seg_display)

Sestavni deli

  • MUX
  • D register

10. korak: Izhodni FSM

Izhodni FSM
Izhodni FSM

11. korak: Dodelitev opombe

Opomba Dodeli
Opomba Dodeli

Modul za dodelitev beležke je odgovoren za dejansko dodelitev višine tonu pozicijski nogi ali koraku. Ta modul je pravzaprav precej preprost. Najprej preveri, ali je vezje v stanju "izbire" in ali je stikalo (skrajno levo) visoko. Če je to res in pritisnete gumb za dodelitev, bo izhod modula enak binarnemu številu, ki ga predstavljajo frekvenčna stikala (skrajno desno).

Sprva smo poskušali izdelati modul, ki bi dejansko shranil enega od signalov takta tona na izhod, vendar smo imeli težave s spreminjanjem izhoda, ki sledi vhodnim signalom ure. To je edini modul, uporabljen večkrat v končni zasnovi. Vsak korak ima povezan modul note_assign, zato vsak primerek modula dobi en bit vodila Step.

Vhodi

  • P_state (trenutno stanje iz PPS FSM)
  • Sel (levi gumb)
  • Stikalo (enostopenjsko stikalo)
  • Freq (skrajna desna stikala za višino tona)
  • Dodeli (spodnji gumb, dodeli opombo)

Izhodi

Nagib (binarna številka, na izhod_FSM)

Sestavni deli

  • MUX
  • D ponovna registracija

12. korak: Izberite izhod

Izbira izhoda
Izbira izhoda

Izbira izhoda je odgovorna za sprejem binarne številke za višino tona in njeno povezavo z ustreznim signalom ure. Kljub svoji velikosti je to tudi relativno preprost modul. Output_select je v bistvu binarni dekoder, ki dekodira binarno število za višino tona do določenega signala ure. Pravzaprav je dodelitev izhoda taktni frekvenci delovala bolje v primerjavi z modulom note_assign, ker je vse, kar je moral narediti ta modul, MUX signali ure z binarno številko, ki predstavlja kontrolni vhod.

Opravičujemo se za nenavadno usmerjanje, Vivado je za datoteko clk_div_pitches organiziral signale smole po abecedi, za to datoteko pa jih je organiziral po naraščajoči binarni številki, zaradi česar so bile višine v drugačnem vrstnem redu. Upoštevajte tudi, da če je binarna številka iz izhoda_FSM "0000" ali karkoli večjega od "1100", potem MUX pošlje skozi raven signal "0".

Vnos

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

Izhod

Ton (en sam bit, ki se ujema z izbranim signalom ure, na square_wave)

Sestavni deli

MUX

Korak: Square Wave Gen

Square Wave Gen
Square Wave Gen

Modul square_wave je generator kvadratnega vala, ki se iz plošče odda na DAC. Z uporabo tonskega signala iz prejšnje datoteke ta square_wave obrne 4 -bitno število med "0000" in "1111" na naraščajočem robu tona. Ton je določena frekvenca višine tona, zato kvadratni val ustvari val z drugačno frekvenco, ko izhodni_FSM preide v drugo stanje. 4-bitni izhod tega modula gre v modul fin_sel, kjer logika narekuje, ali bo to vodilo oddano glede na stanje iz PPS FSM.

Alternativa temu generatorju kvadratnih valov je izdelava sinusnega vala. Čeprav bi to najverjetneje ustvarilo boljši končni ton, je izvedbo precej težje, zato smo se odločili za ustvarjanje kvadratnega vala.

Vhodi

Ton (nihajni bit iz izhoda_izbira)

Izhodi

DAC_input (nihajoče 4-bitno vodilo, ki se spreminja pri isti frekvenci tona)

Sestavni deli

  • Pretvornik
  • D register

14. korak: 7-segmentni zaslon

7-segmentni zaslon
7-segmentni zaslon

Modul seg_display nadzoruje 7-segmentni zaslon na naši plošči basys. Znotraj modula se pojavita dva procesa. Prvi postopek dekodira Freq v stanju "izbire" ali Pitch v načinu "play". V načinu "premor" modul dekodira, da prikaže simbol premora. Če pogledate kodo VHDL, lahko vidite, da binarni dekoder dejansko dekodira vhod v dva različna signala, katodo 1 in katodo 2. Katoda 1 predstavlja črko, ki ustreza višini tona, ki jo je treba prikazati, katoda 2 pa ploski simbol (b), če obstaja. Razlog za to je drugi postopek, ki ga izvede modul seg_display.

Na plošči basys3 ima segmentni zaslon skupne katode. Medtem ko anode nadzorujejo, katera številka je vklopljena, katode nadzorujejo, kateri segmenti so vklopljeni. Ker imajo zaslon skupne katode, to pomeni, da lahko hkrati prikažete samo en niz segmentov. To predstavlja problem za ta projekt, ker želimo prikazati črko pri prvi številki in ploski simbol, če je potrebno, hkrati. Se spomnite signala ure 7seg? Da bi rešili to težavo, spreminjamo anode in katode naprej in nazaj na signalu ure 7seg. Ker je signal ure 240 Hz in uporabljamo dve števki, bo vsaka številka nihala pri 60 Hz. Za človeško oko bo videti, kot da števke sploh ne nihajo.

Upoštevajte tudi, da zaslon plošče basys3 uporablja negativno logiko. To pomeni, da če je anoda ali katoda nastavljena na '0', bo ta številka ali segment vklopljen in obratno.

Vhodi

  • Pitch (binarna številka note, uporabljena v stanju predvajanja)
  • Freq (frekvenčna stikala, ki se uporabljajo v izbirnem stanju)
  • P_state (trenutno stanje iz PPS FSM)
  • Clk_240Hz (signal ure iz Clk_div_7seg, dvojno 120, ker uporabljamo le naraščajoči rob)

Izhodi

  • Katoda (vodilo, ki nadzoruje segmente na zaslonu, končni izhod)
  • Anoda (vodilo, ki nadzoruje številke na zaslonu, končni izhod)

Sestavni deli

  • Zapah
  • MUX
  • D register

Korak 15: Končna izbira

Končna izbira
Končna izbira

Končna izbira je zadnji modul, uporabljen v tem projektu. Še en preprost modul, ta modul nadzoruje končni izhod, ki bo šel v DAC. V stanju "izbira" ali "premor" bo modul predvajal statično vrednost "0000", tako da iz zvočnikov ne bo predvajana glasba. V stanju "play" bo modul oddajal nihajoče 4-bitne, kot jih določa square_wave.

Vhodi

  • P_state (trenutno stanje iz PPS FSM)
  • DAC_input (nihajoči 4-bitni iz kvadratnega_vala)

Izhodi

DAC (enak vhodu DAC_ v stanju predvajanja, končni izhod)

Sestavni deli

MUX

Korak 16: Zunanje naprave: DAC

Zunanje naprave: DAC
Zunanje naprave: DAC

Digitalno -analogni pretvornik (DAC) sprejme ločen signal in ga pretvori v stalen signal. Naš DAC ima štiri bite in je izdelan iz seštevalnega ojačevalnika. Z uporabo razmerja uporov v napajalni in povratni zanki smo lahko ustvarili sistem, ki oddaja na 16 različnih ravneh, ki nastanejo s "seštevanjem" vsake veje. Bit0, zgornja veja, nosi najmanjšo težo in prispeva najmanjši potencial, ko je visok, zaradi tega se veje povečujejo. Ko se spuščate po vejah, se teža povečuje. Če bi šteli binarno navzgor in nato nazaj z uporabo bitnih vhodov, bi bile izhodne napetosti videti kot sinusni val po korakih. Vhod v DAC je bil priključen na enega od PMOD-jev na plošči za prenos 4-bitnega signala.

DAC je bil prvotno sestavljen za razred elektrotehnike in smo ga oblikovali in spajkali, ne pa kupili v trgovini. Zgoraj je slika oblikovalske datoteke za ustvarjanje tiskanega vezja.

17. korak: Zunanje naprave: Zvočnik

Zunanje naprave: Zvočnik
Zunanje naprave: Zvočnik

Za ta projekt ne boste želeli kupiti super lepega zvočnika. Kot lahko vidite, je zvok precej preprost. Šli smo in pri Best Buyu kupili računalniške zvočnike za 8 USD. Vse, kar ima priključek za slušalke, dobro deluje. Monoton deluje tudi dobro. Uporabljate lahko celo slušalke, vendar jih lahko raznesete!

Za priključitev izhoda DAC na zvočnike smo uporabili mostične kable, nato pa izhodni kabel držali na konici vtičnice za slušalke in kabel za ozemljitev na podnožje. Poskušali smo z električnim trakom držati kable na mestu, vendar je povzročilo veliko motenj. Poskus z drugačnim slogom traku bi lahko rešil to težavo.

Za naše zvočnike smo jih obrnili na najvišjo nastavitev in dobili spodobno močan hrup.

In to je zadnji korak pri ustvarjanju digitalnega sekvencerja iz plošče FPGA! Pojdite na naslednja dva razdelka, če želite prenesti vso kodo VHDL in si oglejte sekvence v akciji.

Korak 18: Video demo

Ta videoposnetek prikazuje končno različico delovnega projekta, vključno s postopkom dodelitve stikal na 4 različne višine in zvočniki, ki igrajo ustrezne note.

19. korak: Koda VHDL

Tu je koda za celoten projekt, vključno z datotekami omejitev in sim, uporabljenimi pri izdelavi sekvencera. Upoštevajte, da v arhitekturi tako pišejo neuporabljene oblikovalske datoteke.

Priporočena: