Основы вычислительной техники. Методические рекомендации по курсовой работе. Учебное пособие
.pdf
|
|
|
|
|
|
|
|
|
Таблица 2.2 |
|
Пример заполненной таблицы с результатами тестирования сумматора модулей чисел |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Входные воздействия |
|
|
Результат |
|
||||
Тест |
|
|
|
|
|
|
|
|
|
|
a[7..0] |
b[7..0] |
cin |
s[7..0] |
cout |
Соответствует |
|||||
|
|
|
|
|
|
|
ожидаемому |
|||
|
двоичное |
десятичное |
двоичное |
десятичное |
двоичное |
десятичное |
||||
|
|
|
|
|
|
|
|
|
|
|
Суммирова- |
00000101 |
5 |
00101000 |
40 |
0 |
00101101 |
45 |
0 |
да |
|
00101101 |
45 |
00001001 |
9 |
0 |
00110110 |
54 |
0 |
да |
||
ние без пере- |
||||||||||
00000101 |
5 |
00101000 |
40 |
1 |
00101110 |
46 |
0 |
да |
||
полнения |
||||||||||
00101101 |
45 |
00001001 |
9 |
1 |
00110111 |
55 |
0 |
да |
||
|
||||||||||
Суммирова- |
11111100 |
252 |
00101000 |
40 |
0 |
00100100 |
36 |
1 |
да |
|
11111111 |
255 |
00000001 |
1 |
0 |
00000000 |
0 |
1 |
да |
||
ние с пере- |
||||||||||
10000000 |
128 |
10000000 |
128 |
1 |
00000001 |
1 |
1 |
да |
||
полнением |
||||||||||
10100000 |
160 |
10011010 |
154 |
1 |
00111011 |
59 |
1 |
да |
||
|
||||||||||
Крайние |
00000000 |
0 |
00000000 |
0 |
0 |
00000000 |
0 |
0 |
да |
|
случаи |
|
|
|
|
|
|
|
|
|
|
11111111 |
255 |
11111111 |
255 |
1 |
11111111 |
255 |
1 |
да |
||
21
счисления используйте команду Radix из контекстного меню, вызываемого для имени соответствующего сигнала на временной диаграмме.
2. Сравните полученные результаты с ожидаемыми: для тестов без переполнения результат s[] должен быть равен сумме операндов a[] и b[], cout = 0; для тестов с переполнением сигнал cout должен быть равен единице. Объясните значение модуля результата s[] в тестах с переполнением. Добейтесь полного совпадения всех полученных результатов с ожидаемыми.
Рис. 2.2. Окно ввода произвольного двоичного значения для сигнала на временной диаграмме
а)
б)
Рис. 2.3. Временная диаграмма с результатами тестирования восьмиразрядного двоичного сумматора:
а– отображение значений в двоичной системе счисления;
б– отображение значений в десятичной системе счисления
22
Рис. 2.4. Иллюстрация процесса редактирования временной диаграммы
3.Закройте окно с результатами моделирования.
4.Разработайтесобственныйплантестированиясумматорамодулейчиселвсоответствиисиндивидуальнымзаданием(см.прил.2).
5.Выполните редактирование теста, чтобы привести его в соответствиеразработанномуплану.Дляэтоговокнередакторавременных диаграмм Simulation Waveform Editor выделите сигналы, которые необходимо изменить, и назначьте для них новые значения, используя кнопки на панели инструментов Waveform Editor в верхней части окна. Например, для выбора значения сигналов на входе a[7..0] на интервале от 80 до 160 нс нужно дважды щелкнуть на соответствующем значении на временной диаграмме (рис. 2.4). Затем нужно выбрать команду Arbitrary Value, установить новое желаемое двоичное значение сигналов и нажать кнопку ОК.
2.3. Рекомендуемая программа тестирования сумматора модулей чисел
1.Выберите подходящие под условия индивидуального задания двоичныезначенияоперандовa[7..0]иb[7..0],атакжебитвходного переносаcin.Значениядолжнысоответствоватьтестовымслучаям из шаблона плана тестирования: суммирование двух модулей чисел без переполнения и с переполнением, с использованием бита переноса и без. Оформите план тестирования, используя рассмотренный ранее шаблон в виде таблицы (см. табл. 2.1).
2.Полностью заполните столбцы входных воздействий, записав десятичныепредставлениядлявыбранныхзначенийa[7..0]иb[7..0].
3.Реализуйте тест в форме временной диаграммы в среде Quartus, задавая входные воздействия во времени в том же порядке,
23
что и в плане тестирования. Проведите функциональное моделирование работы устройства.
4.Запишите в таблицу двоичные значения s[7..0] и значения бита cout, полученные в результате моделирования (см. табл. 2.2).
5.Дополните результаты, записав для s[7..0] десятичные значения, равные полученным при моделировании двоичным.
6.Убедитесь, что полученные результаты тестирования совпадают с ожидаемыми. Если результаты моделирования не совпадают с ожидаемыми, определите и устраните причину несоответствия.
7.Завершите моделирование, закрыв окна с временными диаграммами.
Впояснительную записку включите снимок с экрана со схемой исследуемого сумматора, полностью заполненный план тестирования и соответствующие ему снимки экрана с результатами моделирования сумматора с отображением значений в двоичной
и десятичной системе счисления.
Контрольное задание. По указанию преподавателя модифицируйте входные данные теста и объясните полученные результаты.
2.4. Подготовка к использованию сумматора модулей чисел как библиотечного модуля
1.Любым известным способом откройте файл comb_adder.bdf со схемой созданного восьмиразрядного сумматора.
2.Создайтесимволдляэтогосумматора,используяменюFile→
→Create/Update → Create Symbol Files for Current File. Оставьте предложенное по умолчанию имя. Нажмите ОК.
Созданный библиотечный модуль comb_adder будет использоваться в следующих разделах работы.
2.5. Сохранение архива проекта
Для эффективного переноса проекта Quartus между компьютерами, а также для удобства обмена проектами рекомендовано использовать встроенный в Quartus механизм архивации проектов.
24
Рис. 2.5. Окно настройки архиватора проекта
Для архивации проекта вызовите окно Archive Project через менюProject→ArchiveProject….Воткрывшемсяокне(рис.2.5)нажмите кнопку Archive. Созданный архив будет сохранен в папку проекта с расширением qar
. По умолчанию архив содержит минимально необходимый для восстановления проекта набор файлов и имеет малый размер.
Сохраните архив проекта в портфолио.
2.6. Сравнение чисел без знака на многоразрядном комбинационном двоичном сумматоре с использованием дополнительного кода
Арифметическое сравнение на неравенство модулей чисел возможноспомощьювыполнениянасумматореоперациивычитания санализомзнакарезультата.Длявыполненияоперациисравнения a[] ≥ b[] (ageb) требуется из a[] вычесть b[] и проанализировать состояние старшего разряда результата на выходе cout.
Используя сумматор модулей чисел для выполнения операции вычитания,числоb[]можноперевестивдополнительныйкод.При этом будет выполнено сложение |a[]| и 2n – |b[]|, где 2n – число, до которого берется дополнение. Это число равно весу разряда cout в n-разрядном сумматоре.
Рассмотрим два исхода операции вычитания. Для a[] ≥ b[] исход будет следующий:
|a[]| + 2n – |b[]| = 2n +(|a[]| – |b[]|).
В этом случае результат вычитания s[] = |a[]| – |b[]| является положительным числом, т. е. представлен в прямом коде, а в разряде cout,имеющемвес2n,оказываетсяединица.Тожеверно,когдарезультат вычитания принимает значение ноль.
25
Для a[] < b[] исход будет следующий:
|a[]| + 2n – |b[]| = 0 +2n – (|b[]| – |а[]|).
В этом случае результат вычитания s[] отрицательный. В скобках заключен модуль результата вычитания, а сам результат представлен в дополнительном коде и равен 2n – (|b[]| – |а[]|). Перенос в разряд cout при этом отсутствует.
Выполните исследование по следующей программе.
1.Создайтеновыйпроектсименемadder_mod_comp.Настранице добавления файлов Add Files нажмите на кнопку User Libraries.
Воткрывшемся окне (рис. 2.6) укажите путь к проекту adder_mod в качестве пользовательской библиотеки. Нажмите OK. В остальном следуйте тем же шагам, что и при создании проекта adder_mod
(см. гл. 1).
2.Создайте файл схемного ввода с именем adder_mod_comp_ ageb.bdf.Установитеегофайломверхнегоуровняиерархиипроекта.
3.Добавьте на схему созданный ранее библиотечный модуль двоичного комбинаторного сумматора модулей чисел. При поиске элементов в окне Symbol введите имя библиотечного модуля: comb_adder (рис. 2.7).
4.Дополните схему элементами ввода и вывода, как показано на рис. 2.8.
Всхеме этого устройства дополнение кода b[7..0] получается инвертированием b[7..0] и подачей единицы на вход cin сумматора (единицы младшего разряда).
Для инвертирования входа b[7..0] сумматора щелкните по символу правой кнопкой мыши и во всплывшем окне выберите
Рис. 2.6. Окно задания путей библиотек проекта
26
Рис. 2.7. Окно добавления ранее созданного библиотечного модуля
Рис. 2.8. Схема компаратора на больше либо равно на базе двоичного сумматора модулей чисел
Properties, щелкните вкладку Ports и для порта b[7..0] в столбце In- versionпоставьтеAll.Инверсиясигналапоказананасхемекружком на соответствующем входе сумматора.
5. Выполните компиляцию проекта (анализ и синтез).
Далееследуйтерекомендованнойвразд.2.3программетестирования.Создайтеизаполнитевсоответствиисиндивидуальнымзаданием таблицу с планом тестирования компаратора (см. прил. 2). Внесите в таблицу необязательный для работы компаратора сигнал s, который может потребоваться для объяснения результатов. Дополнительно включите в план тестирования случай, когда a[] = b[].
В пояснительную записку включите снимок с экрана со схемой исследуемого компаратора, пояснение о принципе работы компаратора, полностью заполненный план тестирования и соответствующий ему снимок экрана с результатами моделирования компаратора.
27
2.7. Сравнение чисел без знака на многоразрядном комбинационном двоичном сумматоре с использованием обратного кода
Операцию вычитания числа b[] можно проводить, используя обратныйкод.Приэтомосуществляетсясложение|a[]|и2n –|b[]|–1мр, где2n –число,докоторогоберетсядополнение;1мр –единицамлад- шего разряда.
Рассмотрим два исхода операции вычитания. Для a[] > b[] исход будет следующий:
|a[]| + 2n – |b[]| – 1мр = 2n +(|a[]| – |b[]| – 1мр).
В этом случае результат вычитания s[] = |a[]| – |b[]| – 1мр при любых положительных значениях разности |a[]| – |b[]| является положительным числом, т. е. представлен в прямом коде. В разряде cout, имеющем вес 2n, оказывается единица.
Для a[] ≤ b[] исход будет следующий:
|a[]| + 2n – |b[]| – 1мр = 0 + 2n – (|b[]| – |а[]|) – 1мр.
В этом случае результат вычитания s[] всегда отрицательный, даже когда a[] = b[]. Это значит, что s[] представлено в обратном коде и равно 2n – (|b[]| – |а[]|) – 1мр. Перенос в разряд cout при этом отсутствует.
Выполните исследование по следующей программе.
1.Продолжите работу в проекте adder_mod_comp. Создайте новый файл схемного ввода с именем adder_mod_comp_agb.bdf. Установите его файлом верхнего уровня иерархии проекта.
2.Самостоятельно модифицируйте схему (см. рис. 2.9) так, чтобывыполнялосьсравнениенанеравенствоa[]>b[](agb).Обоснуйте, почему в схеме можно не использовать циклический перенос.
3.Выполните компиляцию проекта (анализ и синтез).
4.Завершите исследование по программе аналогично исследованию в предыдущем разделе.
Впояснительную записку включите снимок с экрана со схемой исследуемогокомпаратора,пояснениеопринципеработыкомпаратора
собоснованием возможности не использовать циклический перенос, полностью заполненный план тестирования и соответствующий ему снимок экрана с результатами моделирования компаратора.
Сохраните архив проекта adder_mod_comp в портфолио.
28
3. ИССЛЕДОВАНИЕ ДВОИЧНОГО СУММАТОРА ЧИСЕЛ СО ЗНАКОМ В ФОРМАТЕ С ФИКСИРОВАННОЙ ЗАПЯТОЙ В ДОПОЛНИТЕЛЬНОМ КОДЕ
3.1. Машинные коды представления двоичных чисел со знаком
Числасознакомпредставляютсякодомзнакаикодомчисловой части (знаковый разряд и цифровые разряды). Для хранения числовой части двоичного числа используют прямой, обратный или дополнительный код.
Традиционнымпредставлениемдвоичногочислаявляется прямой код.Число А впрямомкодепредставляетсякакSig A.|A|:кодом 0.| А | для положительных чисел и кодом 1.|А| для отрицательных чисел.
При записи числа в прямом коде старший разряд (старший бит) объявляется знаковым разрядом (знаковым битом). Если знаковый бит принимает значение ноль, то число является положительным, в противномслучае–отрицательным.Востальныхразрядах–цифро- вых разрядах –записываетсядвоичноепредставлениемодулячисла.
Для упрощения реализации алгебраического сложения используют обратные и дополнительные коды, которые позволяют заменить операциювычитаниянаоперациюсложенияисделатьоперациисложенияивычитанияодинаковымидлячиселсознакомибеззнака.
Обратный код (англ. ones’ complement) Аобр дополняет заданный Апр (прямой) код до максимального значения Аmax в заданной разрядной сетке:
Amax = Aобр + Aпр.
Арифметически обратный код может быть получен как
Aобр = Amax − Aпр,
и, если двоичное значение имеет n разрядов, то справедлива запись выражения
Aобр =2n −1мр − Aпр.
Логический способ получения обратного двоичного кода заключается в инвертировании всех разрядов прямого кода.
29
Дополнительный код (англ. two’s complement или twos-comple- ment) является наиболее распространенным способом представления отрицательных целых чисел в компьютерах. ДополнительныйкодАдоп дополняетзаданныйпрямойкодАпрдомаксимального значения 2n, где n – количество разрядов целой части числа:
2n = Amax +1мр = Aдоп + Aпр.
Арифметически дополнительный код может быть получен вычитанием прямого кода из нуля:
Aдоп =2n − Aпр.
Логический способ получения дополнительного двоичного кода основан на использовании обратного кода:
Aдоп =2n − Aпр = Amax +1мр − Aпр = Aобр +1мр,
т. е. дополнительный код можно получить инвертированием всех разрядов прямого кода и прибавлением к инверсии единицы.
В вычислительной технике обратные и дополнительные коды используются для представления отрицательных чисел. Положительные числа всегда представлены в прямых кодах.
Представление чисел со знаком в обратных кодах: кодом 0.|A| для положительных чисел и кодом 1.|A|обр для отрицательных чисел.
Представление чисел со знаком в дополнительных кодах: кодом 0.|A| – для положительных чисел и кодом 1.|A|доп для отрицательных чисел.
Пример 1: пусть для хранения целого числа выделено шесть разрядов:
310 |
|
0.000112 |
|
||
-310 |
|
1.111002обр |
-310 |
|
1.111012доп |
Пример 2: пусть для хранения целого числа выделено пять разрядов:
1510 |
|
0.11112 |
|
||
-1510 |
|
1.00002обр |
-1510 |
|
1.00012доп |
30
