Агуулгын хүснэгт:

4 алхам тоон дараалал: 19 алхам (зурагтай)
4 алхам тоон дараалал: 19 алхам (зурагтай)

Видео: 4 алхам тоон дараалал: 19 алхам (зурагтай)

Видео: 4 алхам тоон дараалал: 19 алхам (зурагтай)
Видео: MobiCom - Шинэ хэрэглэгч болоод 20 жилийн бэлгээ аваарай... 2024, Арваннэгдүгээр
Anonim
4 алхам тоон дараалал
4 алхам тоон дараалал
4 алхам тоон дараалал
4 алхам тоон дараалал

CPE 133, Cal Poly San Luis Obispo

Төслийн бүтээгчид: Жейсон Жонстон, Бьорн Нелсон

Өнөөгийн хөгжмийн салбарт хамгийн түгээмэл хэрэглэгддэг "хэрэгсэл" бол дижитал синтезатор юм. Хип хопоос эхлээд поп хүртэл улс орны хөгжмийн бүх төрөл студи дэх дижитал синтезаторыг ашиглан хөгжмөө амьдруулахын тулд шаардлагатай цохилт, дууг бий болгодог. Энэхүү гарын авлагад бид Basys 3 FPGA самбар бүхий маш энгийн синтезатор үүсгэх болно.

Синтезатор нь сонгосон дөрвөн улирлын тэмдэглэлийг минутанд тогтмол тооны цохилтоор тоглуулах боломжтой болно. Хэрэглэгчид улирлын тэмдэглэл бүрийг хөгжмийн талбар руу шилжүүлэхийн тулд унтраалгыг ашиглана. Энэ төслийн хувьд бид 4 битийн дижиталаас аналог хөрвүүлэгч (DAC) ашиглан самбараас гаралтыг авч, аналог дохио болгон хувиргаж байна. Дараа нь DAC -ийн гаралтыг стандарт компьютерийн чанга яригч руу өгч, бидний хөгжмийг бий болгоно. Арван зургаан салангид давирхай хийх боломжтой. Бид синтезатороо С -ийн дунд (261.6 Гц) ба В4 (493.9 Гц) хоорондох 12 нотын нэг октаваар хязгаарлах болно. Хэрэглэгч хэд хэдэн тэмдэглэлийг нэгэн зэрэг өгөх, мөн түлхүүрийг дээш нь шилжүүлээгүй байхад даалгаврыг дарж амрах боломжтой болно. Тэмдэглэл бүрийг сонгож, тоглуулж байх үед үсэгний тэмдэглэлийг 7 сегментийн дэлгэц дээр харуулна. Мөн бид самбар дээрх гурван товчлуурыг ашиглах болно: нэгийг нь хөгжим тоглуулах, түр зогсоох, нэгийг нь синтезаторыг дахин тохируулах, "сонголт" горимд оруулах, гурав дахь товчлуурыг сонгох горимд байхдаа тэмдэглэл бүрт давтамж өгөх.

Хэрэглэгч өөрийн сонгосон тэмдэглэлдээ сэтгэл хангалуун байж, тоглуулах товчийг дарсны дараа синтезатор нь хэрэглэгч түр зогсоох эсвэл сонгох товчлуурыг дарах хүртэл тэмдэглэл бүрийг дараалан тоглуулах болно.

Энд шаардлагатай тоног төхөөрөмжийн жагсаалт байна.

  • Vivado (эсвэл VHDL -ийн бусад ажлын талбар)
  • Basys 3 эсвэл үүнтэй төстэй FPGA самбар
  • Дижитал ба аналог хөрвүүлэгч (мин. 4 бит)
  • Чихэвчний үүртэй чанга яригч
  • Утасны утас

Алхам 1: Дижитал дарааллын хэрэглэгчийн ажиллагаа

Дижитал дарааллын хэрэглэгчийн үйл ажиллагаа
Дижитал дарааллын хэрэглэгчийн үйл ажиллагаа

