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…

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

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

【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.构造函数…

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

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

无废话、光速上手 React-Router

React-Router React Router 是一个用于 React 应用的声明式路由库。它允许开发者通过组件化的方式定义应用的路由结构&#xff0c;使得路由管理更加直观和可维护 安装 pnpm i react-router-dom定义路由 定义路由有两种方式&#xff0c;分别是对象路由和路由组件&#xff0c…

AIGC时代 | 从零到一,打造你的专属AI Chat应用!

文章目录 目标功能概要&#xff08;1&#xff09;Chat 交互界面&#xff08;2&#xff09;流式接口&#xff08;3&#xff09;多轮会话&#xff08;4&#xff09;打字效果 系统架构&#xff08;1&#xff09;大模型服务层&#xff08;2&#xff09;应用服务层&#xff08;3&…

深入解析东芝TB62261FTG,步进电机驱动方案

TB62261FTG是一款由东芝推出的两相双极步进电机驱动器&#xff0c;采用了BiCD工艺&#xff0c;能够提供高效的电机控制。这款芯片具有多种优秀的功能&#xff0c;包括PWM斩波、内置电流调节、低导通电阻的MOSFET以及多种步进操作模式&#xff0c;使其非常适合用于需要精确运动控…

微信小程序的日期区间选择组件的封装和使用

组件化开发是一种将大型软件系统分解为更小、更易于管理和复用的独立模块或组件的方法。这种方法在现代软件开发中越来越受到重视&#xff0c;尤其是在前端开发领域。微信小程序的日期区间选择组件的使用 wxml 代码 <view><view bind:tap"chooseData">…

第一个Qt程序

创建项目 进入ui界面拖一个按钮 在头文件中添加函数说明 #ifndef HELLO_H #define HELLO_H#include <QMainWindow>QT_BEGIN_NAMESPACE namespace Ui { class Hello; } QT_END_NAMESPACEclass Hello : public QMainWindow {Q_OBJECTpublic:Hello(QWidget *parent nullpt…

上海亚商投顾:沪指缩量调整 NMN概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡调整&#xff0c;三大指数午后一度跌超1%&#xff0c;北证50指数则涨超4%&#xff0c;北交所个股…

前端发送请求格式

1.multipart/form-data格式发送请求参数 什么时候用&#xff1a; 当后端API要求以表单的形式接收数据时&#xff0c;比如<input type"text" name"username">和<input type"password" name"password">&#xff0c;这些数据…

html全局属性、框架标签

常用的全局属性&#xff1a; 属性名含义id 给标签指定唯一标识&#xff0c;注意&#xff1a;id是不能重复的。 作用&#xff1a;可以让label标签与表单控件相关联&#xff1b;也可以与css、JavaScript配合使用。 注意&#xff1a;不能再以下HTML元素中使用&#xff1a;<hea…