Методические указания по проектированию арифметического устройства
Для кого этот документ
- Студентам 3-4 курса, выполняющим курсовую работу по организации ЭВМ
- Требования: знание схемотехники, языка VHDL, теории автоматов
- Необходимое ПО: Quartus II версии 13.1 или новее, ModelSim (опционально)
Цель работы
Приобретение практических навыков проектирования устройств вычислительной техники на современной элементной базе ПЛИС с использованием современного инструментария САПР QUARTUS II и с применением языка VHDL.
Где найти файлы проекта
Все файлы проектов, рассматриваемых в методическом пособии, находятся в соответствующих папках: First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth.
Ссылки на репозитории:
- Папки
First,Second,Third: https://github.com/mf-bmstu-k3/BO - Папки
Fourth,Fifth,Sixth,Seventh,Eighth: https://github.com/mf-bmstu-k3/MYY_BO
Что нужно знать перед началом
- Основы представления чисел в ЭВМ (прямой, обратный, дополнительный код)
- Алгоритмы выполнения арифметических операций (сложение, умножение)
- Принципы построения операционных (ОУ) и управляющих (УУ) автоматов (автоматы Мили и Мура)
Содержание
- Введение
- Схемотехническое проектирование блока операций
- Проект блока операций в виде функциональной схемы с описанием функциональных узлов на языке vhdl
- Проект блока операций на языке vhdl в виде одного модуля
- Проект БО + МУУ на языке VHDL, реализовано только умножение
- Проект БО + МУУ только для умножения с использованием редактора автоматов QII
- Проект БО + МУУ для умножения и сложения
- Проект БО + МУУ для умножения и сложения в виде единого модуля на vhdl
- Проект БО + МУУ для выполнения четырех операций
Введение
Цель курсовой работы - приобретение практических навыков проектирования устройств вычислительной техники на современной элементной базе ПЛИС с использованием современного инструментария САПР QUARTUS II и с применением языка VHDL.
В техническом задании (ТЗ) на курсовую работу по дисциплине «Организация ЭВМ и систем» требуется выполнить проектирование арифметического устройства, реализующего несколько операций в соответствии с индивидуальным вариантом задания. Одна из операций является определяющей, то есть она требует большего количества аппаратных средств для своей реализации. Практически во всех вариантах ТЗ определяющей является операция умножения.
Варианты ТЗ отличаются форматом представления и способом кодирования чисел со знаком. Это могут быть числа целые или дробные. Они могут быть представлены в прямом коде, либо в обратном, либо в дополнительном. Варианты отличаются и алгоритмами выполнения операции умножения. В некоторых случаях требуется использование одного или нескольких корректирующих шагов для получения правильного результата. В некоторых - выполняется преобразование разрядов множителя или обоих сомножителей. В некоторых - такт суммирования пропускается при нулевом разряде множителя, в некоторых нет. Анализ разрядов множителя может выполняться либо со старших разрядов, либо с младших.
В рамках курсовой работы по дисциплине «Теория автоматов», выполняемой в четвертом семестре, студенты должны были разработать алгоритм выполнения определяющей операции, подготовить несколько демонстрационных примеров и составить содержательный граф микропрограммы выполнения этой операции в соответствии с ТЗ.
На следующем этапе выполняется проектирование функциональной схемы блока операций для реализации определяющей операции, то есть умножения. После изучения дисциплины «Схемотехника ЭВМ» студенты должны уже понимать, какие из функциональных узлов потребуются в проекте для реализации заданного алгоритма и как их следует соединить друг с другом в проектируемом устройстве. Другими словами, им необходимо создать некоторую структуру из подходящих аппаратных средств, предназначенную для выполнения определяющей операции, то есть умножения в соответствии с заданным алгоритмом.
Затем рассматриваются возможные алгоритмы выполнения остальных неопределяющих операций, заданных в ТЗ. Причем для реализации следует выбрать те из них, которые в максимальной степени будут приближены к алгоритму выполнения определяющей операции, то есть использовать функциональные возможности той структуры, которая уже включена в проект и предназначена для реализации определяющей операции. В случае необходимости функциональная схема проектируемого устройства корректируется, возможно к ней добавляются новые узлы и устанавливаются новые связи.
На практических занятиях в течении семестра разбирается один из типовых вариантов технического задания, в котором выполняется проектирование арифметического устройства для выполнения операций умножения и сложения целых чисел в обратном коде с формированием признака результата. Причем, в соответствии с ТЗ, анализируются разряды множителя, начиная со старшего, учитывается знак множителя и выполняется сдвиг сумм частичных произведений влево. Такт суммирования не пропускается при нулевом разряде преобразованного множителя. Пример взят из учебного пособия [1].
В соответствием с принципом Глушкова любое устройство, предназначенное для выполнения действий над информацией может быть представлено в виде двух частей – операционной, в которой выполняются действия над информацией, и управляющей части. Используя терминологию из [1] операционную часть проектируемого арифметического устройства в дальнейшем будем называть блоком операций (БО), а управляющую часть местным устройством управления (МУУ). Местным, для того чтобы подчеркнуть его отличие от центрального устройства управления (ЦУУ), входящего в состав процессора. ЦУУ должно заниматься реализацией командного цикла процессора, то есть выборкой команды, её декодированием, вычислением исполнительных адресов и т. д.
Ниже рассматривается несколько подходов к выполнению проектирования цифровых устройств и приводятся проекты, разбираемые на практических занятиях в текущем семестре. В первых трех проектах выполняется проектирование блока операций для умножения и сложения целочисленных операндов, заданных в обратном коде, причем в первом проекте разрядность операндов равна четырем, а в двух других используется настраиваемый параметр - n.
1. Схемотехническое проектирование блока операций
В первом проекте использован традиционный подход, схемотехническое проектирование. После создания функциональной схемы блока операций на этапе логического проектирования из библиотеки доступных элементов выбираются подходящие узлы и настраиваются соответствующим образом для работы в общем проекте, выполняется проектирование комбинационных схем.
Все файлы проекта находятся в папке First. Модуль верхнего уровня содержится в файле blok_oper_sch.bdf. В нем представлена схемная реализация блока операций. В блоке операций используются следующие узлы: регистры ra, rb, rr, rpr, сумматор sum, полученные из библиотечных модулей с помощью инструмента MegaWizard Plug_in Manager QUARTUS II, и четыре комбинационные схемы КС1-КС4, реализованные с использованием логических элементов из библиотеки примитивов QUARTUS II.
Регистр ra выполняет одну единственную микрооперацию – прием первого операнда. Извлекаем из библиотеки параметризованных модулей QUARTUS II, из раздела storage модуль lpm_dff, и настраиваем его на выполнение этой единственной микрооперации. Для управления регистром ra используем сигнал у1. Если у1 не активен, то регистр ra просто хранит своё содержимое, то есть первый операнд.
Регистр rb помимо приема второго операнда в начале выполнения операции умножения выполняет его сдвиг влево, так как по техническому заданию анализ множителя начинается со старших разрядов. Извлекаем из раздела storage библиотеки параметризованных модулей QUARTUS II модуль lpm_shiftreg, и настраиваем его соответствующим образом. Сдвиг выполняется так, чтобы обеспечить сохранность знакового разряда. По этой причине знаковый разряд подаем на самый младший разряд регистра rb. Так как при сдвиге влево регистра rb будет освобождаться именно этот разряд, то для того чтобы его не потерять подаем на вход переноса shiftin регистра rb выход его младшего разряда. Таким образом, знаковый разряд множителя будет перезаписываться каждый раз при выполнении сдвига rb.
Для реализации регистром rb двух микроопераций используем два управляющих сигнала у2 и у3. Первый из них определяет режим работы регистра rb. При активном сигнале у2 выполняется прием второго операнда, иначе выполняется его сдвиг влево. Второй управляющий сигнал у3 разрешает регистру rb реагировать на тактовый сигнал, то есть либо принимать второй операнд, либо сдвигать по положительному фронту тактового сигнала.
Комбинационная схема КС1 подает на первый вход сумматора sum либо +ra, либо –ra, либо ноль. На выходе этой схемы формируется 2n-разрядное значение путем заполнения старших разрядов знаковым. Для управления КС1 используется два управляющих сигнала у4 и у5. При активном значении у4 на выход КС1 подается прямое значение первого операнда. При активном значении у5 на выход КС1 подается значение первого операнда с противоположным знаком. Во всех остальных случаях на выходе КС1 формируется нулевое значение.
Регистр rr используется для запоминания суммы частичных произведений, сдвига её влево, что требуется по техническому заданию и обнуления в начале выполнения операции умножения. По этой причине из библиотеки параметризованных модулей QUARTUS II выбираем регистр сдвига lpm_shiftreg и при настройке этого модуля в MegaWizard добавляем вход синхронной очистки его содержимого. Для управления регистром rr используем три управляющих сигнала: у6 определяет режим работы rr (при активном его значение выполняется запись суммы в rr, иначе выполняется сдвиг влево его содержимого), у7 разрешает регистру rr реагировать на тактовые сигналы, а у8 обнуляет его содержимое по положительному фронту тактового сигнала. Следует напомнить, что при сдвиге числа, представленного в обратном коде влево освободившийся младший разряд следует заполнить знаковым. По этой причине выход shiftout rr соединяем с его входом shiftin.
Для реализации сумматора sum берем из библиотеки модуль lpm_add_sub и с помощью менеджера MegaWizard настраиваем его на выполнение суммирования восьмиразрядных операндов в обратном коде. Следует напомнить, что для получения правильного результате в обратном коде необходимо выход переноса сумматора cout соединить с его входом переноса cin, что мы и сделали в этом проекте.
Комбинационная схема КС2 реализует функцию подключения ко второму входу сумматора либо регистра результата rr, при выполнении умножения, либо регистра rb, при выполнении сложения, причем старшие разряды второго операнда дополняются до восьми разрядов знаковым. Для управления КС2 используем управляющий сигнал у9. Он активен при выполнении умножения.
Комбинационные схемы КС3 и КС4 выполняют анализ n+1 разрядного результата операции сложения и на основании этого анализа формируют двухразрядный признак результата (равно нулю, больше нуля, меньше нуля, переполнение) в соответствии с техническим заданием и признак отрицательного нуля, соответственно.
Проектирование комбинационных схем выполняется традиционным путем. Вначале составляем таблицу истинности, затем заполняем карты Карно и выполняем минимизацию логических функций, то есть находим их тупиковые формы ТДНФ и ТКНФ. Затем реализуем одну из них в основном базисе или любом другом. Каждую комбинационную схему проектируем отдельно, после чего для неё создаем символьное обозначение и добавляем его в схемный проект блока операций.
Регистр признака результата rpr является просто регистром хранения. Он запоминает сформированный КС3 признак результата по положительному фронту синхросигнала, при наличии разрешающего сигнала у10.
Таблицы с управляющими сигналами у и с логическими условиями f представлены в файле blok_oper_sch.bdf в виде текстового комментария в правой верхней части схемы.
В файле test_for_bo.vwf содержатся временные диаграммы для моделирования блока операций. Для операции умножения используются примеры 75, -7-5, -6*-3, 6*-3, -6*3. Время выполнения операции умножения фиксировано и составляет для n разрядных операндов 2n -2 такта. Один такт - прием операндов, n-1 такт выполняется суммирование или +ra, или –ra, или +0, и n-2 такта выполняется сдвиг регистров rb и rr. Для n=4 произведение будет получаться за 6 тактов. Моделирование операции сложения выполняется на шести наборах (3-4, 3+2, -3+3, 7+2, 0+0, -5-3). Используются примеры, когда результат меньше нуля, больше нуля, равен минус ноль, переполнение положительное, равен плюс ноль, переполнение отрицательное. Операция сложения выполняется три такта, если результат отличен от отрицательного нуля, или четыре такта в противном случае.
Главным недостатком схемного проекта является невозможность использования в нем параметра n, задающего разрядность операндов для проектируемого арифметического устройства, необходимость выполнения этапа минимизации логических функций и его трудоемкость.
2. Проект блока операций в виде функциональной схемы с описанием функциональных узлов на языке vhdl
Все файлы этого проекта находятся в папке Second. Модуль верхнего уровня содержится в файле blok_oper.bdf. В нем представлена функциональная схема блока операций для выполнения операций умножения и сложения над n разрядными операндами. Проект, по существу, содержит те же самые модули, что и предыдущий проект. Однако, в отличие от него, все они описаны на языке vhdl с использованием параметра n – разрядности операндов.
Применяя такой подход при проектировании блока операций в курсовой работе студенты приобретут опыт описания как комбинационных схем, так и последовательностных схем с памятью с использованием языка VHDL. Это избавит их от необходимости выполнять минимизацию логических функций и реализовывать их в каких-либо базисах. Допустимым является и смешанное проектирование, когда только часть узлов описывается на языке VHDL.
Комбинационная схема КС1 описана с использованием оператора параллельного присваивания по выбору. Причем в архитектурном теле используется два таких оператора. Один описывает логику формирования старшей половины выходов КС1, а второй описывает логику формирования младшей половины выходов КС1. Следует напомнить, что КС1 передает на первый вход сумматора либо +[A]o, либо –[A]o, либо ноль. Поскольку суммирование выполняется в 2n – разрядной сетке старшие разряды первого слагаемого заполняются его знаковым разрядом.
Комбинационная схема КС2 описана с использованием операторов условного параллельного присваивания. Как и в КС1 один оператор описывает логику формирования старшей половины выходов КС2, а второй описывает логику формирования младшей половины выходов КС2. Следует напомнить, что КС2 передает на второй вход сумматора либо содержимое регистра результата, при выполнении операции умножения, либо содержимое регистра rb, дополненное до 2n разрядов знаковым разрядом, при выполнении операции сложения.
Модуль кс3_mem, по-существу, включает в себя комбинационную схему КС3, формирующую двухразрядный признак результата, комбинационную схему КС4, выявляющую результат, равный отрицательному нулю и регистр признака результата rpr, которые использовались в предыдущем проекте. Составляющая часть имени этого модуля подчеркивает наличие в нем памяти, для хранения признака результата. Следует заметить, что входной порт а, по которому на схему передается n+1 разрядный результат суммирования обоих операндов, объявлен с использованием типа integer. Причем диапазон его значений изменяется от нуля до 2 в степени n+1 минус один. В архитектурном теле декларируется двухразрядный сигнал pr –признака результата. Для его вычисления используется оператор условного параллельного присваивания. Такой же оператор используется для вычисления признака отрицательного нуля. В архитектурном теле содержится еще процесс для описания регистра признака результата rpr.
Для моделирования блока операций рекомендуется использовать файл с временными диаграммами test_for_bo.vwf, который был подробно рассмотрен в предыдущем проекте.
Если возникнет потребность изменить параметр n, то в этом случае придется его изменять в каждом модуле, входящем в состав блока операций, после чего создавать новое символьное обозначение блока операций для последующего подключения к нему местного устройства управления, что является серьезным недостатком.
3. Проект блока операций на языке vhdl в виде одного модуля
Все файлы проекта находятся в папке Third. Модуль верхнего уровня содержится в файле BO.vhd. Описание, по существу, представляет собой предыдущий проект. В отличии от него используется один единственный модуль. В entity блока операций для порта rr, с которого будет считываться результат выполнения операции, указан режим buffer, для того чтобы этот сигнал можно было считывать и внутри архитектурного тела. В отличии от предыдущих двух проектов выходные сигналы логических условий представлены в виде трехразрядной шины f[3..1]. В предыдущих двух проектах использовались одиночные сигналы f3, f2, f1. Следует напомнить, что они соответствуют признаку отрицательного нулевого результата суммирования, анализируемому текущему разряду множителя, и знаку множителя.
В архитектурном теле декларируются сигналы RA, RB, для приема операндов [A]o и [B]o, и их преобразования в процессе выполнения операции, сигналы d, q, s, pr, представляют собой выходные сигналы комбинационных схем КС1, КС2, сумматора и КС3, соответственно. Процессы pr_RA, pr_RB, pr_RR, pr_RPR описывают логику работы соответствующих регистров ra, rb, rr и rpr. Для описания сигнала d, формируемого комбинационной схемой КС1, используются операторы выборочного назначения сигнала (строки 62-70 листинга). Для описания сигнала q, формируемого комбинационной схемой КС2, используются операторы условного назначения сигнала (строки 72-77 листинга).
Сумматор описан с использованием оператора процесса с именем SM (строки 79-89 листинга). В списке чувствительности этого процесса присутствуют сигналы d и q, формируемые комбинационными схемами КС1 и КС2, соответственно.
Для описания сигнала признака результата pr, формируемого комбинационной схемой КС3, используются операторы условного назначения сигнала (строки 103-107 листинга).
В строках 117-120 листинга описана логика формирования логических условий, вырабатываемых блоком операций. Причем для формирования знака множителя и его анализируемого разряда используются операторы безусловного назначения сигнала, а для формирования признака отрицательного нуля – оператор условного назначения сигнала (строки 119,120 листинга).
В отличии от предыдущих проектов для описания блока операций используется один единственный файл BO.vhdl и если есть потребность изменить параметр n, то достаточно сделать это только в одном месте, а точнее в entity блока операций. Это 23 строка листинга.
Для моделирования блока операций используется файл test_for_bo.vwf, который был подробно рассмотрен в первом проекте. Единственное его отличие от прежнего состоит в использовании шины f[3..1] с логическими условиями. Следует напомнить, что в предыдущих двух проектах использовались одиночные сигналы f3, f2, f1.
Польза от рассмотрения такого подхода в курсовой работе состоит в том, что студенты смогут создавать описания своих проектов на языке VHDL, основанные на функциональной схеме, избегая её явного представления в виде схемы. Каждый функциональный узел и некоторые комбинационные схемы представлены в проекте в виде процессов, которые выполняются одновременно и взаимодействуют друг с другом через сигналы, которые декларируются внутри архитектурного тела блока операций. Некоторые комбинационные схемы могут быть описаны в потоковом стиле с использованием параллельных операторов безусловного, условного или выборочного назначения сигналов.
Следует заметить, что такой подход был уже частично использован в предыдущем проекте, когда в одном узле кс3_mem мы, по существу, реализовали две комбинационные схемы КС3, КС4 и регистр признака результата rpr.
4. Проект БО + МУУ на языке VHDL, реализовано только умножение
В четвертом проекте по методическим соображениям выполняется проектирование местного устройства управления для управления блоком операций по части выполнения им операции умножения. Все файлы проекта находятся в папке Fourth. В файле alu_1op.bdf содержится модуль верхнего уровня проекта арифметического устройства, состоящий из местного устройства управления (модуль mealy_state_machine) и блока операций (модуль BO). Для упрощения понимания проект представлен в виде двух модулей, интегрированных в единое арифметическое устройство с помощью схемы. Причем модуль BO создан полностью с использованием языка VHDL, он взят из предыдущего проекта 3. Блок операций выполняет две операции, умножение и сложение, а модуль mealy_state_machine, для упрощения понимания реализует местное устройство управления пока только для выполнения одной операции умножения. Описание этого модуля на языке vhdl содержится в одноименном файле. В entity этого модуля в 7 строке листинга используется параметр n, задающий разрядность операндов. Название этого модуля подчеркивает его реализацию в виде автомата МИЛИ, с которой студенты познакомились ранее при выполнении курсовой работы по дисциплине «Теория автоматов».
Проектирование модуля mealy_state_machine выполнено в соответствии с указаниями из учебного пособия. Вначале выполняется разметка закодированного графа микропрограммы операции умножения. Затем составляется список переходов управляющего автомата, после чего в архитектурном теле МУУ описываются два процесса, определяющих следующее состояние и текущее состояние управляющего автомата, реализованного в виде автомата МИЛИ.
В строке 26 архитектурного тела декларируется перечислимый тип с именем state_type для описания трех состояний управляющего автомата s0, s1, s2, достаточных для выполнения операции умножения. В 28 строке листинга декларируются два сигнала state и next_state, соответствующие текущему и следующему состояниям управляющего автомата. Процесс с именем TS определяет текущее состояние управляющего автомата. По внешнему сигналу set автомат принудительно устанавливается в исходное состояние s0, а по положительному фронту синхросигнала он переключается в следующее состояние, определяемое процессом с именем NS. В последнем процессе описана логика формирования следующего состояния автомата и его выходных сигналов, для управления блоком операций.
В состав местного устройства управления добавлен счетчик анализируемых разрядов множителя. Соответствующий сигнал i декларируется в 29 строке листинга. Для описания поведения счетчика используется процесс count_i, представленный в 77 строке vhdl описания. В списке чувствительности этого процесса содержатся сигналы sno и clk. По сигналу sno счетчик асинхронно устанавливается в исходное состояние, соответствующее единице. По положительному фронту clk счетчик переключается в следующее состояние при наличии разрешающего сигнала incr_i, логика формирования которого описана в строке 75 листинга.
Логика формирования сигнала sko, оповещающего центральное устройство управления (ЦУУ) о завершении операции умножения представлена в 73 строке листинга. Используется оператор условного назначения сигнала.
С целью отладки в entity устройства управления добавлены сигналы incr_i, s_out, next_state_out (строки 17-19 листинга). Первый из них описан с использованием типа buffer потому, что он считывается внутри архитектурного тела. Наблюдая добавленные сигналы при моделировании арифметического устройства можно контролировать правильность формирования сигналов разрешения переключения для счетчика разрядов множителя, текущего и следующего состояний МУУ.
В файле test_alu_1op.vwf содержатся временные диаграммы для моделирования арифметического устройства по части выполнения им операции умножения. Используются те же самые примеры, которые использовались ранее для моделирования блока операций в предыдущих проектах. В отличии от временной диаграммы из файла test_for_bo, на которой задавались не только операнды, но и управляющие сигналы, теперь на ней достаточно задавать операнды А и В и формировать сигнал начала операции sno. Управляющие же сигналы у[1-10] теперь формируются местным устройством управления. Возможность их наблюдения вместе с логическими условиями f[3..1] во время моделирования позволит облегчить процесс отладки арифметического устройства.
Реализовав подобным образом МУУ в проекте своего арифметического устройства студенты смогут:
- размечать закодированный граф микропрограммы выполнения заданной операции,
- определять количество состояний управляющего автомата,
- описывать на языке vhdl устройство управления,
- выполнять комплексную отладку арифметического устройства, содержащего МУУ вместе с блоком операций.
5. Проект БО + МУУ только для умножения с использованием редактора автоматов QII
Рассмотрение в методическом пособии этого проекта нацелено на освоение студентами инструментальных средств САПР QUARTUS II, предназначенных для проектирования управляющих автоматов. Эти средства позволяют в удобной форме не только задавать граф переходов управляющего автомата, условия переходов и формируемые им управляющие сигналы, но и легко конвертировать графическое представление в готовый vhdl файл проекта управляющего автомата.
Все файлы пятого проекта находятся в папке Fifth. Модуль верхнего уровня для лучшего понимания, представлен в файле alu_sm.bdf в виде схемы операционного устройства, состоящего из местного устройства управления, (модуль YA_smf) и блока операций, (модуль BO). Блок операций остался прежним. Он подробно рассмотрен в третьем проекте. МУУ пока реализует только операцию умножения чисел. В его состав в виде отдельного компонента входит управляющий автомат SM, созданный с помощью QUARTUS II и счетчик разрядов множителя, описанный с помощью процесса count_i.
В архитектурном теле МУУ в 28 строке листинга содержится декларация компонента SM, а в 45 строке листинга единственному экземпляру этого компонента присваивается имя inst_YA и прописывается соединение этого компонента с входными и выходными портами МУУ и со счетчиком i. Для этой цели используется оператор port map, использующий позиционное назначение портов этого компонента.
В файле sm.smf содержится граф переходов МУУ для выполнения только одной операции - операции умножения. Файл создан с помощью инструментальных средств редактирования автоматов в Q II. Само описание инструментальных средств содержится в методичке в разделе??. Видеоролик по редактированию автоматов приведен здесь. На графе переходов управляющего автомата присутствует сигнал i состояния счетчика разрядов множителя, который представлен как внешний сигнал. МУУ формирует десять сигналов у[10..1] для управления блоком операций, сигнал конца операции sko для ЦУУ, и сигнал incr_i, разрешающий счетчику анализируемых разрядов множителя переключаться в новое состояние. После конвертации этого файла в vhdl описание получается файл sm.vhd, который также находится в папке с проектом.
Для моделирования проекта следует использовать файл с временными диаграммами test_alu_1op.vwf, о котором шла речь в предыдущем проекте.
Главным недостатком инструментария по редактированию автоматов является невозможность использования параметра n, задающего разрядность операндов.
6. Проект БО + МУУ для умножения и сложения
Все файлы проекта находятся в папке Sixth. В файле alu_2op.bdf содержится модуль верхнего уровня проекта арифметического устройства. В его состав входит модуль BO, подробно рассмотренный в проекте 3 и модуль control_unit_2op, содержащий теперь уже местное устройство управления для выполнения двух операций, умножения и сложения. Модуль control_unit_2op представляет собой модификацию модуля mealy_state_machine из четвертого проекта. В entity этого модуля добавлен входной сигнал cop, задающий выполняемую в устройстве операцию. В архитектурном теле модуля в 27 строке описания декларируется перечислимый тип state_type, в который добавлены два дополнительных состояния s3 и s4 МУУ, необходимые для выполнения операции сложения. Более сложная логика формирования следующего состояния МУУ для двух операций, по-прежнему представлена в процессе NS, описание которого начинается с 43 строки листинга. В список чувствительности этого процесса добавлен сигнал cop, задающий выполняемую операцию.
Переход из s1 в s2 выполняется всегда. А вот управляющие сигналы, формируемые в этом случае будут зависеть от выполняемой операции и логических условий. В листинге присутствуют комментарии, поясняющие формирование управляющих сигналов.
Переход из s2 выполняется в s0, если выполняется умножение и обработали последний разряд множителя n-1. Если выполняется умножение и обработанный разряд множителя не последний, то выполняется переход в состояние s1, формируются сигналы у3, у7 для сдвига влево регистров rb и rr, соответственно.
В состояние s3 выполняется переход, только если выполняется операция сложения. Из s3 возможен только переход в s4, формируется у10, для записи признака результата в регистр rpr. Из s4 всегда выполняется переход в s0 и формируется сигнал конца операции sko.
Для описания сигнала sko используется оператор условного назначения сигнала в 83 строке листинга. Сигнал sko активен в состоянии s2 при выполнении умножения, когда счетчик i=n-1, или в состоянии s4 при выполнении сложения.
В файле test_alu_2op содержатся временные диаграммы для моделирования арифметического устройства для проверки выполнения им операций умножения и сложения. Используются те же самые примеры, которые применялись ранее для моделирования блока операций. То есть пять примеров на умножение и шесть примеров на сложение. С целью упрощения отладки проектируемого устройства на временную диаграмму выведены сигналы логических условий f[3..1], управляющие сигналы для блока операций у[10..1], сигнал s_out, для отображения текущего состояния МУУ, next_state_out, для отображения формируемого следующего состояния, сигнал incr_i, разрешающий счетчику переключаться в следующее состояние. После завершения комплексной отладки арифметического устройства эти сигналы могут быть легко удалены из списка сигналов, отображаемых при моделировании.
Таким образом, шестой проект, по существу, является первым проектом, в котором реализовано арифметическое устройство, выполняющее две операции, заданные в ТЗ.
7. Проект БО + МУУ для умножения и сложения в виде единого модуля на vhdl
Все файлы проекта находятся в папке Seventh. В файле ctrl_un_BO.vhd содержится модуль верхнего уровня проекта арифметического устройства. Этот проект, по существу, аналогичен предыдущему. Отличия касаются только верхнего уровня представления проекта. В нем имеется одно entity, в котором описаны внешние порты проектируемого арифметического устройства. Из entity удалены сигналы, используемые для отладки в предыдущем проекте. В случае необходимости они могут быть легко добавлены вновь. В архитектурном теле содержится совокупность процессов, которые описывают логику работы местного устройства управления МУУ (в предыдущем проекте файл control_unit_2op) и блока операций (в предыдущем проекте файл BO).
Для моделирования арифметического устройства рекомендуется использовать файл test_alu_2op из предыдущего проекта. Сигналы, ранее добавленные для упрощения отладки из него удалены.
Реализация арифметического устройства в виде единого модуля является удобной на завершающем этапе проектирования, так как весь проект описан в одном единственном файле. В дальнейшем этот модуль может быть подключен либо к испытательному стенду для его окончательного тестирования после прошивки кристалла ПЛИС, либо к центральному устройству управления, для реализации процессора в целом, либо к процессорной системе DE 2 -115 Media Computer в качестве модуля аппаратной реализации пользовательской логики.
8. Проект БО + МУУ для выполнения четырех операций
Реализованный в первых трех проектах блок операций помимо умножения и сложения способен выполнить также еще несколько других операций. Следует напомнить, что комбинационная схема КС1, используемая в проекте, может передать на первый вход сумматора значение первого операнда с противоположным знаком. Используя эту возможность можно легко реализовать в арифметическом устройстве ещё две операции: получения операнда с противоположным знаком –[A]o и вычитания первого операнда из второго, то есть –[A]o +[B]o.
Первая из добавленных операций выполняется так. В первом такте принимается операнд [A]о в регистр ra и очищается регистр результата rr. Во втором такте к обнуленному регистру результата rr прибавляется –ra.
Аналогичным образом может быть выполнена вторая из добавленных операций. В первом такте происходит запись операндов в регистры ra и rb. Во втором такте выполняется вычитание первого операнда из второго и запись результата в регистр rr.
Еще одной операцией, которая может быть выполнена на реализованном в первых трех проектах блоке операций является операция арифметического сдвига влево первого операнда, что соответствует умножению его на 2 в степени +1. Операция выполняется так. В первом такте принимается первый операнд в регистр ra и очищается rr. В следующем такте к rr прибавляется +ra, выполняя тем самым пересылку первого операнда в регистр результата. И в третьем такте выполняется арифметический сдвиг влево регистра rr. Следует напомнить, что в случае обратного кода в освободившийся младший разряд rr должен заноситься знаковый разряд, что и реализовано в нашем проекте.
Аналогичным образом в проектируемом арифметическом устройстве может быть реализована операция арифметического сдвига влево первого операнда на требуемое количество разрядов.
В восьмом проекте представлено арифметическое устройство для выполнения четырех операций. Все файлы проекта находятся в папке Eighth. Модуль верхнего уровня описан в виде схемы, состоящей из местного устройства управления МУУ и блока операций БО, он содержится в файле control_unit_for_4op_BO.bdf. Блок операций (файл BO.vhd) подробно рассмотрен в третьем проекте. Он представлен в виде совокупности процессов, каждый из которых описывает логику работы отдельного функционального узла БО.
Местное устройство управления (файл control_unit_for_4op) представляет собой модификацию модуля contr_unit_2op из шестого проекта. Для задания выполняемой операции теперь используется двухразрядная шина cop. В entity модуля для описания сигнала cop используется целочисленное представление (строка 16 листинга). К выполняемым ранее операциям сложения а+b (кодируется целым числом 0) и умножения а*b (кодируется единицей) добавлены еще две операции: вычитание первого операнда из второго b-a (кодируется двойкой) и преобразование к числу с противоположным знаком –а (кодируется тройкой). При выполнении добавленных операций, также, как и при сложении формируется признак результата (равно нулю, меньше нуля, больше нуля, переполнение). Следует заметить, что переполнения при выполнении операции –а произойти не может. Если в результате выполнения вновь добавленных операций будет получен отрицательный ноль, то, как и при выполнении сложения он будет преобразован в ноль положительный, для чего понадобится дополнительный такт времени.
Первый активный такт работы блока операций будет выполняться при наличии активного сигнала начала операции sno.
Во втором такте для любой операции выполняется безусловный переход из состояния s1 в s2. Управляющие сигналы будут зависеть от выполняемой операции и логических условий.
Для того, чтобы записать результат суммирования в регистр результата rr всегда активны должны быть сигналы у6 и у7.
Сигнал у4, управляющий подачей на первый вход сумматора значения +ra, активен, если выполняется умножение и логические условия нех1х2, то есть знак множителя равен нулю, а текущий анализируемый разряд равен 1, или выполняется операция сложения.
Сигнал у5, управляющий подачей на первый вход сумматора значения -ra, активен, если выполняется умножение и логические условия х1нех2, то есть знак множителя отрицательный, а текущий анализируемый разряд равен нулю, или выполняется вычитание, или взятие операнда с противоположным знаком.
Сигнал у9, управляющий подачей на второй вход сумматора, должен быть активен при выполнении умножения или взятии операнда с противоположным знаком. В этом случае на второй вход сумматора будет подаваться значение с регистра результата rr.
Файл test_alu_for_4op содержит наборы для моделирования арифметического устройства для проверки выполнения им четырех операций. Рассмотрены следующие три примера умножения:
- 6*-3, -7*-1, -5*5,
пять примеров сложения:
- 3+(-5), 5+ (-1), 6+(-6), -5+ (-3), 0+0
четыре примера вычитания:
- -1+5, -(-1) +(-3), -3+(-6), -4+4;
и три примера взятия первого операнда с противоположным знаком:
- -5, -(-1), -0.
Чеклист выполнения
- Изучить ТЗ и определить алгоритм выполнения определяющей операции
- Разработать и смоделировать блок операций (схемотехнически или на VHDL)
- Спроектировать местное устройство управления (МУУ)
- Интегрировать БО и МУУ в единое устройство
- Провести комплексное моделирование на всех типах операций
- Подготовить отчет с временными диаграммами и листингами кода
Часто задаваемые вопросы (FAQ)
Q: Какой метод проектирования лучше выбрать? A: Рекомендуется начинать с функциональной схемы (метод 2 или 3), так как это дает лучшее понимание структуры устройства. В дальнейшем можно перейти к чистому VHDL описанию (метод 4 или 8).
Q: Зачем нужно местное устройство управления (МУУ)? A: МУУ разгружает центральный процессор от выполнения микроопераций конкретных арифметических команд, позволяя выполнять их автономно.