0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

​构建自定义AXI4-Stream FIR滤波器

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-11-07 09:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

构建自定义 AXI4-Stream FIR 滤波器

副标题:优秀的IC/FPGA开源项目(五)-在Vivado中构建自定义 AXI4-Stream FIR 滤波器 IP

《优秀的IC/FPGA开源项目》是新开的系列,旨在介绍单一项目,会比《优秀的 Verilog/FPGA开源项目》内容介绍更加详细,包括但不限于综合、上板测试等。两者相辅相成,互补互充~


AMD-Xilinx 的 Vivado 开发工具具有很多方便FPGA开发功能,我最喜欢的功能之一是block design的设计流程。Vivado 中的block design是使用RTL IP形式的图形表示进行设计,在block design中使用 RTL 模块的方便之处在于,它将自动检测某些类型的信号,例如时钟、复位和总线接口,然后,检测这些信号进行IP间的自动化连接。Vivado 中包含大量预构建 IP 模块(官方IP)。

为了方便用户进行相关设计,Vivado 提供了一个内置的 IP 封装编辑器工具,它可以为 AXI IP 生成框架,只需将自己的 RTL 代码插入其中。同时也提供了相关的驱动文件,可以在Vitis中方便调试。

为了演示究竟上面流程“好”在哪里,接下来我们创建一个AXI FIR IP 模块,然后将IP添加到我们设计中最后验证功能。

创建 Vivado 项目

首先,启动 Vivado 并针对自己的FPGA创建一个新项目。

53b89720-5e3a-11ed-a3b6-dac502259ad0.png53c5f640-5e3a-11ed-a3b6-dac502259ad0.png

添加 MicroBlaze,对于这个项目来说,使用 BRAM 就足够了。

选择 Add IP 选项并搜索 MicroBlaze,将其添加到模块设计中并运行 Block Automation,该模块会在窗口顶部的绿色横幅中弹出。接下来添加中断控制器

53dd205e-5e3a-11ed-a3b6-dac502259ad0.png5423c978-5e3a-11ed-a3b6-dac502259ad0.png5432aeac-5e3a-11ed-a3b6-dac502259ad0.png

验证并保存块设计,接下来我们将开始我们的IP设计。

创建新的 AXI4 外设

要使用自己的 RTL 创建新的 AXI 外设并将其封装为 IP ,请选择工具>创建和打包新 IP...

5440dc16-5e3a-11ed-a3b6-dac502259ad0.png

在弹出的窗口中,按照提示逐步浏览屏幕,选择Create AXI4 Peripheral选项,指定 IP 块的所需名称、位置目录以及 IP 将具有的 AXI 接口数量以及 AXI类型。

Vivado 中使用了三种主要类型的 AXI:

  • AXI4 (full)
  • AXI4-Lite
  • AXI4-Stream

每种类型都适合不同的用例,在这个项目中,我们正在创建自己的 AXI FIR 滤波器 IP 。由于 FIR 滤波器输入并输出具有已知数据包边界和流量控制要求的恒定数据流,因此 AXI4-Stream 是最适合的类型。它将需要一个从接口来输入数据样本,并需要一个主接口来输出处理后的样本。

作为参考,FIR 是一个运行速度为 100 MS/s 的 LPF,具有 15 个抽头,接收带符号的 16 位数据并输出带符号的 32 位数据。它有一个从 1MHz 到 10MHz 的通带和一个从 20MHz 开始的阻带。

接下来,选择编辑 IP并单击完成。IP 包编辑 Vivado 项目将重新打开一个gui。

54510e9c-5e3a-11ed-a3b6-dac502259ad0.png5462ca42-5e3a-11ed-a3b6-dac502259ad0.png5483cbac-5e3a-11ed-a3b6-dac502259ad0.png54964f3e-5e3a-11ed-a3b6-dac502259ad0.png54a1cd8c-5e3a-11ed-a3b6-dac502259ad0.png54510e9c-5e3a-11ed-a3b6-dac502259ad0.png

将自定义 RTL 添加到 AXI4-Stream IP

从Flow Navigator中选择Add Sources添加我们要设计的 FIR Verilog 文件。

54bee9bc-5e3a-11ed-a3b6-dac502259ad0.png

在使用 Add Files 选项指向 FIR Verilog 文件后,取消选中Scan and add RTL include files into project复选框。由于这不是一个普通的 Vivado 项目,并且 Verilog 代码被打包到一个 IP 块中,因此选中该选项后将引发错误。

