Оглавление:

Десятибитный компьютер - VHDL: 4 шага
Десятибитный компьютер - VHDL: 4 шага

Видео: Десятибитный компьютер - VHDL: 4 шага

Видео: Десятибитный компьютер - VHDL: 4 шага
Видео: Как собрать компьютер из транзисторов. Пошагово с пояснением. 2024, Ноябрь
Anonim
Десятибитный компьютер - VHDL
Десятибитный компьютер - VHDL

Сделано: Тайлер Старр и Эззидден Газали

Вступление

Этот проект был завершен как часть финального проекта CPE 133 в Cal Poly SLO. Это отличный проект для тех, кто хочет понять, как компьютеры работают на самом низком уровне и как они решают свои задачи. Проект создан по образцу 8-битного компьютера SAP, описанного в книге Альберта Мальвино «Цифровая компьютерная электроника». Однако мы увеличили размер компьютера до 10 бит, чтобы можно было реализовать больше кодов операций (кодов операций). Пользователь может запрограммировать компьютер на выполнение набора операций, введя определенные инструкции.

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

Компьютер написан на VHDL и будет находиться на плате Basys 3 от Digilent. Входы будут сопоставлены с переключателями в нижней части платы. Два тактильных переключателя будут использоваться для функций сброса и записи. Результат будет отображаться на 7-сегментном дисплее платы.

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

Шаг 1: материалы

Материалы
Материалы

Все, что требуется для этого проекта, - это плата Basys3 FPGA от Digilent и провод micro USB для подключения платы к вашему компьютеру.

Шаг 2: Блок-схема схемных модулей

Блок-схема схемных модулей
Блок-схема схемных модулей
Блок-схема схемных модулей
Блок-схема схемных модулей
Блок-схема схемных модулей
Блок-схема схемных модулей

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

Счетчик команд

Описание входов: вход представляет собой 5-битный вход для загрузки числа в счетчик программы. Cp, когда высокий счетчик считает по спадающим фронтам часов. Clr сбрасывает счетчик на 0. Ep, когда счетчик высокий, выводит текущий счет. Sp при высоком значении счетчика устанавливает счет равным числу на входе

  • Описание выходов:

    вывод - это копия счетчика для использования на светодиодах 0-15. Count выводит текущий счетчик.

  • Общее место в системе: этот счетчик отслеживает место в памяти, в котором находится программа. Все программы начинаются с адреса памяти 00000 (0) и идут до 11111 (31), если не используется остановка. В операторах перехода счетчик программы продолжает отсчет с адреса, на который программа переходит.

Входной мультиплексор

  • Описание входов: Адрес принимает входные данные от переключателей с 11 по 15. MAR принимает входные данные из 10-битного регистра, используемого в качестве MAR. Программа контролирует, какой ввод направлять на вывод.
  • Описание выходов: выход направляет выбранный вход в ОЗУ.
  • Общее место в системе: этот мультиплексор определяет, направлять ли адрес от коммутаторов или шины к ОЗУ. В программном режиме маршрутизируется адрес от переключателей, а в рабочем режиме маршрутизируется адрес с шины.

ramMUX

  • Описание входов: userInput - это вход, который пользователь вводит в программном режиме. aRegInput - это данные, содержащиеся в регистре A, они используются во время операции перемещения. control - это выбор для этого MUX.
  • Описание выходов: выход - это 10-битные данные, вводимые в ОЗУ.
  • Общее место в системе: этот мультиплексор выводит 10-битные входные данные, которые используются в модуле RAM. Когда бит управления высокий, MUX выводит данные, которые пользователь ввел в программном режиме. Когда бит управления низкий, мультиплексор выводит данные на шину управления.

ramModule

  • Описание входов: inputData - это данные, хранящиеся в RAM. inputAddress - это место, где хранятся данные. Программа указывает, находится ли компьютер в программном или рабочем режиме. readWrite указывает, выполняется ли операция чтения или записи. notCE - это управляющий бит для модуля RAM. move указывает, что выполняется операция перемещения.
  • Описание выходов: outputDataToBus - это данные, которые поступают из ОЗУ на шину. outputData и output Address - это данные и адрес, которые идут в регистр команд.
  • Общее место в системе: ОЗУ позволяет хранить программы и данные в памяти перед запуском программы. Как только программа запущена, RAM получает адрес от MAR и выводит данные по этому адресу на шину.

адресROM

  • Описание входов: opCode - это входные данные, содержащие адрес кода операции, выполняемого компьютером.
  • Описание выходных данных: opCodeStart - это адрес памяти, который указывает первую ячейку микрокоманды соответствующего opCode.
  • Общее место в системе: этот модуль принимает фиксированную микрокоманду и выводит ячейку памяти, которая соответствует началу этой последовательности микрокоманд.

ringCounter

  • Описание входов: сброс устанавливает счетчик обратно на 100000 (первое «состояние T»). Clk увеличивает счетчик на единицу по спадающему фронту тактового сигнала. NOP указывает, что текущее состояние / цикл является циклом «без операции».
  • Описание выходов: count - это выход счетчика.
  • Общее место в системе: кольцевой счетчик управляет предварительно установленным счетчиком и определяет шесть микрошагов в каждом цикле команд (T1-T6).

preCounter

  • Описание входов: opCodeStart - это место в памяти микрокоманд для выполняемого opCode. T1 сбрасывает счетчик на 0, когда он высокий. Когда T3 высокий, загружается opCodeStart, и отсчет продолжается с этого места в течение оставшихся 3 циклов (T4-T6). Clr устанавливает счетчик на 0. Clk увеличивает счетчик на единицу по спадающему фронту.
  • Описание выходов: controlWordLocation выводит адрес в памяти управляющего слова, которое должно быть выполнено.
  • Общее место в системе: каждый код операции имеет 3 микро-инструкции. Счетчик увеличивается на 1, начиная с 0 для первых 3 циклов (цикл выборки). Затем счетчик запускается кольцевым счетчиком для загрузки адреса в opCodeStart и увеличивается на 1 для оставшихся 3 циклов. Таким образом preCounter контролирует последовательность выполняемых микрокоманд.

controlROM

  • Описание входов: controlWordLocation - это адрес controlWord, который будет выводить controlROM. NOP указывает, что это местоположение "не работает".
  • Описание выходов: controlWord - это управляющее слово, которое включает / выключает различные компьютерные модули для выполнения желаемой операции.
  • Общее место в системе: этот модуль декодирует ячейку памяти из preCounter и выводит управляющее слово для желаемой операции.

АЛУ

  • Описание входов: A и B - это входы из регистров A и B, над которыми ALU выполняет арифметические и логические операции. Когда вычитание активно, это означает, что B вычитается из A.
  • Описание выходных данных: результат - это результат сложения A и B или вычитания B из A. Выходы больше, чем меньше, меньше и равно, чтобы указать, используется ли (AB или A = B) в модуле условного перехода. ошибка указывает на переполнение или недостаточное заполнение, когда он активен.
  • Общее место в системе: ALU содержит логику для арифметических и логических операций, выполняемых компьютером. Этот модуль может складывать и вычитать два 10-битных двоичных числа. ALU также может определить, если A> B, A

условныйJmp

  • Описание входов: inputCount используется для фиксации текущего счетчика. inputAddress используется для фиксации адреса, на который будет выполнен переход. loadFromRegister, когда низкие защелки inputAddress. loadCount, когда низкие фиксируются inputCount. когда outputEnable имеет низкий уровень, для выхода устанавливается адрес, на который нужно перейти. gT, iT и eQ определяют, какое условие проверяется. moreThan, lessThan и equalTo - это входы от ALU, указывающие результат сравнения между A и B. По фронту нарастания тактового сигнала Clk inputCount и inputAddress считываются в регистры.
  • Описание выходов: outputJmp - это адрес, который будет считывать программный счетчик.
  • Общее место в системе: этот модуль обрабатывает условные и безусловные переходы для компьютера. На основе входных данных gT, iT и eQ модуль определяет, какое условие проверять и является ли это условие истинным или ложным. Если условие истинно, выводится адрес инструкции, к которой нужно перейти, в противном случае выводится счетчик следующей инструкции.

binToBCD

  • Описание входов: пронумеруйте 10-битное число, которое нужно преобразовать в двоично-десятичное число.
  • Описание выходов: сотня цифра в разряде сотен двоичного числа. Десятки цифра в разряде десятков двоичного числа. единица цифра в разряде единиц двоичного числа.
  • Общее место в системе: этот модуль преобразует 10-битное число из выходного регистра в BCD, чтобы наш четырехзначный драйвер дисплея отображал число в десятичном виде на 7-сегментном дисплее.

