jjzjj

半加器与全加器

IC小白\' 2023-08-16 原文

FPGA学习篇之半加器与全加器

半加器与全加器的区别与联系


文章目录


前言

  加法器作为数字电路中基本的器件,主要作用是实现两个数的加法运算。加法器有半加器和全加器之分,区别是半加器不接受低位的进位信号,全加器接受来自低位的进位信号并参与运算。


一、半加器

1.逻辑分析

  如下图所示,半加器只有两个输入和两个输出

半加器的真值表如下

In1In2SumCout
0000
0110
1010
1101

通过真值表可以得出: S u m = I n 1 ⊕ I n 2 Sum = In1 \oplus In2 Sum=In1In2 C o u t = I n 1 & I n 2 Cout = In1 \& In2 Cout=In1&In2

2.代码编写

module adderN#(parameter N = 4)(
	input [N-1 : 0] in1,
	input [N-1 : 0] in2,
	output [N-1 : 0] sum,
	output  cout
);

assign {cout,sum} = in1 + in2;

//always@(*)
//	{cout,sum} = in1 + in2;

endmodule

二、全加器

1.逻辑分析

  如下图所示,全加器的输入有来自低位的仅为信号

全加器的真值表如下:

In1In2CinSumCout
00000
00110
01010
10010
01101
11001
10101
11111

通过卡诺图化简可以得出 S u m = C i n ′ ( I n 1 ⊕ I n 2 ) + C i n ( I n 1 ⊙ I n 2 ) = C i n ⊕ I n 1 ⊕ I n 2 Sum =Cin'( In1 \oplus In2) + Cin( In1 \odot In2) = Cin \oplus In1 \oplus In2 Sum=Cin(In1In2)+Cin(In1In2)=CinIn1In2
C o u t = C i n ( I n 1 ∥ I n 2 ) + ( I n 1 & I n 2 ) Cout = Cin( In1 \parallel In2) +(In1 \& In2) Cout=Cin(In1In2)+(In1&In2)

2.代码编写

module adderN#(parameter N = 4)(
	input [N-1 : 0] in1,
	input [N-1 : 0] in2,
	input  cin,
	output [N-1 : 0] sum,
	output  cout
);

assign {cout,sum} = in1 + in2 + cin;
//assign {cout,sum[N-1 : 0]} = {in1[N-1],in1[N-1 : 0]} + {in2[N-1],in2[N-1 : 0]} + cin;

endmodule

三、总结

  文中通过真值表和逻辑表达式推导了半加器和全加器的原理,同时编写了verilog代码。全加器可以用两个半加器和一个或门实现,所以全加器的代码也可以调用两个半加器,再将两个半加器输出的进位信号相或得到。