54cd59c0-5e3a-11ed-a3b6-dac502259ad0.png54d879e0-5e3a-11ed-a3b6-dac502259ad0.png

添加后,源层次结构更新并且 FIR Verilog 文件独立于 AXI Verilog 源文件。

54e5e404-5e3a-11ed-a3b6-dac502259ad0.png

根据生成 IP 编辑器 Vivado 项目时所做的选择,会为此 AXI4-Stream 外设生成三个 RTL 源文件:

  • 从接口功能 RTL。
  • 主接口功能 RTL。
  • 具有物理接口声明和主从接口实例化的顶层文件。

在设计之前,需要将几个默认未启用的可选 AXI4-Stream 接口信号添加到主 AXI 端口和从 AXI 端口。大多数 DSP IP 模块,例如 DDS 利用了 AXI4-Stream 额外的keep 和 tlast信号。

添加这些可选信号很简单,但最初并不清楚。导航到Package IP窗口中的Customization Parameters选项卡。

54f31e94-5e3a-11ed-a3b6-dac502259ad0.png

主接口和从接口都需要添加它们,因此右键单击每个接口并选择Edit Interface 。

5514ac94-5e3a-11ed-a3b6-dac502259ad0.png

在“Parameters”选项卡中启用HAS_TKEEP ,方法是单击每个选项,然后单击单个箭头将其从左列移动到右列。

5522eade-5e3a-11ed-a3b6-dac502259ad0.png

然后切换到Port Mapping选项卡,将 tkeep 和 tlast 映射到 AXI IP 块的物理接口。在Interface's Logical Ports列和IP's Physical Ports列中分别匹配 tkeep 和 tlast 信号。然后在下面的Mapped Ports Summary列中验证它们的映射。

5531ac18-5e3a-11ed-a3b6-dac502259ad0.png

由于默认情况下不启用 tkeep,因此还必须手动将其端口声明添加到所有三个 AXI 接口 RTL 源文件的用户定义端口声明部分。它还需要添加到顶级 AXI 包装器中的 AXI 主接口和从接口实例中。

553e5e36-5e3a-11ed-a3b6-dac502259ad0.png554f7f7c-5e3a-11ed-a3b6-dac502259ad0.png555fecae-5e3a-11ed-a3b6-dac502259ad0.png557dee2a-5e3a-11ed-a3b6-dac502259ad0.png

在注释Add user logic here标记的部分中实例化 FIR Verilog 模块。

55a33ef0-5e3a-11ed-a3b6-dac502259ad0.png

现在,虽然 AXI 接口的基本功能分别在每个 RTL 源文件中自动生成,但如何从输入数据流中提取数据并传递到自己的自定义逻辑中由自己来定义。以及如何将自定义逻辑的数据输出馈送到主 AXI 接口进行输出。因此,会在三个自动生成的 RTL 源文件中注意到相同的 Add user 逻辑。

55b3bf46-5e3a-11ed-a3b6-dac502259ad0.png55c3dd0e-5e3a-11ed-a3b6-dac502259ad0.png

另一点需要注意的是,AXI4-Stream 接口的功能需要进行一些修改,以便将 tkeep 和 tlast 信号功能添加到主 AXI 接口和从 AXI 接口。

55d2c1f2-5e3a-11ed-a3b6-dac502259ad0.png

这个项目的最后一个独特的要求是,因为这个逻辑的核心是一个 FIR 滤波器,所以主从 AXI 接口和 FIR 都需要由相同的时钟作为 FIR 采样时钟。所以只是将从 AXI 接口时钟传递给 FIR 和主 AXI 接口。

55e299a6-5e3a-11ed-a3b6-dac502259ad0.png

封装 AXI IP 块

返回到 Package IP 窗口,让我们浏览每个选项卡并验证,然后最终将其打包。

第一个选项卡中是输出 AXI 外设 IP 包的基本显示信息。

55f41de8-5e3a-11ed-a3b6-dac502259ad0.png

第二个标签很重要。默认情况下,AXI 外设 IP 仅支持启动 IP 包编辑器的主 Vivado 所针对的 FPGA 芯片系列。大多数时候,可能希望能够将 AXI 外设 IP 块与其他 Xilinx FPGA 芯片系列一起使用,就需要添加我们需要的目标FPGA芯片。

5604aa82-5e3a-11ed-a3b6-dac502259ad0.png

对于其余选项卡,默认需求即可。