Дараахь алхамууд нь тоон дараалал үүсгэгчийг ажиллуулах явдал юм. Дижитал дараалал нь 261.6 Гц -ээс 493.9 Гц хооронд хэлбэлздэг 12 ялгаатай давтамжийг (C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B) тоглуулахыг дэмждэг.

1. Самбарыг сонгох горимд оруулахын тулд зүүн товчийг дарна уу. Энэ горимд байх үед хамгийн зүүн талын 4 унтраалга (13 -аас 16 хүртэлх унтраалга) тус бүрийг тодорхой давтамжийн утгыг хадгалахад ашиглана.

2. Сонголт хийхийн тулд зүүн талын унтраалгуудын нэгийг эргүүлээд дараа нь баруун талын 4 унтраалга (1 -ээс 4 хүртэлх унтраалга) ашиглан хүссэн давирхайг сонгоно уу. Баруун унтраалгын тодорхой хослолтой холбоотой давирхайг долоон сегментийн дэлгэц дээр харуулах бөгөөд баруун унтраалгыг шинэ хослол руу шилжүүлэх бүрт дэлгэц нь холбогдох шинэ давирхай болж шинэчлэгдэх болно. Зүүн унтраалгуудын аль нэгэнд давирхай өгөхгүй байх эсвэл дэлгэц дээр 0 гэж тэмдэглэсэн давирхайг тэмдэглэлд өгөх замаар амралтыг өгч болно. Хүссэн давирхайг олж, дэлгэц дээр харуулсны дараа доод товчлуурыг дарж тухайн тэмдэглэлийг тэмдэглэлд онооно.

3. Үлдсэн гурван тэмдэглэлийн хувьд 2 -р алхамыг давтаж, үлдсэн зүүн унтраалга тус бүрийг тус тусад нь эргүүлж, тохирох давирхайг зөв унтраалгаар сонгож, доод товчлуурыг дарж тэмдэглэлд онооно. Зүүн унтраалгын нэгээс дээш түлхүүрийг нэгэн зэрэг дээш нь шилжүүлснээр олон тэмдэглэлийг ижил давтамжтайгаар оноож болно.

4. Одоо бүх тэмдэглэлийн дэвтэр хуваарилагдсан тул дижитал дараалал тоглоход бэлэн боллоо. Чанга яригч дээрх тэмдэглэлийг тоглуулахын тулд тоглуулах/түр зогсоох товчлуурыг дарахад л хөгжим тоглож эхэлдэг. Тоглуулах дарааллын дараалал нь зүүнээс баруун тийш зүүн шилжүүлэгчтэй холбоотой давирхайг тусгадаг. Тэмдэглэлийг 1, 2, 3, 4, 1, 2 гэсэн дарааллаар минутанд тогтоосон тооны цохилтоор тоглох болно. Дэлгэц нь чанга яригч хөгжим тоглож байх үед одоо тоглож буй тэмдэглэлийг харуулна. Хөгжим тоглуулахыг түр зогсоохын тулд баруун товчлуурыг дарахад л хөгжим зогсох бөгөөд дэлгэц дээр түр зогсоох тэмдэг гарч ирнэ. Баруун товчлуурыг дахин дарснаар дахин тоглуулах болно.

Алхам 2: Техникийн дэлгэрэнгүй мэдээлэл

Техникийн дэлгэрэнгүй мэдээлэл
Техникийн дэлгэрэнгүй мэдээлэл

Манай синтезатор нь олон төрлийн дижитал бүрэлдэхүүн хэсгүүдийг ашигладаг. Хязгаарлагдмал төлөвийн машин, регистр, мультиплексор, цаг хуваагч гэх мэтийг багтаасан болно. Манай синтезаторыг бий болгохын тулд бид 10 өвөрмөц модуль файлыг ашигласан. Модуль бүрийг бүрэлдэхүүн хэсэг болгохын оронд модульчлагдсан файлуудыг функцээр нь задалсан. Ихэнх модулиуд нь нэгээс олон бүрэлдэхүүн хэсгүүдтэй байдаг. Дээрх зураг дээр бидний дээд дизайнтай холбоотой блок бүрийг харуулсныг анхаарна уу.