fourDigitDriver

  • Описание входов: число - это 16-битный двоичный вход, который передается на декодер. inClk - это внутренние часы платы Basys, которые используются в качестве тактового делителя. RST сбрасывает часы, используемые для ввода цифр.
  • Описание выходов: анод определяет, какая цифра будет подсвечиваться. цифра - это номер входа в декодер.
  • Общее место в системе: этот модуль управляет декодером для вывода двоично-десятичного числа на дисплей.

декодер

  • Описание входов: inputNumber - это цифра, поступающая от драйвера и которая будет декодирована.
  • Описание выходов: катоды определяют, какие катоды будут включены для отображения нужной цифры.
  • Общее место в системе: этот модуль декодирует цифру, которая должна отображаться на 7-сегментном дисплее.

fourDigitDisplay

  • Описание входов: число - это номер, который будет отображаться на 7-сегментном дисплее. error указывает, когда на дисплее должно отображаться «Err». Clk - это тактовый сигнал, на котором работает дисплей. Этот сигнал должен быть около 60 Гц, чтобы дисплей мог отображать все 4 цифры одновременно.
  • Описание выходов: анод определяет, какое разрядное место разрешено. cathode определяет, какие катоды активируются для отображения нужной цифры.
  • Общее место в системе: этот модуль отображает число на 7-сегментном дисплее. Обратитесь к руководству по эксплуатации платы Basys 3 для получения информации о том, какие катоды и аноды активируются для использования дисплея. Когда бит ошибки высокий, на дисплее отображается «Err».

outputMUX

  • Описание входов: progModeInput определяет, какие светодиоды включены в режиме программирования. runModeInput определяет, какие светодиоды включены в рабочем режиме. modeSelect - это бит выбора или управления для MUX.
  • Описание выходов: ledOutput указывает, какой светодиод будет включен.
  • Общее место в системе: в зависимости от режима, в котором находится компьютер (программа или ром), MUX будет включать разные светодиоды. В программном режиме (для параметра modeSelect установлено значение «0») на мультиплексоре загораются светодиоды, напоминающие место в памяти, в котором находится компьютер, и его содержимое. В режиме выполнения (modeSelect равен «1») MUX используется для отладки, но может быть настроен для отображения чего-либо еще.

clockDivider

  • Описание входов: команда stop считывает с шины пять битов MSB для обнаружения команды остановки ('11111') и останавливает часы. inputClk - это внутренний тактовый сигнал платы Basys 3.
  • Описание выходных данных: ouputClk - это новые замедленные часы.
  • Общее место в системе: эти часы используются для замедления работы компьютера, чтобы пользователь мог определить, что происходит. Часы могут работать намного быстрее, однако в настоящее время они установлены на 2 Гц.

triStateBuffer

  • Описание входов: Din - это 5-битный вход, идущий в буфер. Ep - управляющий бит.
  • Описание выходов: Dout - это 5-битный выход буфера.
  • Общее место в системе: когда бит управления Ep активен, буфер выводит входные данные. Когда управляющий бит не активен, буфер ничего не выводит.

tenBitDRegister

  • Описание входов: Dbus - это вход, к которому подключен регистр. Clk позволяет регистру считывать данные по нарастающему фронту тактового сигнала. ARST асинхронно устанавливает регистр в 0. Когда outputEnable имеет низкий уровень, содержимое регистра является выходом. Когда readIn низкий, регистр фиксирует Dbus на переднем фронте тактового сигнала.
  • Описание выходов: Qbus - это выход регистра.
  • Общее место в системе: регистр многократно используется на компьютере и используется для хранения информации при выполнении операций.

FiveBitDRegister

  • Описание входов: Dbus - это вход, к которому подключен регистр. Clk позволяет регистру считывать данные по нарастающему фронту тактового сигнала. ARST асинхронно устанавливает регистр в 0. Когда outputEnable имеет низкий уровень, содержимое регистра является выходным. Когда readIn низкий, регистр фиксирует Dbus на переднем фронте тактового сигнала.
  • Описание выходов: Qbus - это выход регистра.
  • Общее место в системе: регистр многократно используется на компьютере и используется для хранения информации при выполнении операций.

Шаг 3: Код

Ниже находится папка, содержащая файлы ограничений и исходные файлы для 10-разрядного компьютера.

Шаг 4: демонстрация и образец кода

Видео выше демонстрирует, как программировать 10-битный компьютер на плате Basys 3 FPGA. PDF-файл, содержащий коды операций и образец программы, также прилагается ниже.

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