1. 6. Пример проектирования
арифметического устройства
Автоматизация проектирования
компьютерных систем
д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ
21.02.2011 e-mail: hahanova@mail.ru 1
2. Цель лекции и содержание
Цель ознакомление с проектами, которые
вынесены на лабораторные занятия
План
Беззнаковое умножение
Знаковое умножение
Быстрое знаковое умножение
Беззнаковое деление
Знаковое деление
Реализация арифметических устройств, на
примере последовательного сумматора
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 2
hahanova@mail.ru
3. Двоичное умножение
• Двоичное умножение требует только операций
сложения и сдвига. В качестве примера выполняется
умножение двоичных чисел: 1310x1110.
Множимое 1101 (13)
Множитель 1011 (11)
1101
1101
Частичные
произведения } 100111
0000
100111
1101
10001111 (143)
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 3
hahanova@mail.ru
4. Схема устройства двоичного умножения
Произведение
Load 8 7 6 5 4 3 2 1 0
C Sh ACC
Ad
O
N
Clk
T
Множитель
R 4-битный
Done Cm сумматор
O
L St
M
Множимое
Суммирование каждого частичного произведения выполняется сразу после
его формирования, таким образом, в один момент времени складывается
не более двух двоичных чисел.
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 4
hahanova@mail.ru
5. Выполнение умножения
первоначальное содержание регистра произведения 000001011 M(11)
(сложение с множимым, так как М=1) 1101 (13)
после сложения 011011011
после сдвига 001101101 M
(сложение с множимым, так как М=1) 1101
после сложения 100111101
после сдвига 010011110 M
(пропуск операции сложения, так как М=0)
после сдвига 001001111 M
(сложение с множимым, так как М=1) 1101
после сложения 100011111
после сдвига(окончательный результат) 010001111 (143)
Линия, разделяющая произведение и множимое
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 5
hahanova@mail.ru
6. Граф управляющего автомата устройства умножения
St'
S10 S0
S9 Done 0 St
Sh
S8
Ad M
M M'
M' S2
S7 Ad
Sh
S6 M' S3
Ad
M' Sh
M S5 S4 M
Sh Ad
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 6
hahanova@mail.ru
7. Управляющий блок со счетчиком
Схема управления умножением
St Done
Схема Load
M сложение- Ad
сдвиг Sh
St' S0 St
0 M'
K K'M'
M
Счетчик S5 K' S3
Done S2
Sh
K Ad M
S4 KM'
Sh
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 7
hahanova@mail.ru
8. Умножение знаковых двоичных чисел (1)
Множимое Множит ель
0.1012 = 5/810 1.0112 = -5/810 + +
- +
+ -
0.1 1 1 (+7/8) Множимое
x 0.1 0 1 (+5/8) Множитель - -
(0. 0 0)0 1 1 1 (+7/64) Примечание:правильное представление
(0.)0 1 1 1 (+7/16) дробных частичных произведений требует
0. 1 0 0 0 1 1 (+35/64) расширения знакового бита за двоичной
точкой,как это показано в скобках. (Такое
расширение не является обязательным для
аппаратуры)
1.1 0 1 (-3/8)
x 0.1 0 1 (+5/8)
(1. 1 1)1 1 0 1 (-3/64) Примечание:расширение знакового бита
(1.)1 1 0 1 (-3/16) обеспечивает правильное представление
1. 1 1 0 0 0 1 (-15/64) отрицательного произведения
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 8
hahanova@mail.ru
10. Схема устройства умножения в
дополнительном коде
Произведение
Load 8 7 6 5 4 3 2 1 0
Sh
C Ad
O
N
Clk
T
Множитель
R 5-битный полный
O Done сумматор Cm Cm
L St
Cm Формирователь
обратного кода
M
Множимое
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 10
hahanova@mail.ru
11. Граф состояний для умножения в
дополнительном коде
St'
S10 S0
Done 0 St
S8 S9
CmAd 0 M
M M'
M' S2
S7 Ad
Sh
S6 M' S3
Ad
M' Sh
M S5 S4 M
Sh Ad
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 11
hahanova@mail.ru
12. Структурная схема быстрого устройства
умножения
Произведение
B
Load
Sh
C AdSh
O
N
T
Cm
R Done Cm
O St
L
Cm Формирователь
обратного кода
M
Множимое
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 12
hahanova@mail.ru
13. Граф состояний управляющего автомата для
быстрого устройства умножения
St'
S10 S0
Done 0 St
M' M
S9 S2
Sh Sh M'
M' M' M
M S6 M' S4 M
Sh Sh
M M'
M M'
M
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 13
hahanova@mail.ru
15. Устройство двоичного деления
Регистр частного Sh
Sh
X8 X7 X6 X5 X4 X3 X2 X1 X0 Ld
Su St(Старт-сигнал)
Устройство вычитания C V
и сравнения
Control (переполнение)
0 Y3 Y2 Y1 Y0 Clock
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 15
hahanova@mail.ru
16. Условие переполнения
X8X7X6X5X4 Y3Y2Y1Y0 – левые пять битов регистра
делимого больше или равны делителю, частное будет
больше 15 и возникнет переполнение. Обратите внимание:
если X8X7X6X5X4 Y3Y2Y1Y0 , частное будет
X 8 X 7 X 6 X 5 X 4 X 3 X 2 X 1 X 0 X 8 X 7 X 6 X 5 X 4 0000 X 8 X 7 X 6 X 5 X 4 X 3 16
16
Y3Y2Y1Y0 Y3Y2Y1Y0 Y3Y2Y1Y0
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 16
hahanova@mail.ru
17. Граф состояний для управляющей
схемы устройства деления
St
St' S0 S2 C
Stop C' Sh
C/V C' S3
Su
S10 S4
0 Sh C
C'
S5
S9 C Su
Su S7 C' S6
C' Sh Sh
C
S8
Su
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 17
hahanova@mail.ru
18. Структурная схема устройства деления
знаковых чисел
DBus (Шина данных)
16 16
Делимое
Ldu
Acc (Остаток) Q (Частное) Cm1
16
16 Sh Ldl
C
Ena
St
Cout Cin Cm2 Управл.
K схема
16 V
Cm2
16 S Lds
Ldd
Делитель Знак
Co1Ldd
16
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 18
hahanova@mail.ru
19. Описание сигналов схемы устройства
деления знаковых чисел
Ldu – загрузка с шины старшей половины делимого;
Ldl – загрузка с шины младшей половины делимого;
Lds – загрузка знака делимого в знаковый триггер;
S – знак делимого;
Cm1 – дополнение регистра делимого (дополнительный код);
Ldd – загрузка с шины делимого;
Su – подключение выхода сумматора к шине (Ena) и загрузка верхней
половины делимого из шины;
Cm2 – разрешение преобразования в обратный код (Cm2 подключен к
знаковому биту делимого таким образом, что положительное число
преобразуется в дополнительный код, а отрицательное – нет);
Sh – сдвиг регистра делимого влево на 1 разряд и увеличение счетчика на
1;
C – выход переноса сумматора (если С=1, делитель можно вычесть из
верхней части делимого);
St – старт;
V – переполнение;
Qneg – частное будет отрицательным (Qneg = 1, когда знаки делимого и
делителя различны).
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 19
hahanova@mail.ru
20. Граф управляющей схемы
для деления знаковых чисел
St' S0 St S2
Rdy Ldl S
S'
S4
S10 S3 Co1Ldd
V Ldd
S9 C'Qneg' C
Co1 C'Qneg S5
S7 K'C' Sh
Sh KC' C'
KQneg
C C S6
Sh
S8
KQneg' Su K'
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 20
hahanova@mail.ru
21. Проектирование арифметического
устройства на примере
последовательного сумматора
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 21
hahanova@mail.ru
22. Структурно-функциональная схема
последовательного сумматора
Аккумулятор
SI
x3 x2 x1 x0 xi sumi
N(Старт-сигнал) Sh
Load
Full
Управл. Sh SI
Sh y3 y2 y1 y0 yi Adder
схема Load
Load ci ci+1
Регистр слагаемого
Clock Последовательный
N' Q R D
сумматор
Q' CK
N'
S0
0
N Sh
S5 S1
Sh N Load Clock
S4 S2
Sh Sh
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 22
S3 hahanova@mail.ru
Sh
24. Проектирование управляющего автомата
N'
S0
N Текущее Следующее состояние Значение выхода
N' 0 состояние N=0 N=1 Sh Load
S5 S1 S0 S0 S1 0 0
Sh N Load
S1 S2 S2 0 1
S2 S3 S3 1 0
S4 S2 S3 S4 S4 1 0
Sh Sh S4 S5 S5 1 0
S3 S5 S0 S1 1 0
Sh
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 24
hahanova@mail.ru
35. TestBench для последовательного
сумматора 3
integer i, j; reg [3:0]A,B;
reg [4:0] SUM, Sum_etalon;
always
for (i=0; i<=5; i=i+1) begin
X = X_test[i];
for (j=0; j<=5; j=j+1) begin
N = 1'b1; Y = Y_test[j];
N = repeat (2) @(negedge clk) 1'b0;
//чтение результатов операции
#(5*period) A=X; B=Y; SUM=result;
Sum_etalon={1'b0,X} + Y;
end
end
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 35
hahanova@mail.ru
37. Макрофайл для тестирования
comp -include $DSNsrcregister.v
comp -include $DSNsrcfsm.v
comp -include $DSNsrcseq_adder.v
comp -include "$DSNsrcTestBenchseq_adder_TB.v"
asim seq_adder_tb
close –list
close –wave
wave N clk reset X Y SUM
wave UUT/U1/sh UUT/U1/load UUT/U1/state
list -dec A B SUM Sum_etalon ERROR
run 5000 ns
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 37
hahanova@mail.ru
38. Результаты тестирования
последовательного сумматора
TIME A B SUM Sum_etalon ERROR
0.000 ? ? ? ? 0
140.000 ns 0 0 0 0 0
280.000 ns 0 1 1 1 0
420.000 ns 0 8 8 8 0
560.000 ns 0 15 15 15 0
700.000 ns 0 10 10 10 0
840.000 ns 0 5 5 5 0
980.000 ns 1 0 1 1 0
1.120 us 1 1 2 2 0
1.260 us 1 8 9 9 0
1.400 us 1 15 16 16 0
1.540 us 1 10 11 11 0
1.680 us 1 5 6 6 0
1.820 us 8 0 8 8 0
1.960 us 8 1 9 9 0
2.100 us 8 8 16 16 0
2.240 us 8 15 23 23 0
2.380 us 8 10 18 18 0
21.02.20112.520 us д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 38
8 5 13 13 0
hahanova@mail.ru
2.660 us 15 0 15 15 0
39. Имплементация. Размер проекта
Размер проекта 270 эквивалентных
вентилей. Использует 15 триггеров и 15
блоков LUT.
Logic Utilization:
Number of Slice Flip Flops: 15 out of 1,536
1%
Number of 4 input LUTs: 14 out of 1,536
1%
Total equivalent gate count for design: 204
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 39
hahanova@mail.ru
43. Командный файл для моделирования
после имплементации
comp -include "$DSNsrcseq_adder_timesim.vhd"
comp -include
"$DSNsrcTestBenchseq_adder_TB.v"
asim seq_adder_tb -sdftyp
/UUT=$DSNSRCseq_adder_timesim.sdf
close -list
wave
wave -noreg N clk reset X Y SUM
wave UUT/U1/sh UUT/U1/load UUT/U1/state
list -collapse -dec A B Sum Sum_etalon ERROR
run 5000 ns
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 43
hahanova@mail.ru
44. Приложение – Макро-язык. Asim
Команда asim - Инициализирует моделирование.
asim [ -help ] [ -file <filename> ] [ -i <iteration_limit> ]
<configuration> | <entity> [ <architecture> ]
Аргументы:
-help – вывод короткого описания синтаксиса команды;
-file <filename> – описывает необязательный командный файл,
содержащий аргументы для команды asim. Эти аргументы можно
использовать вместо того, чтобы непосредственно вводить их в
команде;
-i <iteration_limit> – устанавливает максимальное число дельта-
итераций, которые могут быть выполнены в одно и то же время
моделирования. Это позволяет избежать бесконечных циклов;
<configuration> – задает имя конфигурации верхнего уровня для
моделирования;
<entity> – имя интерфейса верхнего уровня для моделирования;
<architecture> – имя архитектуры для моделирования. Если имя не
указано, будет использована последняя откомпилированная
архитектура для данного интерфейса. Этот аргумент может
использоваться только с интерфейсом.
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 44
hahanova@mail.ru
45. Команда list
Открывает окно List и/или добавляет сигналы
к существующему окну.
list [ -collapse ] [ -<radix> ][ -width <n> <item_name> ... ]
Аргументы:
-collapse – переключатель между промежуточными и
результирующими значениями, которые выводятся на экран.
Результирующим считается значение последнего цикла
моделирования в описанном времени моделирования.
-<radix> – задает систему счисления для сигналов, описанных в
команде. Доступные опции: binary (abbr. bin) – двоичная;
octal (abbr. oct) – восьмеричная; decimal (abbr. dec) –
десятичная; hex – шестнадцатеричная;
-width <n> – параметр “n” задает ширину колонки;
< item_name>– имя сигнала для размещения в окне List.
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 45
hahanova@mail.ru
46. Команда wave
Команда добавляет указанные сигналы в окно Wave.
wave [-<radix>] [ -<format> ] [ -height <pixels> ]
[ -color <red_value, green_value, blue_value> ]
[ <item_name> ] ... ] ...
Аргументы:
-<format> – необязательный параметр, задающий один из следующих
типов: literal (abbr. li) – символьный; logic (abbr. lo) – логический;
Символьная waveform представляет собой прямоугольники, в
которые вписаны значения. Логические сигналы могут быть либо 1,
0, X или Z.
-height <pixels> – высота waveform в пикселах;
-color <red_value, green_value, blue_value> – цвет waveform,
описываемый тремя параметрами с диапазоном значений 0-255,
соответствующими красной, зеленой и синей составляющей цвета
(RGB-модель цвета);
<item_name> – имя сигнала.
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 46
hahanova@mail.ru
47. Команда run
Выполняет моделирование.
Синтаксис:
run [ <time_step> | @<time> | -all | -next ]
Аргументы:
<time_step> – промежуток времени для моделирования;
@<time> – абсолютное время, до которого будет
осуществляться моделирование;
-all – выполняются все возможные шаги моделирования, пока не
будет обработано последнее событие из очередей драйверов;
-next – выполнение до следующей записи в очередь драйвера.
21.02.2011 д.т.н. Хаханова И.В, каф.АПВТ, ХНУРЭ e-mail: 47
hahanova@mail.ru