Бид модуль тус бүрийг оролт, гаралтыг тайлбарлах, бүрэлдэхүүн хэсгүүдийг задлах, ерөнхий дизайн дахь зорилгоо тайлбарлах замаар хэлэлцэх болно. Төсөлд ашигласан VHDL кодын файл бүрийг агуулсан зааврын доод хэсэгт ZIP файлыг оруулсан болно.

Оролт

  • Clk (эх цагийн дохио)
  • PP (тоглуулах/түр зогсоох)
  • Sel (синтезаторыг сонгох горимд оруулах)
  • Даалгавар өгөх (алхам руу алхам хийх)
  • Алхам (албан тушаалын тэмдэглэл)
  • Freq (хүссэн давирхайг үүсгэдэг унтраалга)

Гаралт

  • Анод (7 сегментийн анод)
  • Катод (7 сегментийн катод)
  • DAC (DAC-ийг жолоодох 4 бит)

Алхам 3: Техникийн дэлгэрэнгүй мэдээлэл

Техникийн дэлгэрэнгүй мэдээлэл
Техникийн дэлгэрэнгүй мэдээлэл

Алхам 4: 7 сегмент бүхий цаг хуваагч

7 сегментийн цаг хуваагч
7 сегментийн цаг хуваагч

Манай синтезатор нь гурван цаг хуваагчийг ашигладаг бөгөөд эдгээр нь манай төсөлд өөр зориулалттай дохио өгдөг. Цаг хуваагч нь эх цагийн дохиог авч, анхны цагийн дохионоос бага давтамжтай өөрчлөгдсөн дохио гаргадаг. Basys 3 -ийн төрөлхийн цаг нь 100 МГц юм. Энэ бол манай цаг хуваах төхөөрөмжүүдийн ашигладаг давтамж юм. Хэрэв та өөр цагийн давтамжтай өөр FPGA самбар ашиглаж байгаа бол кодыг өөрчлөх шаардлагатай болж магадгүй юм.

7 сегмент бүхий цаг хуваагч нь seg_display файлыг жолооддог дохио үүсгэдэг. Бид энэ файл хэрхэн ажилладаг талаар илүү дэлгэрэнгүй тайлбарлах болно. Үндсэндээ энэ цаг хуваагч нь 240 Гц давтамжтай дохиог гаргадаг бөгөөд энэ нь дэлгэц дээрх анод ба катодын хооронд шилжихэд ашиглагддаг. Хүний нүд гэрэл байхгүйг хүлээн зөвшөөрөхгүй давтамж нь 60 Гц учраас дохио нь 240 Гц юм. Бид хоёр оронтой тоог ашиглаж байгаа тул энэ давтамжийг хоёр дахин нэмэгдүүлснээр цифр бүр 60 Гц -т хэлбэлзэх болно. Дараа нь бид үүнийг хоёр дахин нэмэгдүүлж, 240 Гц авах болно, учир нь систем нь дохио буурах үед биш харин өндөр байх үед л өөрчлөгддөг.

Үүнд хүрэхийн тулд хуваагч нь 100 МГц -ийн анхны дохиог авч, өсөн нэмэгдэж буй ирмэг бүрт тоолно. Тоолуур 416667 хүрэх үед гаралт нь багаас өндөр рүү эсвэл эсрэгээрээ явна.

Оролт

Clk (эх цагийн дохио)

Гаралт

Clk_7seg (seg_display рүү)

Бүрэлдэхүүн хэсгүүд

  • D бүртгүүлэх
  • MUX
  • Inverter
  • Аддер

Алхам 5: Минут тутамд цохих цаг хуваагч

Минут тутамд цохих цаг хуваагч
Минут тутамд цохих цаг хуваагч

BPM цаг хуваагч нь ижил төстэй байдлаар ажилладаг. Энэхүү хуваагч нь цагийн давтамжийг гаргадаг бөгөөд энэ нь тоглуулах төлөвт аялгуу гаргахад дөрвөн алхамыг хооронд нь сольж өгдөг. Бид 100 BPM дээр тэмдэглэл хооронд шилжихээр шийдсэн. 100 BPM үед нот бүрийг 3/5 секундын турш тоглуулах болно. Үүссэн дохио нь 1.67 Гц давтамжтай байх болно.

