Оглавление:

Матч между двоичными и десятичными числами: 10 шагов
Матч между двоичными и десятичными числами: 10 шагов

Видео: Матч между двоичными и десятичными числами: 10 шагов

Видео: Матч между двоичными и десятичными числами: 10 шагов
Видео: Информатика. Архитектура ПК: Представление целых чисел в памяти ПК. Центр онлайн-обучения «Фоксфорд» 2024, Ноябрь
Anonim
Image
Image
Настройка делителя тактовой частоты
Настройка делителя тактовой частоты

Это руководство покажет процесс и модули, необходимые для создания нашей игры на соответствие двоичных и десятичных чисел. В течение 60 секунд пользователи будут переводить и вводить столько случайно сгенерированных десятичных чисел на семисегментном дисплее в двоичный, переключая переключатели и отправляя запрос с помощью кнопки предположения. После завершения будет отображен окончательный счет, а затем будет выполнен сброс для повторного воспроизведения.

Понимание бинарных и быстрых рефлексов полезно для того, чтобы преуспеть, но кнопка сброса предусмотрена на тот случай, если кто-то захочет немедленно повторить попытку.

Шаг 1: Настройка делителя тактовой частоты

В основе всего этого проекта лежит правильная синхронизация всех частей этой штуковины. Наш конечный автомат использует внутренние часы, но семисегментный дисплей и таймер должны использовать измененную версию часов.

Эти «новые часы» происходят от деления внутренних часов на желаемый период для достижения определенной частоты, необходимой для каждого конкретного компонента. Это было сделано в предыдущих лабораторных работах, и по опыту мы знаем, что на таймере цифра «единицы» установлена на 0,1 Гц, а цифра «десятки» - на 1 Гц.

Входы: ClkIn, делитель (32 бит)

Выходы: ClkOut

Шаг 2: Создание конечного автомата (FSM)

Создание конечного автомата (FSM)
Создание конечного автомата (FSM)
Создание конечного автомата (FSM)
Создание конечного автомата (FSM)
Создание конечного автомата (FSM)
Создание конечного автомата (FSM)

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

Помните, что конечный автомат на самом деле не выполняет функции, указанные ниже, вместо этого он просто сообщает, в каком состоянии находится программа и в каком состоянии. То, что происходит на самом деле, определяется верхним модулем, описанным ниже.

Начальное состояние (000)

Состояние запуска - это состояние, в котором пользователь будет начинать, пока входной сигнал запуска не станет высоким, это также состояние, которое будет достигаться при каждом нажатии кнопки сброса.

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

Состояние игры - это начало игры, где генерируется случайное число, и пользователь переключает переключатели для создания ввода. После нажатия кнопки угадывания игра переходит в состояние проверки.

Проверить состояние (011)

В этом состоянии используется компаратор, который сравнивает значения ввода пользователя и случайно сгенерированного числа. Если отправка верна, равное значение высокое и автомат переходит в состояние оценки; однако, если отправка неверна, конечный автомат возвращается в состояние отображения до тех пор, пока отправка не будет правильной.

Это состояние проверки происходит относительно быстро по сравнению с другими, так как это происходит только до тех пор, пока кнопка проверки нажата.

Оценка состояния (101)

Поскольку одинаковое значение велико, отправка была правильной. В этом состоянии значение оценки увеличится на единицу, и пользователю будет сгенерировано новое число для ввода. Это новое число возвращает нас в начальное состояние, где пользователь снова будет переключать переключатели.

Конечное состояние (100)

Как только таймер на 60 секунд истечет, входной тайм-аут будет высоким, и пользователь перейдет в конечное состояние, в котором отображается окончательный счет. Затем будет нажат вход сброса, и конечный автомат снова запустится в состоянии запуска.

Входы: Clk, rst, start, guess, equal, timeout.

Выход: состояние (3 бита)

Шаг 3: нанесение на карту семисегментного дисплея

Отображение семисегментного дисплея
Отображение семисегментного дисплея
Отображение семисегментного дисплея
Отображение семисегментного дисплея
Отображение семисегментного дисплея
Отображение семисегментного дисплея

Семисегментный дисплей является ключевой частью всего проекта, поскольку первые две цифры на экране используются в качестве выходных данных генератора случайных чисел, а последние две цифры являются таймером. Хотя мы реализовали пример этого в последней лабораторной работе с точки зрения наличия цифр на экране, он был отображен в шестнадцатеричном формате. Чтобы решить эту проблему, мы использовали преобразователь и делитель тактовой частоты, которые подробно описаны ниже.

