1.半加器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.半加器相关的知识,希望对你有一定的参考价值。

参考技术A 1.定义

两个一位数的相加,称为半加器。

2.真值表

x为第一个加数,y为第二个加数,c为进位,s为x+y右边一位和。

x       y       c         s 

0       0       0         0

0       1       0         1

1       0       0         1

1       1       1         0 

3.逻辑表达式

                与门

      异或

4.verilog 程序

4.1 数据流描述方式

module add_half(

input x,

input y,

output c,

output s

):

assign c=x&y;

assign s=x^y;

endmodule

4.2 门级描述方式

module add_half(

input x,

input y,

output c,

output s

);

and(c,x,y);

xor(s,x,y);

endmodule

4.3 行为描述方式

module  add_half(

input x,

input y,

output c,

output s

);

always@(a or b)

begin 

case(a,b)

2'b00:begin s=0;c=0; end

2'b01:begin s=1;c=0; end

2'b10:begin s=1;c=0; end

2'b11:begin s=0;c=1; end

endcase

end 

5.RTL 逻辑图

6.仿真 

6.1 testbench

`timescale 1ns / 1ps

module sim_add_half(

    );

    reg x,y;

    reg clk;

    wire s,c;

initial#初始化数据

    begin

        #1

        x=0;

        y=0;

        clk=0;

    end

always #5 clk=~clk;

always@(posedge clk)

    begin

    x=$random%2;

    y=$random%2;

    end

add_half u1(x,y,c,s); #调用原文件

endmodule

6.2 仿真图

FPGA学习-7:较为复杂的组合电路 上

上一节我们学习了基本的3-8译码器组合电路verilog写法

这一次我们来点有难度的,写一个整型全加器

在此基础上再写一个单周期无符号整型乘法器


首先从简单的开始:半加器

半加器真值表

A B C
0 0 0
0 1 1
1 0 1
1 1 0

真值表可以写为:

C = A xor B

可以看到半加器就是2个1位二进制数相加

verilog行为级代码如下:

module Half_adder(
    input A,
    input B,
    output Y
);

assign Y = A + B;

endmodule

门级代码如下:

module Half_adder(
    input A,
    input B,
    output Y
);

xor(Y,A,B);

endmodule

但是要想实现8位,16位,甚至32位的整数加法单单是半加器无法完成的

实际运算过程种也有加法的进位,半加器无法传递进位信息

所以我们需要 “全加器”

全加器真值表

A B C(上一位进位信号) D(当前进位信号) Y
0 0 0 0 0
0 0 1 0 1
... ... ... ... ...
0 1 1 1 0
... ... ... ... ...
1 1 1 1 1

真值表可以写为:

D = (A and B) or (A and C) or (B and C)
Y = (A xor B) xor C

行为级代码如下:

module Adder(
    input A,
    input B,    
	input C,    
	output D,
    output Y
);

assign {D,Y} = A+B+C;

endmodule

门级代码如下

module Adder(
    input A,
    input B,    
	input C,    
	output D,
    output Y
);

wire t1,t2,t3,t4;
xor(t1,A,B);
xor(Y,t1,C);

and(t2,A,B);
and(t3,A,C);
and(t4,B,C);
or(D,t2,t3,t4);

endmodule

由于篇幅原因,下一篇再介绍加法器和乘法器的写法

以上是关于1.半加器的主要内容,如果未能解决你的问题,请参考以下文章

FPGA的学习:半加器的实现

备战秋招[一]

FPGA的学习:全加器的实现

用QuartusII实现半加器全加器2-4译码器BCD码加法器计数器交通灯

FPGA设计入门

FPGA代码一位半加器入门-第2篇