Ийм давтамжтай дохио гаргахын тулд бид дахин тоолох системийг ашигласан боловч энэ удаад тооллого 60 сая болсон байна. Тоолуур 60 саяд хүрэх тоолонд гаралтын дохио өндөр эсвэл нам сэлгэнэ.

Оролт

Clk (эх нутгийн цагийн давтамж)

Гаралт

Clk_BPM (output_FSM рүү)

Бүрэлдэхүүн хэсгүүд

  • D бүртгүүлэх
  • MUX
  • Inverter
  • Аддер

Алхам 6: Цаг хуваагчийг асаах

Цагийн хуваарилагч
Цагийн хуваарилагч

Pitch Clock Divider бол манай цаг хуваагчдаас хамгийн том нь юм. Энэхүү хуваагч нь бидний синтезатор тоглож болох 12 өөр тэмдэглэлд харгалзах 12 өөр дохиог гаргадаг. Хөгжмийн онолын анхан шатны мэдлэгийг ашиглан бид бит эсвэл автобус нь хөгжмийн нотын давтамжтай тохирох хурдтай хэлбэлздэг болохыг олж мэдсэн. Бидний ашигладаг давтамжийг харахын тулд эндээс үзнэ үү. Бид дөрөв дэх октав талбайг ашигласан.

Үүнтэй ижил тоолох системийг энд ашигладаг. Бидний тоолсон тодорхой утгуудын талаар Clk_div_pitches гэсэн файлыг үзнэ үү.

Оролт

Clk (эх нутгийн цагийн давтамж)

Гаралт

C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (output_select руу)

Бүрэлдэхүүн хэсгүүд

  • D бүртгүүлэх
  • MUX
  • Inverter
  • Аддер

Алхам 7: Тоглуулах/Түр зогсоох/Төрийн машиныг сонгох

Тоглуулах/Түр зогсоох/Төрийн машиныг сонгох
Тоглуулах/Түр зогсоох/Төрийн машиныг сонгох

Манай төсөлд хоёр хязгаарлагдмал төлөвт машин (FSM) байдаг. FSM бол хязгаарлагдмал мужуудаас зөвхөн нэг мужид оршин тогтнох боломжтой логик төхөөрөмж юм. FSM ашиглан дижитал хэлхээ нь оролтын хослол дээр үндэслэн шинэ төлөвт шилжих боломжтой. Оролтын логикийг ашиглан цагны ирмэг дээшлэх үед FSM -ийн төлөв өөрчлөгдөх болно. Төлөв ба хэлхээний оролтоос та зөвхөн FSM нь тодорхой төлөвт байгаа тохиолдолд л гарах гаралтыг өгдөг гаралтын логик үүсгэж болно.

PPS улсын машин бол манай хэлхээний анхны FSM юм. Энэхүү FSM -д гурван муж байдаг; Тоглуулах, түр зогсоох, сонгох горим. Өөр өөр мужуудаар дамжихын тулд бид PP ба Selection товчлууруудыг ашигласан. Мужийн хоорондох шилжилт хэрхэн явагдаж байгааг харахын тулд дээрх төлөв байдлын диаграмыг үзнэ үү. Бид энэхүү FSM шилжилтийг 100 МГц -ийн анхны цагны өсч буй ирмэг дээр хийсэн бөгөөд ингэснээр товчлууруудын нэгийг дарахад маш богино хугацаанд ч гэсэн машин шилжих боломжгүй болно. Одоогийн төлөв (P_state) нь энэ модулийн цорын ганц гаралт юм.

Оролт

  • Clk (эх нутгийн цагийн давтамж)
  • Sel (зүүн товчлуур)
  • PP (баруун товчлуур)

Гаралт

P_state (одоогийн төлөв, output_FSM, note_assign, seg_dsiplay, final_select)

Бүрэлдэхүүн хэсгүүд

  • MUX
  • D бүртгүүлэх

