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

2 тоглогчийн өрсөлдөөнт VS цагийн тоглоом: 4 алхам
2 тоглогчийн өрсөлдөөнт VS цагийн тоглоом: 4 алхам

Видео: 2 тоглогчийн өрсөлдөөнт VS цагийн тоглоом: 4 алхам

Видео: 2 тоглогчийн өрсөлдөөнт VS цагийн тоглоом: 4 алхам
Видео: ПОЧЕМУ Я ЖДУ L4D3 2024, Долдугаар сарын
Anonim
2 тоглогчийн өрсөлдөөнт VS цагийн тоглоом
2 тоглогчийн өрсөлдөөнт VS цагийн тоглоом

Танд хэрэгтэй болно:

1. Digilent Basys 3, FPGA Board (эсвэл бусад FPGA,)

2. Vivado эсвэл бусад VHDL -ийн орчин үеийн хувилбар

3. Дээр дурдсан програмыг ажиллуулах боломжтой компьютер.

Алхам 1: Тоглоом өөрөө

Тоглоом өөрөө
Тоглоом өөрөө

FSM модулиудтай хэрхэн харьцдаг.

Яаж тоглох вэ

Эхлэхийн тулд та дунд товчлуурыг дарах хэрэгтэй. Энэ нь хоёр тоглогчийн эрүүл мэндийг илэрхийлэх "99" гэсэн долоон сегментийн дэлгэц дээр гарч ирэх болно. Дараа нь LED нь баруунаас зүүн тийш дараалан асах болно. Энэ нь цахилгаан бар үүсгэдэг. Цахилгаан бар дүүрсэний дараа дахин тохируулна. Нэг тоглогчийн зорилго бол баар аль болох өндөр байх үед унтраалгаа эргүүлэх явдал юм. Илүү их LED асах тусам нэг тоглогч хоёр дахь тоглогчид илүү их хохирол учруулдаг. Нэг тоглогч түлхүүрээ эргүүлсний дараа гарсан хохирлыг хоёр тоглогчийн эрүүл мэндээс хасч тооцдог. Дараа нь хоёр тоглогчийн ээлж рүү шилждэг. Одоо харуулсан тоо нь тоглогчийн эрүүл мэндийг илэрхийлж, цахилгаан бар нь зүүнээс баруун тийш дүүрнэ. Хоёр дахь тоглогч нүүдэл хийсний дараа хохирлыг хасч, тоглогчийн ээлж рүү буцна. Энэ нь нэг тоглогч 0 эрүүл мэндэд хүрэх хүртэл давтана. Энэ үйл ажиллагааны видеог хавсаргав.

Алхам 2: FSM

FSM
FSM
FSM
FSM
FSM
FSM
FSM
FSM

Энэ тоглоом нь үндсэндээ нэг том хязгаарлагдмал төлөвт машин бөгөөд FSM -ийн төлөв байдалд үндэслэсэн нарийн төвөгтэй логик юм.

Төлөв 1: Цэс Эхний төлөв бол цэсийн дэлгэц бөгөөд энэ нь хамгийн энгийн төлөвүүдийн нэг юм. Энэ нь "PLAY" гэсэн үгийг харуулсан долоон сегментийн дэлгэц, тоглоомыг эхлүүлэх товчлуурыг агуулдаг. BTN товчлуур нь биднийг дараагийн төлөв рүү хөтөлдөг бөгөөд энэ нь тоглогчийн ээлж юм.

Төлөв 2: Тоглогчийн ээлж

