【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块

news2024/12/26 9:19:53

前言:本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载

示例:加法器

 

  • 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片 
  • 配置方式:USB-JTAG/SPI Flash
  • 高达100MHz 的内部时钟速度 
  • 存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A)
  • 通用IO:Switch :x8LED:x16Button:x5DIP:x8   通用扩展IO:32pin
  • 音视频/显示: 7段数码管:x8 VGA视频输出接口 Audio音频接口 
  • 通信接口:UART:USB转UART   Bluetooth:蓝牙模块 
  • 模拟接口: DAC:8-bit分辨率   XADC:2路12bit 1Msps ADC

目录

Ⅰ.前置知识

 0x00 半加器

 0x01 全加器

Ⅱ. Verilog实现 

 0x00 注意事项

 0x01 一位全加器

 0x02 串行加法器


Ⅰ.前置知识

 0x00 半加器

能对两个1位二进制数进行相加求和及进位的逻辑电路称为半加器。或:只考虑两个一位二进制数的相加,而不考虑来自低位进位数运算电路,称为半加器。

下图为半加器的方框图:     

其中:In1、In2分别为被加数与加数,作为电路的输入端;S为两数相加产生的本位和,它和两数相加产生的向高位的进位C一起作为电路的输出。

根据二进制数相加的原则,得到半加器的真值表如下表:

信号输入

信号输出

In1In2

S

C

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

 0x01 全加器

全加器其实就是考虑到进位的加法器。

全加器输入 

全加器输出 

A

B

Cin

BCDout

Cout

0

0

0

0

0

0

0

1

0

1

0

1

0

0

1

0

1

1

1

0

1

0

0

0

1

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

真值表:

逻辑表达式:

在这里插入图片描述

 由于两个半加器可以构成一个全加器,所以在这里进位Ci还可以表示为: 

在这里插入图片描述

Ⅱ. Verilog实现 

 0x00 注意事项

本次实验中,涉及到了子模块主模块的编写。

在主模块中(顶层文件),对子模块进行调用,从而满足设计

下面以加法器为示例,介绍子模块和主模块的编写和调用:

1、设计子模块

参考程序:

程序文件一: 

module FA1(input A,input B,input Cin,output reg Cout,output reg S);
always @(A or B or Cin)begin
 {Cout,S}=A+B+Cin;
end
endmodule

程序文件二:(选用,自定义)

module UserAND(a,b,z); 
input a,b; 
output z; 
assign z=a&b; 
endmodule 

以上程序也可自行进行设计修改;

2、设计主模块: (顶层文件)

module EX5_Top(input [1:0] IA,input [1:0] IB,output [1:0] sum,output C );
wire ct; 
//子模块的调用,例如其中FA1为子模块名称,FD0和FD1为在顶层文件中引用的名称。 
FA1 FD0 (.A(IA[0]),.B(IB[0]),.Cin(0),.Cout(ct),.S(sum[0])); 
FA1 FD1 (.A(IA[1]),.B(IB[1]),.Cin(ct),.Cout(C),.S(sum[1]));
Endmodule

3、编译文件并查看RTL视图(如图参考)

 0x01 一位全加器

 设计代码:

module  ADD_Top(input [1:0] IA,input [1:0] IB,output [1:0] sum,output C );
wire ct; 

ADD FD0 (.A(IA[0]),.B(IB[0]),.Cin(0),.Cout(ct),.S(sum[0])); 
ADD FD1 (.A(IA[1]),.B(IB[1]),.Cin(ct),.Cout(C),.S(sum[1]));

endmodule

module ADD(input A,input B,input Cin,output reg Cout,output reg S);
always @(A or B or Cin)begin
 {Cout,S}=A+B+Cin;
end
endmodule

仿真设计代码:

module sim_ADD_Top( );
reg [1:0] IA;
reg [1:0] IB;
wire [1:0] sum;
wire ct;
 ADD_Top uu1(IA,IB,sum,ct);
initial {IA,IB}=4'b0000;
always 
 #100{IA,IB}={IA,IB}+1;
 
endmodule

点击Vivado的“Run Simulation”菜单,进入仿真调试模式,可以在仿真输出窗口看到仿真时序波形

