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.mzph.cn/diannao/57682.shtml

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

相关文章

Qgis 开发初级 《符号化》

本章主要简介Qgis 的矢量图层的符号化。Qgis的符号化具体作用于每个图层,图层通过具体的方法设置符号化样式。 1、QgsFeatureRenderer Qgs的符号化类主要是QgsFeatureRenderer,这是一个抽象类,它派生出了许多类,如下所示。常用的…

self-supervised learning(BERT和GPT)

1芝麻街与NLP模型 我們接下來要講的主題呢叫做Self-Supervised Learning,在講self-supervised learning之前呢,就不能不介紹一下芝麻街,為什麼呢因為不知道為什麼self-supervised learning的模型都是以芝麻街的人物命名。 因為Bert是一個非常…

使用Bert+BiLSTM+CRF训练 NER任务

使用的数据集在这里E-Commercial NER Dataset / 电商NER数据集_数据集-阿里云天池 针对面向电商的命名实体识别研究,我们通过爬取搜集了淘宝商品文本的标题,并标注了4大类,9小类的实体类别。具体类型及实体数量如下 针对面向电商的命名实体…

iptables防火墙总结

iptables防火墙总结 四表五链 P 默认策略,-p 协议 出口防火墙,默认配置,使用Forword,采用-P 例题:设置iptables防火墙默认不允许任何数据包进入,相应命令是: Iptables -t filter -P FORWORD -j…

undertow服务器初始化

springboot整合undertow服务器的源码从老生常谈的createWebServer方法谈起。spring会在生成所有bean后到创建web容器,此时会到容器找到ServletWebServerFactory接口bean,spring会根据引入的框架确定生成的ServletWebServerFactory,我们在mave…

【数据结构】五分钟自测主干知识(十一)

上回(半年前)我们讲了二叉树,如果我们要找到二叉树某序遍历下的前驱和后继,我们需要对其作动态遍历求得,比较费时;或者给每个结点增加两个指针域prior和next,但比较费空间。 有没有既能省时间&…

docker部署SQL审核平台Archery

1、概述 Archery 是一个开源的 SQL 审核平台,专为数据库的 SQL 运维和管理而设计,广泛应用于企业的数据库运维工作中。其主要功能是帮助数据库管理员和开发人员实现 SQL 审核、SQL 执行、在线执行、查询、工单管理、权限控制等数据库管理相关的操作。 Archery 的主要功能包括…

网络地址转换——NAT技术详解

网络地址转换——NAT技术详解 一、引言 随着互联网的飞速发展,IP地址资源日益紧张。为了解决IP地址资源短缺的问题,NAT(Network Address Translation,网络地址转换)技术应运而生。NAT技术允许一个私有IP地址的网络通…

为什么我钟情于JPA:优雅数据访问的背后秘密

在Java开发的世界中,选择合适的数据访问框架不仅影响代码的可读性和维护性,更直接关系到项目的成败。虽然MyBatis及其衍生框架在灵活性和性能调优方面有其独特优势,但我更倾向于使用Java持久化API(JPA)。本文将探讨我为…

【K8S系列】Kubernetes Service 基础知识 详细介绍

在 Kubernetes 中,Service 是一种抽象的资源,用于定义一组 Pod 的访问策略。它为这些 Pod 提供了一个稳定的访问入口,解决了 Pod 可能频繁变化的问题。本文将详细介绍 Kubernetes Service 的类型、功能、使用场景、DNS 和负载均衡等方面。 1.…

Openlayers高级交互(2/20):清除所有图层的有效方法

Openlayers项目中,经常会放置很多的图层,在业务操作的时候,会做出删除所有图层的行为。这里面给出了一个详细的方法,能够有效的解决 清除所有图层的问题。 效果图 专栏名称内容介绍Openlayers基础实战 (72篇)专栏提供73篇文章,为小白群体提供基础知识及示例演示,能解决…

[软件工程]—桥接(Brige)模式与伪码推导

桥接(Brige)模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑,使它们具有两个变化的维度,乃至多个维度的变化。如何应对这种“多维度的变化”?如何利用面向对象技术是的类型可以轻松的沿着两个乃至…

022_matrix_dancing_in_Matlab中求解一个超简单的矩阵问题

矩阵体操 首先,可以复习一下向量、矩阵和索引的基础知识。 向量约定矩阵约定矩阵索引 一般而言,我们利用进行计算大概就是以下的步骤: #mermaid-svg-UovF0Uldf5XxntJi {font-family:"trebuchet ms",verdana,arial,sans-serif;fo…

MFC实现以不规则PNG图片作为窗口背景

效果图 显示的不规则PNG图片 头文件 #pragma once #include <gdiplus.h> #pragma comment (lib,"Gdiplus.lib")// CShowBack 对话框class CShowBack : public CDialogEx {DECLARE_DYNAMIC(CShowBack) public:CShowBack(CWnd* pParent nullptr); // 标准构…

C++学习路线(二十二)

构造函数 构造函数作用 在创建一个新的对象时&#xff0c;自动调用的函数&#xff0c;用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。 构造函数特点 1.自动调用(在创建新对象时&#xff0c;自动调用) 2.构造函数的函数名&#xff0c;和类名相同 3.构造函数…

【002】调用kimi实现文件上传并进行分析_#py

调用kimi实现文件上传并进行分析 前言1. 上传文件并解析2. 调用方式3. 完整代码 前言 在【001】调用kimi实现AI对话_#py对Kimi有了一定的介绍&#xff0c;以及简单对话和连续对话的程序编写。 本次主要希望能通过kimi分析文件&#xff0c;总结文件的能力。 1. 上传文件并解析…

《近似线性可分支持向量机的原理推导》 目标函数 公式解析

本文是将文章《近似线性可分支持向量机的原理推导》中的公式单独拿出来做一个详细的解析&#xff0c;便于初学者更好的理解。 公式 9-38 解释&#xff1a; min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 C ∑ i 1 N ξ i \min_{w, b, \xi} \quad \frac{1}{2} \|w\|^2 C \sum_{i1}^{N} \x…

httpd服务

文章目录 1、搭建一个网络yum源2、基于域名访问的虚拟主机3、基于端口来访问域名4、搭建个人网站5、加密访问显示自定义网页内容 1、搭建一个网络yum源 [roottest01 conf.d]# cat repo.conf <virtualhost *:80>documentroot /var/www/html/ServerName 10.104.43.154ali…

react18中的jsx 底层渲染机制相关原理

jsx 底层渲染机制 渲染 jsx 时&#xff0c;会先解析 jsx&#xff0c;生成一个虚拟 dom(virtual dom)。然后将虚拟 dom 渲染成真实 dom。如果 jsx 中包含事件&#xff0c;会将事件绑定到真实 dom 上。 虚拟 dom 对象&#xff0c;是框架内部构建的一套对象体系&#xff0c;对象…

常用环境部署(二十二)——MySQL的数据库迁移到另一个机器上

1、导出原数据库的数据 mysqldump -u [用户名] -p[密码] [数据库名] > database_dump.sql 命令示例&#xff1a; mysqldump -u root -p123456 wd > /opt/wd.sql 2、在新机器上创建数据库 mysql -u [用户名] -p -e "CREATE DATABASE [新数据库名]" 命令示…