FPGA实验一:层次法设计组合电路(加法器)

news2024/10/6 2:16:31

目录

一、实验目的

二、实验要求

三、实验代码

四、实验结果及分析

1、引脚锁定

2、仿真波形及分析

3、下载测试结果及分析

五、实验心得


一、实验目的

(1)掌握基本组合逻辑电路的 FPGA实现;

(2)学习 Verilog HDL 的多层次设计方法;

(3)熟练应用 开发软件 进行 FPGA开发。

二、实验要求

以4位二进制全加器为例:

(1)先用Verilog HDL文本实现一位全加器,通过调用一位全加器完成4位全加器的设计,熟悉层次设计概念;

(2)给出此项设计的仿真波形;

(3)下载到开发板上,用LED发光管指示显示结果。

三、实验代码

1.首先对代码设计的实验原理分析

层次法电路设计通常是在设计比较复杂的电路和系统时采用的一种自上而

下的电路设计方法,即首先在一张图纸上设计电路总体框图,然后再在另外层次

图纸上设计每个框图代表的子电路结构,下一层次中还可以包括框图,按层次关

系将子电路框图逐级细分,直到最低层次上为具体电路图,不再包括子电路框图。

层次法设计电路的优点有:

(1)分工。将一个复杂的电路设计分为几个部分同时进行设计。

(2)模块化。让具有不同特长的设计人员负责不同部分的设计。

(3) 设备限制。打印输出设备不支持幅面过大的电路图页面。

(4)自上而下的设计策略。目前该策略已成为电路和系统设计的主流。

全加器是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全

加器。一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进

行级联可以得到多位全加器。

  1. 具体的实验代码分析

(1)创建一个新的工程,并新建一个 verilog 文本文件,编写一位全加器代码。模 

块名命名为“add”,一位全加器代码如下:

  1. module add(input a ,input b, input ci,output sum,output count);
    assign sum=(a^b)^ci;
    assign count=(a&b)|(b&ci)|(a&ci);
    end module

2)在同一文件夹下创建 位全加器工程即通过顶层调用一位全加器完成4位全加器的设计

`timescale 1ns / 1ps
module adder(a,b,ci,sum,co);
input [3:0] a;
input[3:0]b;
input ci;
output[3:0] sum;
output[3:0] co;
wire[3:0] count;
add u0(a[0],b[0],ci,sum[0],count[0]);
add u1(a[1],b[1],count[0],sum[1],count[1]);
add u2(a[2],b[2],count[1],sum[2],count[2]);
add u3(a[3],b[3],count[2],sum[3],count[3]);
assign co = count[3];
end module

(3)测试文件module f_adder();

Testbench模块最重要的的任务就是利用各种合法的语句,产生适当的时序和数据,以完成测试,并达到覆盖率要求。测试文件源代码如下:

  1. `timescale 1ns / 1ps
    module adder(a,b,ci,sum,co);
    input [3:0] a;
    input[3:0]b;
    input ci;
    output[3:0] sum;
    output[3:0] co;
    wire[3:0] count;
    add u0(a[0],b[0],ci,sum[0],count[0]);
    add u1(a[1],b[1],count[0],sum[1],count[1]);
    add u2(a[2],b[2],count[1],sum[2],count[2]);
    add u3(a[3],b[3],count[2],sum[3],count[3]);
    assign co = count[3];
    end module
    
    

四、实验结果及分析

1、引脚锁定

以约束文件形式

set_property PACKAGE_PIN V17 [get_ports {a[0]}]

set_property PACKAGE_PIN V16 [get_ports {a[1]}]

set_property PACKAGE_PIN W16 [get_ports {a[2]}]

set_property PACKAGE_PIN W17 [get_ports {a[3]}]

set_property PACKAGE_PIN W15 [get_ports {b[0]}]

set_property PACKAGE_PIN V15 [get_ports {b[1]}]

set_property PACKAGE_PIN W14 [get_ports {b[2]}]

set_property PACKAGE_PIN W13 [get_ports {b[3]}]

set_property PACKAGE_PIN V2 [get_ports ci]

set_property PACKAGE_PIN U16 [get_ports {sum[0]}]

set_property PACKAGE_PIN E19 [get_ports {sum[1]}]

set_property PACKAGE_PIN U19 [get_ports {sum[2]}]

set_property PACKAGE_PIN V19 [get_ports {sum[3]}]

set_property PACKAGE_PIN W18 [get_ports co]

2.仿真波形及分析