Алхам 8: Тоглуулах/Түр зогсоох/Төрийн машиныг сонгох

Тоглуулах/Түр зогсоох/Төрийн машиныг сонгох
Тоглуулах/Түр зогсоох/Төрийн машиныг сонгох

Алхам 9: FSM гаралт

FSM гаралт
FSM гаралт

Энэ бол өмнөх хэсэгт дурдсан хоёр дахь FSM юм. Энэхүү FSM нь нөгөөгөөсөө өөр үүрэг гүйцэтгэдэг боловч үүний үндэс нь үндсэндээ ижил байдаг.

FSM гаралт нь эхний FSM -ийн одоогийн төлөв нь "01" (тоглуулах төлөв) байвал л ажилладаг. Үндсэндээ энэ бол модулийг идэвхжүүлэх явдал юм. Хэрэв муж "01" байвал FSM нь BPM цагийн дохионы өсөн нэмэгдэж буй ирмэг дээрх мужуудын хооронд шилжих болно. Бид үүнийг хийдэг, учир нь output_FSM нь сонгосон давталтын аль хоёртын дугаарыг output_select болон seg_display модулиуд руу илгээдэгийг хянадаг. FSM нь тэмдэглэл хуваарилах модулиас ирдэг 16 битийн оролттой бөгөөд үүнийг дараа нь авч үзэх болно. Output_FSM -ийн "00" төлөвт модуль нь оноосон анхны тэмдэглэлийн хувьд "xxxx" -г гаргана. Дараа нь "01" дээр энэ нь эхний тэмдэглэл рүү буцахаасаа өмнө хоёр дахь тэмдэглэлд "yyyy" гэх мэтийг бичих болно. Дээрх төлөв байдлын диаграмыг үзнэ үү.

Мужийн хооронд шилжихийг хянах оролтын логик байхгүй тул энэхүү FSM нь эхнийхээс ялгаатай. Үүний оронд FSM нь анхны FSM -ийн төлөв "01" байх үед л ажиллах болно, дараа нь энэхүү FSM нь зөвхөн цагийн дохионы өсөн нэмэгдэж буй ирмэг дээр муж хооронд шилжинэ. Өөр нэг ялгаа нь энэ модуль нь гаралтын логиктой бөгөөд энэ нь одоогийн төлөвийг гаргадаггүй бөгөөд тухайн төлөвт байгаа давтамжийн хоёртын дугаарыг гаргадаг.

Оролт

  • Clk_BPM (цаг хуваагчаас BPM цагийн дохио)
  • FSM1_state (PPS FSM -ээс PS)
  • Pitch_in (note_assign -ийн давирхай)

Гаралт

Pitch_out (гаралтын_сонголт ба сегментийг харуулахын тулд нэг удаад нэг давирхай)

Бүрэлдэхүүн хэсгүүд

  • MUX
  • D бүртгүүлэх

Алхам 10: FSM гаралт

FSM гаралт
FSM гаралт

Алхам 11: Тэмдэглэл оноох

Тэмдэглэл оноох
Тэмдэглэл оноох

Тэмдэглэл хуваарилах модуль нь байрлалын тэмдэглэл эсвэл алхамд давирхай өгөх үүрэгтэй. Энэ модуль нь үнэндээ маш энгийн. Энэ нь эхлээд хэлхээ нь "сонгох" төлөвт байгаа эсэх, алхам шилжүүлэгч (зүүн талд) өндөр байгаа эсэхийг шалгадаг. Хэрэв энэ үнэн бөгөөд хуваарилах товчлуурыг дарвал модулийн гаралт нь давтамжийн унтраалгаар дүрслэгдсэн хоёртын тоотой тэнцүү байх болно (баруун талд).

Эхэндээ бид давтамжтай дохионы аль нэгийг гаралтад хадгалах модулийг бүтээхийг оролдсон боловч оролтын цагийн дохиог дагаж гаралтын өөрчлөлтөд асуудал гарсан. Энэ бол эцсийн загварт нэгээс олон удаа ашигласан цорын ганц модуль юм. Алхам бүр нь үүнтэй холбоотой note_assign модультай бөгөөд үүнээс үүдэн модулийн жишээ бүр Step автобусны нэг битийг авдаг.