Нэг тоглогчийн ээлж нь долоон сегментийн дэлгэц дээр хоёр дахь тоглогчийн эрүүл мэндийг харуулдаг дохиог идэвхжүүлдэг. Бидний үүсгэсэн өөр модулиас импортолсон ээлжийн бүртгэлийг идэвхжүүлэхийн тулд өөр нэг дохио асдаг (Pone.vhd). Энэхүү ээлжийн бүртгэл нь LED -ийн гэрлийг бусад тоглоомуудад нэмэгдэж буй цахилгаан хэмжигч шиг гэрэлтүүлж, асаах боломжтой LED -ийн дээд хэмжээнд хүрмэгц 0 болгож тохируулна. Энэ нь зээлсэн лабораторийн файлаас өөрчлөгдсөн barclock.vhd -ээс авсан цагийн өсөлтийн ирмэг дээр шинэчлэгддэг. Бид тоглогчийн нэг барыг баруун талаас эхэлж, зүүн тийш бөглөх ёстой байсан, учир нь нэг тоглогчийн унтраалга зүүн талд байдаг (хэрэглэгчийн зөн совингийн хувьд). Шилжүүлэгчийг эргүүлсний дараа муж тоглогчийн нэг хасалт руу шилжих бөгөөд LED -ийн идэвхжсэн хэмжээ нь дохио хэлбэрээр хадгалагдана.

3 -р төлөв: Тоглогч нэг хасалт LED идэвхжүүлсэн хэмжээ бүхий дохио нь хасагдах эрүүл мэндийн хэмжээг тодорхойлдог. Үүнийг өөр нэг ээлжийн бүртгэл (deductor1.vhd) хийснээр хийдэг бөгөөд ингэснээр LED -ийг нэмэгдүүлж, багасгадаг. Энэ нь бидний зээлж, өөрчилсөн цагны дивуль модулуудын нэгний ирмэг дээр буурч байна (downcounterclock.vhd). Нэг LED унтарсан даруйд хоёр тоглогчийн эрүүл мэндийн байдлаас нэг цэгийн эрүүл мэндийг хасч тооцдог. Хэрэв энэ процессын явцад тоглогчийн хоёр нь 0 эрүүл мэндэд хүрвэл бид зогсоод тэр даруй "Тоглоом дууссан" төлөв рүү орно. Үгүй бол LED вектор "0000000000000000" хүрэхэд бид хоёр тоглогчийн ээлж рүү шилждэг.

Төлөв 4: Хоёрдугаар тоглогчийн ээлж Хоёр дахь тоглогчийн ээлж нь нэг тоглогчийн ээлжтэй яг адилхан бөгөөд ээлжийн бүртгэл нь (Ptwo.bhd) зүүнээс баруун тийш шилжихээс бусад тохиолдолд самбарын баруун талд байна. Тоглогч 1 -ийн эрүүл мэндийн дэлгэцтэй байх дохио идэвхждэг. 2 -р шилжүүлэгч идэвхжсэний дараа энэ нь хоёр дахь тоглогчийн хасах ээлж рүү шилждэг.

5 -р шат: Хоёр тоглогчийн хасалт Хоёр дахь тоглогчийн ээлжтэй адил хоёр тоглогч хасах нь нэг тоглогч хасахтай адил үйлдэл хийдэг. Гол ялгаа нь LED -ийн унтраалтыг хянадаг ээлжийн бүртгэл эсрэг чиглэлд явагддаг бөгөөд энэ нь тоглогчийн хасалтыг зөв ажиллуулсны дараа хийхэд хялбар өөрчлөлт юм.

6 -р үе шат: Тоглоом дууслаа Хэрэв тоглогчдын аль нэг нь эрүүл мэндийн хувьд тэг түвшинд хүрвэл тоглоом энэ байдалд шилждэг. Сонирхолтой зүйл харагдахгүй байна. Хэрэв BTN нэгийг дарвал эрүүл мэнд 99 болж, төлөв цэс рүү буцаж очоод тоглоомыг үр дүнтэй эхлүүлнэ.

Алхам 3: Модулиуд

Модулиуд
Модулиуд

Тоглоомын хар хайрцаг диаграм

Цагийн зүү (Bryan Mealy -ийн clk_div.vhd модуль дээр үндэслэсэн):

Энэ бол хасагчийн цагийг зохицуулдаг цаг юм. Max_count нэртэй тогтмол нь barclock -ийн max_count тогтмолоос 3 дахин их юм. Энэ нь хасагчийг баарны хурдаас 3 дахин удаан болгох болно.

