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

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

3天内不再提示

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

FPGA技术江湖 来源:OpenFPGA 2023-01-06 09:31 次阅读

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创建一个新项目。

1e2fa64c-8d57-11ed-bfe3-dac502259ad0.png1e6522ea-8d57-11ed-bfe3-dac502259ad0.png

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

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

1e737f66-8d57-11ed-bfe3-dac502259ad0.png1ea78dce-8d57-11ed-bfe3-dac502259ad0.png1eb60f8e-8d57-11ed-bfe3-dac502259ad0.png

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

创建新的 AXI4 外设

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

1f609b70-8d57-11ed-bfe3-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。

1f6b15d2-8d57-11ed-bfe3-dac502259ad0.png1f937720-8d57-11ed-bfe3-dac502259ad0.png1f9b0efe-8d57-11ed-bfe3-dac502259ad0.png1fc0eeda-8d57-11ed-bfe3-dac502259ad0.png1fca275c-8d57-11ed-bfe3-dac502259ad0.png1f6b15d2-8d57-11ed-bfe3-dac502259ad0.png

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

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

200e7ec0-8d57-11ed-bfe3-dac502259ad0.png

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

2039f456-8d57-11ed-bfe3-dac502259ad0.png20575500-8d57-11ed-bfe3-dac502259ad0.png

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

20774a7c-8d57-11ed-bfe3-dac502259ad0.png

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

从接口功能 RTL。

主接口功能 RTL。

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

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

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

2089b662-8d57-11ed-bfe3-dac502259ad0.png

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

20b7fb08-8d57-11ed-bfe3-dac502259ad0.png

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

20d220dc-8d57-11ed-bfe3-dac502259ad0.png

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

20ef7736-8d57-11ed-bfe3-dac502259ad0.png

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

21123528-8d57-11ed-bfe3-dac502259ad0.png213c79f0-8d57-11ed-bfe3-dac502259ad0.png216ba838-8d57-11ed-bfe3-dac502259ad0.png21a5a40c-8d57-11ed-bfe3-dac502259ad0.png

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

21bb5400-8d57-11ed-bfe3-dac502259ad0.png

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

21f5902a-8d57-11ed-bfe3-dac502259ad0.png225f7a08-8d57-11ed-bfe3-dac502259ad0.png

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

2291370a-8d57-11ed-bfe3-dac502259ad0.png

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

23020ab6-8d57-11ed-bfe3-dac502259ad0.png

封装 AXI IP 块

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

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

23338ee2-8d57-11ed-bfe3-dac502259ad0.png

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

235f07ca-8d57-11ed-bfe3-dac502259ad0.png

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

237ba9b6-8d57-11ed-bfe3-dac502259ad0.png23b5c9fc-8d57-11ed-bfe3-dac502259ad0.png23e25ca6-8d57-11ed-bfe3-dac502259ad0.png2416de4a-8d57-11ed-bfe3-dac502259ad0.png247a9246-8d57-11ed-bfe3-dac502259ad0.png

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

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

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

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

我们的验证项目如下:

24ab3216-8d57-11ed-bfe3-dac502259ad0.png

其中DDS IP设置如下:

24d210ca-8d57-11ed-bfe3-dac502259ad0.png24e5577a-8d57-11ed-bfe3-dac502259ad0.png24ffe73e-8d57-11ed-bfe3-dac502259ad0.png25614a4c-8d57-11ed-bfe3-dac502259ad0.png

创建仿真平台

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

257ed6ac-8d57-11ed-bfe3-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 需要进行初始化。否则仿真将会报错。

25a10e7a-8d57-11ed-bfe3-dac502259ad0.png

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

25c6914a-8d57-11ed-bfe3-dac502259ad0.png

注意仿真结果显示格式。

总结

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

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

示例工程

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

审核编辑:汤梓红

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

    关注

    1606

    文章

    21344

    浏览量

    594222
  • amd
    amd
    +关注

    关注

    25

    文章

    5235

    浏览量

    132781
  • 滤波器
    +关注

    关注

    158

    文章

    7372

    浏览量

    175153
  • FIR
    FIR
    +关注

    关注

    4

    文章

    137

    浏览量

    32776
  • Vivado
    +关注

    关注

    18

    文章

    791

    浏览量

    65310