(1)仿真波形如下

 

 (3)如上图,第一行是加数a,第二行是加数b,两者均以十进制形式显示。两者之和加上低位的进位输入ci作为总输入数据。由于所设计的是四位加法器,结果超过15的部分才会向高位进位。

sum表示和,co表示向高位进位

以波形图数据为例进行分析:

a=7,b=7,ci=1,此时sum=15,co=0

a=9,b=9,ci=1,此时sum=3,co=1,向高位进了一位。

故此波形图很好的证明了加法器设计的正确性。

3、下载测试结果及分析

(1)测试用例1:1000+0111=1111

开发板情况如下所示:

进位co未亮灯,表示sum的V19-U6均亮灯,即和为15,未产生进位

 

 (2)测试用例2:1001+1010+1=10011(高位的1为进位),即9+10+1=20

开发板情况如下:

进位co亮灯,表示sum的亮灯情况为0011,即和为3,产生一个进位

综合以上两种情况知:该设计实现了四位全加器的功能!

五、实验心得

本实验无论是设计原理还是功能仿真相对来说均难度不大,回过头看,实验各流程的设计内容都是很好实现的。完成这个实验最大的难点首先是在于初学时对软件的不熟悉,有时候明明知道自己下一步该做什么,却不知道应该点哪里,选择什么选项,经过在哔哩哔哩等平台的学习后才知道一个完整的fgpa工程要经过综合、仿真、烧写等过程另一点是因为刚开始接触Verilog语言,对于其使用并不是很熟悉。

最开始实现一位全加器的代码是自己根据自己的一些理解码出来的后面参考了老师在学习通上面所给的示例进行改进,与自己先前所写代码相比简化了许多,虽然都能实现一位全加器的基本功能,但看上去更简短更清晰。

仿真后进行上板测试的过程卡了我一段时间,因为不清楚到底如何操作,但参考有关资料后,学习了约束文件的写法和如何进行引脚分配使实物测试的过程比较顺利的通过同时我认为上板子进行测试的这一过程可以更好的让我们通过实践更深层次的理解全加器的原理

可以说实验一的完成,代表了我们正式入门了 VIVADO这个软件,也了解和能够运用它的基本操作来实现一些功能在代码编写方面通过此次实验我对层次法设理解有了更深的理解这为我们接下来实验的进行打下了很好的基础

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

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

相关文章

使用安装器安装windows gcc— MinGW及让windows像Linux一样的MSYS

这里使用installer进行安装GCC,主要是installer安装其它依赖,如MSYS,autoconf,automake,libtool,vim,perl,mingw-developer-toolkit等,mingw下载地址,如图download链接的mingw-get-setup.exe文件…

高级端口扫描工具

高级端口扫描程序可查看哪些服务在哪个端口上运行、开放端口数量、连接的交换机,并帮助保护网络免受未经授权的访问。作为网络管理员,扫描网络中的开放端口、这些端口已连接到的交换机以及在其上运行的服务,并将已知服务与已识别的服务与高级…

迁移学习入门,新手该如何下手?

推荐迁移学习技术的实用入门图书:《自然语言处理迁移学习实战》 [加纳] 保罗阿祖雷(Paul Azunre) 著,李想,朱仲书,张世武 译 一本书带你读懂ChatGPT背后的技术,自然语言处理迁移学习,解锁机器学…

Xcode Build System

Xcode Build System iOS开发者都使用Xcode来开发、编译程序,但是我们真正了解xcode是怎样编译我们的程序到手机上的么,下面我们主要看看xcode的编译系统内容 一、Preprocessor 预处理:在此步骤中xcode会处理代码中的宏,将其展开…

19k字图文讲解Vision科研常用的系统环境配置和工具(附详细命令行)

猛码Memmat | 转载请注明来源 最近作者有了新设备,趁更新系统写一篇博客为小白讲解这一入门过程 目录 ArchLinux 安装指南(新手向)前言准备工作检查网络通过 SSH 远程连接(可选)硬盘分区格式化并挂载分区设置中国镜像源(推荐)安装系统系统初始化设置进阶设置设置交换空…

VScode中的插件

开启VScode中最简单的内部浏览器 - 可以访问外网 - Browser Preview 插件安装: 插件使用:由下角 - 状态栏 - VS Browser按钮 live sass compiler-vscode插件将scss编译为css live sass compiler是VSCode扩展,可以实时地将SASS / SCSS文件…

基于Spring Boot的智慧社区系统设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: https://www.bilibili.com/video/BV1kF411R7Tp/?vd_sourced8d0eebf6c94c5aa49fe3f992c8887b0使用技术: 前端:html css javascript jQuery ajax thymeleaf 后端:Java springboot框架 myba…

Django搭建图书管理系统01

Django框架 Django是一个使用Python编写的开源Web应用程序框架。它采用了MVC(Model-View-Controller)的软件设计模式,旨在简化开发复杂的Web应用程序。 以下是Django框架的一些主要特点: 强大的开发工具:Django提供了…

计算机毕业论文内容参考|基于Python的入侵检测系统的设计与实现

文章目录 导文摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望导文 计算机毕业论文内容参考|基于Python的入侵检测系统的设计与实现 摘要 本文介绍了基于Python的入侵检测系统的设计与实现。首先,简要概述了入侵…

ubuntu中使用docker部署mysql

docker images:查看已有镜像docker pull mysql:拉取镜像docker ps -a:查看已有容器docker -o mysql8.0.33.tar(保存镜像使用的名称) mysql(被保存的镜像):避免重复下载,可…

CMU 15-445 -- Tree Indexes - 05

CMU 15-445 -- Tree Indexes - 05 引言Table IndexB TreeB-Tree FamilyB TreeB Tree NodesB Tree OperationsIn Practice Clustered IndexesCompound IndexB Tree Design ChoicesNode SizeMerge ThresholdVariable Length KeysNon-unique IndexesIntra-node Search Optimizatio…

Nginx配置图片服务器

Nginx配置图片服务器 背景请求示例Nginx配置图片服务器问题存在 背景 在我们日常做项目的时候,我们有时候会经常碰到图片需要放到哪?有时候会用第三方的图片存储,比如腾讯云的COS,阿里云的OOS。当然有时候我们也是需要放到Linux的…

找不到 配置管理器。sql server 2008 r2 在win10下

win10 打开sqlserver2008r2的SQL Server 配置管理器 ,通过开始程序中找不到“SQL Server 配置管理器”。去自己电脑上此目录找,“C:\Windows\SysWOW64\SQLServerManager10.msc”,直接运行此文件就可以调出“SQL Server 配置管理器”。 在win1…

docker环境下安装RabbitMQ3.8.2

一、下载指定版本镜像 [rootnginx ~]# docker pull rabbitmq:3.8.2-management 二、创建容器,并映射相关接口 [rootnginx ~]# docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:3.8.2…

Spring Boot 中的 Seata 分布式事务

Spring Boot 中的 Seata 分布式事务 在分布式系统中,保证数据的一致性是一个非常重要的问题。传统的 ACID 事务模型虽然能够保证单个数据库的数据一致性,但是在分布式系统中却很难实现。因此,近年来出现了一些新的事务模型,其中 …

【QT】QIcon设置窗口小图标(12)

如何设置窗口小图标呢,很简单! 导入库: from PyQt5.QtGui import QIcon ##导入库if __name__ __main__:app QApplication(sys.argv)MainWindow QMainWindow()ui xxx.Ui_MainWindow()ui.setupUi(MainWindow)app.setWindowIcon(QIcon(xxx…

全议程公布丨涌现中重塑,PingCAP 用户峰会 2023 邀你共同引领创新力量!

7 月 13 日,PingCAP 用户峰会 2023 将在北京市海淀区西南华邑酒店举办,线上线下同步。本届大会主题为“创新涌动于先”,汇聚前沿数据科技与商业洞见,现场将有来自银行、保险、证券、政府、运营商、零售、制造、能源、物流、技术出…

Linux之进程信号

一、什么是进程信号 进程信号是一种事件通知机制,属于软件中断 信号的作用:发生某事件时,打断进程当前操作,转而去处理这个事件 例子: 假设你正在学习,没有突发事件你不会停止学习。(此时你就…

ubuntu安装MobaXterm和WPS

文章目录 ubuntu安装MobaXtermi386 架构wine操作步骤 ubuntu安装WPS操作步骤WPS版本知识补充 ubuntu安装MobaXterm i386 架构 sudo dpkg --add-architecture i386 是一个Linux系统中的命令,用于添加一个新的架构(architecture)支持到当前系统…

Ant Design4中Form.List和shouldUpdate一起使用的坑

背景 在antd3.x版本中,如果要实现一组表单增加删除的功能,需要Array.map()加上state状态来控制,代码比较复杂,而且非常不优雅。 其次在antd3.x中,表单中任何一个表单项的内容更新都会触发页面重新渲染,这在…