FPGA IP核开发流程概要

时间:2025-07-27  作者:Diven  阅读:0

开发和验证 FPGA IP 不仅仅是编写 HDL,而是需要更多的思考。让我们来看看如何做吧!

FPGA IP核开发流程概要

介绍

当我们开发基于 FPGA 的解决方案时,我们会尽可能利用手上的 IP,因为这会加速开发。在某些情况下,我们需要使用自定义 IP 核,以应对新项目。

开发和验证此 IP 块会带来一些挑战,如果做得不正确,可能会让项目进度变得缓慢。

当然,在使用 FPGA 时,我们需要考虑的关键事情是需要首先考虑我们希望实现的功能,以及遵循正确的开发流程。

为了说明这个过程,我们以实际项目为示例,过程如下:

定义需求

创建微架构和接口

编写模块的RTL描述

开发 RTL 接口的总线功能模型

创建仿真平台进行验证

要求

示例项目,我们将创建一个简单的 AXI Stream QSPI 从接口IP,具有以下要求:

创建IP的这些要求非常简单。然后,我们可以将该模块与之前的项目集成,例如:可以通过 QSPI 访问芯片内的AXI4总线。

微架构和接口

接下来我们需要创建微架构,这意味着我们需要了解串行存储器模式下的 QSPI 是如何工作的。

READ4IO 和 PP4IO 的波形如下所示

首先使用单线到 IO0 来发送命令 0x38(用于写入操作)或 0xEB(用于读取操作)。

命令发送后,将使用所有 IO 执行事务的其余部分。

对我们架构的影响是,我们需要一个 8 元素移位寄存器用于 IO0,2 元素移位寄存器用于 IO1-3。收到命令后,我们就可以仅使用 IO0 寄存器的较低两个元素。

我们的微架构需要能够执行以下操作

通过识别 CSn 的下降沿来检测新事务

启用新事务后检测 SCK 上的上升沿

使能数据移入 IO0 寄存器

一旦 8 位数据位于 IO0 寄存器中,具体取决于检查是否有效的读或写命令

对于写使能 IO1-3 以及 IO0 - 每两个 SCLK 在 AXIS 接口上输出一个字节的数据。确保 IO 驱动程序在该状态下处于三态。

对于读取,在虚拟时钟周期期间,从 AXIS 接口读取

对于在虚拟周期结束时读取,输出 IO0-IO3 上的数据

CSn 的取消断言会停止事务并复位状态机等。

微代码架构完成后,我们就可以编写 HDL。

设计微架构时的关键要素是以合理的方式定义接口,尤其是 FPGA 内部与其模块连接的接口。虽然定义自己的接口可能很爽,但是还是要选择行业标准,例如 AXI 等。这样不仅能够轻松定义接口,同时确保其开发人员在集成时能够轻松使用。使用行业标准还简化了接口验证,因为可以使用标准 BFM,随着时间的推移,还会建立一个有用的 IP 模块存储库,可以在多个项目中重复使用,从而减少开发时间和同类型项目成本。

该块使用 AXI Stream 通过 QSPI 接口发送和接收数据。

HDL 设计

该设计的 HDL 可以在文末看到。

IP 的接口如下是:

设计中的状态机:

HDL 完成后,下一步是仿真验证。

仿真

我们如何通过创建测试平台来验证 FPGA 设计是否按预期工作。测试台对被测单元 (UUT) 施加激励并观察 UUT 的输出,以确保其行为符合预期。

本次我们不想使用波形进行验证,我们检查 UUT 的行为并将其记录到文件中,验证其是否按照预期运行。

如果我们发现预期结果存在异常,我们再使用波形来调试 UUT。

每个测试用例都是一组独特的激励,将特定测试应用于 UUT 以检查该激励的特定结果。

创建这些测试用例可能很复杂,并且是验证过程中最耗时的部分。根据 UUT 的复杂性,可能有少量测试用例,也可能有数十个甚至数百个。

我们希望将测试平台与测试用例分开。我们使用几个不同的抽象层来实现这一目标,包括

测试用例 - 一个或多个测试用例,通过测试框架向 UUT 施加激励。

测试工具 - 包含 UUT 的映射以及 IP 模型(例如 RAMS、DDR 模型等)的连接

UUT - 我们正在测试的单元。

为了以最简单的方式实现这一目标,我们将使用大量的总线功能模型 (BFM) 和事务级模型 (TLM)。

