FPGA 第8讲 简单组合逻辑--半加器

时间:2024.11.16

一、学习内容

1.半加器

数字电路中加法器是经常用到的一种基本器件,主要用于两个数或者多个数的加和,加法器又分为++半加器(half adder)++ 和++全加器(full adder)++。

半加器电路是指对两个输入数据位相加,输出一个结果位和进位,++没有进位输入++的加法器电路。是实现两个一位二进制数的加法运算电路。

2.全加器

全加器是在半加器的基础上的升级版,除了加数和被加数加和外还要加上上一级传进来的进位信号。

3.实验目标

设计并实现一个半加器,使用开发板上的按键 KEY1、KEY2 作为被加数输入,选择开发板上的 LED 灯 D6 表示相加和的输出,LED 灯 D7 表示进位输出。

4.原理图

征途 Pro 开发板的按键未按下时为高电平、按下后为低电平;LED 灯则为低电平点亮。

二、实验

1.准备工作

建立文件夹存放工程,建立文件体系

2.绘制波形图和模块框图

模块框图

根据功能分析,该工程只需实现一个半加器的功能,所以设计成一个模块即可。模块

命名 half_adder,半加器由两个 1bit 的加数,分别命名为 in1 和 in2,输出也有两个信号,

为什么会是两个呢?我们不要忘记两个数加和后除了求得的"和"以外会有"进位"的情

况,这里我们把进位信号单独拉出来,所以输出就有两个信号,分别为 1bit 的 sum 和 cout

信号,该模块的功能是实现输入任意两个 1bit 加数的组合都能求得正确的和与进位值。

波形图

3.编写代码

复制代码
module half_adder
(
 input  wire   in_1,
 input  wire   in_2,
 output wire   sum,
 output wire   count


);
//用assign语句进行赋值,同时利用位拼接
assign {count,sum}= in_1 +in_2;
endmodule

4.仿真验证

复制代码
`timescale 1ns/1ns
module tb_half_adder ();
//定义两个模拟输入信号,定义两个wire类型的输出信号
wire sum;
wire count;
reg in_1;
reg in_2;

//输入信号的初始化
initial
begin
in_1 <= 1'b0;
in_2 <= 1'b0;
end
always #10 in_1 <={$random}%2;
always #10 in_2 <={$random}%2;
//为了便于观察,添加系统函数
initial
begin
   $timeformat(-9,0,"ns",6);//时间函数
   $monitor("@time :%t:in_1=%b,in_2=%b,sum=%b,count=%b",$time,in_1,in_2,sum,count);
end
//模块的实例化
half_adder half_adder_inst
(
 .in_1 (in_1),
 .in_2 (in_2),
 .sum  (sum),
 .count(count)
);
endmodule

5.绑定管脚、上板验证

管脚绑定完成后,进行一次全编译

将开发板正确连接后,给开发板上电 ,再进行程序下载

三、实验结果

打印结果

波形图

四、知识点和小技巧

1.波形路径屏蔽

2.将被仿真模块添加到波形图处

在sim页面"ctrl+w"

3.波形图显示页面的调整

ctrl+A全选

ctrl+g分组

4.视图窗格view

5.窗格发生混乱的处理方法-RESET

相关推荐
水龙吟啸14 分钟前
华为2026.6.17机考选择题+编程题【速刷敲黑板】
人工智能·深度学习·算法·华为
敖行客 Allthinker25 分钟前
IM 融合专题:后端架构师的核心修炼
java·开发语言·数据库
凌波粒25 分钟前
LeetCode--53. 最大子序和(贪心算法)
算法·leetcode·贪心算法
进击的程序猿~30 分钟前
Go Slice源码深度解析指南
开发语言·后端·golang
Hesionberger33 分钟前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
c2385634 分钟前
《序列 DP:C++ 中的“最长”套路与编辑距离》
c++·算法·动态规划
aqiu11111136 分钟前
【算法日记 19】LeetCode 1. 两数之和:梦开始的地方,哈希表的降维打击
算法·leetcode·职场和发展
鱼子星_36 分钟前
【C++】类和对象(下)——初始化列表,类型转换,static成员,友元,内部类,匿名对象,编译器的优化拓展
c语言·c++·笔记
千寻xun9 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
CS创新实验室10 小时前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算