74181
IC 74181 je 4bitový Alu.
Směr | Šířka | Name | Popis | |
vstup | [3: 0] | a | Vstup a | |
Vstup | [3: 0] | B | Vstup b | |
vstup | [3: 0] | s | Vybraná funkce | |
vstup | M | Režim: 0 = Logic | 1 = aritmetika | |
vstup | Cn | Přenosu | ||
výstup | [3: 0] | f | Výsledek | |
výstup | X | Nosit generování | ||
výstup | Y | Nést šíření | ||
výstup | Aeqb | A == b | ||
výstup | CNP4 Přerušení (CN+4) |
S3 | S2 | S1 | S0 | Logická funkce | Logická popis | Arith funkce | Arith Description |
- | - | - | - | -------------------- | ------------------------ | --------------------------------- | |
0 | 0 | 0 | 0 | ! (A | B) | NOR | A | přenos a |
0 | 0 | 0 | 1 | ! (A & B) | NAND | A +! B | A - B - 1 |
0 | 0 | 1 | 0 | ! A & B | ne a a B | A +! B + Cn | A - B |
0 | 0 | 1 | 1 | ! A | ne a | a - 1 + cn | a - 1 |
0 | 1 | 0 | 0 | ! B | ne 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 | ne a nebo b | a + a +! B + cn | a + a - b |
0 | 1 | 1 | 1 | ! (A ^ b) | xnor | 2a - 1 + Cn | Double A Minus 1 |
1 | 0 | 0 | 0 | A & B | A + B | Přidat | |
1 | 0 | 0 | 1 | ! (A |! B) | nebo s ne b | A + B + 1 | Přidat s |
1 | 0 | 1 | 0 | A | přenos a | a + 1 | přírůstek a |
1 | 0 | 1 | 1 | A | ! B | a nebo ne B | A +! B + 1 | A - B + 1 |
1 | 1 | 0 | 0 | B | Přenos b | 1 | vždy 1 (sada) |
1 | 1 | 0 | 1 | A | B | nebo | 0 | vždy 0 (jasné) |
1 | 1 | 1 | 0 | A &! B | A a ne b | ! B | ne b |
1 | 1 | 1 | 1 | ! (A ^ b) | xnor | ! B + Cn | ne b + |
Ekvivalent Verilog, bez přenosu a další důležité signály:
Modul ALU74181 (
vstup [3: 0] s,
vstup ci, m,
vstup [3: 0] A, B,
výstupní reg [3: 0] y
);
reg [3: 0] p, g;
vždy @(*) Začněte
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 [1] & g [2]));
konec
endmodule // alu74181
Dokončete Verilog, ještě nekontrolován:
Modul ALU74181 (
vstupní vodič [3: 0] a,
Vstupní vodič [3: 0] B,
vstupní vodič [3: 0] s,
Vstupní vodič m, // režim: 0 = logika, 1 = aritmetika
vstupní vodič CN, //
výstupní vodič [3: 0] f, // Výsledek
výstupní vodič x, // přenášejte generování
výstupní vodič Y, // Propagace
Výstupní dráty AEQB, // A == B
Výstupní vodič CNP4 // Přenos (CN+4)
);
drát [3: 0] Tu;
Drát [3: 0] TV;
drát [3: 0] tx;
// tu [n] = ~ (a [n] | (b [n] & s [0]) | (~ b [n] & s [1])))
přiřadit tu [0] = ~ (a [0] | (b [0] & s [0]) | (~ b [0] & s [1]));
přiřadit Tu [1] = ~ (A [1] | (B [1] & s [0]) | (~ B [1] & S [1]));
přiřadit Tu [2] = ~ (A [2] | (B [2] & S [0]) | (~ B [2] & S [1]));
přiřadit 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])))
přiřadit TV [0] = ~ ((A [0] & ~ B [0] & S [2]) | (A [0] & B [0] & S [3]));
přiřadit TV [1] = ~ ((A [1] & ~ B [1] & S [2]) | (A [1] & B [1] & S [3]));
přiřadit TV [2] = ~ ((A [2] & ~ B [2] & S [2]) | (A [2] & B [2] & S [3]));
přiřadit TV [3] = ~ ((A [3] & ~ B [3] & S [2]) | (A [3] & B [3] & S [3]));
// tx [n] = tu [n] ^ tv [n]
přiřadit tx = tu ^ tv;
// Ty = TU0 & TV1 & TV2 & TV3 | TU1 & TV2 & TV3 | TU2 & TV3 | TU3
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] ^ logika přenášení
přiřadit f [0] = tx [0] ^ ~ (m & cn);
přiřadit f [1] = tx [1] ^ ~ ((Tu [0] & m) | (TV [0] & M & CN));
Přiřadit f [2] = tx [2] ^ ~ ((tu [1] & m) |
(TU [0] & TV [1] & M) |
(TV [0] & TV [1] & M & CN));
přiřadit 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));
// Stavové výstupy
přiřadit x = ~ (TV [0] & TV [1] & TV [2] & TV [3]); // nosit generování (g)
přiřadit y = ~ ty; // Propagate (P)
přiřadit aeqb = f [0] & f [1] & f [2] & f [3]; // a == b
přiřadit cnp4 = ty | (TV [0] & TV [1] & TV [2] & TV [3] & CN); // Přerušení (CN+4)
endmodule