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

Понг тоглоом: 6 алхам
Понг тоглоом: 6 алхам

Видео: Понг тоглоом: 6 алхам

Видео: Понг тоглоом: 6 алхам
Видео: Adam vs. 5-year-old Pro 2024, Арваннэгдүгээр
Anonim
Понг тоглоом
Понг тоглоом

Материал:

Basys3 FPGA самбар

VGA кабель

Вивадо

Энэхүү зааварчилгааны зорилго нь понг тоглоомыг хөгжүүлэх бөгөөд үүнийг дэлгэц дээр харуулах болно. Төсөл нь VHDL -ийг програмчлах бөгөөд кодыг хэрэгжүүлэхийн тулд Basys3 FPGA -ийг ашигладаг бөгөөд VGA интерфэйсийг ашиглан зургийг дамжуулдаг. Энэхүү заавар нь VHDL -ийн талаар бага зэрэг мэдлэгтэй хүмүүст зориулагдсан болно. Хичээлийг тойм, процесс, оноо зохицуулагч, дүрс үүсгэх, пон тоглоом, VGA гэсэн 6 өөр хэсэгт хуваах болно.

Алхам 1: Тойм

Тойм
Тойм

Дээрх зураг нь төслийн ерөнхий схемийн зураг юм

Тоглоомын зорилго:

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

Системийн архитектур:

Доорх диаграм нь системийн ерөнхий дээд түвшний блок диаграм юм. Систем нь R, Button L, Start, Reset, Clock гэсэн дөрвөн оролттой. Энэ нь хэвтээ ба босоо синхрончлолын гаралт, RBG (тодорхой байршил дахь пикселийн өнгийг илэрхийлдэг), оноо (7 сегментийн дэлгэц рүү чиглүүлдэг автобус) юм. Дээд товчлуурыг эхлэл болгон ашиглах болно. товчлуур, зүүн ба баруун товчлууруудыг сэлүүрийг тус тусын чиглэлд шилжүүлэхэд ашиглана. 7 сегментийн дэлгэцийг ашиглан тухайн оноог бүртгэхэд хэрэглэгчийн тоглоомыг алдалгүй тоглосон секундын тоо юм. Энэ дугаарыг аравтын бутархай тоо болгон харуулах болно.

Цахилгаан хэлхээний архитектур: Бид GSM-ээ жижиг FSM агуулсан нэг FSM ашиглан бүтээх болно, дэд FSM нь тоглоомын хүндрэлийг хянах бол гол FSM нь тоглоомын ерөнхий урсгалыг хянах болно. Манай gizmo нь дор хаяж гурван цаг хуваагчийг ашигладаг бөгөөд нэгийг нь оноо (цаг), нэгийг нь дэлгэцийн шинэчлэлтийн хурд, нэгийг нь DeMux -ийн гаралттай холбож өгдөг бөгөөд ингэснээр тоглоом хэр хурдан болохыг хянах боломжтой болно. улам хүндрэх болно. Тоглох тусам тоглоом илүү хурдан хөдөлнө. Бид DeMux-ийн хяналтын оролтыг дэд FSM-ийн одоогийн төлөвт оруулах бөгөөд ингэснээр тоглоом хэр удаан тоглохыг хянах боломжтой болно. Бид хэд хэдэн тоолуур ашиглах бөгөөд нэгийг нь дэлгэцийг сэргээж, нэгийг нь үргэлжлүүлэн тоглож байхдаа оноогоо тоолох болно. Энэхүү төсөл нь оролтын өгөгдлийг удирдах хоёр үндсэн модуль, дэд модулиудтай. Хоёр үндсэн дэд модуль нь VGA драйвер, түүнчлэн товчлуурын логик модуль юм. VGA драйвер нь програмчлагдах санах ой, цаг хуваагч, гаралтыг өнгөөр зохицуулах логикоос бүрдэнэ. Мөн товчлуурын логик модуль нь цаг хуваагч, програмчлагдах санах ой, 7 сегментийн дэлгэцийн хоёртын бутархай хөрвүүлэгчээс бүрдэнэ.

Алхам 2: Зургийн процесс

