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

FPGA урвалын тоглоом: 10 алхам
FPGA урвалын тоглоом: 10 алхам

Видео: FPGA урвалын тоглоом: 10 алхам

Видео: FPGA урвалын тоглоом: 10 алхам
Видео: SCP-1730 Что случилось с сайта-13? 2024, Долдугаар сарын
Anonim
FPGA урвалын тоглоом
FPGA урвалын тоглоом

Зун Рутерфорд, Регита Соетандар нарын бичсэн

Алхам 1: Танилцуулга

CPE 133 -ийн эцсийн төсөл болохын тулд бид Basys3 самбар дээр VHDL дээр хариу үйлдэл хийх тоглоомыг зохион бүтээсэн. Энэ тоглоомыг тоглогч блокоо зөв цагт нь хаях ёстой "Stacker" аркад тоглоомтой харьцуулж болно. Basys3 самбар нь солигддог LED бүхий талхны самбартай холбогдсон байна. Эдгээр LED гэрэл нь түвшингээс хамааран тодорхой давтамжтайгаар солигдох болно. Энэ тоглоом нь цаг хуваагч, 4 оронтой 7 сегментийн дэлгэц, хязгаарлагдмал төлөвт машиныг ашигладаг. Дунд LED асах үед тоглогч зөв унтраалгыг идэвхжүүлбэл тоглогч дараагийн ээлжийн LED -ийн давтамжийг нэмэгдүүлэхийн тулд тоглоомын дараагийн шатанд шилжих болно. Энэ нь дараалсан түвшин бүрийг өмнөх түвшингээс илүү хэцүү болгодог. Тоглогч 7 -р түвшинг амжилттай даван гарахад сегментийн дэлгэц дээр мессеж гарч ирэх бөгөөд бүх LED нэгэн зэрэг асаж, унтрах болно.

Алхам 2: Материал

Материал
Материал
Материал
Материал
Материал
Материал

Танд хэрэгтэй материалууд нь:

  • Micro USB кабель бүхий Digilent Basys3 самбар
  • Талхны самбар
  • 5 LED
  • 5 резистор (бид 220 ом ашигласан)
  • 11 холбогч утас
  • Vivado -тай компьютер

Алхам 3: Дээд түвшний диаграммын хар хайрцагны дизайн

Дээд түвшний диаграм Хар хайрцагны дизайн
Дээд түвшний диаграм Хар хайрцагны дизайн
Дээд түвшний диаграм Хар хайрцагны дизайн
Дээд түвшний диаграм Хар хайрцагны дизайн

Таны харж байгаагаар манай дээд түвшний блок диаграм нь ClkDivide дэд модулиас шаардлагатай цагийг авахаас эхэлдэг. Эдгээр цагууд нь янз бүрийн процессын блокуудын оролт юм. Үндсэндээ, хэрэглэгч унтраалгыг зөв асаахад LED -ууд илүү хурдан солигдож эхлэх ёстой бөгөөд дэлгэц нэг түвшинд дээшлэх ёстой гэдгийг тоглоом хүлээн зөвшөөрөх ёстой. Блок диаграм нь жаахан галзуу мэт харагдаж магадгүй, гэхдээ энэ нь тодорхой процесст суурилсан олон дохио байдаг бөгөөд дараа нь энэ дохио нь өөр процессын блок дахь өөр нэг дохиог тодорхойлдогтой холбоотой юм.

Эцэст нь хэлэхэд тоглоомонд орох цорын ганц оролт бол 100 МГц давтамжтай ажилладаг Basys3 самбар дээрх оролтын цаг, Basys3 самбар дээрх долоон унтраалга, дахин тохируулах товч юм. Гаргасан зүйл бол долоон сегментийн дэлгэцийн анод, дэлгэцийн долоон сегмент, LED юм.

Алхам 4: CLKDivide

CLK Хуваах
CLK Хуваах
CLK Хуваах
CLK Хуваах
CLK Хуваах
CLK Хуваах

Энэхүү цаг хуваагч дэд модуль нь бидний үндсэн файлд оруулсан утгаас хамааран илүү удаан цагийг бий болгосон. Бид энэ дэд модулийг ашиглан Clk400, PushClk, newlck -ийг тодорхойлсон бөгөөд энэ дэд модуль нь оролт болгон цаг, 32 битийн хуваагчийг авдаг. Удаан болгосон цаг гарна. Хуваагч болон удаашруулсан цагийн процессын блок байдаг. Энэ процесст түр зуурын хувьсагч байдаг бөгөөд үүнийг бид тоолох гэж нэрлэдэг бөгөөд энэ нь оруулсан цагны өсөн нэмэгдэж буй ирмэгийг цохих бүрт нэг удаа тоологддог. Энэ нь хуваагчийн тоонд хүрмэгц удааширсан цаг шилжиж, тоолох нь тэг болно.

