Labrab4_MSiSUM_Ver
.docx
Лабораторная работа. Разработка мультиплексоров и
сумматоров на ПЛИС
Разработка мультиплексоров на ПЛИС
Задание на выполнение лабораторной работы
1. Описать схемы исследуемых цифровых устройств на языке Verilog.
2. Получить экспериментальные данные в виде временных диаграмм, подтверждающие правильность работы исследуемого цифрового устройства.
4. Сделать выводы по результатам исследований.
Выполнение работы
Описать схему мультиплексора на языке Verilog.
1-й способ (поведенческий):
module MULTIPLEXOR (A0, A1, D0, D1, D2, D3, Y);
input A0, A1, D0, D1, D2, D3;
output Y;
assign Y=(D0 & !A1& !A0) | (D1 & !A1& A0) | (D2 & A1& !A0) | (D3 & A1 & A0);
endmodule
2-й способ (описание мультиплексора через wire):
module MULTIPLEXOR (input A0, input A1, input D0, input D1, input D2, input D3,
output Y);
wire S1, S2, S3, S4, S5, S6;
NOT my_1_not ( .OUT(S1), .IN1(A0));
NOT my_2_not ( .OUT(S2), .IN1(A1));
AND3 my_1_and ( .OUT(S3), .IN1(S1), .IN2(S2), .IN3(D0));
AND2 my_2_and ( .OUT(S4), .IN1(A0), .IN2(D1));
AND3 my_3_and ( .OUT(S5), .IN1(S1), .IN2(A1), .IN3(D2));
AND3 my_4_and ( .OUT(S6), .IN1(A0), .IN2(A1), .IN3(D3));
OR4 my_or ( .OUT(Y), .IN1(S3), .IN2(S4), .IN3(S5), .IN4(S6));
endmodule
b) Компилировать проекты и получить экспериментальные данные в виде временных диаграмм, подтверждающие правильность работы исследуемого цифрового устройства. Представить результаты преподавателю.
c) Сделать выводы по результатам исследований.
Разработка модулей высокого уровня на ПЛИС
на примере одно и 4-х битного сумматоров
Основные сведения о сумматорах и их реализации на языке Verilog
Мы знаем про основные базовые логические элементы – и это тоже модули. Используем их в модуле более высокого уровня. Сделаем однобитный сумматор, а на его основе много битный сумматор (более высокого уровня).
Вначале рассмотрим синтез сумматора от постановки задачи до создания схемы однобитного сумматора.
Однобитный сумматор складывает два однобитных числа a и b. При выполнении сложения однобитных чисел может случиться «переполнение», то есть результат уже будет двухбитным (1+1=2 или в двоичном виде 1’b1+1’b1=2’b10). Поэтому включим в сумматор выходной сигнал переноса c_out.
Дополнительный входной сигнал c_in служит для приема сигнала переноса от сумматоров младших разрядов (при построении многобитных сумматоров).
Таблица истинности работы однобитного сумматора.
-
№
п/п
a
b
c_in
sum
c_out
Примечание
0
0
0
0
0
0
1
0
1
1
0
1
Перенос
2
1
0
0
1
0
3
1
1
1
1
1
Перенос
Примечание: С целью упрощения таблицы не все события в таблице перечислены для c_in, sum, c_out.
Структурные формулы работы однобитного сумматора с учетом минимизации учитывает все возможные события.
sum=(a^b) ^ c_in
c_out=((a^b) & c_in) ^ (a &b),
где символ «^» - сложение по модулю 2, символ «&» - логическая операция конъюнкция (and).
Схема в графическом виде имеет вид:
Опишем эту схему на языке Verilog, устанавливая в теле модуля экземпляры
других модулей. Мы установим в наш модуль 3 экземпляра модуля XOR и два экземпляра модуля AND2.
Порядок описания экземпляра модуля такой:
• название модуля, тип которого нам нужен (adder1) с указанием входов и выходов;
• описываем подключение сигналов: точка и затем имя сигнала модуля, затем в скобках имя проводника, который сюда подключен.
/*
* modul sum
* Cernov
* odnobitnyi summator
* rev:
* 0.1 ot 27_09_2014 pervaya versiya
*/
module sum
(
input a,
input b,
input c_in,
output sum,
output c_out
);
wire s1,s2,s3;
XOR
my_1_xor
(
.OUT (s1),
.IN1 (a),
.IN2 (b)
);
AND2 my_1_and2( .OUT (s3), .IN1 (a), .IN2 (b) );
XOR my_2_xor( .OUT (sum), .IN1 (s1), .IN2 (c_in) );
AND2 my_2_and2( .OUT (s2), .IN1 (s1), .IN2 (c_in) );
XOR my_3_xor( .OUT (c_out), .IN1 (s2), .IN2 (s3) );
endmodule
Опишем на языке Verilog однобитный сумматор на поведенческом уровне, то есть на основе структурных формул:
module adder1(input a, input b, input
c_in, output sum, output c_out);
assign sum = (a^b) ^ c_in;
assign c_out = ((a^b) & c_in) ^ (a&b);
endmodule
Следует понимать, что существуют разные методы описания и нужно уметь ими всеми пользоваться.
Итак, мы создали однобитный сумматор. На его основе можно создать n-битный сумматор. Рассмотрим четырехбитный сумматор (с
последовательным переносом).
Блочную схему 4-х битного сумматора представим в виде:
Опишем эту схему на языке Verilog:
module adder4(output [3:0]sum, output c_out, input [3:0]a, input
[3:0]b, input c_in );
wire c0, c1, c2;
adder1 my0_adder1( .sum (sum[0]) , .c_out (c0), .a (a[0]), .b
(b[0]), .c_in (1’b0) );
adder1 my1_adder1( .sum (sum[1]) , .c_out (c1), .a (a[1]), .b
(b[1]), .c_in (c0));
adder1 my2_adder1( .sum (sum[2]) , .c_out (c2), .a (a[2]), .b
(b[2]), .c_in (c1));
adder1 my3_adder1( .sum (sum[3]) , .c_out (c_out), .a (a[3]), .b
(b[3]), .c_in (c2) );
endmodule
Таким образом, мы реализовали четырехбитный сумматор. Мы получили его как модуль верхнего уровня adder4, состоящий из модулей adder1, которые, в свою очередь состоят из модулей примитивов AND2 и XOR.
2. Задание на выполнение лабораторной работы по исследованию сумматоров
1. Создать проекты одно- и четырех сумматоров на языке Verilog с использованием САПР QuartusII.
2. Компилировать проекты одно и чет и получить экспериментальные данные в виде временных диаграмм (в режиме симуляции), подтверждающие правильность работы исследуемого цифрового устройства. Представить результаты преподавателю.
3. Сделать выводы по результатам исследований.
Отчет
Отчет по лабораторной работе должен содержать:
1. Схемы исследуемых цифровых устройств.
3. Временные диаграммы входных и выходных сигналов исследуемых схем.
4. Выводы по результатам исследований.