Barclock - (Bryan Mealy -ийн clk_div.vhd модуль дээр үндэслэсэн):

Энэхүү цаг нь тоглоомд хүндрэл учруулахын тулд бид маш хурдан нэмэгдүүлсэн цахилгаан тоолуурын цагийг зохицуулдаг. Энэ хугацааг өөрийн хүссэнээр тохируулж, тогтмол max_count -ийг илүү их болгох замаар хурдыг нэмэгдүүлэх, эсвэл max_count -ийг цөөн болгож багасгаж болно. Sseg_dec - (Бичсэн: Bryan Mealy): Энэ модуль нь 8 битийн тоог оролт болгон авдаг бөгөөд үүнийг тайлж, тоог аравтын бутархай эквивалент болгон хөрвүүлж, дараа нь долоон сегментийн дэлгэц дээр гаргадаг. Энэ файлыг ажиллуулахын тулд та өөрийн хязгаарлалтууд биднийхтэй тохирч байгаа эсэхийг шалгах хэрэгтэй.

Поне:

Энэ бол цахилгаан тоолуур нэмэгдэж байгаа мэт харагдуулахын тулд битүүдийг зүүн тийш шилжүүлэх ээлжийн бүртгэл юм. Бүх битүүд халуун байх үед бүх битүүд "0" болж дахин тохируулагдаж, мөчлөг дахин эхэлнэ.

Ptwo:

Энэ бол P1 модулийн эргүүлсэн хувилбар юм.

Дедуктор1:

Энэ бол ээлжийн бүртгэл ба хасагчийн хослол юм. Ээлжийн бүртгэл нь P1 -ийн ээлжийн бүртгэлийн эсрэг чиглэлд явдаг бөгөөд энэ нь хасалтыг харуулна. Энэ нь 2 -р тоглогчийн эрүүл мэндийн байдлаас цаг бүрийн мөчлөг тутамд 1 -ийг хасдаг тул эдгээр хоёр функцийг хослуулснаар эрүүл мэндийн баарны удирдлага буурах тусам өрсөлдөгчийнхөө эрүүл мэнд 1 -ээр буурч байх шиг байна.

Deductor2: Энэ бол Deductor1 модулийн эргүүлсэн хувилбар юм.

PlayDecoder (ekchen35649 -ээс зээлж, өөрчилсөн 133 зааварчилгаа): Үүнийг цэсийн төлөвт долоон сегментийн декодер дээр "PLAY" гэсэн үгийг харуулахад ашигладаг.

Алхам 4: Туршилт

Энэ тоглоомыг анх Кирбигийн мини тоглоомуудаас санаа авсан юм. Энэ бол Basys 3 самбарт эсвэл дурын FPGA дээр тоглох боломжтой хоёр тоглогчтой энгийн тоглоом юм.

Алхам 1: Шаардлагатай материал

Танд хэрэгтэй болно: Digilent Basys 3, FPGA Board (эсвэл бусад) Vivado -ийн харьцангуй шинэчлэгдсэн хувилбар эсвэл бусад vhdl орчин Дээр дурдсан програмыг ажиллуулж чаддаг компьютер

Алхам 2: Тоглоом өөрөө

Яаж тоглох вэ

Эхлэхийн тулд та дунд товчлуурыг дарах хэрэгтэй. Энэ нь хоёр тоглогчийн эрүүл мэндийг илэрхийлэх "99" гэсэн долоон сегментийн дэлгэц дээр гарч ирнэ. Дараа нь LED нь баруунаас зүүн тийш дараалан асах болно. Энэ нь цахилгаан бар үүсгэдэг. Цахилгаан бар дүүрсэний дараа дахин тохируулна. Нэг тоглогчийн зорилго бол баар аль болох өндөр байх үед унтраалгаа эргүүлэх явдал юм. Илүү их LED асах тусам нэг тоглогч хоёр дахь тоглогчид илүү их хохирол учруулдаг. Нэг тоглогч түлхүүрээ эргүүлсний дараа гарсан хохирлыг хоёр тоглогчийн эрүүл мэндээс хасч тооцдог. Дараа нь хоёр тоглогчийн ээлж рүү шилждэг. Одоо харуулсан тоо нь тоглогчийн эрүүл мэндийг илэрхийлж, цахилгаан бар нь зүүнээс баруун тийш дүүрнэ. Хоёр дахь тоглогч нүүдэл хийсний дараа хохирлыг хасч, тоглогчийн ээлж рүү буцна. Энэ нь нэг тоглогч 0 эрүүл мэндэд хүрэх хүртэл давтана. Энэ үйл ажиллагааны видеог хавсаргав.

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

