ЛР1 > Реализация последовательного умножителя двух 8-разрядных чисел
Статьи по теме
Содержание: Реализация дешифратора, мультиплексора, буферного элемента, триггеров, счетчиков, конечных автоматов и АЛУ на Verilog. Объединение блоков в файле верхнего уровня иерархии в Quartus II. Разработка умножителя двух 8-разрядных чисел
Теоретические сведения
1. Операторы языка Verilog
2. Примеры реализации некоторых устройств на языке Verilog
2.1 Комбинационные схемы:
2.2 Дешифратор семисегментного индикатора:
2.3 Три способа описания мультиплексора:
2.4 Выходной буферный элемент с тремя состояниями:
2.5 Различные варианты реализации D-триггера:
2.6 Восьмиразрядный счетчик:
2.7 Пример реализации конечного автомата и его диаграмма состояний:
2.8 АЛУ, выполняющее операции сложения, вычитания, конъюнкции и дизъюнкции, с выходным регистром сдвига:
2.9 Пример вызова ранее созданных блоков в файле верхнего уровня иерархии:
Задание
Целью данной лабораторной работы является разработка умножителя двух 8-разрядных чисел. Множимое и множитель поступают на входы a[7..0] и b[7..0], соответственно. Дополнительными входными сигналами умножителя являются: start – сигнал разрешения работы, reset – сигнал установки в исходное состояние и clk – вход тактовой частоты. Результат выполнения операции умножения устанавливается на выходной 16-разрядной шине result[15..0]. Дополнительными выходными сигналами в разрабатываемом устройстве являются: сигнал done_flag (готовность результата) и семь сигналов a,b,c,d,e,f,g, управляющих семисегментным индикатором.
Математическое представление принципа работы умножителя показано на рисунке 1.
result[15..0] = a[7..0] * b[7..0]
= ( ( a[7..4] * 2 ^ 4) + a[3..0] * 2 ^ 0 )
* ( ( b[7..4] * 2 ^ 4) + b[3..0] * 2 ^ 0 )
= ( ( a[7..4] * b[7..4] ) * 2 ^ 8 )
+ ( ( a[7..4] * b[3..0] ) * 2 ^ 4 )
+ ( ( a[3..0] * b[7..4] ) * 2 ^ 4 )
+ ( ( a[3..0] * b[3..0] ) * 2 ^ 0 )
Рисунок 1. Математическое представление принципа работы умножителя.
Для получения результата умножения устройству необходимо 4 такта. На каждом такте выполняется вычисление промежуточного результата умножения двух 4-разрядных чисел с последующим их суммированием. В конце четвертого такта на выходе умножителя формируется 16-разрядный результат.
На рисунке 2 представлена структурная схема разрабатываемого умножителя. В его состав должны входить следующие блоки:
adder – 16-разрядный сумматор;
mult4x4 – умножитель двух 4-разрядных чисел;
mux4 – 4-разрядный мультиплексор 2:1;
shifter – управляемый регистр сдвига. Режим работы регистра задается управляющим сигналом cnt[1:0]:
– если cnt[1:0] == 0, то операция сдвига не выполняется;
– если cnt[1:0] == 1, то выполняется операция сдвига на 4 разряда влево;
– если cnt[1:0] == 2, то выполняется операция сдвига на 8 разрядов влево;
– если cnt[1:0] == 3, то операция сдвига не выполняется;
seven – дешифратор семисегментного индикатора. Используется для визуализации состояний управляющего автомата;
reg16 – 16-разрядный синхронный регистр хранения результата (в том числе, и промежуточного). Регистр имеет следующие управляющие сигналы:
clr_n – сигнал установки регистра в исходное состояние (активный уровень – низкий);
clken_n – сигнал разрешения тактовой частоты (активный уровень – низкий);
counter – 2-разрядный асинхронный счетчик. Счетчик имеет следующий управляющий сигнал:
clr_n – сигнал установки счетчика в исходное состояние (активный уровень – низкий);
Рисунок 2. Структурная схема умножителя двух 8-разрядных чисел
control – управляющий автомат.
Диаграмма состояний управляющего автомата представлена на рисунке 3. Знаком «Х» на диаграмме указано «безразличное состояние» ( “don’t care” ).
Рисунок 3. Диаграмма состояний управляющего автомата.
Результат
Результатом выполнения данной работы является:
– схема умножителя двух 8-разрядных чисел и описание входящих в его состав блоков на языке Verilog;
– результаты моделирования работы умножителя.