Опубликован: 17.03.2025 | Доступ: свободный | Студентов: 0 / 0 | Длительность: 07:30:00
Лекция 6:

Арифметико-логическое устройство

Для проверки корректности схемы можно создать тестовую таблицу работы. Для этого в текстовом редакторе (Блокнот) создать файл. Первой стройкой ввести через пробелы имена входных слов и выходного слова. Второй, третьей и далее строками вводятся тестовые значения. На рисунке 6.20 приведены три строки. В первой вводится два операнда 7 и 2, результат 14. Второй строкой введены операнды 7 и 8, результат 56. В третье строке в результате введена ошибка. Операнды 2 и 14. Результат 28 в двоичном коде выглядит следующим образом 00011100 В строке с ошибкой третьем разряде введен лог. "0 ", соответственно код имеет следующий вид - 00011000. На рисунке приведено содержимое файла тестирования. Знак # применяется как символ комментария.


Рис. 6.20.

Далее в меню "Моделировать " - "Тестовый вектор ". В открывшемся окне нажать кнопку "Вектор нагрузки ", выбрать файл с тестовым содержимым. Результат работы показан на рисунке 6.21. Разряд в котором содержится ошибка подсвечен красным и выведен результат, который формирует устройство. В столбце "Результат " в строке с ошибкой указывается "неудачу ". Обработанные верно строки подписаны "Принято ".


Рис. 6.21.

Данный метод считается тестирование с "белым ящиком ", когда тестировщик знает внутреннее устройство и принцип функционирования устройства.

Самостоятельно:

Составить файл тестовый вектор, содержащий ошибочные тесты и верные решения не менее 10 строк.

В листинге 6.4 приведен пример реализации методом структурного описания схемы матричного умножителя, показанного на рисунке 6.18 на языке Verilog HDL.

module multiplication4x4(a,b,x);
//входы умножителя
input [3:0]a,b;
//выход
output [7:0]x;
//внутренняя шина 
wire [39:0]w;
//получение частных
and a1(w[0],a[0],b[0]);
and a2(w[1],a[1],b[0]);
and a3(w[2],a[2],b[0]);
and a4(w[3],a[3],b[0]);
and a5(w[4],a[0],b[1]);
and a6(w[5],a[1],b[1]);
and a7(w[6],a[2],b[1]);
and a8(w[7],a[3],b[1]);
and a9(w[8],a[0],b[2]);
and a10(w[9],a[1],b[2]);
and a11(w[10],a[2],b[2]);
and a12(w[11],a[3],b[2]);
and a13(w[12],a[0],b[3]);
and a14(w[13],a[1],b[3]);
and a15(w[14],a[2],b[3]);
and a16(w[15],a[3],b[3]);

assign x[0]=w[0];
//коммутация сумматоров с внутренними сигналами частных
fulladder a17(1'b0,w[1],w[4],w[16],w[17]);
fulladder a18(1'b0,w[2],w[5],w[18],w[19]);
fulladder a19(1'b0,w[3],w[6],w[20],w[21]);

fulladder a20(w[8],w[17],w[18],w[22],w[23]);
fulladder a21(w[9],w[19],w[20],w[24],w[25]);
fulladder a22(w[10],w[7],w[21],w[26],w[27]);

fulladder a23(w[12],w[23],w[24],w[28],w[29]);
fulladder a24(w[13],w[25],w[26],w[30],w[31]);
fulladder a25(w[14],w[11],w[27],w[32],w[33]);

fulladder a26(1'b0,w[29],w[30],w[34],w[35]);
fulladder a27(w[31],w[32],w[35],w[36],w[37]);
fulladder a28(w[15],w[33],w[37],w[38],w[39]);

//коммутация выходных линий с внутренними 
assign x[1]=w[16];
assign x[2]=w[22];
assign x[3]=w[28];
assign x[4]=w[34];
assign x[5]=w[36];
assign x[6]=w[38];
assign x[7]=w[39];
endmodule
//модуль полного сумматора
module fulladder(a,b,c,s,ca);
//входы
input a,b,c;
//outputs
output s,ca;
//функционал полного сумматора.
assign s=(a^b^c);
assign ca=((a&b)|(b&c)|(c&a));
endmodule
Листинг 6.4.

На рисунке 6.22 представлен данный цифровой блок на уровне RTL


Рис. 6.22.

В АЛУ применяется узел сравнения входных слов. Данную операцию выполняет комбинационная схема - цифровой компаратор (в среде Logisim данный блок имеется и приведен в таблице 6.3).

Цифровые компараторы обычно делят на:

  • компараторы равенства (тождественные) - они имеют один/два выхода, отражающих равнозначность входных слов (сигналов).
  • компараторы по величине (схемы сравнения). Реализацию данного узла можно осуществить с применением сумматора и дополнительно включаемых логических элементов.

На рисунке 6.23 приведена функциональная схема сравнения двух бит. При поступлении лог. "1 " на оба входа за счет инверсии на входах элементы D1_1 и D1_2 сформируют на выходах лог. "0 ", тем самым сработает элемент@ ИЛИ -НЕ " D1_3 с сигналом равенства. Аналогично схема сработает при поступлении лог. "0 " на оба входа. Если на входе А будет присутствовать лог "1 ", на входе В лог. "0 ", то активным элементом данной схемы будет D1_2, который сформирует сигнал лог "1 " на выходе Ab (A<B) и наоборот.