FPGA开发基本流程详解

news2024/11/25 22:49:39

FPGA是一种可编程逻辑器件,与传统的硬连线电路不同,它具有高度的可编程性和灵活性。FPGA的设计方法包括硬件设计和软件设计两部分,硬件设计包括FPGA芯片电路、存储器、输入输出接口电路等等,软件设计则是HDL程序开发,以及软硬件的联调。

本文主要介绍FPGA设计的基本流程,让大家对FPGA开发流程有一个整体的认识。

一、FPGA的基本开发流程

FPGA的设计流程主要包括开发需求分析、设计框架搭建、硬件电路设计、软件编程以及验证测试等多个阶段,每个阶段都需要专业的EDA开发软件和编程工具进行支持。

通过这些工具,设计人员可以对FPGA进行仿真、合成、布局布线等操作,从而实现对FPGA芯片的开发和优化。

二、具体流程介绍

1、设计定义

在FPGA设计项目开始之前,根据任务要求和系统的功能,对工作速度和器件本身的资源、成本等方面进行权衡,选择合适的设计方案和合适的器件类型,并根据功能需求来设计定义整个项目的架构设计。

架构设计的目的是将设计需求转化为硬件结构,确定模块划分、信号传输方式、时序关系等。在进行架构设计时,我们需要考虑到设计复杂度、资源利用率、功耗消耗等多个方面。

这块需要资深FPGA来设计,同时设计方案需要分析和验证,确保FPGA器件的资源和性能可以达到功能的要求,可能需要迭代多个版本,这部分需要经验积累。

2、HDL实现

这块主要是编写代码,按照设计需求和架构设计,将功能模块拆分为各个子模块,然后编写相应的模块代码,常用HDL语言是verilog HDL和VHDL。

这部分涉及到verilog开发,推荐使用Vivado+Visual Studio Code的开发环境,写起代码来还是很方便的。

3、功能仿真

功能仿真,是在编译之前进行逻辑功能验证的过程,主要用来验证。

此时的仿真没有考虑电路的延迟信息,只能对逻辑功能进行检测,并不能保证上板运行的正确性。

功能仿真需要编写测试激励,需要根据要测试的功能,来编写测试激励逻辑。

功能仿真是一种非常重要的验证手段,可以尽早发现设计中的问题和错误,从而减少后期的调试和修改工作。

常用的仿真软件有Vivado自带仿真器和modelsim仿真器,其中modelsim仿真速度比Vivado仿真速度快,推荐使用modelsim仿真。

4、 逻辑综合

综合(Synthesis)是将设计输入编译成由与门、或门、非门、RAM、触发器等基本逻辑单元组成的逻辑连接网表的过程。综合的目标是将较高级的抽象描述转化成较低层次的描述,并进行优化,以提高电路的性能和效率。

综合优化根据目标和要求来优化所生成的逻辑连接,使层次设计平面化,为FPGA布局布线软件提供实现支持。

综合的时间,与FPGA工程大小有关,工程越复杂,时间则越长。

5、综合后仿真

综合后仿真,主要是检查综合结果是否和原设计一致,但这个仿真很耗时和耗资源,一般可以跳过这个仿真,不如直接上板调试来的靠谱

6、实现与布局布线

这步是FPGA设计流程中非常重要的一步,可以将综合生成的逻辑网表配置到具体的FPGA芯片,同时也是耗时特别长的一个阶段。

布局布线根据时序约束条件,以及芯片内部各个逻辑单元的布局结构,通过连线资源,将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上,这部分往往需要在速度优化和面积优化之间找平衡。

可以在开发软件上,设置实现和布局布线策略,一般情况下使用默认设置即可。

7、 时序仿真

时序仿真,也称为后仿真,主要检测布局布线后的电路是否有时序不满足的情况。这块一般用的少,建议直接略过这一步,上板调试更好。

8、上板调试

一般是通过JTAG在线下在bit文件到FPGA芯片中,接入实际的输入信号,在线实时测试,这里在第一次测试时,大概率会运行异常。

我们调试的时候,要保持耐心,要根据现象大胆推荐可能的原因,并将存在问题的模块信号,加入ILA,抓取实时信号出来分析,如果实在是没哟头绪,那就只要一个个模块排查,猜测可能的原因。

上板调试经验,需要不断积累,做项目越多,越熟练,注意总结和复盘。

三、总结

FPGA设计流程包括分析设计需求、FPGA架构设计、HDL代码编写、逻辑综合、布局布线、仿真调试和生成比特流文件等步骤。这些步骤并不是一次完成的,可能需要多次迭代,反复编译和调试,才能完成项目。当然了项目经验需要不断积累的,多思考,多总结,才能进步。


本文将不断定期更新中,码字不易,点⭐️赞,收⭐️藏一下,不走丢哦

本文由FPGA入门到精通原创,有任何问题,都可以在评论区和我交流哦

学习资料分享github开源代码:“FPGA知识库

您的支持是我持续创作的最大动力!如果本文对您有帮助,请给一个鼓励,谢谢。

 

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

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

相关文章

openCV 第四篇 角点检测、图像特征、图片拼接

本文原本打算直接简单介绍一下harris和sift,之后进行特征匹配,来一波图像拼接。 想来想去还是先介绍下原理吧,虽然没人看QAQ。可以直接点击右侧目录跳转到代码区。 本文可以完成: 角点检测 和 图像特征提取(就几行代码) 以及进…

Win32子窗口创建,子窗口回调函数,消息堆栈,逆向定位子窗口消息处理过程

本专栏上一篇文章中我们讲解了Win32程序入口识别,定位回调函数,具体事件处理的定位,这一章节中我们来讲解一下子窗口的创建,子窗口的回调函数,并且逆向分析子窗口消息处理过程。 文章目录 一.子窗口按钮的创建- 创建子…

charge pump的分析与应用

春节前最后一更,提前祝大家新春快乐,阖家安康,工作顺利! 定义: 电荷泵是利用电容的充放电来实现电压的转换的,输入回路和输出回路轮流导通。通过调节占空比来调节输出电压。 它们能使输入电压升高或降低&…

基于PyQt5连接本地SQLite实现简单人力资源管理系统

人力资源管理系统 使用环境:Python3.86 PyQt5.15.4 sqlite3 记录一下最近学校举办的一个程序设计比赛,题目是实现一个简单的人力资源管理系统,文末有效果展示 我认为程序是面向人类而不是面向机器的,所以我使用了PyQt5封装了一…

SpringCloud源码分析 (Eureka-Server-处理客户端续约请求) (七)

文章目录 1.处理客户端续约请求1.1 InstanceResource.renewLease()1.2 InstanceRegistry.renew()1.3 PeerAwareInstanceRegistryImpl.renew()1.4 AbstractInstanceRegistry.renew()1.6 PeerAwareInstanceRegistryImpl.replicateToPeers()1.7 PeerEurekaNode.headbeat() 1.处理客…

大数据Doris(二十二):Rollup物化索引创建与操作

文章目录 Rollup物化索引创建与操作 一、创建测试表 二、创建Rollup物化索引表

岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位的真实写照。

前两天跟一个HR朋友聊天,她表示刚在boss上发布了一个普通测试岗位,不到一小时竟然收到了几百份简历。而且简历质量极高,这是往年不敢想象的。岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位…

若依框架快速开发项目(避坑超详细)

若依框架快速开发项目(避坑超详细) 初衷: 若依框架使用及其普遍,是一个非常优秀的开源框架,框架本身的权限系统,字典设置以及相关封装,安全拦截相当完善,本人受益匪浅,学…

Python进阶实际应用开发实战(一)

目录 原型设计和环境环境设置创建新项目 原型设计和环境 原书第一章内容 环境设置 对于一个项目我们需要安装库并管理依赖项,这意味着需要有一个虚拟环境。我们使用pipenv来指定依赖项。 python -m pip install --user pipenv在命令行中启动Python脚本的时候&am…

分布式锁概念

什么是分布式锁 方案一:SETNX EXPIRE 方案二:SETNX value值是(系统时间过期时间) 方案三:使用Lua脚本(包含SETNX EXPIRE两条指令) 方案四:SET的扩展命令(SET EX PX NX) 方案五…

chatgpt赋能Python-aidlearning安装pycharm

Aid Learning: 如何安装PyCharm PyCharm是一款由JetBrains开发的用于Python编程的集成开发环境(IDE)。它提供了丰富的编辑器和调试工具,可以帮助开发者更高效地编写Python代码。本文将介绍如何安装PyCharm。 安装前准备工作 在安装PyCharm…

vue diff算法与虚拟dom知识整理(8) 手写patch实现简易版的节点第一次上dom树

上一文 我们整理了一下 patch 函数的整体过程 我不知道大家有没有保留我们之前学手写H函数时的那个案例 我们要将index.jsi还原成这样 参考代码如下 import h from "./snabbdom/h";const dom1 h("div",{props: {class: "dom"} },"文本测试…

Qt QJson 使用

文章目录 1. 简介2. 简单实例3. 结果 1. 简介 QJson 是一个用于 Qt 应用程序的 JSON 解析和生成库。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和可扩展性,常用于 Web 应用程序中。QJson 将 …

Python通过natcap.invest库调用InVEST模型批处理数据(Carbon Storage and Sequestration模块)

InVEST(Integrated Valuation of Ecosystem Servicesand Tradeoffs)生态系统服务和权衡的综合评估模型,旨在通过模拟不同土地覆被情景下生态系统物质量和价值量的变化。它提供了多种生态系统服务功能评估,包括了淡水生态系统评估、…

Liunx压缩命令 - gz

gz命令详解及使用 Linux中gz命令的全称是gzip,它是一种常用的压缩程序,可将文件或目录压缩为.gz格式,以节省存储空间,同时也可以通过解压缩操作重新获取原始文件掌握 gzip 命令,可以帮助我们更加高效地进行文件压缩与…

视频编码测试平台CodecWar

​在视频编码的研究和开发中,我们经常需要对编码器的性能进行比较,一般的做法是构建一个数据集,然后将两个编码器在同一个配置上(LD,RA,AI等)使用不同参数(CQP下一般为4个QP值)编码,…

Py之pymc:pymc的简介、安装、使用方法之详细攻略

Py之pymc:pymc的简介、安装、使用方法之详细攻略 目录 pymc的简介 pymc的安装 pymc的使用方法 1、时序性任务 (1)、使用 Euler-Maruyama 方案推断 SDE 的参数 pymc的简介 PyMC(以前称为PyMC3)是一个专注于高级马尔科夫链蒙特卡洛&#x…

⑤电子产品拆解分析-人体感应灯

⑤电子产品拆解分析-人体感应灯 一、功能介绍二、电路分析以及器件作用三、原理图复现与学习 一、功能介绍 ①感应人体活动亮灯20S;②Micro-USB进行锂电池充电; 二、电路分析以及器件作用 三、原理图复现与学习 R1为下拉电阻,防止上电因芯…

功率放大器的选型原则和方法是什么

功率放大器是一种能够将低电平信号放大到足够高的电平以驱动负载的电子器件。在各种电子设备中,功率放大器被广泛应用,如音响系统、电视广播、汽车音响、射频通信等。因此,正确选型功率放大器非常重要,可以提高设备的性能和可靠性…