集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1472|回复: 2

全加器

[复制链接]
zxopenluyutong 发表于 2021-4-18 09:26:59 | 显示全部楼层 |阅读模式

真值表

一位全加器的真值表如下图,其中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;
 楼主| zxopenluyutong 发表于 2021-4-19 09:42:34 | 显示全部楼层
全加器全加器
大鹏 发表于 2021-4-20 12:19:19 | 显示全部楼层
全加器      
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-1 13:23 , Processed in 0.078840 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表