561ce520-5e3a-11ed-a3b6-dac502259ad0.png562bd116-5e3a-11ed-a3b6-dac502259ad0.png563778f4-5e3a-11ed-a3b6-dac502259ad0.png566f0044-5e3a-11ed-a3b6-dac502259ad0.png567a7abe-5e3a-11ed-a3b6-dac502259ad0.png

在最后一个选项卡中,单击窗口底部的Package IP按钮。将出现一个提示,询问是否要关闭 IP 编辑器 Vivado 项目。

此时,FIR AXI IP 块被打包并放置在 Package IP 窗口的第一个选项卡指定的目录中的存储库中。

将自定义 AXI4-Stream FIR 添加到项目

现在自定义 FIR AXI IP 模块已经完成并封装,我们可以返回原始 Vivado 项目,将其添加到模块设计中。

我们的验证项目如下:

56881b10-5e3a-11ed-a3b6-dac502259ad0.png

其中DDS IP设置如下:

56b0b8f4-5e3a-11ed-a3b6-dac502259ad0.png56bfb4f8-5e3a-11ed-a3b6-dac502259ad0.png56d9567e-5e3a-11ed-a3b6-dac502259ad0.png56f1fc24-5e3a-11ed-a3b6-dac502259ad0.png

创建仿真平台

首先创建仿真文件,并在sim文件夹下的 Sources 选项卡中,右键单击它并选择Set as Top 。

57015bb0-5e3a-11ed-a3b6-dac502259ad0.png

在这种情况下,只需在块设计中实例化块设计,并为其提供差分系统时钟和主 FPGA 复位。一旦接收到时钟和复位信号,相位增量状态机就会自行运行。

`timescale1ns/1ps

modulesp701_bd_tb;

regclk_p,clk_n,reset;

alwaysbegin
clk_p=1;clk_n=0;#5;
clk_p=0;clk_n=1;#5;
end

alwaysbegin
reset=1;#40;
reset=0;#1000000000;
end

sp701_bdsp701_bd_i(
.reset(reset),
.sys_diff_clock_clk_n(clk_p),
.sys_diff_clock_clk_p(clk_n)
);

endmodule

这里注意一下主 AXI 接口输出信号和 tlast、tvalid 和 tdata 需要进行初始化。否则仿真将会报错。

57119ab6-5e3a-11ed-a3b6-dac502259ad0.png

单击Flow Navigator窗口中的Run Simulation并选择Run Behavioral Simulation 。

57302e2c-5e3a-11ed-a3b6-dac502259ad0.png

注意仿真结果显示格式。

参考

https://www.hackster.io/

总结

上面的一些创建细节没有全部展现,因为本身对于IP的创建不是我们的核心,我们只想说明使用目前这种BD设计可以达达简化设计,尤其是目前Verilog的一些缺点。

最后说一下调试中的注意点,就是使用ILA查看AXI-Stream输出时候,会造成FIR的时序与采样混淆导致 FIR 不再工作,可能会查看不到任何波形,使用AXIS的专用调试IP即可,后续我们在说明这方面的知识。

示例工程

https://github.com/suisuisi/AXI4-Stream-FIR-filter


审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    162

    文章

    8351

    浏览量

    184766
  • 自动化
    +关注

    关注

    30

    文章

    5886

    浏览量

    89262
  • 开源
    +关注

    关注

    3

    文章

    4032

    浏览量

    45569

原文标题:​构建自定义 AXI4-Stream FIR 滤波器

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用AXI4接口IP核进行DDR读写测试

    本章的实验任务是在 PL 端自定义一个 AXI4 接口的 IP 核,通过 AXI_HP 接口对 PS 端 DDR3 进行读写测试,读写的内存大小是 4K 字节。
    的头像 发表于 11-24 09:19 2770次阅读
    使用<b class='flag-5'>AXI4</b>接口IP核进行DDR读写测试

    大彩讲堂:VisualTFT软件如何自定义圆形进度条

    VisualTFT软件如何自定义圆形进度条
    的头像 发表于 07-07 17:10 1220次阅读
    大彩讲堂:VisualTFT软件如何<b class='flag-5'>自定义</b>圆形进度条

    RDMA简介8之AXI分析

    AXI4 总线是第四代 AXI 总线,其定义了三种总线接口,分别为:AXI4AXI4-Lite 和 A
    的头像 发表于 06-24 23:22 456次阅读
    RDMA简介8之<b class='flag-5'>AXI</b>分析

    RDMA简介8之AXI 总线协议分析1

    ,分别为:AXI4AXI4-Lite 和 AXI4-Stream接口。其中 AXI4 也称为 AXI4-Full 是一种基于地址的高性能传
    发表于 06-24 18:00

    KiCad 中的自定义规则(KiCon 演讲)

    “  Seth Hillbrand 在 KiCon US 2025 上为大家介绍了 KiCad 的规则系统,并详细讲解了自定义规则的设计与实例。  ”   演讲主要围绕 加强 KiCad 中的自定义
    的头像 发表于 06-16 11:17 1461次阅读
    KiCad 中的<b class='flag-5'>自定义</b>规则(KiCon 演讲)

    HarmonyOS应用自定义键盘解决方案

    自定义键盘是一种替换系统默认键盘的解决方案,可实现键盘个性化交互。允许用户结合业务需求与操作习惯,对按键布局进行可视化重构、设置多功能组合键位,使输入更加便捷和舒适。在安全防护层面,自定义键盘可以
    的头像 发表于 06-05 14:19 1579次阅读

    NVMe IP之AXI4总线分析

    针对不同的应用场景,制定了三个不同类型的接口,其中包括AXI4-Full、AXI4-Lite以及AXI4-Stream。表1为三种AXI4总线的对比。 表1三种
    发表于 06-02 23:05

    高速SSD存储系统中数据缓存控制整体顶层设计

    数据缓存控制主要实现了对大量突发数据的缓存、AXI4接口与AXI4-Stream接口之间的转换和NVMe命令的生成等功能。这里主要介绍相关开发流程。
    的头像 发表于 04-14 10:46 609次阅读
    高速SSD存储系统中数据缓存控制<b class='flag-5'>器</b>整体顶层设计

    LabVIEW运动控制(三):EtherCAT运动控制的高效加工指令自定义封装

    LabVIEW高效加工指令自定义封装
    的头像 发表于 04-08 13:49 3266次阅读
    LabVIEW运动控制(三):EtherCAT运动控制<b class='flag-5'>器</b>的高效加工指令<b class='flag-5'>自定义</b>封装

    一文详解Video In to AXI4-Stream IP核

    Video In to AXI4-Stream IP核用于将视频源(带有同步信号的时钟并行视频数据,即同步sync或消隐blank信号或者而后者皆有)转换成AXI4-Stream接口形式,实现了接口转换。该IP还可使用VTC核,VTC在视频输入和视频处理之间起桥梁作用。
    的头像 发表于 04-03 09:28 2239次阅读
    一文详解Video In to <b class='flag-5'>AXI4-Stream</b> IP核

    如何添加自定义单板

    在开发过程中,用户有时需要创建自定义板配置。本节将通过一个实例讲解用户如何创建属于自己的machine,下面以g2l-test.conf为例进行说明。
    的头像 发表于 03-12 14:43 1082次阅读

    如何快速创建用户自定义Board和App工程

    概述自HPM_SDKv1.7.0发布开始,在HPM_ENV中新增了user_template文件夹,以方便用户快速创建自定义的Board和App工程。user_template是用户模板工程,用户
    的头像 发表于 02-08 13:38 999次阅读
    如何快速创建用户<b class='flag-5'>自定义</b>Board和App工程

    Altium Designer 15.0自定义元件设计

    电子发烧友网站提供《Altium Designer 15.0自定义元件设计.pdf》资料免费下载
    发表于 01-21 15:04 0次下载
    Altium Designer 15.0<b class='flag-5'>自定义</b>元件设计

    think-cell:自定义think-cell(四)

    C.5 设置默认议程幻灯片布局 think-cell 议程可以在演示文稿中使用特定的自定义布局来定义议程、位置和议程幻灯片上的其他形状,例如标题或图片。通过将此自定义布局添加到模板,您可以为整个组织
    的头像 发表于 01-13 10:37 880次阅读
    think-cell:<b class='flag-5'>自定义</b>think-cell(四)

    think-cell;自定义think-cell(一)

    本章介绍如何自定义 think-cell,即如何更改默认颜色和其他默认属性;这是通过 think-cell 的样式文件完成的,这些文件将在前四个部分中进行讨论。 第五部分 C.5 设置默认议程幻灯片
    的头像 发表于 01-08 11:31 1240次阅读
    think-cell;<b class='flag-5'>自定义</b>think-cell(一)