Алхам 5: Үйл явцын блокыг өөрчлөх

Процессийн блокыг өөрчлөх
Процессийн блокыг өөрчлөх

Shift процессын блок нь LED -ийн ээлж, хөдөлгөөнийг хянадаг. Мэдрэмжийн жагсаалтад newclk болон Stop дохионууд орно. Хэрэглэгч түвшинг давах үед зогсоох нь богино хугацааны саатал үүсгэдэг. Хэрэв Stop нь өндөр биш бол LED нь newclk -ийн хурд дээр үндэслэн ээлжлэн солигддог. Энэхүү ээлжит загварыг хянах ба тоолох гэсэн хоёр хувьсагчаар хянадаг. Count нь аль LED асаалттай байх ёстойг тодорхойлдог бол Track нь тоолох тоолуурыг дээш эсвэл доош тоолох эсэхийг тодорхойлдог. Төгсгөл гэсэн өөр нэг дохио байдаг бөгөөд энэ нь "111" түвшин байх үед л тоглогч тоглолтыг хожсоныг илтгэнэ. Төгсгөл нь LED -ийг тасралтгүй асааж, унтраахын тулд цагны ирмэг бүрт 0 -ээс 1 -ийн хооронд ээлжлэн солигддог. Энэ бол эцсийн дэлгэцийн харааны элемент юм.

Энэхүү ээлжийн үйл явц нь энэ төслийг эхлүүлэх төгс газар юм. Хэрэв та LED -ээ зөв, тогтмол ээлжлэн авч чаддаг бол эндээс түвшинг дээшлүүлэхдээ зан төлөвийг нэмэх хэрэгтэй болно!

Алхам 6: Хязгаарлагдмал төлөв байдлын машин

Хязгаарлагдмал төлөв байдлын машин
Хязгаарлагдмал төлөв байдлын машин

Оролтын унтраалга эсвэл дахин тохируулах товчлуур дээр дарахад зан төлөвийг тодорхойлохын тулд бид хязгаарлагдмал төлөв байдлын машиныг бүтээсэн. Муж бүр нь "түвшин" бөгөөд хэрэв унтраалга буруу цагт ассан эсвэл дахин тохируулах товчлуур дарагдсан бол түвшин "000" руу буцна. Үгүй бол унтраалга зөв асаалттай байвал түвшин "111" гэсэн эцсийн төлөвт хүрэх хүртэл түвшин дээшлэх бөгөөд төгсгөлийн дэлгэц гарч ирнэ. FSM нь sync_proc ба comb_proc гэсэн хоёр процессын блок дээр суурилдаг. Sync_proc нь бидний PushClk гэж нэрлэдэг цагийг ашигладаг. Энэ цаг нь дараагийн төлөв одоогийн төлөвт хэр хурдан орохыг хянадаг. Энэ цаг нэлээд хурдан байх ёстой; Бид хамгийн хурдан LED хурднаасаа хоёр дахин хурдан хурдыг сонгосон.

Бид энэ кодыг түвшний хувьд FSM ашиглан хэрэгжүүлсэн; Гэсэн хэдий ч энэхүү төслийн дараа бид FSM-ийг илүү үр ашигтай ашиглахын тулд тоолох төлөв, дахин тохируулах төлөв эсвэл оршин суух төлөв байдал байж болох юм. Хэрэв юу ч дарахгүй бол энэ нь үлдэх байдалд байна. Хэрэв дахин тохируулах товчлуур дарагдсан эсвэл тоглогч замбараагүй болсон бол энэ нь дахин тохируулах төлөвт байна. Хэрэв зөв дарагдсан бол тоолох төлөвт байна. Энэ тоглоомонд FSM ашиглах өөр олон арга бий!

Алхам 7: Дэлгэцийн процессийн блокыг түвшингээр хянах

Түвшинтэй дэлгэцийн процессийн блокыг хянах
Түвшинтэй дэлгэцийн процессийн блокыг хянах

