Агуулгын хүснэгт:
- Алхам 1: Цаг хуваагчийг тохируулах
- Алхам 2: Эцсийн төлөвт машин (FSM) үүсгэх
- Алхам 3: Долоон сегментийн дэлгэцийг зураглах
- Алхам 4: Харьцуулагч үүсгэх
- Алхам 5: Таймер тохируулах
- Алхам 6: Псевдо санамсаргүй тоо үүсгэгчийг зохион бүтээх
- Алхам 7: Хөрвүүлэгч үүсгэх
- Алхам 8: Тоглоомын модульд бүх зүйлийг нэгтгэх
- Алхам 9: Нэмэлт асуудлууд тулгарч байна
- Алхам 10: Эх сурвалж файлууд ба хязгаарлалтууд
Видео: Хоёртын тооноос аравтын хоорондох тааруулагч тоглоом: 10 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:01
Энэхүү зааварчилгаа нь манай хоёртын тооноос арав хүртэлх тооны тохирох тоглоомыг бий болгоход шаардагдах процесс, модулиудыг харуулах болно. 60 секундын дотор хэрэглэгчид долоон сегментийн дэлгэц дээр санамсаргүй байдлаар үүсгэсэн аравтын тоог хөрвүүлэх, оруулах товчлуурыг оруулснаар хоёртын тоонд оруулах болно. Дууссаны дараа эцсийн оноо гарч ирэх бөгөөд дараа нь дахин тоглох болно.
Хоёртын болон хурдан рефлексийг ойлгох нь сайн үр дүнд хүрэх боловч дахин оролдохыг хүссэн тохиолдолд дахин тохируулах товчлуурыг өгдөг.
Алхам 1: Цаг хуваагчийг тохируулах
Энэхүү төслийн бүх тулгуур хэсэг нь энэхүү gizmo дахь бүх эд ангиудыг зөв синхрончлох явдал юм. Манай Finite State Machine нь дотоод цагийг ашигладаг боловч долоон сегментийн дэлгэц ба таймер нь цагны өөрчлөгдсөн хувилбарыг ашиглах ёстой.
Энэхүү "шинэ цаг" нь дотоод цагийг хүссэн хугацаанд хувааж, тодорхой бүрэлдэхүүн хэсэг бүрт шаардлагатай тодорхой давтамжийг олж авахаас үүдэлтэй юм. Үүнийг өмнөх лабораторид хийж байсан бөгөөд туршлагаас харахад таймер нь "нэгийн" цифрийг 0.1 Гц болгож, "аравтын" цифрийг 1 Гц -тэй болгосныг бид мэднэ.
Оролт: ClkIn, хуваагч (32 бит)
Гаралт: ClkOut
Алхам 2: Эцсийн төлөвт машин (FSM) үүсгэх
Хязгаарлагдмал төлөвт машиндаа бид таван оролттой (эхлүүлэх, дахин тохируулах, таамаглах, тэнцүү, завсарлага) таван төлөв (Start, Display, Check, Score, Score and End) шаардлагатай гэж шийдсэн. Манай State Machine -ийн цорын ганц гарц нь 3 битийн тоо бөгөөд хэрэглэгч ямар төлөвт байгааг илэрхийлнэ (000, 001, 011, 101, 100) доорх мужуудтай харьцуулахад.
Хязгаарлагдмал төлөвт машин нь доорх функцүүдийг огт гаргадаггүй, харин програм ямар төлөвт байгаа, юу болохыг хэлж өгдөг гэдгийг санаарай. Бодит байдал дээр юу болохыг доор тайлбарласан дээд модуль тодорхойлдог.
Эхлэх төлөв (000)
Эхлэх төлөв нь хэрэглэгчийн эхлэх оролт өндөр болтол эхлэх бөгөөд энэ нь дахин тохируулах товчлуур дарагдах бүрт хүрэх төлөв юм.
Тоглоомын төлөв (001)
Тоглоомын төлөв нь тоглоомын эхлэл бөгөөд энд санамсаргүй тоо үүсч, хэрэглэгч шилжүүлэгчийг сольж оролт үүсгэнэ. Таах товчлуурыг дарсны дараа тоглоомыг шалгах төлөв рүү шилжүүлнэ.
Улсын байдлыг шалгах (011)
Энэ төлөв нь хэрэглэгчийн оруулсан утга болон санамсаргүй байдлаар үүсгэсэн тоог харьцуулах харьцуулагчийг ашиглаж байгаа газар юм. Хэрэв илгээсэн нь зөв бол тэнцүү утга өндөр бөгөөд FSM нь онооны төлөвт орно; Гэсэн хэдий ч хэрэв илгээсэн нь буруу байвал FSM нь илгээсэн нь зөв болох хүртэл дэлгэцийн төлөв рүү буцна.
Энэ шалгах төлөв нь бусадтай харьцуулахад харьцангуй хурдан явагддаг, учир нь энэ нь шалгах товчлуурыг дарахад л тохиолддог
Онооны төлөв (101)
Тэнцүү утга өндөр байгаа тул оруулсан мэдээлэл зөв байсан. Энэ төлөвт онооны утга нэгээр нэмэгдэх бөгөөд хэрэглэгчийн оруулах шинэ тоо бий болно. Энэхүү шинэ дугаар нь хэрэглэгчийг дахин эхлүүлэх төлөв рүү буцааж авчирдаг.
Эцсийн төлөв (100)
60 секундын таймер дуусмагц цаг дуусах оролт өндөр байх бөгөөд хэрэглэгч эцсийн оноог харуулах эцсийн төлөвт хүрнэ. Дараа нь дахин тохируулах оролтыг дарах бөгөөд FSM нь эхлэх төлөвт дахин эхэлнэ.
Оролт: Clk, rst, эхлэх, таамаглах, тэнцүү, завсарлага
Гаралт: төлөв (3 бит)
Алхам 3: Долоон сегментийн дэлгэцийг зураглах
Долоон сегментийн дэлгэц нь санамсаргүй тооны генераторын гаралт болгон дэлгэцэн дээрх эхний хоёр цифрийг ашигладаг тул төслийн хоёр гол хэсэг нь таймер юм. Хэдийгээр бид үүний жишээг сүүлийн лабораторид дэлгэцэн дээр цифрүүд байрлуулах талаар хэрэгжүүлсэн ч арван зургаатын тоогоор харуулсан болно. Энэ асуудлыг шийдэхийн тулд бид хөрвүүлэгч ба цаг хуваагчийг ашигласан бөгөөд үүнийг доор тайлбарлах болно.
Дэлгэц нь FSM тоглоомын төлөвт орох хүртэл бүх 0 -ийг харуулдаг; Гэсэн хэдий ч эцсийн төлөвт дэлгэц нь зөвхөн хэрэглэгчийн оноог харуулах ёстой.
Бид долоон сегментийн дэлгэцийн дөрвөн цифрийг ашиглаж байгаа тул анод тус бүрийг 300 Гц давтамжтайгаар асаах ёстой.
Оролт: Clk, сегмент
Гаралт: катод (7 бит), анод (4 бит)
Алхам 4: Харьцуулагч үүсгэх
Энэхүү дэд модулийг Check төлөвт ашигладаг бөгөөд 7 битийн хоёртын оролтын таамаглалыг бодит аравтын утгатай харьцуулж үздэг.
Тэнцүү утга нь өндөр эсвэл бага эсэхээс хамааран оролт, гаралтыг хоёуланг нь үнэлдэг if мэдэгдэлтэй байсан. Энэ модулийн ач холбогдлын хувьд энэ төслийг зохион бүтээх хамгийн энгийн програмуудын нэг юм.
Оролт: унтраалга (8 бит), тоо (8 бит)
Гаралт: EQ
Алхам 5: Таймер тохируулах
Манай таймер нь үндсэндээ хоёр өөр тоолуур бөгөөд өөр өөр хурдаар нэмэгдэж байна. "Нэгийн" утгын нэг тоолуур, (эхний долоон сегментийн дэлгэц) ба "аравтын" утгын нэг тоолуур (долоон сегментийн дэлгэц дээрх хоёр дахь орон). Цифр бүрийг цагны өсөн нэмэгдэж буй ирмэг дээр үндэслэсэн бөгөөд тоолуур 60 секундэд хүрмэгц time_out өндөр байх бөгөөд тоглоом дуусч, анхны төлөв рүүгээ буцна.
Оролт: Clk, төлөв (3 бит), эхлэх
Гаралт: Одоогийн (8 бит), завсарлага
Алхам 6: Псевдо санамсаргүй тоо үүсгэгчийг зохион бүтээх
Энэ тохиолдолд тусгайлан зориулсан тоон генераторын өөр нэг хувилбар бол 0-99 (хоёртын тоогоор) давтамжтай тоолууртай байх явдал юм.
Энэ тоо нь дотоод цагны өсөн нэмэгдэж буй ирмэг бүрийг (10 нано секунд) өөрчилж, нэг микрекундэд бүх 100 тоогоор эргэлддэг. Хэрэглэгч тоон үүсгэгчээс шинэ дугаар авахыг хүссэн үедээ дугаараа гаргадаг.
Хэдийгээр энэ процесс нь бүхэлдээ санамсаргүй байдлаар хийгддэггүй боловч энэ үйл явцаас холбогдох гарцыг олох магадлал нь хуурамч санамсаргүй байдлаар хангалттай бага байдаг.
Оролт: Clk, changenum, тэнцүү
Гаралт: тоо (8 бит)
Алхам 7: Хөрвүүлэгч үүсгэх
Шаардлагатай бүрэлдэхүүн хэсэг бол хөрвүүлэгч бөгөөд бид арван зургаатын оронд долоон сегментийн дэлгэц дээр аравтын тоог харуулдаг байв. Хэдийгээр хоёулаа хоёулаа 7 битийн хоёртын тоон дээр үндэслэсэн боловч бид арван зургааг аравтын бутархай болгон хөрвүүлэх зориулалттай бүхэл бүтэн модулийг бүтээсэн.
Жишээлбэл, хэрэв бидний онооны эцсийн гаралт 0010001 (арван долоон) байсан бол долоон сегментийн дэлгэц нь аравтын бутархай 17 биш, харин арван зургаатын арван тоог харуулна.
Оролт: Numin (8 бит)
Гаралт: Тооллого (8 бит)
Алхам 8: Тоглоомын модульд бүх зүйлийг нэгтгэх
Бүрэлдэхүүн хэсгүүдийн хувьд бид хэрэглэгчийг асаах, дахин тохируулах, таамаглах гурван оролтыг ашиглахын тулд шаардлагатай 0-6 унтраалгыг ашигласан болно. Долоон сегментийн дэлгэц ба цагны бүрэлдэхүүн хэсгүүд нь бидний өмнөх лабораторийн хийсэн бүрэлдэхүүн хэсэг боловч энэ төсөлд нийцүүлэхийн тулд өөрчлөх шаардлагатай болсон.
Бид энэ төслийг дээр үзүүлсэн зургаан модульд хувааж, бүхэл бүтэн хэсгийг олон ажлын хэсэгт хуваасан боловч тэдгээрийг холбох арга нь маш нарийн бөгөөд хавсаргасан хар хайрцгийн зургаас харуулав.
Тоглоом болж байх үед 7 LED асдаг бөгөөд энэ нь хэрэглэгчид ямар горимд шилжиж байгааг мэдэгдэх бөгөөд тоглоом дуусахад бид LED -ийг анивчуулахаар програмчилсан.
Оролт: унтраалга (8 бит), Clk, дахин тохируулах, эхлүүлэх, таамаглах
Гаралт: катод (7 бит), анод (4 бит), LED (7 бит)
Алхам 9: Нэмэлт асуудлууд тулгарч байна
Хэдийгээр энэ тоглоомонд ердөө долоон унтраалга ашигладаг боловч кодыг 8 битийн тоогоор тохируулсан болно. Бид эдгээр 8 битийг санамсаргүй тоон үүсгэгчийн үүсгэсэн 8 битийн тоотой харьцуулах илүү тохиромжтой харьцуулагчтай болохын тулд үүнийг хийсэн.
Энэ оноо нь бидэнд бага зэрэг бэрхшээл учруулж байсан, учир нь бид FSM онооны төлөвт байх үед нэг оноо нэмэгдүүлэхээр тохируулсан. Гэсэн хэдий ч оронд нь юу болсон бэ гэхээр, муж улс ажиллаж байх үед оноо байнга өсч, бидэнд шийдвэрлэх боломжгүй өндөр оноо өгсөн юм. Бид үүнийг 8 -р алхам дээрх кодон дээр харуулснаар цагны ирмэг дээр синхрончлогдсон импульсийн дохиог нэмж зассан.
Эцэст нь, таймер нь дибаг хийхэд маш их цаг зарцуулсан бөгөөд энэ нь бидний долоон сегментийн дэлгэцийг тоолоход гажуудуулах тул бид үүнийг 60 -аас доош тоолохоос 0 -ээс тоолох хүртэл өөрчлөх шаардлагатай болсон.
Алхам 10: Эх сурвалж файлууд ба хязгаарлалтууд
Хэрэв та өөрийн файлыг үүсгэхийн оронд манай эх сурвалжаас татаж авахыг хүсвэл энд байна. Мөн хязгаарлалтын файлыг оруулсан болно.
Зөвлөмж болгож буй:
CPE 133 Эцсийн төсөл Аравтын бутархай хоёртын тоо: 5 алхам
CPE 133 Аравтын хоёртын эцсийн төсөл: Хоёртын тоонууд нь тоон логикийг бодоход хамгийн түрүүнд санаанд орж ирдэг зүйлсийн нэг юм. Гэсэн хэдий ч хоёртын тоонууд нь шинээр суралцаж буй хүмүүсийн хувьд маш хэцүү ойлголт байж болох юм
Альтернатив ба шууд гүйдлийн хоорондох ялгаа: 13 алхам
Альтернатив гүйдэл ба шууд гүйдлийн хоорондох ялгаа: Цахилгаан нь ихэвчлэн DC байдаг гэдгийг хүн бүр мэддэг, гэхдээ өөр төрлийн цахилгаан яах вэ? Та Ac -ийг мэдэх үү? AC гэдэг нь юу гэсэн үг вэ? Дараа нь DC ашиглах боломжтой юу? Энэхүү судалгаанд бид цахилгаан эрчим хүчний төрөл, эх үүсвэр, хэрэглээний ялгааг мэдэх болно
Хоёртын тооноос аравтын тооны машин: 8 алхам
Хоёртын тооноос арван тооны тооны машин: Арван нэгдүгээр ангийн компьютерийн инженерийн хувьд би эцсийн төслийг шийдэх ёстой байсан. Эхэндээ би юу хийхээ мэдэхгүй байсан, учир нь үүнд тоног төхөөрөмжийн зарим бүрэлдэхүүн хэсгүүдийг оруулах шаардлагатай байв. Хэд хоногийн дараа манай ангийн найз надад дөрвөн битийн нэмэлт дээр үндэслэсэн төсөл хийе гэж хэлсэн
Хоёртын тоглоом: 9 алхам (зурагтай)
Хоёртын тоглоом: Энэ бол хоёртын тоог сурахын тулд Tinkercad Circuits дээр бүтээсэн тоглоом юм. https://www.tinkercad.com/things/erDquXcpyW8 Хэрэв та энэ гарын авлагыг дагаж, өөрийн гараар бүтээхийг хүсч байвал файл, кодыг https://github.com/kee… дээрээс миний github дээрээс олж болно
Хоёртын шилжүүлэгч тоглоом: 6 алхам
Хоёртын шилжүүлэгч тоглоом: Ben Heck -ийн Hex Game -ээс санаа авсан Энэ бол найз нөхөддөө хоёртын файлын талаар заах зорилгоор бүтээсэн хоёртын тоглоом юм. Эцэст нь би өөрийгөө сэрүүн байлгахын тулд хичээл дээр тоглодог. Та дэлгэцэн дээрх санамсаргүй денар (0-255) эсвэл арван зургаатын (0-ff) утгыг хоёртын формат руу хөрвүүлээд дараа нь биднийг