当然,我们可以将 UVM、UVVM 和 OSVVM 等框架用于这些应用程序,但是,由于该项目的目的是演示,因此我们将从头开始。

如果本次设计可以完美完成,将使测试用例成为一系列 BFM / TLM 级别的调用和相关检查。通过这种方式,测试用例看起来更像脚本而不是传统的 HDL 文件。

这样的灵活性非常重要,因为我们需要能够适应 UUT 功能的变化,这些变化会导致需要创建更多的测试用例。

对于此应用程序,我们有以下内容:

测试用例 - 应用激励 - 在这种情况下,我们有一个测试用例,其中包含一个简单的测试。

测试台 - 包含测试台的测试基础设施。这包括 UUT、AXIS FIFO 和时钟/复位电路。

UUT - 我们正在测试的 QSPI IP 核

QSPI BFM 库 - 包含许多 BFM 的库,作为 QSPI 主设备通过接口执行读写操作。

Vivado 项目

为了测试该项目,我们可以创建一个包含 HDL 和测试平台的 Vivado 项目。我们使用 Vivado 在测试台中提供 AXIS FIFO,允许循环回写入的命令,以验证读回。

如果我们查看项目层次结构,我们将看到测试用例位于顶层的验证结构,下面的测试台包含 AXIS FIFO 和 UUT。

看不到该包,因为仅在库视图下可用

运行 HDL 行为仿真将打开波形视图。选择 UUT 并将信号添加到波形中。

单击“run all”,仿真完成后将看到 IO 信号和内部信号的波形。

在这种情况下,我们期望的是,我们收到的每个写入值与测试平台执行此检查时返回的值相同。

对于关键应用,可能不同的工程师来执行验证并提供验证结果。

在这个项目中,我们提供了 FPGA IP 核开发的流程概要。有些流程尚未涵盖,例如编码规则和静态分析等,但为那些希望开始的人提供了很好的开端。

  审核编辑:汤梓红
猜您喜欢

晶体管输出光耦是重要的电子元件,应用于信号隔离和电路保护等领域。在选择晶体管输出光耦时,有几个关键参数需要关注。传输电流增益(CTR)是衡量光耦性能的重要指标,...
2013-06-03 00:00:00

还在为选择合适的贴片电阻电容而烦恼吗?风华贴片电阻电容选型手册为您提供一站式解决方案!本手册涵盖了风华科技全系列贴片电阻和电容产品,从常用规格到特殊型号,应有尽...
2024-11-26 11:29:24

精密电阻作为电子电路中的重要元件,其性能直接影响着电路的稳定性和精确度。万裕(SAMXON)作为知名的电子元件品牌,旗下的精密电阻以高品质和优良的性能受到关注。...
2022-07-14 17:11:07

电子元件中,排阻是重要的元件,应用于电路设计中。排阻的英文代号通常是“R”,但在不同的上下文中可能会有不同的表示方式。本文将深入探讨排阻的英文代号及其相关知识,...
2025-04-17 13:30:56

电子电路中,二极管是重要的元器件。肖特基二极管和普通二极管各自具有不同的特性和应用场景。很多工程师在设计电路时会考虑是否可以用普通二极管来替代肖特基二极管,本文...
2025-04-07 23:31:07

压敏电阻是一种应用于电路保护的元件,尤其在防止过电压和浪涌电流方面发挥着重要作用。在选择和应用压敏电阻时,型号中所包含的数字信息对用户理解其特性非常重要。本文将...
2025-03-18 21:01:39

贴片电阻上的「1010」并非指电阻值,而是表示它的尺寸。1010代表电阻的长和宽均为1.0mm x 1.0mm。 要知道一个1010贴片电阻的阻值,需要查看其上...
2024-11-26 11:29:32

激光驱动技术在现代科技中是重要的配件,其应用范围,涵盖了医疗、工业、通信等多个领域。在医疗领域,激光驱动能够实现高精度的手术,比如激光眼科手术,能够有效减少出血...
2015-03-05 00:00:00

分流器电阻在电路设计中的应用越来越。作为电子元器件行业的知名品牌,ROHM(罗姆)提供了多款高品质的分流器电阻产品。那么,什么是ROHM分流器电阻?封装参数有哪...
2024-10-31 07:25:07

现代生活中,手机已经成为我们重要的一部分,而电池续航能力也成为了我们选择手机的重要因素。为了让您的苹果手机拥有更持久的续航表现,一款专业的充电管理软件必不可少。...
2024-04-27 00:00:00