Алхам 3: FSM

Энэ тоглоом нь үндсэндээ нэг том хязгаарлагдмал төлөвт машин бөгөөд FSM -ийн төлөв байдалд үндэслэсэн нарийн төвөгтэй логик юм.

(Улсын диаграм)

Төлөв 1: Цэс

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

Төлөв 2: Тоглогчийн ээлж

Нэг тоглогчийн ээлж нь долоон сегментийн дэлгэц дээр хоёр дахь тоглогчийн эрүүл мэндийг харуулдаг дохиог идэвхжүүлдэг. Бидний үүсгэсэн өөр модулиас импортолсон ээлжийн бүртгэлийг идэвхжүүлэхийн тулд өөр нэг дохио асдаг (Pone.vhd). Энэхүү ээлжийн бүртгэл нь LED -ийн гэрлийг бусад тоглоомуудад нэмэгдэж буй цахилгаан хэмжигч шиг гэрэлтүүлж, асаах боломжтой LED -ийн дээд хэмжээнд хүрмэгц 0 болгож тохируулна. Энэ нь зээлсэн лабораторийн файлаас өөрчлөгдсөн barclock.vhd -ээс авсан цагийн өсөлтийн ирмэг дээр шинэчлэгддэг. Бид тоглогчийн нэг барыг баруун талаас эхэлж, зүүн тийш бөглөх ёстой байсан, учир нь нэг тоглогчийн унтраалга зүүн талд байдаг (хэрэглэгчийн зөн совингийн хувьд). Шилжүүлэгчийг эргүүлсний дараа муж тоглогчийн нэг хасалт руу шилжих бөгөөд LED -ийн идэвхжсэн хэмжээ нь дохио хэлбэрээр хадгалагдана.

Улсын 3: Тоглогч нэг хасалт

LED идэвхжүүлсэн хэмжээ бүхий дохио нь хасагдах эрүүл мэндийн хэмжээг тодорхойлдог. Үүнийг өөр нэг ээлжийн бүртгэл (deductor1.vhd) хийснээр хийдэг бөгөөд ингэснээр LED -ийг нэмэгдүүлж, багасгадаг. Энэ нь бидний зээлж, өөрчилсөн цагны дивуль модулуудын нэгнийх нь ирмэг дээр буурч байна (downcounterclock.vhd). Нэг LED унтарсан даруйд хоёр тоглогчийн эрүүл мэндийн байдлаас нэг цэгийн эрүүл мэндийг хасч тооцдог. Хэрэв энэ процессын явцад тоглогчийн хоёр нь 0 эрүүл мэндэд хүрвэл бид зогсоод тэр даруй "Тоглоом дууссан" төлөв рүү орно. Үгүй бол LED вектор "0000000000000000" хүрэхэд бид хоёр тоглогчийн ээлж рүү шилждэг.

Төр 4: Хоёр дахь тоглогчийн ээлж

Хоёр дахь тоглогчийн ээлж нь нэг тоглогчийн ээлжтэй яг адил бөгөөд ээлжийн бүртгэл (Ptwo.bhd) зүүнээс баруун тийш шилжихээс бусад тохиолдолд самбарын баруун талд байна. Тоглогч 1 -ийн эрүүл мэндийн дэлгэцтэй байх дохио идэвхждэг. 2 -р шилжүүлэгч идэвхжсэний дараа энэ нь хоёр дахь тоглогчийн хасах эргэлт рүү шилждэг.

5 -р үе шат: Хоёр дахь тоглогчийг хасах

Хоёр дахь тоглогчийн ээлж шиг хоёр тоглогч хасах нь нэг тоглогч хасахтай адил үйлдэл хийдэг. Гол ялгаа нь LED -ийн унтраалтыг хянадаг ээлжийн бүртгэл эсрэг чиглэлд явагддаг бөгөөд энэ нь тоглогчийн хасалтыг зөв ажиллуулсны дараа хийхэд хялбар өөрчлөлт юм.

6 -р үе шат: Тоглоом дууслаа Хэрэв тоглогчдын аль нэг нь эрүүл мэндийн хувьд тэг түвшинд хүрвэл тоглоом энэ байдалд шилждэг. Сонирхолтой зүйл харагдахгүй байна. Хэрэв BTN нэгийг дарвал эрүүл мэнд 99 болж, төлөв цэс рүү буцаж очоод тоглоомыг үр дүнтэй эхлүүлнэ.

Хар хайрцаг

Алхам 4: Модулиуд

Цагийн зүүний цаг (Брайан Мэйлийн clk_div.vhd модуль дээр үндэслэсэн):

Энэ бол хасагчийн цагийг зохицуулдаг цаг юм. Max_count нэртэй тогтмол нь barclock -ийн max_count тогтмолоос 3 дахин их юм. Энэ нь хасагчийг баарны хурдаас 3 дахин удаан болгох болно.

Barclock - (Bryan Mealy -ийн clk_div.vhd модуль дээр үндэслэсэн): Энэ цаг нь тоглоомд хүндрэл учруулахын тулд бид маш хурдан нэмэгдүүлсэн цахилгаан тоолуурын цагийг зохицуулдаг. Энэ хугацааг өөрийн хүссэнээр тохируулж, тогтмол max_count -ийг илүү их болгох замаар хурдыг нэмэгдүүлэх, эсвэл max_count -ийг цөөн болгож багасгаж болно. Sseg_dec - (Бичсэн: Bryan Mealy): Энэ модуль нь 8 битийн тоог оролт болгон авдаг бөгөөд үүнийг тайлж, тоог аравтын бутархай эквивалент болгон хөрвүүлж, дараа нь долоон сегментийн дэлгэц дээр гаргадаг. Энэ файлыг ажиллуулахын тулд та өөрийн хязгаарлалтууд биднийхтэй тохирч байгаа эсэхийг шалгах хэрэгтэй.

Pone: Энэ бол цахилгаан тоолуур нэмэгдэж байгаа мэт харагдуулахын тулд битүүдийг зүүн тийш шилжүүлэх нэг халуун битийг нэмдэг ээлжийн бүртгэл юм. Бүх битүүд халуун байх үед бүх битүүд "0" болж дахин тохируулагдаж, мөчлөг дахин эхэлнэ.

Ptwo: Энэ бол P1 модулийн эргүүлсэн хувилбар юм.

Дедуктор1: Энэ бол ээлжийн бүртгэл ба хасагчийн хослол юм. Ээлжийн бүртгэл нь P1 -ийн ээлжийн бүртгэлийн эсрэг чиглэлд явдаг бөгөөд энэ нь хасалтыг харуулна. Энэ нь 2 -р тоглогчийн эрүүл мэндийн байдлаас цаг бүрийн мөчлөг тутамд 1 -ийг хасдаг тул эдгээр хоёр функцийг хослуулснаар эрүүл мэндийн баарны удирдлага буурах тусам өрсөлдөгчийнхөө эрүүл мэнд 1 -ээр буурч байх шиг байна.

Deductor2: Энэ бол Deductor1 модулийн эргүүлсэн хувилбар юм.

PlayDecoder (ekchen35649 -ээс зээлсэн бөгөөд бага зэрэг өөрчилсөн түүний 133 зааварчилгаа):

Үүнийг цэсийн төлөвт долоон сегментийн декодер дээр "PLAY" гэсэн үгийг харуулахад ашигладаг.

Хийх зүйл: зураг, видео

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