波形图:

 0x02 串行加法器

在理解了半加器与全加器的基础上,采用模块化的设计方法,我们可以通过四个全加器来实现四位串行加法器的设计

设计代码:

`timescale 1ns / 1ps
module M_4bit_adder(S,C3,A,B,C_1);
input [3:0]  A,B;
input C_1;
output [3:0] S;
output C3;
wire C0,C1,C2;
fulladder u0(S[0],C0,A[0],B[0],C_1);
fulladder u1(S[1],C1,A[1],B[1],C0);
fulladder u2(S[2],C2,A[2],B[2],C1);
fulladder u3(S[3],C3,A[3],B[3],C2);
endmodule


module halfadder(S,C,A,B);
input A,B;
output S,C;
xor(S,A,B);
and(C,A,B);
endmodule

module fulladder(S,C,A,B,Cin);
input A,B,Cin;
output S,C;
wire S1,D1,D2;
halfadder HA1(.S(S1),.C(D1),.A(A),.B(B));
halfadder HA2(.S(S),.C(D2),.A(S1),.B(Cin));
or g1(C,D2,D1);
endmodule

仿真设计代码:

module sim_ADD();
reg [3:0] A,B;
wire [3:0] S;
wire C3;

M_4bit_adder uu1(S,C3,A,B,0);
initial {A,B}=8'b0000_0000;
always
#100 {A,B}={A,B}+1;
endmodule

波形图:

添加硬件约束并连接实验电路板,

参考管脚分配如下:

程序中管脚名 

实际管脚 

说明 

A(0

N4

拨动开关 SW1

A(1

M4

拨动开关 SW2

B(0

R2

拨动开关 SW3

B(1

P2

拨动开关 SW4

SUM(0) 

K2

LED 0

SUM(1) 

J2

LED 1

C

J3

LED 2

实验电路板实现:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重新成为合伙人背后,阿里需要蒋凡

监制 | 何玺 排版 | 叶媛 7月21日,阿里巴巴集团发布2023财年年报。据财报信息显示,阿里国际数字商业集团CEO蒋凡和菜鸟集团CEO万霖已成为阿里合伙人。 01 蒋凡重新成为阿里合伙人 该财报数据显示,截至3月31日的2023财年,阿里巴…

JAVA面试总结-Redis篇章(一)——缓存穿透

JAVA面试总结-Redis篇章(一) Redis缓存穿透解决方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存![在这里插入图片描述](https://img-blog.csdnimg.cn/157c22930bff43cda2d325978a5ae05b.png)解决方案二:…

UE4/5C++多线程插件制作(十六、Coroutines协程封装)

我们要对协程继续封装制作: 协程是一种计算机程序组件,它允许在某个位置暂停执行,然后在稍后的时间点恢复执行。与传统的函数调用不同,协程可以被多次调用并且能够保留其内部状态,从而允许程序在执行到一定点时暂停,执行其他任务,然后再返回协程继续执行。 在传统的线…

机器学习深度学习——softmax回归(上)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——线性回归的简洁实现 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所…

CSS动画@animationend

CSS动画 是什么? CSS 中的动画类似于 flash 中的逐帧动画,表现细腻并且非常灵活,使用 CSS 中的动画可以取代许多网页中的动态图像、Flash 动画或者 JavaScript 实现的特殊效果。 这里感兴趣的可以去了解针 动画是什么 常用的css动画属性 :…

C国演义 [第十一章]

第十一章 有效的字母异位词题目理解代码 两数之和题目理解(暴力篇)代码题目理解(哈希篇)代码 有效的字母异位词 力扣链接 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词 注意:若 s 和 t 中每个字符出现的次数都相同,…

华为盘古大模型:能源领域的颠覆性突破

近日,华为盘古大模型在能源领域横空出世,引发了广泛关注和期待。作为一项具有颠覆性影响的技术创新,华为盘古大模型在能源行业中展现出巨大的潜力和前景。其优质的计算能力和智能优化算法,将为能源产业带来翻天覆地的变革。 盘古大…

linxu部署项目(详细教程)

首先我们需要一台虚拟机或者云服务器(二选一即可) 我们需要在安装jdk与tomcat 安装jdk,去官网下载对应的tar.gz压缩包就行tomcat同理 这里,我们已将下载好的JDK源码包 jdk-8u131-linux-x64.tar.gz 拷贝至 /usr/local/java/ 目录。…

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3

今天我们一起来学习三个组件:Checkbutton、Radiobutton 和 LabelFrame。 同样,我们还是通过案例来讲解。 一、Checkbutton Checkbutton(多选框)。大家都知道什么叫做“翻牌子”,今天的第一个例子就是来写一个翻牌子…

如何清除Linux密钥环

如何清除Linux密钥环 Linux系统密钥环是什么如何清除密钥环方法一方法二 说明 最近使用Linux系统电脑,启动VScode总是弹出解锁密钥环的弹窗,单击取消后还会反复弹出,需要取消三次,但是如果没有及时取消会导致电脑卡机,…

Appium+python自动化(二十二)- 控件坐标获取(超详解)

简介 有些小伙伴或者是童鞋可能会好奇会问上一篇中的那个monkey脚本里的坐标点是如何获取的,不是自己随便蒙的猜的,或者是自己用目光或者是尺子量出来的吧,答案当然是:NO。获取控件坐标点的方式这里宏哥给小伙伴们分享和讲解三种方…

安全第一天

1. 编码 1.1 ASCLL编码 ASCII 是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。 1.2 URL编码 URL:(统一资源定位器、定位地址,俗称网页…

数据结构【图】

第六章 图 一、图 1.定义&#xff1a;V是顶点集&#xff0c;E是边集&#xff1b;|V|表示顶点数&#xff0c;称为阶&#xff1b;|E|表示边数&#xff1b;有向图叫弧<>&#xff0c;无向叫边&#xff08;&#xff09; &#xff1b; 有向图&#xff1a;有方向&#xff0c;&…

Yarn与Zookeeper学习

YARN学习 1.YARN是什么&#xff1f; yarn 分配运行资源 mapReduce的运行平台 2.YARN运行过程&#xff1a; 客户端与ResourceManager交互&#xff0c;生成临时配置文件(Application)ResourceManager根据Application信息生成Task然后生成MapReduceApplicationMaster(简称AM)AM…

python单元测试unittest实例详解

这篇文章主要介绍了python单元测试unittest用法,以实例形式详细分析了Python中单元测试的概念、用法与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python单元测试unittest用法。分享给大家供大家参考。具体分析如下&#xff1a; 单元测试作为任何…

用R语言来进行ababoost模型的构建

每天进步一点点&#xff0c;今天来分享怎么用R语言来进行ababoost模型的构建。 首先&#xff0c;什么是adaboost模型呢&#xff1f;它是一种迭代算法&#xff0c;属于boosting这个大类别的一员。它的核心思想是针对同一个训练集训练不同的分类器(弱分类器)&#xff0c;然后把这…

力扣题库刷题笔记118--杨辉三角

1、Python代码如下&#xff1a; 2、个人Python代码如下&#xff1a; 截图1的第5-9行和截图2的第5-6行均是生成一个元素均为1的杨辉三角。

1.前端入门

文章目录 一、基础认知1.1 认识网页&#xff1a;1.2 五大浏览器1.3 Web标准 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、基础认知 1.1 认识网页&#xff1a; 1.网页由哪些部分组成&#xff1f; 文字、图片、音频、视频、超链接。 2.我们…

Spring Security从入门到精通

Spring Security从入门到精通&#xff08;学习三更老师的视频&#xff09; 视频地址&#xff1a;我觉得讲的不赖。三更老师的Spring Security视频 课程介绍 0. 简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供…

接口漏洞-DVWS(XXE+鉴权)+阿里云KEY

dvws靶场 靶场&#xff1a;https://github.com/snoopysecurity/dvws-node 开启靶场&#xff0c;注册一个普通用户&#xff0c;登录成功 来到首页点击admin area 发现进入几秒钟之后又跳转回到首页&#xff0c;只有管理员admin用户才能进入。 点击admin area抓包&#xff0c;发现…