На дисплее отображаются все 0, пока FSM не перейдет в состояние игры; однако в конечном состоянии на дисплее должна отображаться только оценка пользователя.

Поскольку мы используем все четыре цифры семисегментного дисплея, нам нужно достаточно быстро перебирать каждый анод с частотой 300 Гц, чтобы он воспринимался как всегда горящий.

Входы: Clk, семисегментный

Выходы: катоды (7 бит), аноды (4 бит)

Шаг 4: Создание компаратора

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

Этот подмодуль используется в состоянии проверки с точки зрения того, как он сравнивает введенное 7-битное двоичное предположение с фактическим десятичным значением.

У нас был оператор if, который оценивал оба входа и два выхода в зависимости от того, было ли одинаковое значение высоким или низким. Каким бы важным ни был этот модуль, это, безусловно, одна из самых простых программ для разработки в этом проекте.

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

Выход: EQ

Шаг 5: Настройка таймера

Установка таймера
Установка таймера
Установка таймера
Установка таймера

Наш таймер - это, по сути, два разных счетчика, которые увеличиваются с разной скоростью. Один счетчик для значения «один» (первые семь сегментов дисплея) и один счетчик для значения «десятки» (вторая цифра на семисегментном дисплее). Каждая цифра основана на нарастающем фронте часов, и как только счетчик достигнет 60 секунд, time_out будет высоким, и игра завершится и вернется в начальное состояние.

Входы: Clk, состояние (3 бита), начало

Выходы: ток (8 бит), тайм-аут

Шаг 6: проектирование генератора псевдослучайных чисел

Разработка генератора псевдослучайных чисел
Разработка генератора псевдослучайных чисел

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

Число изменяет каждый нарастающий фронт внутренних часов (10 наносекунд) и циклически перебирает все 100 чисел за одну микросекунду. Всякий раз, когда пользователь хочет получить новый номер от генератора чисел, он выводит номер, на котором он был, Хотя этот процесс не является полностью случайным, вероятность нахождения связанных результатов этого процесса достаточно мала, чтобы быть псевдослучайным.

Входы: Clk, changenum, equal

Выходы: число (8 бит)

Шаг 7: Создание конвертера

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

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

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

Ввод: Нумин (8 бит)

Вывод: Numout (8 бит)

Шаг 8: Собираем все вместе в игровом модуле

Собираем все вместе в игровом модуле
Собираем все вместе в игровом модуле
Собираем все вместе в игровом модуле
Собираем все вместе в игровом модуле
Собираем все вместе в игровом модуле
Собираем все вместе в игровом модуле
Собираем все вместе в игровом модуле
Собираем все вместе в игровом модуле

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

Мы разделили этот проект на шесть модулей, показанных выше, чтобы разбить всю штуковину на множество рабочих частей, однако способ их соединения довольно сложен и показан на прилагаемом изображении черного ящика.

Во время игры горят 7 светодиодных индикаторов, чтобы уведомить пользователя о том, что нужно использовать, а когда игра заканчивается, мы также запрограммировали мигание светодиодов.

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

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

Шаг 9: обнаружены дополнительные проблемы

Хотя в этой игре используется всего семь переключателей, в коде установлено 8-битное число. Мы сделали это для того, чтобы иметь более удобный компаратор, который сравнивал бы эти 8 бит с 8-битным числом, которое мы сгенерировали из генератора случайных чисел.

Поначалу оценка также доставила нам немного проблем, потому что мы установили ее увеличение на один балл, когда конечный автомат находился в состоянии оценки; Однако вместо этого произошло то, что результат продолжал расти, пока состояние было в порядке, давая нам необоснованно высокий балл, с которым мы не могли справиться. Мы исправили это, добавив импульсный сигнал, который был синхронизирован с нарастающим фронтом часов, как показано в коде на шаге 8.

Наконец, на отладку таймера потребовалось много времени, так как он искажал наш семисегментный дисплей при обратном отсчете, поэтому нам пришлось изменить его с обратного отсчета с 60 на обратный отсчет с 0.

Шаг 10: исходные файлы и ограничения

Если вы предпочитаете использовать наши исходные файлы, а не создавать свои собственные, вот они. Также включен файл ограничений.

Рекомендуемые: