共找到2條詞條名為全加器的結果 展開

全加器

電學電路中的術語

全加器英語名稱為full-adder,是用門電路實現兩個二進位數相加並求出和的組合線路,稱為一位全加器。一位全加器可以處理低位進位,並輸出本位加法進位。多個一位全加器進行級聯可以得到多位全加器。常用二進位四位全加器74LS283。

應用舉例


真值表

一位全加器的真值表如下圖,其中為被加數,為加數,相鄰低位來的進位數為,輸出本位和為。向相鄰高位進位數為Ci
輸入輸出
AiBiSiCi
11
11
111
11
111
111
11111

描述

一位全加器的表達式如下:
第二個表達式也可用一個異或門來代替或門對其中兩個輸入信號進行求和:硬體描述語言Verilog 對一位全加器的三種建模方法:

結構化描述方式


module FA_struct (A, B, Cin, Sum, Count);
input B;
input Cin;
output Sum;
output Count;
wire S1, T1, T2, T3;
// -- statements -- //
xor x1 (S1, A, B);
xor x2 (Sum, S1, Cin);
and A1 (T3, A, B );
and A2 (T2, B, Cin);
and A3 (T1, A, Cin);
or O1 (Count, T1, T2, T3 );
endmodule
該實例顯示了一個全加器由兩個異或門、三個與門、一個或門構成。S1、T1、T2、T3則是門與門之間的連線。代碼顯示了用純結構的建模方式,其中xor 、and、or 是Verilog HDL 內置的門器件。以 xor x1 (S1, A, B) 該例化語句為例:xor 表明調用一個內置的異或門,器件名稱xor ,代碼實例化名x1(類似原理圖輸入方式)。括弧內的S1,A,B 表明該器件管腳的實際連接線(信號)的名稱,其中 A、B是輸入,S1是輸出。

數據流描述方式


`timescale 1ns/100ps
module FA_flow(A,B,Cin,Sum,Count);
input A,B,Cin;
output Sum, Count;
wire S1,T1,T2,T3;
assign # 2 S1 = A ^ B;
assign # 2 Sum = S1 ^ Cin;
assign #2 T3 = A & B;
assign #2 T1 = A & Cin;
assign #2 T2 = B & Cin ;
assign #2 Count=T1 | T2 | T3;
endmodule
注意在各assign 語句之間,是并行執行的,即各語句的執行與語句之間的順序無關。如上,當A有個變化時,S1、T3、T1 將同時變化,S1的變化又會造成Sum的變化。

行為描述方式


module FA_behav(A, B, Cin, Sum, Cout );
input A,B,Cin;
output Sum,Cout;
reg Sum, Cout;
reg T1,T2,T3;
always@ ( A or B or Cin )
begin
Sum = (A ^ B) ^ Cin ;
T1 = A & Cin;
T2 = B & Cin ;
T3 = A & B;
Cout = (T1| T2) | T3;
end
endmodule

全加器的VHDL描述


library ieee;
use ieee.std_logic_1164.all;
Entity full_add is
port(a,b,c:in std_logic;
sum,count:out std_logic);
end entity full_add;
architecture art of full_add is
begin
process(a,b,c) is
begin
if(a='0' and b='0' and c='0') then
sum<='0';count<='0';
elsif(a='1' and b ='0' and c='0') then
sum<='1';count<='0';
elsif(a='0' and b='1' and c= '0') then
sum<='1';count<='0';
elsif(a='1' and b='1' and c= '0') then
sum<='0';count<='1';
elsif(a='0' and b='0' and c= '1') then
sum<='1';count<='0';
elsif(a='1' and b='0' and c= '1') then
sum<='0';count<='1';
elsif(a='0' and b='1' and c= '1') then
sum<='0';count<='1';
else
sum<='1';count<='1';
end if;
end process;
end architecture art;