74181
IC 74181-4-битный Alu.
Направление | Ширина | Имя | Описание | |
Ввод | [3: 0] | a | Вход а | |
Ввод | [3: 0] | B | Вход б | |
Ввод | [3: 0] | S | Выбранная функция | |
Вход | M | Режим: 0 = логика | 1 = арифметика | |
Вход | Cn | Перенос | ||
Вывод | [3: 0] | F | Результат | |
вывод | X | Носить сгенерировать | ||
вывод | Y | Переносить распространение | ||
вывод | Aeqb | A == b | ||
вывод | CNP4 перенос (CN+4) |
S3 | S2 | S1 | S0 | Логическая функция | Логическое описание | АРИТ ФУНКЦИЯ | АРИТ Описание |
- | - | - | - | ------------------------ | ------------------------ | ---------------------- | --------------------------------- |
0 | 0 | 0 | 0 | ! (A | b) | nor | a | Передача a |
0 | 0 | 0 | 1 | ! (A & b) | nand | a +! B | a - b - 1 |
0 | 0 | 1 | 0 | ! A & B | не A и B | A +! B + CN | A - B |
0 | 0 | 1 | 1 | ! A | не a | a - 1 + cn | a - 1 |
0 | 1 | 0 | 0 | ! B | не B | a + a | Double a |
0 | 1 | 0 | 1 | a ^ b | xor | a + a +! B | a + a - b - 1 |
0 | 1 | 1 | 0 | ! A | B | не a или b | a + a +! B + cn | a + a - b |
0 | 1 | 1 | 1 | ! (A ^ b) | xnor | 2a - 1 + cn | Double a минус 1 |
1 | 0 | 0 | 0 | a & b | и | a + b | Добавить |
1 | 0 | 0 | 1 | ! (A |! B) | или не B | a + b + 1 | Добавить с переносом |
1 | 0 | 1 | 0 | a | Передача a | a + 1 | Приращение a |
1 | 0 | 1 | 1 | a | ! B | a или нет B | a +! B + 1 | a - b + 1 |
1 | 1 | 0 | 0 | b | Передача b | 1 | всегда 1 (set) |
1 | 1 | 0 | 1 | a | B | или | 0 | всегда 0 (чисто) |
1 | 1 | 1 | 0 | a &! B | a, а не b | ! B | не b |
1 | 1 | 1 | 1 | ! (A ^ b) | xnor | ! B + cn | не b + переносить |
Verilog эквивалентен, без переноса и других важных сигналов:
модуль Alu74181 (
Ввод [3: 0] S,
Вход CI, M,
Ввод [3: 0] A, B,
Выходная рег [3: 0] y
);
Рег [3: 0] P, G;
Всегда @(*) начинать
p [0] <= ~ (a [0] | (s [0] & b [0]) | (s [1] & ~ b [0]));
p [1] <= ~ (a [1] | (s [0] & b [1]) | (s [1] & ~ b [1]));
p [2] <= ~ (a [2] | (s [0] & b [2]) | (s [1] & ~ b [2]));
p [3] <= ~ (a [3] | (s [0] & b [3]) | (s [1] & ~ b [3]));
g [0] <= ~ ((a [0] & ~ b [0] & s [2]) | (a [0] & b [0] & s [3]));
g [1] <= ~ ((a [1] & ~ b [1] & s [2]) | (a [1] & b [1] & s [3]));
g [2] <= ~ ((a [2] & ~ b [2] & s [2]) | (a [2] & b [2] & s [3]));
g [3] <= ~ ((a [3] & ~ b [3] & s [2]) | (a [3] & b [3] & s [3]));
y [0] = (p [0] ^ g [0]) ^ ~ (~ ci & ~ m);
y [1] = (p [1] ^ g [1]) ^ ~ ((~ ci & ~ m & g [0]) | (~ m & p [0]));
y [2] = (p [2] ^ g [2]) ^ ~ ((~ ci & ~ m & g [0] & g [1]) | (~ m & p [1]) | (~ m & p [0] & g [1]));
y [3] = (p [3] ^ g [3]) ^ ~ ((~ ci & ~ m & g [0] & g [1] & g [2]) | (~ m & p [2]) | (~ m & p [1] & g [2]) | (~ m & p [0] & g [1] & g [2]));
конец
EndModule // Alu74181
Полная версия, еще не проверяется:
модуль Alu74181 (
входной провод [3: 0] A,
входной провод [3: 0] B,
входной проволока [3: 0] S,
Входной проволочный провод M, // режим: 0 = логика, 1 = арифметика
входной проволочный CN, // перенос
выходной провод [3: 0] f, // результат
выходной провод x, // переносить генерировать
Выходная проволока y, // переносить распространение
выходной провод AEQB, // a == b
Выходная проволока CNP4 // CHARTING (CN+4)
);
Провод [3: 0] TU;
Провод [3: 0] ТВ;
Провод [3: 0] TX;
// tu [n] = ~ (a [n] | (b [n] & s [0]) | (~ b [n] & s [1])))
Назначить tu [0] = ~ (a [0] | (b [0] & s [0]) | (~ b [0] & s [1]));
Назначить tu [1] = ~ (a [1] | (b [1] & s [0]) | (~ b [1] & s [1]));
Назначить tu [2] = ~ (a [2] | (b [2] & s [0]) | (~ b [2] & s [1]));
Назначить tu [3] = ~ (a [3] | (b [3] & s [0]) | (~ b [3] & s [1]));
// tv [n] = ~ ((a [n] & ~ b [n] & s [2]) | (a [n] & b [n] & s [3]))))
Назначить TV [0] = ~ ((a [0] & ~ b [0] & s [2]) | (a [0] & b [0] & s [3]));
Назначить телевидение [1] = ~ ((a [1] & ~ b [1] & s [2]) | (a [1] & b [1] & s [3]));
Назначить телевизор [2] = ~ ((a [2] & ~ b [2] & s [2]) | (a [2] & b [2] & s [3]));
Назначить телевидение [3] = ~ ((a [3] & ~ b [3] & s [2]) | (a [3] & b [3] & s [3]));
// tx [n] = tu [n] ^ tv [n]
Назначить tx = tu ^ TV;
// ty = tu0 & TV1 & TV2 & TV3 | TU1 & TV2 & TV3 | TU2 & TV3 | Ту 3
Wire Ty = (TU [0] & TV [1] & TV [2] & TV [3]) |
(TU [1] & TV [2] & TV [3]) |
(TU [2] & TV [3]) |
TU [3];
// f [n] = tx [n] ^ переносить логику
Назначить f [0] = tx [0] ^ ~ (m & cn);
Назначить f [1] = tx [1] ^ ~ ~ ((tu [0] & m) | (TV [0] & m & cn));
Назначить f [2] = tx [2] ^ ~ ((tu [1] & m) |
(TU [0] & TV [1] & M) |
(TV [0] & TV [1] & M & CN));
Назначить f [3] = tx [3] ^ ~ ~ ((tu [2] & m) |
(TU [1] & TV [2] & m) |
(TU [0] & TV [1] & TV [2] & M) |
(TV [0] & TV [1] & TV [2] & M & CN));
// выходы состояния
назначить x = ~ (TV [0] & TV [1] & TV [2] & TV [3]); // переносить генерировать (g)
назначить y = ~ ty; // переносить распространение (P)
назначить aeqb = f [0] & f [1] & f [2] & f [3]; // a == b
Назначить cnp4 = ty | (TV [0] & TV [1] & TV [2] & TV [3] & CN); // перевозка (CN+4)
EndModule