Оролт

  • P_state (PPS FSM -ийн одоогийн төлөв)
  • Sel (зүүн товчлуур)
  • Шилжүүлэгч (нэг алхам шилжих)
  • Давтамж (баруун талын давирхайг солих)
  • Оноох (доод товчлуур, тэмдэглэл оноох)

Гаралт

Давирхай (хоёртын дугаар, output_FSM рүү)

Бүрэлдэхүүн хэсгүүд

  • MUX
  • D дахин бүртгүүлэх

Алхам 12: Гаралтын сонголт

Гаралтын сонголт
Гаралтын сонголт

Гаралтын сонголт нь давталтын хоёртын дугаарыг авч, тухайн цагны дохиогоор холбох үүрэгтэй. Хэмжээний хувьд энэ нь бас харьцангуй энгийн модуль юм. Output_select нь үндсэндээ хоёртын код тайлагч бөгөөд давталтын хоёртын дугаарыг тодорхой цагийн дохиогоор тайлдаг. Үнэн хэрэгтээ гаралтыг цагийн давтамжаар хуваарилах нь note_assign модулийг бодвол илүү сайн ажилласан, учир нь энэ модулийг хийх ёстой зүйл бол хяналтын оролтыг илэрхийлсэн хоёртын дугаар бүхий цагийн дохиог MUX хийх явдал байв.

Хачирхалтай чиглүүлэлт хийсэнд бид уучлалт гуйж байна, Вивадо нь clk_div_pitches файлын дохионы үсгийг цагаан толгойн дарааллаар зохион байгуулсан боловч энэ файлын хувьд хоёртын дугаарыг өсгөж цэгүүдийг өөр дарааллаар байрлуулсан байна. Хэрэв output_FSM -ээс авсан хоёртын дугаар нь "0000" эсвэл "1100" -аас их байвал MUX нь хавтгай '0' дохиогоор дамждаг болохыг анхаарна уу.

Оролт

  • Давирхай (output_FSM -ээс);
  • C, Db, D, Eb, E, F, Gb, G, Ab, A, Bb, B (цагийн дохио)

Гаралт

Ая

Бүрэлдэхүүн хэсгүүд

MUX

Алхам 13: Дөрвөлжин долгионы генерал

Дөрвөлжин долгионы генерал
Дөрвөлжин долгионы генерал

Square_wave модуль нь самбараас DAC руу гаргадаг дөрвөлжин долгионы генератор юм. Өмнөх файлын дуут дохиог ашиглан энэ square_wave нь Tone -ийн өсөн нэмэгдэж буй ирмэг дээрх "0000" ба "1111" хоорондох 4 битийн тоог урвуулдаг. Ая нь тодорхой давтамжтай байдаг тул square_wave нь output_FSM өөр төлөвт шилжих үед өөр давтамжтай долгион үүсгэдэг. Энэ модулийн 4 битийн гаралт нь fin_sel модульд ордог бөгөөд логик нь энэ автобусыг PPS FSM-ийн төлөв байдалд үндэслэн гаргах эсэхийг тодорхойлдог.

Энэхүү дөрвөлжин долгионы генераторын өөр нэг хувилбар бол синус долгион үүсгэх явдал юм. Хэдийгээр энэ нь илүү сайн эцсийн өнгө гаргах магадлалтай боловч үүнийг хэрэгжүүлэх нь илүү хэцүү тул бид зүгээр л дөрвөлжин долгион үүсгэхийг сонгосон.

Оролт

Ая (output_select -ээс хэлбэлздэг бит)

Гаралт

DAC_input (ижил давтамжтайгаар өөрчлөгддөг 4 битийн хэлбэлзэлтэй автобус)

Бүрэлдэхүүн хэсгүүд

  • Inverter
  • D бүртгүүлэх

Алхам 14: 7 сегмент бүхий дэлгэц

7 сегментийн дэлгэц
7 сегментийн дэлгэц