Төслийн зураг боловсруулах хэсгийн хувьд бид бөмбөг, сэлүүрийн хөдөлгөөнийг тодорхойлох болно. Хөтөлбөр нь зүүн, баруун, дээд ба төв товчлуурууд, одоогийн байдал, цаг, бөмбөгний X ба Y байрлал, сэлүүрийн зүүн ба баруун ирмэг, эвдрэл зэргийг багтаасан портуудтай. Одоогийн төлөвийг идэвхжүүлэх дохиог тодорхойлоход ашигладаг. Код нь бөмбөг хөдөлж болох олон тохиолдлуудыг хамардаг бөгөөд бөмбөгний замыг тодорхойлох нөхцлийг бүрдүүлдэг. Дараагийн процессын блок нь хэрэглэгч ямар товчлуур дарсан дээр үндэслэн сэлүүр хөдлөх чиглэлийг тодорхойлдог. Төслийн энэ хэсгийн кодыг хэсэг тус бүр юу хийж байгааг тайлбарласан дэлгэрэнгүй тайлбарыг хавсаргасан болно.

Алхам 3: Оноо зохицуулагч

Оноо зохицуулагч
Оноо зохицуулагч

Энэ хэсэг нь оноог хэдхэн секундын дотор Basys3 самбар дээрх 7 сегментийн дэлгэц дээр харуулахтай холбоотой файлуудаас бүрдэнэ. Үүнд секунд тоолоход ашигладаг цаг хуваагч, онооны тоолуур нь хэрэглэгчийн тоглож буй секунд, сегментийн драйвер оноог авч дэлгэц дээр харуулах анод, катод болгон хөрвүүлэх, мөн байрлалыг тодорхойлох боломжийг олгодог. тоог харуулах бөгөөд хамгийн сүүлд сегмент зохицуулагч нь хоёртын цифрийг дэлгэц дээр харуулах аравтын орон болгон хөрвүүлнэ. Оноо зохицуулагч нь бүх хэсгүүдийг нэгтгэж, дохиог газрын зураг дээр харуулдаг. Бүх таван файлын кодыг доор хавсаргасан болно.

Цаг хуваагч:

Цаг хуваагч нь Clk (цаг), CEN (идэвхжүүлэх), Div (хуваагч) оролттой бөгөөд Clk_out гаралттай байдаг. Хэрэв идэвхжүүлэх дохио асаалттай байвал цаг өсөн нэмэгдэж буй ирмэг дээр тоологдох болно.

Онооны тоолуур

Онооны тоолуур нь Clk (Clock) ба RST (Reset) оролттой бөгөөд Clk_Out ба Q гаралттай бөгөөд энэ нь үндсэндээ онооны гаралтын үүрэг гүйцэтгэдэг.

Сегментийн драйвер

Сегментийн драйвер нь D1, D10, D100, D1000, Clock оролттой байдаг. "D" -с хойшхи тоонууд нь 7 сегментийн дэлгэц дээрх аравтын бутархайг хэлнэ. Гаралт нь анод ба цифр юм. Цаг тоолж, тоонууд, түүний байрлалыг зааж өгдөг. Жишээлбэл, "9" -г нэг газарт "0" тоогоор мянга, зуут, аравтын тоогоор харуулах болно. "10" руу шилжих үед энэ тоо одоо хэдэн аравт "1", мянга, зуун, нэг газарт "0" байх болно.

Сегмент зохицуулагч

Сегмент зохицуулагч нь оролт болгон цифр, гаралт болгон катодтой байдаг. Энэ нь үндсэндээ катодын хоёртын тоог дэлгэц дээр аравтын бутархай тоог гаргахад зориулагдсан болно.

Оноо зохицуулагч

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

Алхам 4: Зураг үүсгэх

Зураг үүсгэх нь анимац, бүтэлгүй тоолуур, зургийг шинэчлэх, тоолуурыг эхлүүлэх гэсэн дөрвөн бүрэлдэхүүн хэсгээс бүрдэнэ. Эдгээр файлууд нь дэлгэцийн дэлгэц дээрх зургуудыг хэрхэн үүсгэх талаар өгүүлдэг.

Анимаци

Animation файл нь Clk (Цаг дохио), CEN (тоолох идэвхжүүлэх), RST (Дахин тохируулах), B_X (Бөмбөгний X байрлал), B_Y (Бөмбөгний Y байрлал), P_L (зүүн сэлүүрийн байрлал), P_R оролттой. (баруун сэлүүрийн байрлал). Гаралт нь WA (бидний өнгийг бичиж буй хаяг) ба WD (тодорхойлсон хаягаар бичсэн өнгө) юм. Файл нь Play_Counter -тэй бөгөөд энэ нь MUX -ийн хяналтын оролт болгон ашиглагдах тоолуур юм, зөв өнгийг зөв газар гаргаж чаддаг кодлогч бөгөөд эцэст нь сэлүүрний байрлал дээр үндэслэн зөв өнгийг харуулдаг мультиплексор юм. бөмбөг.

Зургийг сэргээх

Бөмбөг, сэлүүрийн байрлал өөрчлөгдөхөд зургийг сэргээхийн тулд Refresh Image файлыг ашиглана. Файл нь Animation, Start Counter, Fail Counter файлуудын бүрэлдэхүүн хэсгүүдийг агуулдаг. Энэ нь бүрэлдэхүүн хэсэг бүрийн дохиог газрын зураг дээр харуулдаг бөгөөд дохио, гаралтын хаягийг тодорхойлохын тулд төрийн логикийг ашигладаг.

Тоолуурыг эхлүүлэх

Start Counter нь Clk, RS, CEN оролтыг ашигладаг бөгөөд WA ба WD гаралтыг ашигладаг. Энэ нь тоолуур болон хөрвүүлэлтийг ашиглан MUX -ийн хяналтын оролтыг тодорхойлдог. Multiplexer нь оролтыг ашиглан өнгөний зөв хаягийг тодорхойлж, энэ өгөгдлийг VGA драйвер руу илгээдэг. Энэ нь хэрэглэгч тоглоомыг эхлүүлэх үед "Понг" харуулахад хэрэглэгддэг.

Fail Counter

Алдааны тоолуур нь хэрэглэгч тоглоомоо алдах үед "Тоглоом дууссан" гэж харуулахад ашиглагддаг. Энэ нь Clk, RST, CEN дохиотой. Энэ нь тоолуур болон хөрвүүлэх томъёог ашиглан MUX -ийн хяналтын оролтыг тодорхойлдог. Multiplexer нь оролтыг ашиглан өнгөний зөв хаягийг тодорхойлж, энэ өгөгдлийг VGA драйвер руу илгээдэг.

Алхам 5: Понг тоглоом

Понг тоглоом
Понг тоглоом

Төслийн энэ хэсэгт Pong Master, Finite State Machine (FSM), Timer, Start Debounce файлууд багтсан болно.

Таймер

Таймер нь Clk (Clock) ба PS (Одоогийн төлөв) оролттой бөгөөд Timer болон Clk_out -ийг гаралт болгон ашигладаг. Таймерыг тоглоомын хурдыг ойролцоогоор таван секунд тутамд өөрчлөхөд ашигладаг.

FSM урсгал

Flow FSM нь Clk, Fail, Timer, Bttn_S (Start Button) болон Buttn_RST (Reset Button) оролттой бөгөөд Pres_S (Present State Output) гаралттай. FSM нь таймерыг ашиглан одоогийн төлөвийг дараагийн төлөвт шинэчилж, тоглоом дуусах хүртэл 5 -р түвшинд хүрэх хүртэл дараагийн төлөвийг шинэчилж байна.

Debounce -ийг эхлүүлэх

Start Debounce бол бөмбөгний анхны үсрэлт юм. Энэ нь S_in ба Clk оролттой бөгөөд S_out гаралттай.

Pong Master Энэ файл нь өмнөх бүх бүрэлдэхүүн хэсгүүдийг ашигладаг бөгөөд бүх бүрэлдэхүүн хэсгүүдийг агшин зуур хийдэг. Энэ бол бидний бүтээсэн өмнөх бүх бүрэлдэхүүн хэсгүүдийг нэгтгэсэн мастер файл юм.

Алхам 6: VGA драйвер

VGA (Visual Graphics Array) драйвер нь дэлгэцэн дээр илгээгдэж буй тушаал эсвэл өгөгдлийг хүлээн авахад зориулагдсан програм хангамж юм. Жолоочийг манай профессор бидэнд өгсөн. Драйвер болон VGA утсыг ашиглан Basys3 самбарыг дэлгэцтэй холбоно уу.

Та одоо VHDL ашиглан понг тоглоомыг өөрөө хийхэд бэлэн байх ёстой!

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