原文标题:示例工程

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问AXI4-Stream到Video核心的技巧有什么?

    ,这是一个由数据视频生成器卡携带的模块。在这种情况下,我只使用了四个内核来实现简单设计,即(1)。视频输入到Axi4-Stream核心,(2)视频缩放核心,(3)。 AXI4-Stream到Video
    发表于 11-08 09:53

    如何吧AXI4-stream时钟转换tkeep设置为null?

    大家好,我正在两个时钟域之间穿过AXI4-Stream,并尝试使用AXI4-Stream时钟转换核心,使用tkeep端口但是在合成时它被Vivado 2015.2在实例化时删除了!这是综合警告
    发表于 05-08 08:56

    axi4-stream互连问题如何解决

    你好,大家好。我正在使用EMI14.4和xc6v315t。我正在尝试模拟IP CORE.It的axi4-stream interconnect.I配置ip为6siand 4mi。但是当我用ismI模拟它时发现s_tready很低,有什么问题?
    发表于 06-18 15:08

    axi4-stream combiner问题的解决办法?

    AXI4-Streamslave接口上TDATA信号的宽度(以字节为单位)。 AXI4-Stream主接口TDATA宽度是此值乘以从属接口数参数。此参数是一个整数,可以在0到(512 /从站接口数)之间变化。设置为0以省略
    发表于 08-20 14:36

    AXI-stream数据传输过程

    的数据流标识符。xilinx封装的ip中没有此信号。  9.TDEST 用于提供路由信息,xilinx封装的ip中没有此信号。  10.TUSER AXI4协议留给用户自定义的。xilinx封装的ip中没有
    发表于 01-08 16:52

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

    1、​构建自定义AXI4-Stream FIR滤波器  AMD-Xilinx 的 Vivado 开发工具具有很多方便FPGA开发功能,我最喜
    发表于 11-07 16:07

    自定义sobel滤波IP核,IP接口遵守AXI Stream协议

    自定义sobel滤波IP核 IP接口遵守AXI Stream协议
    的头像 发表于 08-06 06:04 3653次阅读

    关于AXI4-Stream协议总结分享

    XI4-StreamAXI4的区别就是AXI4-Stream去除了地址线,这样就不涉及读写数据的概念了,只有简单的发送与接收说法,减少了延时。由于AXI4-Stream协议(amba
    的头像 发表于 06-23 10:08 1898次阅读

    AXI4 、 AXI4-Lite 、AXI4-Stream接口

    AXI4 是一种高性能memory-mapped总线,AXI4-Lite是一只简单的、低通量的memory-mapped 总线,而 AXI4-Stream 可以传输高速数据流。从字面意思去理解
    的头像 发表于 07-04 09:40 6361次阅读

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

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

    在Vivado中构建自定义AXI4-Stream FIR滤波器IP 1

    的图形表示进行设计,在block design中使用 RTL 模块的方便之处在于,它将自动检测某些类型的信号,例如时钟、复位和总线接口,然后,检测这些信号进行IP间的自动化连接。Vivado 中包含大量预构建 IP 模块(官方IP)。
    发表于 02-10 14:50 821次阅读
    在Vivado中<b class='flag-5'>构建</b><b class='flag-5'>自定义</b><b class='flag-5'>AXI4-Stream</b> <b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b>IP 1

    在Vivado中构建自定义AXI4-Stream FIR滤波器IP 2

    的图形表示进行设计,在block design中使用 RTL 模块的方便之处在于,它将自动检测某些类型的信号,例如时钟、复位和总线接口,然后,检测这些信号进行IP间的自动化连接。Vivado 中包含大量预构建 IP 模块(官方IP)。
    的头像 发表于 02-10 14:51 1672次阅读
    在Vivado中<b class='flag-5'>构建</b><b class='flag-5'>自定义</b><b class='flag-5'>AXI4-Stream</b> <b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b>IP 2

    在Vivado中构建自定义AXI4-Stream FIR滤波器IP 3

    的图形表示进行设计,在block design中使用 RTL 模块的方便之处在于,它将自动检测某些类型的信号,例如时钟、复位和总线接口,然后,检测这些信号进行IP间的自动化连接。Vivado 中包含大量预构建 IP 模块(官方IP)。
    发表于 02-10 14:51 834次阅读
    在Vivado中<b class='flag-5'>构建</b><b class='flag-5'>自定义</b><b class='flag-5'>AXI4-Stream</b> <b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b>IP 3

    Video In to AXI4-Stream IP核知识介绍

    大家好!今日分享一些关于Video In to AXI4-Stream IP 核的知识。在具体学习IP核的过程中,我也将分享一些关于如何看xilinx英文文档的技巧。
    的头像 发表于 05-18 14:55 1153次阅读
    Video In to <b class='flag-5'>AXI4-Stream</b> IP核知识介绍

    LogiCORE IP AXI4-Stream FIFO内核解决方案

    LogiCORE IP AXI4-Stream FIFO内核允许以内存映射方式访问一个AXI4-Stream接口。该内核可用于与AXI4-Stream IP接口,类似于LogiCORE IP
    的头像 发表于 09-25 10:55 658次阅读
    LogiCORE IP <b class='flag-5'>AXI4-Stream</b> FIFO内核解决方案