FPGA——1位全加器和4位全加器的实现

一、认识全加器

1、半加器

1.半加器的定义
半加器是能够对两个一位的二进制数进行相加得到半加和以及半加进位的组合电路。
2.半加器的真值表
A,B表示二进制数,C表示半加进位,S表示半加和
在这里插入图片描述
3.逻辑电路图

在这里插入图片描述

2、 全加器

在这里插入图片描述

二、输入原理图实现1位加法器

1、工程创建

因为之前写过了,参考以下创建工程

链接: link

2、半加器原理图输入

1、分别调入元件and2, xor,然后设计原理图如下:
在这里插入图片描述
在这里插入图片描述
2、保存文件,并编译
通过tool->Netlist Viewers->RTL Viewer,查看电路图
在这里插入图片描述
保存该文件为:add.bdf,然后进行编译

  1. 将设计项目设置成可调用的元件

为了构成全加器的项层设计,必预将以上设计的半加器half_adder.bdf 设置成可调用的元件。

选择菜中File中的Create/Update→Create Symbol Files for Current File项,即可将当前文件add变成一个元件符号存盘,以 待在高层次设计中调用。

  1. 新家全加器原理图文件

新建方法同第二步新建半加器原理图文件方法一样

在弹出的“symbol”窗的“name”栏输入底层文件半加器的存储名“add” 调出半加器

在这里插入图片描述
5、然后设计原理图如下:
在这里插入图片描述
在这里插入图片描述

3、实验效果

引脚绑定及硬件下载测试

① 选择目标芯片:cycloneIVE系列的EP4CE11529C7 ,在菜单中选择,“assignments→device…”(同新建工程所选择的型号一样)

② 引脚绑定

先从菜单中选择“assignments→pin planner”,然后进行如下配置:
在这里插入图片描述
③ 把开发板接上电源,USB 接口接电脑, 然后点击Programmer按钮,然后弹出一个下载界面。

如果第一次下载需安装 硬件。即在下载界面中点击按钮“hardware setup…”,然后在弹出的对话框中选择“USB blaster”,再点击“ok”,则硬件被安装上。

如果找不到,请先在电脑设备管理器中配置USB-Blaster驱动
在这里插入图片描述
4、实验结果
在这里插入图片描述

三、Verilog实现1位全加器

1. 新建工程

工程名字为add_1bit,芯片型号选择同上

2. 新建一个Verilog文件

File -----> New -----> Verilog HDL File

module add_1bit(S,C_out,A,B,C_in);
input A,B,C_in ;
output S,C_out ;
 
reg S,C_out ;
 
always @(A or B or C_in)
begin
	{C_out,S} = A +B +C_in ;
end
endmodule

从抽象层次来说,这并不是用数电的设计方法来实现的,但是这不影响我们通过这个来实现一位全加器。

该Verilog文件名为 add_1bit.v

编译之后,查看其硬件电路图如下:在这里插入图片描述

3、仿真

在这里插入图片描述

其他

引脚的绑定,烧入结果如上

四、位全加器的实现

1、工程

module four (
    num1,
    num2,
    cin,
    cout,
    sum
);

input   [3:0]   num1;
input   [3:0]   num2;
input           cin;
output          cout;
output  [3:0]   sum;


reg             cout;
reg     [3:0]   sum;
reg             add;

always @(num1 or num2 or cin)
begin
    // 第一位
    sum[0] = (num1[0] ^ num2[0]) ^ cin;
    cout = (num1[0] & num2[0]) | (num2[0] & cin) | (num1[0] & cin);
    add = cout;
    // 第二位
    sum[1] = (num1[1] ^ num2[1]) ^ add;
    cout = (num1[1] & num2[1]) | (num2[1] & add) | (num1[1] & add);
    add = cout;
    // 第三位
    sum[2] = (num1[2] ^ num2[2]) ^ add;
    cout = (num1[2] & num2[2]) | (num2[2] & add) | (num1[2] & add);
    add = cout;
    // 第四位
    sum[3] = (num1[3] ^ num2[3]) ^ add;
    cout = (num1[3] & num2[3]) | (num2[3] & add) | (num1[3] & add);
    add = cout;
end
endmodule

2、电路图

在这里插入图片描述

五、关于3-8译码器

在这里插入图片描述
真值表
在这里插入图片描述

六、参考

链接: link

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值