ЛР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;

– результаты моделирования работы умножителя.