Բովանդակություն:
- Քայլ 1. Թվային հաջորդականիչի օգտագործողի շահագործումը
- Քայլ 2: Տեխնիկական մանրամասներ
- Քայլ 3: Տեխնիկական մանրամասներ
- Քայլ 4: segmentամացույցի բաժանիչ 7 հատվածից
- Քայլ 5. atsեծեր մեկ րոպեի ժամացույցի բաժանարարի համար
- Քայլ 6: itամացույցի բաժանարար սկիպիդարներ
- Քայլ 7: Խաղալ/դադարեցնել/ընտրել պետական մեքենա
- Քայլ 8: Խաղալ/դադար/Ընտրել պետական մեքենա
- Քայլ 9. Արդյունք FSM
- Քայլ 10: Արդյունք FSM
- Քայլ 11: Նշում Հանձնարարեք
- Քայլ 12: Ելքի ընտրություն
- Քայլ 13: Square Wave Gen
- Քայլ 14: 7 հատվածի ցուցադրում
- Քայլ 15: Վերջնական ընտրություն
- Քայլ 16: Արտաքին սարքեր. DAC
- Քայլ 17. Արտաքին սարքեր. Բարձրախոս
- Քայլ 18: Տեսանյութի ցուցադրում
- Քայլ 19: VHDL ծածկագիր
Video: 4 քայլ թվային հաջորդականիչ ՝ 19 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:51
CPE 133, Cal Poly San Luis Obispo
Նախագծի հեղինակներ ՝ ayեյսոն Johnոնսթոն և Բյորն Նելսոն
Այսօրվա երաժշտական արդյունաբերության մեջ ամենատարածված «գործիքներից» մեկը թվային սինթեզատորն է: Երաժշտության յուրաքանչյուր ժանր ՝ հիփ-հոփից մինչև փոփ և նույնիսկ երկիր, ստուդիայում օգտագործում է թվային սինթեզատոր ՝ ստեղծելու համար անհրաժեշտ հնչյուններն ու հնչյունները, որոնք անհրաժեշտ են իրենց երաժշտությունը կյանքի կոչելու համար: Այս ձեռնարկում մենք Basys 3 FPGA տախտակով ստեղծելու ենք շատ պարզ սինթեզատոր:
Սինթեզատորը կկարողանա նվագել չորս ընտրված քառորդ նոտա `րոպեում անընդհատ թվով հարվածներով: Օգտվողները կօգտագործեն անջատիչները ՝ յուրաքանչյուր եռամսյակային նոտան երաժշտական բարձրության վրա նշանակելու համար: Այս նախագծի համար մենք օգտագործում ենք 4-բիթանոց թվայինից անալոգային փոխարկիչ (DAC) ՝ տախտակից ելքը վերցնելու և այն անալոգային ազդանշանի վերածելու համար: Այնուհետև DAC- ի ելքը կփոխանցվի սովորական համակարգչի բարձրախոսին ՝ ստեղծելով մեր երաժշտությունը: Հնարավոր են տասնվեց առանձին խաղադաշտեր: Մենք մեր սինթեզատորը կսահմանափակենք 12 նոտայով մեկ օկտավայով, որը ընկնում է միջին C (261.6 Հց) և B4 (493.9 Հց) միջև: Օգտատերը կունենա նաև միաժամանակ մի քանի նշումներ նշանակելու տարբերակ, ինչպես նաև նշանակելու հանգիստ ՝ նշանակելով հարվածը, մինչդեռ առանցքային անջատիչներից ոչ մեկը վեր չի տեղափոխվում: Երբ յուրաքանչյուր նոտա ընտրվում և նվագարկվում է, տառի նոտան ցուցադրվում է 7 հատվածի էկրանին: Մենք նաև կօգտագործենք տախտակի երեք կոճակ ՝ մեկը երաժշտությունը նվագարկելու և դադարեցնելու համար, մեկը ՝ սինթեզատորը վերակայելու և «ընտրության» ռեժիմի մեջ դնելու համար, իսկ երրորդը ՝ յուրաքանչյուր նոտա ընտրության ռեժիմում տրամադրելու համար:
Երբ օգտվողը գոհ է նոտաների ընտրությունից և նվագարկման կոճակը սեղմելուց հետո, սինթեզատորը յուրաքանչյուր նոտա հաջորդաբար կխաղա, մինչև օգտագործողը կամ սեղմի դադար կամ ընտրի:
Ահա անհրաժեշտ սարքավորումների ցանկը.
- Vivado (կամ ցանկացած VHDL աշխատանքային տարածք)
- Basys 3 կամ նման FPGA տախտակ
- Թվայինից անալոգային փոխարկիչ (նվազագույն 4 բիթ)
- Ականջակալների խցիկով բարձրախոս
- Հաղորդալարերը տանում են
Քայլ 1. Թվային հաջորդականիչի օգտագործողի շահագործումը
Հետևյալ քայլերը թվային հաջորդականացուցիչի գործարկման համար են: Թվային հաջորդականացուցիչն աջակցում է 12 տարբեր խաղադաշտերի նվագարկմանը (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B), որոնք տատանվում են 261,6 Հց -ից մինչև 493,9 Հց:
1. Սեղմեք ձախ կոճակը ՝ տախտակը ընտրության ռեժիմի դնելու համար: Այս ռեժիմում գտնվելու դեպքում, ձախից 4 անջատիչ (անջատիչներ 13 -ից 16 -ը) յուրաքանչյուրը կօգտագործվի որոշակի բարձրության արժեք պահելու համար:
2. Ընտրություն կատարելու համար միացրեք ձախ անջատիչներից մեկը, այնուհետև օգտագործեք աջից 4 անջատիչը (անջատիչները 1 -ից 4 -ը) `ցանկալի սկիպիդար ընտրելու համար: Աջ անջատիչների որոշակի համադրության հետ կապված սկիպիդարը կցուցադրվի յոթ հատվածի էկրանին, և էկրանը կթարմացվի նոր համապատասխան սկիպիդարին, երբ աջ անջատիչները տեղափոխվեն նոր համադրության: Հանգիստը կարող է նշանակվել `ձախ անջատիչներից մեկին երբեք սկիպիդար չտրամադրելով, կամ նշման վրա ցուցադրման վրա 0 -ով ցուցադրվող սկիպիդարը նշանակելով: Երբ ցանկալի սկիպիդարը գտնվի և ցուցադրվի էկրանին, կտտացրեք ներքևի նշանակման կոճակին ՝ նշմանը այդ հատուկ սկիպիդարը նշանակելու համար:
3. Կրկնեք 2 -րդ քայլը երեք մնացած նոտաների համար ՝ յուրաքանչյուր ձախ անջատիչ անջատելով առանձին, ընտրելով համապատասխան անջատիչը աջ անջատիչներով և սեղմելով ներքևի կոճակը `նշագիծը բարձրացնելու համար: Բազմաթիվ նոտաներին կարելի է հատկացնել նույն սկիպիդարը ՝ միաժամանակ ձախից մի քանի անջատիչից ավելի շարժելով դեպի վեր:
4. Այժմ, երբ բոլոր նոտաների խաղադաշտերը նշանակված են, թվային հաջորդականիչը պատրաստ է նվագարկման: Բանախոսի վրա նոտաները նվագարկելու համար պարզապես սեղմեք նվագարկման/դադարի աջ կոճակը `երաժշտությունը նվագարկելու համար: Նվագարկման հաջորդականության հաջորդականությունը հայելային է ձախ անջատիչների հետ կապված սկիպիդարներին ՝ ձախից աջ: Նոտաները կհնչեն րոպեում որոշակի քանակությամբ զարկերով ՝ 1, 2, 3, 4, 1, 2 կարգով:… Էկրանի վրա կցուցադրվի այն նշումը, որը ներկայումս հնչում է, քանի որ բարձրախոսները նվագում են երաժշտությունը: Երաժշտության նվագարկումը դադարեցնելու համար պարզապես սեղմեք աջ կոճակը, այնուհետև երաժշտությունը կդադարի նվագարկվել, և դադարի նշանը կցուցադրվի էկրանին: Աջ կոճակը նորից սեղմելը կվերսկսի նվագարկումը:
Քայլ 2: Տեխնիկական մանրամասներ
Մեր սինթեզատորը օգտագործում է բազմաթիվ տարբեր թվային բաղադրիչներ: Ներառված են սահմանափակ վիճակի մեքենաներ, գրանցամատյաններ, մուլտիպլեքսորներ, ժամացույցի բաժանարարներ և այլն: Մեր սինթեզատորը կառուցելու համար մենք օգտագործեցինք 10 յուրահատուկ մոդուլային ֆայլ: Յուրաքանչյուր մոդուլ բաղադրիչ դարձնելու փոխարեն, մենք մոդուլային ֆայլերը տրոհեցինք ըստ գործառույթի: Մոդուլների մեծ մասը, որպես արդյունք, մեկից ավելի բաղադրիչ է: Նկատի ունեցեք, որ վերը նշված պատկերը ցույց է տալիս մեր բլոկի ամենագլխավոր դիզայնի մեջ ամրացված յուրաքանչյուր բլոկ:
Մենք կքննարկենք յուրաքանչյուր մոդուլ `նկարագրելով մուտքերն ու ելքերը, քայքայելով դրա բաղադրիչները և բացատրելով դրա նպատակը ընդհանուր նախագծում: Հրահանգի ներքևում ներառված է ZIP ֆայլ, որը պարունակում է նախագծում օգտագործվող յուրաքանչյուր VHDL կոդի ֆայլ:
Մուտքերը
- Clk (հայրենի ժամացույցի ազդանշան)
- PP (խաղալ/դադար)
- Sel (սինթեզատորը դրեք ընտրության ռեժիմում)
- Հանձնարարել (մի քայլ նշանակել սկիպիդարին)
- Քայլ (դիրքային նշումներ)
- Հաճախություն (անջատիչները ստեղծում են ցանկալի սկիպիդար)
Արդյունքները
- Անոդ (7 հատվածի անոդներ)
- Կաթոդ (7 հատվածի կաթոդներ)
- DAC (4-բիթանոց շարժիչ DAC)
Քայլ 3: Տեխնիկական մանրամասներ
Քայլ 4: segmentամացույցի բաժանիչ 7 հատվածից
Մեր սինթեզատորը օգտագործում է երեք ժամացույցի բաժանարարներ, բոլորն էլ արտադրում են ազդակներ, որոնք այլ նպատակների են ծառայում մեր նախագծում: Clockամացույցի բաժանարարը վերցնում է հայրենի ժամացույցի ազդանշանը և արտադրում է փոփոխված ազդանշան, որն ունի հաճախականություն, որը փոքր է սկզբնական ժամացույցի ազդանշանից: Basys 3 -ի հայրենի ժամացույցը 100 ՄՀց է: Սա այն հաճախականությունն է, որն օգտագործում են մեր ժամացույցի բաժանարարները: Եթե դուք օգտագործում եք այլ FPGA տախտակ `այլ բնիկ ժամացույցի հաճախականությամբ, գուցե ստիպված լինեք փոխել կոդը:
7 հատվածից ժամացույցի բաժանարարը արտադրում է ազդանշան, որը վարում է seg_display ֆայլը: Մենք ավելի մանրամասն կբացատրենք, թե ինչպես է աշխատում այս ֆայլը, երբ հասնենք դրա բաժնին: Ըստ էության, ժամացույցի այս բաժանարարը արտադրում է 240 Հց ազդանշան, որը կօգտագործվի էկրանին անոդների և կաթոդների միջև անցնելու համար: Ազդանշանը 240 Հց է, քանի որ հաճախականությունը, որով մարդու աչքը չի կարողանում ճանաչել լույսի բացակայությունը, 60 Հց է: Մենք օգտագործում ենք երկու թվանշան, ուստի կրկնապատկելով այս հաճախականությունը ՝ յուրաքանչյուր նիշ կտատանվի 60 Հց -ի վրա: Այնուհետև այն կրկնապատկում ենք և ստանում 240 Հց, քանի որ համակարգը փոխվում է միայն այն դեպքում, երբ ազդանշանը բարձրանում է, այլ ոչ թե երբ այն իջնում է:
Դրան հասնելու համար բաժանարարը վերցնում է հարազատ 100 ՄՀց ազդանշանը և հաշվում յուրաքանչյուր աճող եզրին: Երբ հաշվիչը կհասնի 416667 -ի, ելքը ցածրից կգնա բարձր, կամ հակառակը:
Մուտքերը
Clk (հայրենի ժամացույցի ազդանշան)
Արդյունքները
Clk_7seg (դեպի seg_display)
Բաղադրիչներ
- D գրանցամատյան
- ՇԱՏ
- Inverter
- Adder
Քայլ 5. atsեծեր մեկ րոպեի ժամացույցի բաժանարարի համար
BPM ժամացույցի բաժանարարը գործում է նույն ձևով: Այս բաժանարարը արտադրում է ժամացույցի հաճախականությունը, որն առաջ է մղում չորս աստիճանների միջև անցումը խաղային վիճակում հնչերանգներ թողարկելիս: Մենք որոշեցինք անցում կատարել 100 BPM արագությամբ: 100 BPM- ում յուրաքանչյուր նոտա կհնչի վայրկյանի 3/5 -ով: Ստացված ազդանշանը կունենա 1,67 Հց հաճախականություն:
Այս հաճախականության ազդանշան տալու համար մենք կրկին օգտագործեցինք հաշվիչ համակարգ, բայց այս անգամ հաշվարկը 60 միլիոն էր: Ամեն անգամ, երբ հաշվիչը հարվածում էր 60 միլիոնի, ելքային ազդանշանը փոխվում էր բարձր կամ ցածր:
Մուտքերը
Clk (հայրենի ժամացույցի հաճախականությունը)
Արդյունքները
Clk_BPM (դեպի output_FSM)
Բաղադրիչներ
- D գրանցամատյան
- ՇԱՏ
- Inverter
- Adder
Քայլ 6: itամացույցի բաժանարար սկիպիդարներ
The Pitches Clock Divider- ը մեր ժամացույցի բաժանարարներից ամենամեծն է: Այս բաժանարարը թողարկում է 12 տարբեր ազդանշաններ, որոնք համապատասխանում են 12 տարբեր նոտաներին, որոնք մեր սինթեզատորը կարող է նվագարկել: Օգտագործելով երաժշտության տեսության հիմնական գիտելիքները, մենք եզրակացրինք, որ բիթը կամ ավտոբուսը կարող են տատանվել այնպիսի արագությամբ, որը համապատասխանում է երաժշտական նոտաների հաճախականությանը: Մեր օգտագործած հաճախականությունները տեսնելու համար նայեք այստեղ: Մենք օգտագործեցինք խաղադաշտերի չորրորդ օկտավան:
Այստեղ օգտագործվում է նույն հաշվարկային համակարգը: Այն կոնկրետ արժեքների համար, որոնց մենք հաշվել ենք, տես Clk_div_pitches պիտակով ֆայլը:
Մուտքերը
Clk (հայրենի ժամացույցի հաճախականությունը)
Արդյունքները
C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (ելքային_ընտրանք)
Բաղադրիչներ
- D գրանցամատյան
- ՇԱՏ
- Inverter
- Adder
Քայլ 7: Խաղալ/դադարեցնել/ընտրել պետական մեքենա
Մեր նախագծում կան երկու սահմանափակ վիճակի մեքենաներ (FSM): FSM- ը տրամաբանական սարք է, որը կարող է գոյություն ունենալ միայն մեկ վիճակում `սահմանափակ քանակությամբ վիճակներից: FSM- ի միջոցով թվային սխեման կարող է տեղափոխվել նոր վիճակի `ելնելով մուտքերի համակցությունից: Օգտագործելով մուտքային տրամաբանությունը, FSM- ի վիճակը կփոխվի, երբ ժամացույցի եզրը բարձրանում է: Շրջանի վիճակից և մուտքերից կարող եք ստեղծել ելքային տրամաբանություն, որը տալիս է ելքեր, որոնք գոյություն ունեն միայն այն դեպքում, եթե FSM- ն գտնվում է որոշակի վիճակում:
PPS պետական մեքենան մեր շրջանի առաջին FSM- ն է: Այս FSM- ում կա երեք վիճակ. Խաղալ, դադար և ընտրության ռեժիմ: Տարբեր վիճակների միջով անցնելու համար մենք օգտագործեցինք PP և Selection կոճակները: Տեսեք վերևի վիճակի դիագրամը ՝ տեսնելու, թե ինչպես են տեղի ունենում անցումներ վիճակների միջև: Մենք այս FSM անցումը կատարեցինք հարազատ 100 ՄՀց ժամացույցի աճող եզրին, այնպես որ անհնար կլիներ, որ կոճակներից մեկը սեղմելիս մեքենան չանցներ, նույնիսկ շատ կարճ ժամանակով: Ներկայիս վիճակը (P_state) այս մոդուլից միակ ելքն է:
Մուտքերը
- Clk (հայրենի ժամացույցի հաճախականությունը)
- Սել (ձախ կոճակ)
- PP (աջ կոճակ)
Արդյունքները
P_state (ներկա վիճակ, output_FSM, note_assign, seg_dsiplay, final_select)
Բաղադրիչներ
- ՇԱՏ
- D գրանցամատյան
Քայլ 8: Խաղալ/դադար/Ընտրել պետական մեքենա
Քայլ 9. Արդյունք FSM
Սա FSM- ի երկրորդ հղումն է նախորդ բաժնում: Այս FSM- ն կատարում է այլ գործառույթ, քան մյուսը, բայց այս մեկի հիմքն ըստ էության նույնն է:
Ելքային FSM- ն գործում է միայն այն դեպքում, երբ առաջին FSM- ի ներկա վիճակը «01» է (խաղի վիճակ): Ըստ էության, սա մոդուլի միացումն է: Եթե վիճակը «01» է, ապա FSM- ն պատրաստվում է անցնել BPM ժամացույցի ազդանշանի բարձրացող եզրին գտնվող վիճակների միջև: Մենք դա անում ենք, քանի որ output_FSM- ը վերահսկում է, թե որ երկուական թիվն է ընտրված սկիպիդարի համար ուղարկվում արտադրանքի ընտրության և seg_display մոդուլներին: FSM- ն ունի 16-բիթանոց մուտքագրում, որը գալիս է նշումների նշանակման մոդուլից, որը կներկայացվի հաջորդիվ: «00» վիճակում ՝ output_FSM- ի համար, մոդուլը դուրս կբերի «xxxx» ՝ նշանակված առաջին նշման համար: Այնուհետև «01» -ում այն դուրս կգա «yyyy» երկրորդ նոտայի համար և այդպես շարունակ յուրաքանչյուր նոտայի համար ՝ նախքան վերադառնալ առաջին նոտային: Տես վերը նշված պետական դիագրամը:
Այս FSM- ն տարբերվում է առաջինից, քանի որ չկա վիճակների միջև անցումը վերահսկելու մուտքային տրամաբանություն: Փոխարենը, FSM- ը գործելու է միայն այն ժամանակ, երբ առաջին FSM- ի վիճակից «01» է, և այդ FSM- ն կանցնի պետությունների միջև միայն ժամացույցի ազդանշանի բարձրացող եզրին: Մեկ այլ տարբերություն այն է, որ այս մոդուլն ունի ելքային տրամաբանություն, այսինքն `այն չի թողնում ներկա վիճակը, այլ դուրս է բերում այդ վիճակի լանջի երկուական թիվը:
Մուտքերը
- Clk_BPM (BPM ժամացույցի ազդանշան ժամացույցի բաժանարարից)
- FSM1_state (PS PPS FSM- ից)
- Pitch_in (նշումներ_նշումից)
Արդյունքները
Pitch_out (մեկ սկիպիդար միաժամանակ, արտադրանքի_ընտրության և seg_display- ի համար)
Բաղադրիչներ
- ՇԱՏ
- D գրանցամատյան
Քայլ 10: Արդյունք FSM
Քայլ 11: Նշում Հանձնարարեք
Նշում նշանակելու մոդուլը պատասխանատու է դիրքի նշմանը կամ քայլին իրականում սկիպիդար նշանակելու համար: Այս մոդուլը իրականում բավականին պարզ է: Այն նախ ստուգում է, թե արդյոք շղթան գտնվում է «ընտրության» վիճակում, և արդյոք մի անջատիչ (ձախից ձախ) բարձր է: Եթե դա ճիշտ է և նշանակման կոճակը սեղմված է, մոդուլի ելքը հավասար կլինի երկուական թվին, որը ներկայացված է հաճախականության անջատիչներով (ծայրահեղ աջ):
Ի սկզբանե, մենք փորձել էինք պատրաստել մոդուլ, որն իրականում կփրկի սկիպիդար ժամացույցի ազդանշաններից մեկը ելքի վրա, բայց մենք խնդիրներ ունեցանք ելքի փոփոխության հետ `հետևելով ժամացույցի մուտքային ազդանշաններին: Սա միակ մոդուլն է, որն ավելի քան մեկ անգամ օգտագործվել է վերջնական նախագծում: Յուրաքանչյուր քայլ ունի իր հետ կապված note_assign մոդուլ, և դրա պատճառով մոդուլի յուրաքանչյուր օրինակ ստանում է Step ավտոբուսի մեկ բիթ:
Մուտքերը
- P_state (ներկա վիճակը PPS FSM- ից)
- Սել (ձախ կոճակ)
- Անջատիչ (մեկ քայլ անջատիչ)
- Հաճախականություն (ծայրահեղ աջ անջատիչներ սկիպիդարի համար)
- Նշանակում (ներքևի կոճակ, նշում է տալիս)
Արդյունքները
Սկիպիդար (երկուական համար, դեպի output_FSM)
Բաղադրիչներ
- ՇԱՏ
- D գրանցվեք
Քայլ 12: Ելքի ընտրություն
Ելքի ընտրիչը պատասխանատու է երկուական թիվը սկիպիդար վերցնելու և այն համապատասխան ժամացույցի ազդանշանին միացնելու համար: Չնայած իր չափսերին, սա նաև համեմատաբար պարզ մոդուլ է: Output_select- ը, ըստ էության, երկուական ապակոդավորիչ է, որը վերծանում է երկուական համարը սկիպիդարի որոշակի ժամացույցի ազդանշանի վրա: Փաստորեն ելքը ժամացույցի հաճախականությանը նշանակելը այստեղ ավելի լավ էր աշխատում, քան note_assign մոդուլը, քանի որ այս մոդուլը պետք է աներ MUX ժամացույցի ազդանշաններ ՝ երկուական թվով, որը ներկայացնում էր կառավարման մուտքը:
Ներողություն ենք խնդրում տարօրինակ երթուղու համար: Vivado- ն ձայնային ազդանշանները այբբենական կարգով կազմակերպեց clk_div_pitches ֆայլի համար, սակայն այս ֆայլի համար դրանք կազմակերպեց երկուական թվի աճով `պատճառելով, որ խաղադաշտերը լինեն այլ կարգի: Նաև նշեք, որ եթե output_FSM- ի երկուական թիվը «0000» էր կամ «1100» -ից ավելի մեծ բան, ապա MUX- ը ուղարկվում էր հարթ «0» ազդանշանի միջոցով:
Մուտք
- Սկիպիդար (output_FSM- ից);
- C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (ժամացույցի ժամացույցի ազդանշաններ)
Ելք
Տոն (մեկ բիթ, որը համապատասխանում է ժամացույցի ընտրված ազդանշանին, քառակուսի_ալիքին)
Բաղադրիչներ
ՇԱՏ
Քայլ 13: Square Wave Gen
Square_wave մոդուլը քառակուսի ալիքի գեներատորն է, որը դուրս է գալիս տախտակից դեպի DAC: Օգտագործելով նախորդ ֆայլի հնչերանգային ազդանշանը, այս քառակուսի_ալիքը շրջում է 4 -բիթանոց թիվը «0000» - ի և «1111» - ի միջև ՝ Tone- ի բարձրացող եզրին: Տոնը որոշակի սկիպիդար հաճախականություն է, ուստի քառակուսի_ալիքը արտադրում է այլ հաճախականությամբ ալիք, երբ output_FSM- ն անցնում է այլ վիճակի: Այս մոդուլից 4-բիթանոց ելքը գնում է դեպի fin_sel մոդուլ, որտեղ տրամաբանությունը թելադրում է, թե արդյոք այս ավտոբուսը կարտադրվի PPS FSM- ի վիճակի հիման վրա:
Այս քառակուսի ալիքների գեներատորի այլընտրանքը սինուս ալիք է արտադրում: Թեև դա, ամենայն հավանականությամբ, ավելի լավ վերջնական երանգ կտա, այն իրականացնելը զգալիորեն ավելի դժվար է, ուստի մենք նախընտրեցինք պարզապես քառակուսի ալիք առաջացնել:
Մուտքերը
Տոն (ելքային_ընտրանքից տատանվող բիթ)
Արդյունքները
DAC_input (տատանվող 4-բիթանոց ավտոբուս, որը փոխվում է տոնայնության նույն հաճախականությամբ)
Բաղադրիչներ
- Inverter
- D գրանցամատյան
Քայլ 14: 7 հատվածի ցուցադրում
Seg_display մոդուլը վերահսկում է մեր բազիսային տախտակի 7 հատվածի ցուցադրումը: Մոդուլի ներսում տեղի է ունենում երկու գործընթաց: Առաջին գործընթացը վերծանում է Freq- ը «ընտրության» վիճակում կամ Pitch- ը, երբ «խաղում» ռեժիմում է: «Դադար» ռեժիմում մոդուլը վերծանվում է ՝ ցույց տալու համար դադարի խորհրդանիշը: VHDL ծածկագրին նայելով ՝ կարող եք տեսնել, որ երկուական ապակոդավորիչն իրականում մուտքը վերծանում է երկու տարբեր ազդանշանների ՝ կաթոդ 1 և կաթոդ 2: Կաթոդ 1 -ը ներկայացնում է ցուցադրվող սկիպիդարին համապատասխանող տառը, իսկ կաթոդ 2 -ը ներկայացնում է տափակ խորհրդանիշը (բ), եթե այն կա: Դրա պատճառը վերաբերում է seg_display մոդուլի կողմից կատարված երկրորդ գործընթացին:
Basys3 տախտակի վրա հատվածի ցուցադրումն ունի ընդհանուր կաթոդներ: Մինչ անոդները վերահսկում են, թե որ նիշն է միացված, կաթոդները վերահսկում են, թե որ հատվածներն են միացված: Քանի որ էկրանն ունի ընդհանուր կաթոդներ, դա նշանակում է, որ դուք կարող եք միաժամանակ ցուցադրել միայն մեկ հատված հատված: Սա խնդիր է առաջացնում այս նախագծի համար, քանի որ մենք ցանկանում ենք մի տառ ցուցադրել առաջին թվանշանի վրա և, անհրաժեշտության դեպքում, հարթ խորհրդանիշը, անհրաժեշտության դեպքում, միաժամանակ: Հիմա հիշո՞ւմ եք 7 վայրկյանանոց ժամացույցի ազդանշանը: Այս խնդիրը շրջանցելու համար մենք 7 անժամանոց ժամացույցի ազդանշանի վրա փոխում ենք անոդներն ու կաթոդները: Քանի որ ժամացույցի ազդանշանը 240 Հց է, և մենք օգտագործում ենք երկու թվանշան, յուրաքանչյուր նիշ կտատանվի 60 Հց -ի վրա: Մարդու աչքին թվալու է, թե թվանշաններն ընդհանրապես չեն տատանվում:
Նաև նշեք, որ basys3 տախտակի ցուցադրումը օգտագործում է բացասական տրամաբանություն: Սա նշանակում է, որ եթե անոդը կամ կաթոդը սահմանվում է «0», ապա այդ թվանշանը կամ հատվածը միացված կլինեն և հակառակը:
Մուտքերը
- Սկիպիդար (նոտայի երկուական համար, որն օգտագործվում է խաղային վիճակում)
- Հաճախականություն (հաճախականության անջատիչներ, որոնք օգտագործվում են ընտրության վիճակում)
- P_state (ներկա վիճակը PPS FSM- ից)
- Clk_240Hz (ժամացույցի ազդանշան Clk_div_7seg- ից, կրկնապատկեք 120 -ը, քանի որ մենք օգտագործում ենք միայն բարձրացող եզրը)
Արդյունքները
- Կաթոդ (ավտոբուս, որը վերահսկում է ցուցադրման հատվածները, վերջնական ելքը)
- Անոդ (ավտոբուս, որը վերահսկում է էկրանին թվանշանները, վերջնական ելքը)
Բաղադրիչներ
- Լաթս
- ՇԱՏ
- D գրանցամատյան
Քայլ 15: Վերջնական ընտրություն
Վերջնական ընտրությունը այս նախագծում օգտագործված վերջին մոդուլն է: Մեկ այլ պարզ մոդուլ ՝ այս մոդուլը վերահսկում է վերջնական ելքը, որը գնալու է DAC: Երբ «ընտրություն» կամ «դադար» վիճակում է, մոդուլը պատրաստվում է թողարկել ստատիկ «0000», այնպես որ բարձրախոսներից երաժշտություն չի հնչի: «Խաղալ» վիճակում մոդուլը դուրս կգա տատանվող 4 բիթից, ինչպես որոշվում է քառակուսի ալիքի միջոցով:
Մուտքերը
- P_state (ներկա վիճակը PPS FSM- ից)
- DAC_ մուտքագրում (քառակուսի ալիքից տատանվող 4 բիթ)
Արդյունքները
DAC (հավասար է DAC_ մուտքագրմանը խաղային վիճակում, վերջնական ելք)
Բաղադրիչներ
ՇԱՏ
Քայլ 16: Արտաքին սարքեր. DAC
Թվայինից անալոգային փոխարկիչը (DAC) վերցնում է դիսկրետ ազդանշան և փոխակերպում այն շարունակական ազդանշանի: Մեր DAC- ն ունի չորս բիթ և պատրաստված է ամփոփիչ ուժեղացուցիչից: Մատակարարման և հետադարձ կապի մեջ դիմադրողների հարաբերակցությունը օգտագործելով, մենք կարողացանք ստեղծել համակարգ, որը դուրս է գալիս 16 տարբեր մակարդակներում ՝ ստեղծելով յուրաքանչյուր ճյուղի «ամփոփում»: Bit0- ը `վերին ճյուղը, կրում է նվազագույն քաշը և նպաստում է ամենափոքր ներուժին, երբ բարձր է` այդ ճյուղերի պատճառով ավելի բարձր դիմադրություն: Weightյուղերը իջնելիս քաշը մեծանում է: Եթե դուք հաշվարկեիք երկուական վերևում, այնուհետև հետ կանգնեիք ՝ օգտագործելով բիտ մուտքերը, ելքային լարումները նման կլինեին քայլային իմաստուն սինուս ալիքի: DAC- ի մուտքը միացված էր տախտակի վրա գտնվող PMOD- ներից մեկին `4-բիթանոց ազդանշանը փոխանցելու համար:
DAC- ն ի սկզբանե հավաքվել էր Էլեկտրատեխնիկայի դասի համար և նախագծվել և զոդվել էր մեր կողմից, այլ ոչ թե գնել խանութից: Վերևում պատկերված է տպագիր տպատախտակի ստեղծման դիզայնի ֆայլի պատկերը:
Քայլ 17. Արտաքին սարքեր. Բարձրախոս
Այս նախագծի համար դուք չեք ցանկանա գնել բարձրակարգ զույգ բարձրախոսներ: Ինչպես կարող եք ասել, ձայնը բավականին հիմնական է: Մենք գնացինք և գնեցինք 8 դոլար արժողությամբ համակարգչային բարձրախոսներ Best Buy- ից: Ականջակալների խցիկով ամեն ինչ լավ է աշխատում: Մոնոտոնը նույնպես լավ է աշխատում: Դուք նույնիսկ կարող եք ականջակալներ օգտագործել, բայց կարող եք դրանք փչել:
DAC- ի ելքը բարձրախոսներին միացնելու համար մենք օգտագործեցինք jumper մալուխներ, այնուհետև ելքային մալուխը պահեցինք ականջակալների վարդակի ծայրին, իսկ մալուխը `գետնին դեպի հիմքը: Մենք փորձեցինք օգտագործել էլեկտրական ժապավենը `մալուխները տեղում պահելու համար, բայց դա մեծ միջամտություն առաջացրեց: Այլ ոճի ժապավեն փորձելը կարող է լուծել այս հարցը:
Մեր բարձրախոսների համար մենք դրանք դարձրեցինք ամենաբարձր դիրքը և ստացանք արժանապատիվ բարձր ձայն:
Եվ դա վերջին քայլն է FPGA տախտակից թվային հաջորդականություն ստեղծելու համար: Գնացեք հաջորդ երկու բաժին ՝ մեր VHDL ծածկագիրը ներբեռնելու և հաջորդականությունը գործողության մեջ տեսնելու համար:
Քայլ 18: Տեսանյութի ցուցադրում
Այս տեսահոլովակը ցույց է տալիս աշխատանքային նախագծի վերջնական տարբերակը, որը ներառում է անջատիչներին 4 առանձին թեքահարթակների վերագրման գործընթացը և համապատասխան նշումները նվագող բարձրախոսները:
Քայլ 19: VHDL ծածկագիր
Ահա ամբողջ ծրագրի ծածկագիրը, ներառյալ սահմանափակող և SIM ֆայլերը, որոնք օգտագործվում են հաջորդականիչը կառուցելիս: Նկատի ունեցեք, որ չօգտագործված դիզայնի ֆայլերը դա ասում են ճարտարապետության մեջ:
Խորհուրդ ենք տալիս:
Պարզ հաջորդականիչ. 16 քայլ (նկարներով)
Պարզ հաջորդականիչ. Լավ երաժշտություն ստեղծելու բանալիներից մեկը անմիտ կրկնությունն է: Դա այն է, ինչ պարզ հաջորդականիչը հիանալի է: Այն նույնն անընդհատ անում է ութ նոտայի հաջորդականությամբ: Կարող եք հարմարեցնել գրառման հաճախականությունը, գրառման տևողությունը և
Գարեջրի հաջորդականիչ `7 քայլ
Beer Sequencer: Cos'èl Beer Sequencer è un sequencer a sedici step attivabili tramite dei pesi: I pesi possono essere disposti negli appositi alloggiamenti che contengono gli FSR (ուժի զգայունության դիմադրություն) օգտագործում է ըստ լազերային և տարբեր փոփոխությունների: Լա վարիազ
Atari Punk Console With Baby 8 քայլ հաջորդականիչ. 7 քայլ (նկարներով)
Atari Punk Console With Baby 8 Step Sequencer: Այս միջանկյալ կառուցվածքը հանդիսանում է Atari Punk Console- ը և Baby 8 Step Sequencer- ը `բոլորը մեկում: Դուք կարող եք տրորել Bantam Tools Desktop PCB ֆրեզերային մեքենայի վրա: Այն բաղկացած է երկու տպատախտակից ՝ մեկը օգտագործողի միջերեսի (UI) տախտակ է, իսկ մյուսը ՝ կոմունալ ծառայությունների
Ինչպես քանդել թվային տրամաչափը և ինչպես է աշխատում թվային տրամաչափը ՝ 4 քայլ
Ինչպես քանդել թվային տրամաչափը և ինչպես է աշխատում թվային տրամաչափը. Շատերը գիտեն, թե ինչպես օգտագործել տրամաչափը չափման համար: Այս ձեռնարկը կսովորեցնի ձեզ, թե ինչպես քանդել թվային տրամաչափը և բացատրություն, թե ինչպես է աշխատում թվային տրամաչափը
(գրեթե) ունիվերսալ MIDI SysEx CC ծրագրավորող (և հաջորդականիչ ). 7 քայլ (նկարներով)
(գրեթե) Ունիվերսալ MIDI SysEx CC ծրագրավորող (և հաջորդականիչ …). գործընթաց, որը հանգեցրեց մերկ ոսկորների սինթեզի: Սա թույլ տվեց կրճատել ծախսերը արտադրողի կողմից, բայց վերջնական օգտագործման համար կարկատման գործընթացը հոգնեցրեց, եթե ոչ անհնարին