簡介
多位全加器連線可以是逐位進位,也可以是超前進位。逐位進位也稱串列進位,其邏輯電路簡單,但速度也較低。
器物分類
半加器
能對兩個1位二進制數進行相加求和及進位的邏輯電路稱為半加器。或:只考慮兩個一位二進制數的相加,而不考慮來自低位進位數的運算電路,稱為半加器。圖1為半加器的方框圖。圖2為半加器原理圖。其中:A、B分別為被加數與加數,作為電路的輸入端;S為兩數相加產生的本位和,它和兩數相加產生的向高位的進位C一起作為電路的輸出。
根據二進制數相加的原則,得到半加器的真值表如表1所列。
信號輸入 | 信號輸出 | ||
A | B | S | C |
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
表1 半加器的真值表
(二)全加器
除本位兩個數相加外,還要加上從低位來的進位數,稱為全加器。圖4為全加器的方框圖。圖5全加器原理圖。被加數Ai、加數Bi從低位向本位進位Ci-1作為電路的輸入,全加和Si與向高位的進位Ci作為電路的輸出。能實現全加運算功能的電路稱為全加電路。全加器的邏輯功能真值表如表2中所列。
信號輸入端 | 信號輸出端 | |||
Ai | Bi | C0 | Si | Ci |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
表2 全加器邏輯功能真值表
多位全加器連線可以是逐位進位,也可以是超前進位。逐位進位也稱串列進位,其邏輯電路簡單,但速度也較低。
工作原理
加法器是數字系統中的基本邏輯器件。例如:為了節省資源,減法器和硬體乘法器都可由加法器來構成。但寬位加法器的設計是很耗費資源的,因此在實際的設計和相關係統的開發中需要注意資源的利用率和進位速度等兩方面的問題。多位加法器的構成有兩種方式:並行進位和串列進位方式。並行進位加法器設有並行進位產生邏輯,運算速度快;串列進位方式是將全加器級聯構成多位加法器。通常,並行加法器比串列級聯加法器占用更多的資源,並且隨著位數的增加,相同位數的並行加法器比串列加法器的資源占用差距也會越來越大。
四位全加器可對兩個多位二進制數進行加法運算,同時產生進位。當兩個二進制數相加時,較高位相加時必須加入較低位的進位項(Ci),以得到輸出為和(S)和進位(C0)。
(一)半加器
VHDL語言描述語句為:
so<=a xor b;
co<=a and b
程式設計:
library ieee;
use ieee.std_logic_1164.all;
entity h_adder is
port (a,b:in std_logic;
so,co:out std_logic); ――定義輸入、輸出連線埠
end h_adder;
architecture bh of h_adder is
begin
so<=a xor b; ――“異或”運算
co<=a and b; ――“與”運算
end bh;
四位全加器程式代碼如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity add4 is
port(cin:in std_logic;
a,b:in std_logic_vector(3 downto 0);
s:out std_logic_vector(3 downto 0);
cout:out std_logic);
end add4;
architecture beh of add4 is
signal sint:std_logic_vector(4 downto 0);
signal aa,bb:std_logic_vector(4 downto 0);
begin
aa<="0" & a(3 downto 0); --4位加數矢量擴為5位,提供進位空間
bb<="0" & b(3 downto 0);
sint<=aa+bb+cin;
s(3 downto 0)<=sint(3 downto 0);
cout<=sint(4);
end beh;
四位全加器 Verilog HDL語言代碼如下:
module adder4(cout,sum,a,b,cin);
output[3:0] sum;
output cout;
input[3:0] a,b;
input cin;
assign {cout,sum}=a+b+cin;
endmodule