|
真值表
一位全加器的真值表如下图,其中Ai为被加数,Bi为加数,相邻低位来的进位数为Ci-1,输出本位和为Si。向相邻高位进位数为Ci [1]
输入
输出
Ci-1
Ai
Bi
Si
Ci
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
描述
一位全加器的表达式如下:
Si=Ai⊕Bi⊕Ci-1
第二个表达式也可用一个异或门来代替或门对其中两个输入信号进行求和:
硬件描述语言Verilog 对一位全加器的三种建模方法:
结构化描述方式(Verilog)
module FA_struct (A, B, Cin, Sum, Count);
input A;
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,countut 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; |
|