请输入您要查询的百科知识:

 

词条 全加器
释义

简介

full-adder

用门电路实现两个二进制数相加并求出和的组合线路,称为一个全加器。全加器可以处理低位进位,并输出本位加法进位。

真值表

如下Ai为被加数,Bi为加数,相邻低位来的进位数为Ci-1,输出本位和为Si。向相邻高位进位数为Ci

输入  输出

Ai Bi Ci-1 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

Ci=AiBi+Ci-1Ai+Ci-1Bi

VERILOG 对全加器的三种建模方法:

1.)结构化描述方式:

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 (Cout, 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是输出。

2.)数据流描述方式:

`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 ;

endmodule

注意在各assign 语句之间,是并行执行的,即各语句的执行与语句之间的顺序无关。如上,当A有个变化时,S1、T3、T1 将同时变化,S1的变化又会造成Sum的变化。

3.)行为描述方式:

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描述

libriry ieee;

use ieee.std_logic.1164.all;

Entity full_add is

port(a:in std_logic;

b:in std_logic;

cin:in std_logic;

sum:out std_logic;

count:out std_logic

);

architecture rtl of full_add is

begin

process(a,b,cin)

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 ='1';count ='0';

else

sum ='1';count='1';

end if;

end process;

end rtl;

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/11 6:46:17