Түвшин нь Дэлгэцийн процессийн блокыг хянадаг. Мэдрэмжийн жагсаалтын хувьсагчид Level, Reset, Clk400 байна. 7 сегментийн дэлгэц нь 1 -р түвшинг харуулахаас эхэлнэ. Хэрэглэгч ямар түвшинд байгааг харуулахын тулд хэрэглэгч түвшинг дамжуулах бүрт 7 хүртэл тоолно. Хэрэглэгч 7 -р түвшинг давсны дараа тоглогч тоглоомыг хожсон болохыг харуулахын тулд "COOL" гарч ирнэ. Энэхүү "COOL" дэлгэц нь Clk400 гэж нэрлэдэг 400 Гц давтамжтай ажилладаг. Дахин тохируулах товчийг дарвал дэлгэц "1" рүү буцна.

Алхам 8: LED хурдыг түвшингээр хянах

LED хурдыг түвшингээр хянах
LED хурдыг түвшингээр хянах

Эцэст нь Level нь LED -ийн хурдыг хянадаг. Түвшин бол мэдрэмжийн жагсаалтын цорын ганц дохио юм. D1 бол шинэ хуваарь авахын тулд Clock Divider процесс руу ордог дохио юм. Түвшин өөрчлөгдөх эсвэл төлөв өөрчлөгдөх бүрт процесс "блок" блок болдог. Энэ процесс нь D1 -ийн утгыг тодорхойлдог. Түвшин бүрийг хэр хурдан ажиллуулахыг хүсч байгаагаа үндэслэн D1 -ийн 8 тодорхойлсон утгыг сонгосон болно. Түвшин нэмэгдэх бүрт D1 нь жижиг болж, ингэснээр илүү хурдан ажиллах болно.

Алхам 9: Тоног төхөөрөмжийн угсралт

Тоног төхөөрөмжийн угсралт
Тоног төхөөрөмжийн угсралт

Бид талхны самбарыг Basys3 руу pmod холбогчдын нэгээр холбосон. PMod портуудын зургаа нь эрэгтэй, эрэгтэй холбогчийг залгахад ашиглагддаг бөгөөд нэг нь газардуулга, нөгөө таван нь 5 LED юм. Мөн бид LED тус бүрт резистор байрлуулсан. Эдгээр резисторууд нь 220Ω бөгөөд LED нь богино холболт үүсгэж, шатахаас сэргийлдэг. Хэдийгээр LED бүр тодорхой эсэргүүцэлтэй байдаг ч эсэргүүцэл нь эх үүсвэрээс хүчдэлийг саатуулахад хангалттай биш юм.

Алхам 10: Хөгжилтэй байгаарай

Энэ тоглоомыг тоглоход маш хялбар байдаг. Тоглогч V17 самбарын 1 -р баруун дээд товчлуураас эхэлдэг. Дунд LED асаалттай үед тэд унтраалгыг өндөр эргүүлэх ёстой. Дараа нь тэд нэг унтраалгыг зүүн тийш шилжүүлж, ижил зүйлийг хийдэг! Хэрэв тоглогч үүнийг эцэс хүртэл хийж чадвал тэд долоо дахь W14 товчлуур дээр зогсох болно. Хэрэв тэд тоглолтыг хожвол тэд үнэхээр хөгжилтэй төгсгөлтэй дэлгэцийг харах болно!

Анхаарах зүйл бол энэ тоглоомыг бүтээх үед хурд нь зөвхөн танд хамаарна! Хэрэв бидний сонгосон хурд хэт удаан байвал түүнийг хурдасгаж, улам бүр сорилт болго! Мөн тогтоосон тооны түвшин байдаггүй. Хэрэв та үүнийг илүү өндөр түвшинд хийхийг хүсч байвал FSM болон Level -ээр тодорхойлогдсон процессийн блокуудад өөрчлөлт оруулах шаардлагатай боловч эдгээр нь маш энгийн өөрчлөлтүүд юм.

Бид мөн хэрэглэгчийн оролт болгон самбар дээрх унтраалгыг ашиглахаар сонгосон боловч үүнийг Basys3 самбар дээрх товчлуураар хийх боломжтой. товчлуур нь хэрэглэгчийг дахин эхлүүлэх бүрт унтраалгыг дахин тохируулах шаардлагагүй болно. Бид эхлээд товчлуурыг ашигласан боловч энэ нь түвшинг тодорхойлоход алдаа гаргав, учир нь товчлуурыг дарж байх үед PushClk -ийн дээшлэх хоёр ирмэг цохиж байвал олон шат руу үсрэх болно.

Доорх нь хэрхэн тоглох, эхний 4 түвшинг давах, эцсийн дэлгэцийг харуулах видео юм.

Энэ төслийн үндсэн файлыг доор оруулав.

Эх сурвалж

Basys3 лавлах гарын авлага

Төслийн урам зориг - Arduino Stop It тоглоом

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