Բովանդակություն:

4 քայլ թվային հաջորդականիչ ՝ 19 քայլ (նկարներով)
4 քայլ թվային հաջորդականիչ ՝ 19 քայլ (նկարներով)

Video: 4 քայլ թվային հաջորդականիչ ՝ 19 քայլ (նկարներով)

Video: 4 քայլ թվային հաջորդականիչ ՝ 19 քայլ (նկարներով)
Video: IT հավելված՝ շախմատի դասերը հեշտ սերտելու համար 2024, Նոյեմբեր
Anonim
4 քայլ թվային հաջորդականություն
4 քայլ թվային հաջորդականություն
4 քայլ թվային հաջորդականություն
4 քայլ թվային հաջորդականություն

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 հատվածից

7 հատվածից ժամացույցի բաժանարար
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եծեր մեկ րոպեի ժամացույցի բաժանարարի համար

Beats Per Minute Clամացույցի բաժանարար
Beats Per Minute Clամացույցի բաժանարար

BPM ժամացույցի բաժանարարը գործում է նույն ձևով: Այս բաժանարարը արտադրում է ժամացույցի հաճախականությունը, որն առաջ է մղում չորս աստիճանների միջև անցումը խաղային վիճակում հնչերանգներ թողարկելիս: Մենք որոշեցինք անցում կատարել 100 BPM արագությամբ: 100 BPM- ում յուրաքանչյուր նոտա կհնչի վայրկյանի 3/5 -ով: Ստացված ազդանշանը կունենա 1,67 Հց հաճախականություն:

Այս հաճախականության ազդանշան տալու համար մենք կրկին օգտագործեցինք հաշվիչ համակարգ, բայց այս անգամ հաշվարկը 60 միլիոն էր: Ամեն անգամ, երբ հաշվիչը հարվածում էր 60 միլիոնի, ելքային ազդանշանը փոխվում էր բարձր կամ ցածր:

Մուտքերը

Clk (հայրենի ժամացույցի հաճախականությունը)

Արդյունքները

Clk_BPM (դեպի output_FSM)

Բաղադրիչներ

  • D գրանցամատյան
  • ՇԱՏ
  • Inverter
  • Adder

Քայլ 6: itամացույցի բաժանարար սկիպիդարներ

Pitches ockամացույցի բաժանարար
Pitches ockամացույցի բաժանարար

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- ն կատարում է այլ գործառույթ, քան մյուսը, բայց այս մեկի հիմքն ըստ էության նույնն է:

Ելքային 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

Ելք FSM
Ելք 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 հատվածի ցուցադրում

7 հատվածի ցուցադրում
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

Թվայինից անալոգային փոխարկիչը (DAC) վերցնում է դիսկրետ ազդանշան և փոխակերպում այն շարունակական ազդանշանի: Մեր DAC- ն ունի չորս բիթ և պատրաստված է ամփոփիչ ուժեղացուցիչից: Մատակարարման և հետադարձ կապի մեջ դիմադրողների հարաբերակցությունը օգտագործելով, մենք կարողացանք ստեղծել համակարգ, որը դուրս է գալիս 16 տարբեր մակարդակներում ՝ ստեղծելով յուրաքանչյուր ճյուղի «ամփոփում»: Bit0- ը `վերին ճյուղը, կրում է նվազագույն քաշը և նպաստում է ամենափոքր ներուժին, երբ բարձր է` այդ ճյուղերի պատճառով ավելի բարձր դիմադրություն: Weightյուղերը իջնելիս քաշը մեծանում է: Եթե դուք հաշվարկեիք երկուական վերևում, այնուհետև հետ կանգնեիք ՝ օգտագործելով բիտ մուտքերը, ելքային լարումները նման կլինեին քայլային իմաստուն սինուս ալիքի: DAC- ի մուտքը միացված էր տախտակի վրա գտնվող PMOD- ներից մեկին `4-բիթանոց ազդանշանը փոխանցելու համար:

DAC- ն ի սկզբանե հավաքվել էր Էլեկտրատեխնիկայի դասի համար և նախագծվել և զոդվել էր մեր կողմից, այլ ոչ թե գնել խանութից: Վերևում պատկերված է տպագիր տպատախտակի ստեղծման դիզայնի ֆայլի պատկերը:

Քայլ 17. Արտաքին սարքեր. Բարձրախոս

Արտաքին սարքեր `բարձրախոս
Արտաքին սարքեր `բարձրախոս

Այս նախագծի համար դուք չեք ցանկանա գնել բարձրակարգ զույգ բարձրախոսներ: Ինչպես կարող եք ասել, ձայնը բավականին հիմնական է: Մենք գնացինք և գնեցինք 8 դոլար արժողությամբ համակարգչային բարձրախոսներ Best Buy- ից: Ականջակալների խցիկով ամեն ինչ լավ է աշխատում: Մոնոտոնը նույնպես լավ է աշխատում: Դուք նույնիսկ կարող եք ականջակալներ օգտագործել, բայց կարող եք դրանք փչել:

DAC- ի ելքը բարձրախոսներին միացնելու համար մենք օգտագործեցինք jumper մալուխներ, այնուհետև ելքային մալուխը պահեցինք ականջակալների վարդակի ծայրին, իսկ մալուխը `գետնին դեպի հիմքը: Մենք փորձեցինք օգտագործել էլեկտրական ժապավենը `մալուխները տեղում պահելու համար, բայց դա մեծ միջամտություն առաջացրեց: Այլ ոճի ժապավեն փորձելը կարող է լուծել այս հարցը:

Մեր բարձրախոսների համար մենք դրանք դարձրեցինք ամենաբարձր դիրքը և ստացանք արժանապատիվ բարձր ձայն:

Եվ դա վերջին քայլն է FPGA տախտակից թվային հաջորդականություն ստեղծելու համար: Գնացեք հաջորդ երկու բաժին ՝ մեր VHDL ծածկագիրը ներբեռնելու և հաջորդականությունը գործողության մեջ տեսնելու համար:

Քայլ 18: Տեսանյութի ցուցադրում

Այս տեսահոլովակը ցույց է տալիս աշխատանքային նախագծի վերջնական տարբերակը, որը ներառում է անջատիչներին 4 առանձին թեքահարթակների վերագրման գործընթացը և համապատասխան նշումները նվագող բարձրախոսները:

Քայլ 19: VHDL ծածկագիր

Ահա ամբողջ ծրագրի ծածկագիրը, ներառյալ սահմանափակող և SIM ֆայլերը, որոնք օգտագործվում են հաջորդականիչը կառուցելիս: Նկատի ունեցեք, որ չօգտագործված դիզայնի ֆայլերը դա ասում են ճարտարապետության մեջ:

Խորհուրդ ենք տալիս: