Sumator 2-bitowy
library IEEE;
use IEEE.std_logic_1164.all;
entity ha is
port (a, b : in std_logic;
sum : out std_logic;
carry : out std_logic);
end ha;
architecture structure of ha is
begin
sum <= a xor b;
carry <= a and b;
end structure;
library IEEE;
use IEEE.std_logic_1164.all;
entity fa is
port(a, b, ci : in std_logic;
sum : out std_logic;
co : out std_logic);
end fa;
architecture structure of fa is
begin
sum <= (a xor b) xor ci;
carry <= (a and b) or ((a xor b) and ci);
end structure;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity sum_3 is
port (A : in std_logic_vector(1 downto 0); -- wejscie 1
B : in std_logic_vector(1 downto 0); -- wejscie 2
Q : out std_logic_vector(2 downto 0)); -- wyjscie (suma)
end sum_3;
architecture sum_3_a of sum_3 is
component ha is
port (a, b : in std_logic; -- wejscia
sum : out std_logic; -- suma
carry : out std_logic); -- przeniesienie
end component;
component fa is
port(a, b, ci : in std_logic; -- wejscia
sum : out std_logic; -- suma
co : out std_logic); -- przeniesienie
end component;
signal cc : std_logic;
begin
blok1: ha port map (a=>A(0), b=>B(0), sum=>Q(0), carry=>cc);
blok2: fa port map (a=>A(1), b=>B(1), ci=>cc, sum=>Q(1), co=>Q(2));
end sum_3_a;
Sumator 2-bitowy
Sumator 1-bitowy (z przeniesieniem)
Tabela prawdy
Sumator – (Full Adder) jest w stosunku do półsumatora poszerzony o dodatkowe wejście (C-in przeniesienie z poprzedniego układu) z poprzedniego sumatora lub półsumatora.
Wyrażenia opisujące sumę I przeniesienie:
Subtraktor 2-bitowy
library IEEE;
use IEEE.std_logic_1164.all;
entity ha is
port (a, b : in std_logic;
sub : out std_logic; -- odejmowanie
p : out std_logic); -- pozyczka
end ha;
architecture structure of ha is
begin
sub <= a xor b;
p <= (not a) and b;
end structure;
library IEEE;
use IEEE.std_logic_1164.all;
entity fa is
port(a, b, wp : in std_logic; -- wp – wczesniejsza pozyczka
sub : out std_logic; -- odejmowanie
p : out std_logic); -- pozyczka
end fa;
architecture structure of fa is
begin
sub <= (a xor b) xor wp;
p <= ((not a) and b) or (((not a) xor b) and wp);
end structure;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity sub_3 is
port (A : in std_logic_vector(1 downto 0); -- wejscie 1
B : in std_logic_vector(1 downto 0); -- wejscie 2
Q : out std_logic_vector(2 downto 0)); -- wyjscie (suma)
end sub_3;
architecture sub_3_a of sub_3 is
component ha is
port(a, b : in std_logic; -- wejscia
sub : out std_logic; -- roznica
p : out std_logic); -- pozyczka
end component;
component fa is
port(a, b, wp : in std_logic; -- wejscia
sub : out std_logic; -- roznica
p : out std_logic); -- pozyczka
end component;
signal cc : std_logic;
begin
blok1: ha port map (a=>A(0), b=>(not B(0)), sub=>Q(0), p=>cc);
blok2: fa port map (a=>A(1), b=>(not B(1)), wp=>cc, sub=>Q(1), p=>Q(2));
end sub_3_a;
Polsumator
library IEEE;
use IEEE.std_logic_1164.all;
entity psum is
port(A0, B0 : in std_logic;
S0, C1 : out std_logic);
end psum;
architecture structure of psum is
begin
S0 <= A0 xor B0;
C1 <= A0 and B0;
end structure;
Półsumator jest uproszczoną wersją sumatora jednobitowego, służy do dodawania dwóch liczb jednobitowych. Układ nie posiada wejścia przeniesienia z poprzedniej pozycji.
Wyrażenie opisujące półsumator:
Kod U1
W kodzie U1 uzupełniamy wartość bezwzględną liczby ujemnej do 1, tzn. w naturalnym zapisie dwójkowym zamieniamy zera na jedynki, a jedynki na zera (dla liczb ujemnych).
Uzupełnienie do 1 powstaje przez zanegowanie wszystkich bitów liczby wyjściowej:
P = 1011100ZM = 0100011U1
Kod U2
Uzupełnienie do 2 powstaje przez dodanie 1 do liczby U1:
P = 1011100ZM = 0100011U1=0100100U2
1. Podstawowe właściwości układu 74181
Jednostka aytmetyczno-logiczna UCY 74181 jako uniwersalny element elektroniki cyfrowej może spełniać funkcje komparatora, sumatora oraz dziewiętnaście innych funkcji logicznych, jak i kilkanaście funkcji arytmetycznych.
Układ UCY 74181 ma czternaście wejść:
Osiem wejść informacyjnych A'3 - A'0 i B'3 - B'0
cztery wejścia selekcyjne S3 - S0
wejście sterujące M
wejście przeniesienia/ pożyczki - C0
Oraz osiem wyjść:
cztery wyjścia funkcyjne F'3 - F'0
wyjście komparatora A=B
wyjście przeniesienia - C4
dwa wyjścia pomocnicze P' i G'
Pojedynczy układ może realizować funkcje dla słów 4-ro bitowych jednak łącząc kolejne układy UCY 74181 można realizować funkcje na dłuższych słowach.
2. Różnice między sumą logiczną a arytmetyczną
Operacje logiczne są operacjami działającymi na poszczególnych bitach, dzięki czemu można je całkowicie opisać przedstawiając jak oddziałują ze sobą dwa bity.
Suma logiczna jest funkcją dwuargumentową, tzn. jej wynik Y zależy od stanu dwóch argumentów A i B. Wynik przyjmuje stan 1, jeśli dowolny z argumentów ma również stan 1. Stan 0 występuje na wyjściu tylko wtedy, gdy wszystkie argumenty mają również stan 0.
Ogólnie chodzi o to, że w przypadku sumy logicznej ważne jest ustawienie jedynki na wyjściu, podczas gdy dla operacji sumy arytmetycznej ważny jest wynik sumowania dwóch wartości.
Wyniki w przypadku sumy logicznej i arytmetycznej mogą się różnić:
suma logiczna suma arytmetyczna
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | |
---|---|---|---|---|---|---|---|---|---|
+ | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | |
---|---|---|---|---|---|---|---|---|---|
+ | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
3. Algorytm operacji mnożenia
Wszystko jest dokładnie tak samo jak w przypadku liczb dziesiętnych
4. Sposoby realizacji układów mnożących
Do wykonania operacji mnożenia dwóch liczb binarnych wykorzystuje się multiplikator – na rys. multiplikator 2-bitowych słów
Wikipedia podaje takie sposoby: (ogólnie bardziej chodzi w tym sposobach o analogowe układy mnożące)
1. Na dwóch generatorach funkcji kwadratowej
2. Na trzech wzmacniaczach logarytmicznych według wzoru:
3. Na modulatorze
4. Na tranzystorowym układzie mnożącym, będącym precyzyjnym mieszaczem iloczynowym.
5. Właściwości kodu Gray’a
Kod Graya, zwany również kodem refleksyjnym, jest dwójkowym kodem bezwagowym niepozycyjnym, który charakteryzuje się tym, że dwa kolejne słowa kodowe różnią się tylko stanem jednego bitu. Jest również kodem cyklicznym, bowiem ostatni i pierwszy wyraz tego kodu także spełniają w/w zasadę.
Kod dziesiętny naturalny | Kod dziesiętny refleksyjny | Kod dwójkowy naturalny | Kod dwójkowy refleksyjny |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 2 | 10 | 11 |
3 | 3 | 11 | 10 |
4 | 4 | 100 | 110 |
5 | 5 | 101 | 111 |
6 | 6 | 110 | 101 |
7 | 7 | 111 | 100 |
8 | 8 | 1000 | 1100 |
9 | 9 | 1001 | 1101 |
10 | 19 | 1010 | 1111 |
11 | 18 | 1011 | 1110 |
12 | 17 | 1100 | 1010 |
13 | 16 | 1101 | 1011 |
14 | 15 | 1110 | 1001 |
15 | 14 | 1111 | 1000 |
16 | 13 | 10000 | 11000 |
17 | 12 | 10001 | 11001 |
18 | 11 | 10010 | 11011 |
19 | 10 | 10011 | 11010 |
20 | 20 | 10100 | 11110 |
---|---|---|---|
21 | 21 | 10101 | 11111 |
Konwerter kodu 8421 na kod Gray’a
Konwerter kodu Gray’a na kod 8421
7. Budowa i zasada działania sumatora dziesiętnego BCD
Układ górny 7483 jest sumatorem dwu liczb binarnych (liczby A3 A2 A1 A0 i liczby B3 B2 B1 B0) oraz przeniesienia C0. Trzy bramki NAND oraz element zaprzeczenia tworzą układ podający na wyjście C (przeniesienie) jedynkę logiczną, gdy suma liczb A3 A2 A1 A0, B3 B2 B1 B0 i przeniesienia C0 jest większa, niż 9.
Dolny układ 7483 jest sumatorem korygującym wynik. Jeśli C=0, to do wyniku podawanego z sumatora górnego do sumatora dolnego jest dodawana liczba binarna 0000 i wynik nie ulega zmianie. Jeśli C=1, wtedy następuje korekcja wyniku: do powstałego w sumatorze
górnym wyniku dodawana jest w sumatorze dolnym liczba 0110 (=6d); na wyjściu sumatora dolnego (przewody S3 S2 S1 S0) mamy wynik skorygowany.