Seg_display модуль нь манай үндсэн самбар дээрх 7 сегментийн дэлгэцийг хянадаг. Модуль дотор хоёр процесс явагдана. Эхний процесс нь "сонгох" төлөвт байх эсвэл "тоглох" горимд байх үед давтамжийг тайлдаг. "Түр зогсоох" горимд модуль нь код тайлж түр зогсоох тэмдгийг харуулдаг. VHDL кодыг харахад хоёртын декодер нь оролтыг үнэндээ катод1 ба катод2 гэсэн хоёр өөр дохио болгон задалж байгааг харж болно. Катод 1 нь харуулах давтамжтай тохирох үсгийг илэрхийлдэг бөгөөд хэрэв байгаа бол катод2 нь хавтгай тэмдэг (b) -ийг илэрхийлнэ. Үүний шалтгаан нь seg_display модулийн хийсэн хоёр дахь процесстой холбоотой юм.

Basys3 самбар дээр сегментийн дэлгэц нь нийтлэг катодтой байдаг. Анодууд аль цифрийг асаахыг хянадаг бол катодууд аль сегмент асаалттай байгааг хянадаг. Дэлгэц нь нийтлэг катодтой байдаг тул та нэг удаад зөвхөн нэг сегментийг харуулах боломжтой гэсэн үг юм. Энэ нь төслийн хувьд асуудал үүсгэж байна, учир нь бид эхний цифр дээр үсэг, шаардлагатай бол хавтгай тэмдгийг нэгэн зэрэг харуулахыг хүсч байна. Одоо 7seg цагийн дохиог санаж байна уу? Энэ асуудлыг тойрч гарахын тулд бид 7seg цагийн дохиогоор анод, катодуудыг нааш цааш нь сольдог. Цагны дохио нь 240 Гц бөгөөд бид хоёр оронтой тоог ашиглаж байгаа тул цифр бүр 60 Гц -т хэлбэлздэг. Хүний нүдэнд цифрүүд огт хэлбэлздэггүй юм шиг санагдах болно.

Басис3 самбарын дэлгэц нь сөрөг логик ашигладаг болохыг анхаарна уу. Энэ нь хэрэв анод эсвэл катод '0' гэж тохируулагдсан бол тухайн оронтой тоо эсвэл сегмент асаалттай байх болно гэсэн үг юм.

Оролт

  • Давирхай (тэмдэглэлийн хоёртын дугаар, тоглох төлөвт ашиглагддаг)
  • Давтамж (давтамжийн унтраалга, сонголт хийх үед ашиглагддаг)
  • P_state (PPS FSM -ийн одоогийн төлөв)
  • Clk_240Hz (Clk_div_7seg -ээс өгсөн цагны дохио, 120 -ийг хоёр дахин нэмэгдүүлнэ, учир нь бид зөвхөн өсөн нэмэгдэж буй ирмэгийг ашиглаж байгаа)

Гаралт

  • Катод (дэлгэц дээрх сегментүүдийг хянадаг автобус, эцсийн гаралт)
  • Анод (дэлгэц дээрх цифрийг хянадаг автобус, эцсийн гаралт)

Бүрэлдэхүүн хэсгүүд

  • Түгжээ
  • MUX
  • D бүртгүүлэх

Алхам 15: Эцсийн сонголт

Эцсийн сонголт
Эцсийн сонголт

Эцсийн сонголт бол энэ төсөлд ашигласан хамгийн сүүлийн модуль юм. Өөр нэг энгийн модуль бол энэ модуль нь DAC рүү орох эцсийн гаралтыг хянадаг. "Сонголт" эсвэл "түр зогсоох" төлөвт байх үед модуль нь статик "0000" гаргадаг бөгөөд ингэснээр чанга яригчаас хөгжим тоглуулахгүй болно. "Тоглох" төлөвт модуль нь square_wave-ээр тодорхойлогдсон 4 битийн хэлбэлзэлтэй гаралтыг гаргана.

Оролт

  • P_state (PPS FSM -ийн одоогийн төлөв)
  • DAC_input (square_wave-ээс 4 битийн хэлбэлзэлтэй)

Гаралт

DAC (тоглолтын төлөвт DAC_input -тэй тэнцүү, эцсийн гаралт)

Бүрэлдэхүүн хэсгүүд

MUX

Алхам 16: Гадаад төхөөрөмжүүд: DAC

Гадаад төхөөрөмжүүд: DAC
Гадаад төхөөрөмжүүд: DAC

Дижитал ба аналог хөрвүүлэгч (DAC) нь салангид дохиог хүлээн авч тасралтгүй дохио болгон хувиргадаг. Манай DAC нь дөрвөн биттэй бөгөөд нийлбэр өсгөгчөөр хийгдсэн. Нийлүүлэлт ба эргэлтийн хэлхээнд резисторын харьцааг ашигласнаар бид салбар бүрийн "нийлбэр" -ээр бий болох 16 өөр түвшинд гаргадаг системийг бий болгож чадсан. Дээд салбар болох Bit0 нь хамгийн бага жинтэй бөгөөд өндөр эсэргүүцэлтэй байдаг тул хамгийн бага потенциалтай байдаг. Мөчрүүд уруудах тусам жин нэмэгддэг. Хэрэв та битийн оролтыг ашиглан хоёртын тоог тоолж, дараа нь буцааж тоолох юм бол гаралтын хүчдэл нь синус долгион шиг харагдах болно. DAC-ийн оролт нь 4 битийн дохиог дамжуулахын тулд самбар дээрх PMOD-ийн аль нэгтэй холбогдсон байв.

DAC -ийг анх Цахилгааны инженерийн ангид угсарч, дэлгүүрээс худалдаж аваагүй, бидний гараар зохион бүтээж гагнасан. Дээрх нь хэвлэмэл хэлхээний самбар үүсгэх дизайны файлын зураг юм.

Алхам 17: Гадаад төхөөрөмжүүд: Чанга яригч

Гадаад төхөөрөмжүүд: Чанга яригч
Гадаад төхөөрөмжүүд: Чанга яригч

Энэ төслийн хувьд та супер сайхан хос чанга яригч худалдаж авахыг хүсэхгүй байна. Таны хэлж байгаагаар дуу чимээ нь маш энгийн юм. Бид очиж Best Buy -аас 8 долларын үнэтэй компьютер чанга яригч худалдаж авлаа. Чихэвчний үүртэй бүх зүйл сайн ажилладаг. Монотон нь бас сайн ажилладаг. Та чихэвч ашиглаж болно, гэхдээ та үлээж болно!

DAC -ийн гаралтыг чанга яригчтай холбохын тулд бид холбогч кабелийг ашиглаж, гаралтын кабелийг чихэвчний үүрний үзүүрт, газардуулгын кабелийг сууринд холбосон. Бид цахилгаан соронзон хальс ашиглан кабелийг бэхлэхийг оролдсон боловч маш их хөндлөнгөөс оролцов. Өөр хэв маягийн соронзон хальсыг туршиж үзэх нь энэ асуудлыг шийдэж чадна.

Илтгэгчдийн хувьд бид тэдгээрийг хамгийн өндөр түвшинд шилжүүлж, зохих чанга дуу чимээ гарав.

Энэ бол FPGA самбараас дижитал дараалал үүсгэх хамгийн сүүлийн алхам юм! Дараагийн хоёр хэсэгт очиж манай бүх VHDL кодыг татаж аваад дараалал үүсгэгчийг ажиллуулж байгааг үзээрэй.

Алхам 18: Видео демо

Энэ видео нь ажлын төслийн эцсийн хувилбарыг харуулсан бөгөөд үүнд унтраагуурыг 4 өөр талбайд хуваарилах үйл явц, чанга яригч нар тус тусын тэмдэглэлийг тоглуулж байна.

Алхам 19: VHDL код

Дараалал үүсгэгчийг бүтээх явцад ашигласан хязгаарлалт, сим файлуудыг багтаасан төслийн бүх кодыг энд харуулав. Ашиглагдаагүй дизайны файлууд архитектурт ингэж хэлдэг болохыг анхаарна уу.

Зөвлөмж болгож буй: