Съдържание:

Двоична към десетична игра за съвпадение: 10 стъпки
Двоична към десетична игра за съвпадение: 10 стъпки

Видео: Двоична към десетична игра за съвпадение: 10 стъпки

Видео: Двоична към десетична игра за съвпадение: 10 стъпки
Видео: По следам древней цивилизации? 🗿 Что, если мы ошиблись в своем прошлом? 2024, Ноември
Anonim
Image
Image
Настройване на разделителя на часовника
Настройване на разделителя на часовника

Тази инструкция ще покаже процеса и модулите, необходими за създаването на нашата игра за съвпадение на двоично към десетично. В рамките на 60 секунди потребителите ще преведат и въведат възможно най -много произволно генерирани десетични числа на дисплея със седем сегмента в двоичен, като превключат превключвателите и изпратят с бутон за предположение. След като приключи, ще се покаже краен резултат и след това ще се нулира, за да играе отново.

Разбирането на бинарни и бързи рефлекси е полезно, но бутонът за нулиране е предоставен в случай, че човек иска незабавно да опита отново.

Стъпка 1: Настройка на разделителя на часовника

Гръбнакът на целия този проект идва от правилната синхронизация на всички части в този гадже. Нашата машина с крайни състояния използва вътрешния часовник, но седемсегментният дисплей и таймерът трябва да използват променена версия на часовника.

Този "нов часовник" идва от разделянето на вътрешния часовник на желания период, за да се постигне определена честота, необходима за всеки конкретен компонент. Това е правено в предишни лаборатории и от опит знаем, че таймерът има цифрата "единият", зададена на 0,1 Hz, а цифрата "десетки" е 1 Hz

Входове: ClkIn, делител (32 бита)

Изходи: ClkOut

Стъпка 2: Създаване на машина с крайни състояния (FSM)

Създаване на машина с крайни състояния (FSM)
Създаване на машина с крайни състояния (FSM)
Създаване на машина с крайни състояния (FSM)
Създаване на машина с крайни състояния (FSM)
Създаване на машина с крайни състояния (FSM)
Създаване на машина с крайни състояния (FSM)

В нашата машина с крайни състояния решихме, че ще са необходими пет състояния (старт, дисплей, проверка, оценка и край) с пет входа (старт, нулиране, предположение, равно, таймаут). Единственият изход в нашия State Machine е 3 -битово число, което представлява в какво състояние е потребителят (000, 001, 011, 101, 100) по отношение на състоянията по -долу.

Не забравяйте, че машина за крайни състояния всъщност не формира функциите по -долу, а просто казва в какво състояние е програмата и какво. Какво всъщност се случва, се определя от горния модул, обяснен по -долу.

Стартово състояние (000)

Стартовото състояние е мястото, където потребителят ще започне, докато входът за стартиране е висок, това е и състоянието, което ще бъде достигнато всеки път, когато се натисне бутонът за нулиране.

Състояние на играта (001)

Състоянието на играта е началото на играта, където случайното число се генерира и потребителят превключва превключвателите, за да създаде вход. След като бутонът за познаване е натиснат, играта се премества в състояние на проверка.

Проверка на състоянието (011)

Това състояние е мястото, където се използва сравнителят, който ще сравнява стойностите на въведените от потребителя данни и произволно генерираното число. Ако изпращането е правилно, равната стойност е висока и FSM отива в Score State; въпреки това, ако изпращането е неправилно, FSM се връща обратно към състоянието на дисплея, докато изпращането е правилно.

Това състояние на проверка се случва сравнително бързо в сравнение с останалите, тъй като се случва само докато бутонът за проверка е натиснат

Оценка (101)

Тъй като равната стойност е висока, подаването е правилно. В това състояние стойността на резултата ще се увеличи с едно и ще бъде генерирано ново число, което потребителят да въведе. Този нов номер ни връща към началното състояние, където потребителят отново ще превключи превключвателите.

Крайно състояние (100)

След като таймерът от 60 секунди изтече, входът за изчакване ще бъде висок и потребителят достига крайното състояние, където се показва крайният резултат. След това входът за нулиране ще бъде натиснат и FSM отново ще започне от началното състояние.

Входове: Clk, rst, start, предположение, равно, timeout

Изход: състояние (3 бита)

Стъпка 3: Картиране на седемсегментния дисплей

Картиране на седемсегментния дисплей
Картиране на седемсегментния дисплей
Картиране на седемсегментния дисплей
Картиране на седемсегментния дисплей
Картиране на седемсегментния дисплей
Картиране на седемсегментния дисплей

Дисплеят със седем сегмента е ключова част от целия проект, тъй като първите две цифри на екрана се използват като изход на генератора на случайни числа, докато последните две цифри са таймерът. Въпреки че сме приложили пример за това в последната лаборатория по отношение на наличието на цифри на екрана, той беше показан в шестнадесетично число. За да разрешим този проблем, използвахме конвертор и разделител на часовника, който е обяснен по -долу.

Дисплеят показва всички 0, докато FSM влезе в състоянието на играта; в крайно състояние обаче дисплеят трябва да показва само резултата на потребителя.

Тъй като използваме четирите цифри на седемсегментния дисплей, трябва да преминем през всеки анод достатъчно бързо при 300 Hz, за да се възприеме като винаги светещ.

Входове: Clk, седемсегмент

Изходи: катоди (7 бита), аноди (4 бита)

Стъпка 4: Създаване на компаратора

Създаване на компаратора
Създаване на компаратора

Този подмодул се използва в Check State по отношение на това как сравнява 7 -битовото двоично въведено предположение спрямо действителната десетична стойност.

Имахме оператор if, който оценяваше и входовете, и двата изхода в зависимост от това дали еднаква стойност е висока или ниска. Колкото и да е важен този модул, той далеч е една от по -простите програми за проектиране в този проект.

Входове: превключватели (8 бита), номер (8 бита)

Изход: EQ

Стъпка 5: Настройване на таймер

Настройка на таймер
Настройка на таймер
Настройка на таймер
Настройка на таймер

Нашият таймер е по същество два различни брояча, които се увеличават с различни темпове. Един брояч в стойността "единият" (първият седемсегментен дисплей) и един брояч за стойността "десет" (втората цифра на седемсегментния дисплей). Всяка цифра се основава на нарастващия ръб на часовника и след като броячът достигне 60 секунди, time_out ще бъде висок и играта ще приключи и ще се върне в началното състояние.

Входове: Clk, състояние (3 бита), старт

Изходи: Ток (8 бита), таймаут

Стъпка 6: Проектиране на генератора на псевдо произволни числа

Проектиране на генератора на псевдо произволни числа
Проектиране на генератора на псевдо произволни числа

Друг алтернативен метод за генератор на числа специално за този случай е да има повтарящ се брояч от 0-99 (в двоичен формат), който извежда броеното число, когато входът е висок, тъй като това би премахнало необходимостта от използване на LFSR.

Числото се променя всеки нарастващ ръб на вътрешния часовник (10 наносекунди) и преминава през всичките 100 числа за една микросекунда. Всеки път, когато потребителят иска нов номер от генератора на числа, той извежда номера, на който е бил, Въпреки че този процес не е съвсем случаен, вероятността да се намерят свързани резултати от този процес е достатъчно ниска, за да бъде псевдослучайна.

Входове: Clk, changenum, равни

Изходи: номер (8 бита)

Стъпка 7: Създаване на конвертор

Създаване на конвертор
Създаване на конвертор

Необходим компонент е конверторът, който използвахме за показване на десетични числа на седемсегментния дисплей вместо оригиналния шестнадесетичен. Въпреки че и двете числа са базирани на 7 -битово двоично число, ние създадохме цял модул, предназначен за преобразуване на шестнадесетичен в десетичен.

Например, ако крайният ни резултат за резултата беше 0010001 (седемнадесет), седемсегментният дисплей щеше да показва шестнадесетичната стойност 11, вместо десетичното число 17.

Вход: Numin (8 бита)

Изход: Numout (8 бита)

Стъпка 8: Обединяване на всичко в модула на играта

Обединяване на всичко в модула на играта
Обединяване на всичко в модула на играта
Обединяване на всичко в модула на играта
Обединяване на всичко в модула на играта
Обединяване на всичко в модула на играта
Обединяване на всичко в модула на играта
Обединяване на всичко в модула на играта
Обединяване на всичко в модула на играта

За нашите компоненти използвахме необходимите превключватели 0-6, за да може потребителят да превключва, с трите бутона, които да действат като потребителски входни данни за стартиране, нулиране и отгатване. Компонентите на седем сегментния дисплей и часовник също са компоненти, които сме направили от предишни лаборатории, но трябваше да ги променим, за да отговарят на този проект.

Разделихме този проект на шестте модула, показани по -горе, за да разбием целия гадже на много работни части, но начинът, по който те са свързани, е доста сложен и е показан от приложената снимка на черната кутия.

Докато играта се случва, светят 7 светодиода, за да уведомят потребителя кой преминава към употреба, а когато играта приключи, ние също програмираме светодиодите да мигат

Входове: превключватели (8 бита), Clk, нулиране, стартиране, предположение

Изходи: катоди (7 бита), аноди (4 бита), светодиоди (7 бита)

Стъпка 9: Срещат се допълнителни проблеми

Въпреки че в тази игра се използват само седем превключвателя, кодът го е задал като 8 -битово число. Направихме това, за да имаме по -удобен сравнител, който да сравнява тези 8 бита с 8 -битовото число, което генерирахме от генератора на случайни числа.

Резултатът също ни създаде малко проблеми в началото, защото го настроихме да увеличи една точка, когато FSM беше в състояние на оценка; вместо това се случи, че резултатът продължава да нараства, докато състоянието е включено, което ни дава неоправдано висок резултат, с който не можем да се справим. Поправихме това, като добавихме импулсен сигнал, който беше синхронизиран с нарастващия ръб на часовника, както се вижда в кода в стъпка 8.

И накрая, таймерът отне много време за отстраняване на грешки, тъй като би изкривил нашия седемсегментен дисплей, когато отброяваше, така че трябваше да го променим от отброяване от 60 на броене от 0.

Стъпка 10: Изходни файлове и ограничения

Ако предпочитате да изтеглите от нашите изходни файлове, вместо да създавате свои, ето ги. Включен е и файлът с ограничения.

Препоръчано: