当前位置: 首页 > article >正文

FPGA秋招必看基础 | FPGA设计流程

关注👆 望森FPGA 👆 查看更多FPGA资讯

这是望森的第 30 期分享

作者 | 望森
来源 | 望森FPGA

目录

摘要

1 明确需求、设计系统架构

2 RTL 输入

3 功能仿真(Behavioral Simulation)

4 综合(Synthesis)

5 时序分析(Timing Analysis)

6 布局布线(Place and Route, P&R)

7 时序仿真(Post-Place and Route Simulation)

8 生成比特流(Bitstream Generation)

9 上板调试与固化

总结


摘要

FPGA 的设计流程是一个系统化的步骤,目的是将设计需求转化为在硬件中实现的数字电路。

这个流程通常包括:明确需求与设计系统架构、RTL 输入、功能仿真、综合、时序分析、布局布线、时序仿真、生成比特流、上板调试与固化。

接下来将对以上流程一一进行介绍。


1 明确需求、设计系统架构

在项目立项阶段,需要根据项目需求,评估系统功能及其复杂度,进行合理的 FPGA 功能规划、模块划分以及器件选型。

这是项目开发的第一个流程,需要与客户或项目需求方确定系统功能、性能指标、硬件约束等情况,并输出项目的任务书、规范文档等资料。

项目需求确定后,需进行模块划分。

这个阶段需要确定 FPGA 的功能模块、模块间的通信方式与数据流向、FPGA 与外部设备的通信接口、FPGA 时钟树等。

注:编写文档是 FPGA 工程师的必备技能,不仅是为了应对项目交付,更是梳理思路、汇报上级、交接工作的重要方式。


2 RTL 输入

RTL(Register Transfer Level,寄存器转换级)输入阶段的目标是:

描述描述各级寄存器(时序逻辑)及寄存器之间的传输信号(组合逻辑)。

RTL 输入方式一般有两种:

使用硬件描述语言 HDL 编程、原理图输入。

原理图输入的方式现在基本不采用了。

如今常用的方法是使用硬件描述语言 HDL 编程,最常用的 HDL 是Verilog 、VHDL 以及 System Verilog。

在这一步,我们将根据系统架构,将系统设计方案转换为描述电路逻辑的 HDL 代码。


3 功能仿真(Behavioral Simulation)

功能仿真的目的是:

在电路综合之前,初步验证 HDL 代码逻辑功能的正确性。

功能仿真的方法是:

设计人员编写测试平台(Testbench),通过提供一系列的输入激励来检查电路输出是否符合预期。

常用的功能仿真工具有:

Mentor 公司的 ModelSim/QuestaSim 、Xilinx Vivado 仿真器等。

注意:

本阶段要验证的电路没有包含任何延迟信息,仅对功能进行检测。


4 综合(Synthesis)

综合的目标是:

将 HDL 代码编写的高层次逻辑描述转换为较低层次的 FPGA 门级网表(Gate-level Netlist)、产生网表文件。

综合的步骤是:

1.综合工具自动检查 HDL 代码语法和语义的正确性。

2.综合工具自动优化 HDL 代码,减少不必要的逻辑冗余,优化性能和资源利用率。

3.综合工具自动进行逻辑综合,将 HDL 代码转换为由基本逻辑门(如与门、或门、异或门)和存储单元(如触发器、寄存器)构成的门级网表。

4.生成网表文件。网表文件描述了设计中所有的逻辑单元及其连接关系,用于后续的布局布线阶段。

常用的工具有:

Xilinx Vivado、Intel Quartus Prime、Lattice Radiant 等。

可综合与不可综合的概念:

在使用 HDL 时,可综合的代码能被综合工具翻译为门级电路,而不可综合的代码无法被映射到硬件电路中,因此仅能被用于测试仿真,比如用于编写 Testbench。


5 时序分析(Timing Analysis)

时序分析主要包括:静态时序分析(Static Timing Analysis,STA)、时序约束。

从综合步骤开始,之后的每一个步骤都需要关注时序分析的结果。

综合步骤后,综合工具将产生门级延时信息;

布局布线后,EDA 工具将产生门级延时 + 布线延时信息。

时序分析的目的是:

确保设计满足时序要求。

静态时序分析的基本原理是:

EDA 工具通过分析设计的所有路径延迟、时钟偏移(Clock Skew)和建立时间、保持时间等参数,计算出设计在当前时钟频率下是否能正常运行。

当 STA 结果显示设计中存在时序违例,设计者需要添加时序约束或修改电路逻辑,直至满足时序要求。

另外,对于设计对时序有严格要求的情况(比如接口协议要求、高速数据传输等),设计者应当根据需求添加时序约束。

时序分析为什么重要?

如果时序不满足要求,可能会导致:

1.时序违例。电路不能在时钟触发边沿正确采集数据。

2.亚稳态。信号电压值无法稳定到正确值,导致数据错误。

3.电路不稳定。电路会出现随机的故障,不可靠。

因此,时序分析是实际工作中非常重要的环节,也是面试必考重点。


6 布局布线(Place and Route, P&R)

布局布线的目的是:

将经过综合后的门级网表映射到 FPGA 的具体硬件资源上。

布局布线在 Xilinx Vivado 中叫设计实现(Implementation)。

布局和布线分别是两个步骤。

布局指的是:

将门级网表中描述的逻辑单元(如 LUT、触发器、DSP 等)合理的配置到 FPGA 芯片中的实际物理位置上。

这一阶段需要在速度最优与面积最优之间找到平衡点。

布线指的是:

合理的利用芯片内部的布线资源,连接各个布局单元。

布局布线中的关键问题:

时序收敛问题、速度优化问题、资源优化问题、功耗优化问题等。

布局布线的输出结果:

物理网表文件、时序报告、资源利用率报告、功耗报告等。

布局布线步骤将直接影响 FPGA 设计的时序性能、资源利用率和功耗,通常是比特流生成前的最后一步。


7 时序仿真(Post-Place and Route Simulation)

时序仿真是在布局布线之后的步骤。

时序仿真的目的是:

在功能仿真的基础上增加 FPGA 芯片中真实的物理延时,仿真验证电路是否能正确运行。

这一阶段不仅能验证电路功能的正确性,还能进一步检测时序违例。


8 生成比特流(Bitstream Generation)

生成比特流阶段的目的是:

将经过布局布线(Place and Route, P&R)后的设计转换为可以直接用于配置 FPGA 芯片的比特流文件(Bitstream File)。

比特流文件包含了描述 FPGA 内部逻辑单元、互连布线和 I/O 配置的详细信息。

比特流文件用于 FPGA 上电或重新编程时加载到 FPGA 中,配置 FPGA 的逻辑功能。


9 上板调试与固化

上板调试的目的是:

将比特流文件中的编程数据下载到 FPGA 芯片中,测试实际运行结果。

固化的目的是:

将上板调试正确的设计信息固化到 FPGA 中,之后每次上电将默认运行当前设计。

常用比特流的配置与固化方式:JTAG 接口。

常用的上板调试方法:

1.FPGA 内部集成的逻辑分析仪

2.外部逻辑分析仪、示波器或万用表

FPGA 内部集成的逻辑分析仪调试原理:

实时监控和捕捉 FPGA 内部信号的变化。

常用的集成逻辑分析仪包括:Xilinx ILA 和 Intel SignalTap。

外部逻辑分析仪、示波器或万用表调试原理:

通过仪器仪表,实时检测 FPGA 外部物理引脚及硬件设施的工作情况。

上板调试成功后的设计可根据需求固化到 FPGA 芯片中。


总结

FPGA 设计流程包含明确需求与设计系统架构、RTL 输入、功能仿真、综合、时序分析、布局布线、时序仿真、生成比特流、上板调试与固化等多个阶段。

以上每个步骤都需要反复迭代,以确保设计能够正确、可靠地运行在 FPGA 上。


- END -

公z号/CSDN/知乎搜索【望森FPGA】,查看更多FPGA资讯~

相关推荐文章,点击跳转:

FPGA理论基础合集

HDLBits答案合集


http://www.kler.cn/news/364615.html

相关文章:

  • docker打包
  • 时间序列预测(十)——长短期记忆网络(LSTM)
  • 基于深度学习的音乐生成与风格转换
  • ASP.NET MVC-font awesome-localhost可用IIS不可用
  • 2021亚洲机器学习会议:面向单阶段跨域检测的域自适应YOLO(ACML2021)
  • 在合规的地方怎么用EACO地球链兑换交换价值?
  • RestClient查询文档排序、分页和高亮
  • 2024-10-18 问AI: [AI面试题] 神经网络有哪些不同类型?
  • Web应用框架-Django应用基础
  • 基于neo4j的学术论文关系管理系统
  • Spring Boot驱动的植物健康监测革命
  • 群控系统服务端开发模式-服务器资源对比
  • 腾讯云跨AZ部署FortigateHA备忘录
  • 无人机之室内定位技术篇
  • html,css,js实现Upload 上传
  • localStorage的使用
  • Redis进阶:Spring框架中利用Redis实现对象的序列化存储
  • docker 部署单节点的etcd以及 常用使用命令
  • Agent遇上4万个工具?一个token搞定!
  • hivesql学习大纲
  • 无功补偿柜报警的原因
  • django restful API
  • libevent源码剖析-event
  • 软件工程文档规范要点总结
  • Java8入门
  • 自动驾驶系列—深入解析自动驾驶系统验车平台:确保车辆交付质量的关键工具