有关半加器与全加器的更多相关文章

  1. ruby - 在 Ruby 中,为什么在注入(inject)/归约方法中将累加器称为 memo? - 2

    出于好奇,为什么在注入(inject)/归约方法中将累加器称为memo?它的命名背后有什么背景/历史吗?它实际上是指“备忘录”还是备忘录代表什么?http://ruby-doc.org/core-2.0/Enumerable.html#method-i-injecthttp://ruby-doc.org/core-2.0/Enumerable.html#method-i-reduce 最佳答案 “memo”表示在内存中,注入(inject)在整个迭代过程中使用来保存中间对象状态,以便在下一次迭代中使用它。

  2. VHDL学习笔记——半加器 多路选择器 分频器 - 2

    VHDL程序结构:条件语句if_then_else_endif数据类型BIT类型(取逻辑位’1’或’0’)、整数类型INTEGER、布尔类型BOOLEAN(取TRUE或FALSE)、标准逻辑类型STD_LOGIC等进程语句与顺序语句process(敏感信号表)_endprocessVHDL中所有的顺序语句都必须放在进程语句中端口语句port(端口模式;端口数据类型);端口模式in:输入端口out:输出端口inout:双向端口buffer:缓冲端口关键字(不区分大小写)entity、architecture、end、if、else、in、out等;标识符(不区分大小写)自定义实体名、结构体名、端

  3. Quartus-II入门(全加器) - 2

    文章目录前言一、相关概念1.半加器2.全加器二、原理图输入实现全加器1.半加器实现2.半加器仿真3.全加器实现4.硬件下载三、总结参考链接前言在做这里的学习之前,需要先把ModelsimSE安装好,Quartus-II及其固件库等,这个实验本身并不复杂,但是在做的过程中会有很多小的地方报错,按步骤一步一步来,否则很容易出错。一、相关概念1.半加器半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。是实现两个一位二进制数的加法运算电路。真值表如下2.全加器全加器是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位

  4. java - 累加器生成器测试 - Java 8 - 2

    PaulGraham,在他的精彩文章中RevengeoftheNerds,声称语言的力量各不相同。他提到了一个很好的练习——编写一个累加器生成器:Wewanttowriteafunctionthatgeneratesaccumulators--afunctionthattakesanumbern,andreturnsafunctionthattakesanothernumberiandreturnsnincrementedbyi.Java中的解决方案是publicclassAccumulator{publicinterfaceInttoint{publicintcall(inti);}

  5. java - 流收集累加器/组合器顺序 - 2

    这基本上是thisanswerofmine的后续.假设我正在处理自定义收集器并假设accumulator总是将向供应商返回的集合中添加一些元素,是否有可能当combiner被调用,其中一个中间结果会是空的?一个例子可能更容易理解。假设我有一个List数字,我想将它拆分为列表列表,其中2是分隔符。例如我有1,2,3,4,2,8,结果应该是[[1],[3,4],[8]].这实现起来并不复杂(不要过多地判断代码,我写得很快,所以我可以写出这道题)。List>result=Stream.of(1,2,3,4,2,8).collect(Collector.of(()->newArrayList(

  6. 具有删除旧样本能力的 C++ 累加器库 - 2

    在Boost.Accumulator中,您可以将样本添加到累加器,然后从中提取统计量。例如:acc(1.)acc(2.)acc(3.)cout该库有很多更复杂的统计量,例如偏度、峰度或p_square_cumulative_distribution。我想做的是这样的:acc(1.)acc(2.)acc(3.)std::coutpop()将以FIFO(先进先出)方式工作。我想做的是在滑动时间窗口内以在线(增量)方式计算我的数据的统计信息。累加器必须在内部保存所有值。我可以自己做,但我总是喜欢先检查现有的库,并且可能有我不知道的算法可以在数据传入或传出时巧妙地计算数量。

  7. c++ - 计数器和累加器有什么区别? - 2

    这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。我不确定有什么区别,但这是问题所在。编写一个赋值语句,将名为numStudents的计数器变量更新为1。会不会是:numStudents=numStudents+1?我的另一个问题是编写一个赋值语句,用sales变量中的值更新一个名为total的累加器变量。它会像这样吗:total=total+sales?

  8. 使用modelsim设计4位全加器,并调出波形图和电路图(详细教程) - 2

    OK,Let’sbegin一、仿真四位全加器的代码如下add4的代码moduleadd_4( input[3:0]a,b, output[3:0]sum, outputcout, inputcin);assign{cout,sum}=a+b+cin;endmoduleadder4_test的代码moduleadder_4();wire[3:0]sum;wirecout;reg[3:0]a,b;regcin;initialbegin#0a=4'b0001;b=4'b1010;cin=1'b0;#5a=4'b0010;b=4'b1010;cin=1'b1;#5a=4'b0010;b=4'b1110

  9. 加法器、半加器、全加器、超前进位加法器 - 2

    文章目录一、半加器二、全加器三、超前进位加法器关键点一、半加器简单来讲,半加器不考虑低位进位来的进位值,只有两个输入,两个输出。由一个与门和异或门构成.真值表:输入输出ABCS0000010110011110半加器不考虑低位向本位的[进位],因此它不属于[时序逻辑电路],有两个输入端和两个输出。设加数(输入端)为A、B;和为S;向高位的进位为Ci+1逻辑表达式:verilog数据流级描述://半加器模块moduleadder_half(input wire a, input wire b, output reg sum, output reg cout); al

  10. java - MongoDB group() 函数中的 Long 累加器而不是 Double - 2

    我正在通过官方JavaAPI使用MongoDB。我可以毫不费力地存储和检索Long值。但是,当我尝试使用group()函数累积这些值时,JavaScript解释器将所有内容都转换为Double,最终结果为Double。这是我的组命令:{...initial:{count:0},reduce:"function(o,a){a.count+=o.count;}"}有没有办法告诉解释器count实际上是一个Long?像count:0L或count:Long(0)这样的东西?还是应该做Java端的积累? 最佳答案 这是因为group命令实际

随机推荐