Versal - 基础3(AXI NoC 专题+仿真+QoS)

目录

1. 简介

2. 示例

2.1 示例说明

2.2 创建项目

2.2.1 平台信息

2.2.2 AXI NoC Automation

2.2.3 创建时钟和复位

2.3 配置 NoC

2.4 配置 AXI Traffic

2.5 配置 Memory Size

2.6 Validate BD

2.7 添加观察信号

2.8 运行仿真

2.9 查看结果

2.9.1 整体波形

2.9.2 事务详情

2.9.3 事务全过程解读

3. IP 介绍

3.1 AXI Traffic Generator

3.1.1 IP 简介

3.1.2 Config Tab

3.1.3 可综合配置

3.1.4 不可综合配置

3.2 AXI BRAM Controller

3.2.1 IP 简介

3.2.2 IP 配置

3.3 Embedded Memory Gen

3.3.1 IP 简介

3.3.2 单端口 RAM

3.3.3 简单双端口 RAM

3.3.4 真双端口 RAM

3.3.5 单端口 ROM

3.3.6 双端口 ROM

3.3.7 工作模式

4. 总结


1. 简介

Basic NoC Designhttps://github.com/Xilinx/Vivado-Design-Tutorials/tree/2024.2/Versal/Memory_and_NoC/NoC_Design_Flows/IPI/Module_01_Basic_NoC_Designhttps://github.com/Xilinx/Vivado-Design-Tutorials/tree/2024.2/Versal/Memory_and_NoC/NoC_Design_Flows/IPI/Module_01_Basic_NoC_Designhttps://github.com/Xilinx/Vivado-Design-Tutorials/tree/2024.2/Versal/Memory_and_NoC/NoC_Design_Flows/IPI/Module_01_Basic_NoC_Designhttps://github.com/Xilinx/Vivado-Design-Tutorials/tree/2024.2/Versal/Memory_and_NoC/NoC_Design_Flows/IPI/Module_01_Basic_NoC_Designhttps://github.com/Xilinx/Vivado-Design-Tutorials/tree/2024.2/Versal/Memory_and_NoC/NoC_Design_Flows/IPI/Module_01_Basic_NoC_Designhttps://github.com/Xilinx/Vivado-Design-Tutorials/tree/2024.2/Versal/Memory_and_NoC/NoC_Design_Flows/IPI/Module_01_Basic_NoC_Designhttps://github.com/Xilinx/Vivado-Design-Tutorials/tree/2024.2/Versal/Memory_and_NoC/NoC_Design_Flows/IPI/Module_01_Basic_NoC_DesignAXI NoC 和 AXIS NoC

  • AXI NoC 支持 AXI 内存映射协议
  • AXIS NoC 支持 AXI4-Stream 协议

每实例指定了一组连接,这些连接将映射到物理 NoC 上,并为每条连接指定了 QoS 要求。

一个 Block Design 可以包含任意数量的这两种类型的实例。

IP 集成器自动汇总所有逻辑 NoC 实例的连接性和 QoS 信息,形成 NoC 编译器的统一流量规范。

MCs 被集成到 AXI NoC 核心中。一个AXI NoC IP实例可以配置为包含一个、两个或四个集成MC实例。

如果选择了两个或四个MC实例,它们将被配置为形成单一的交错内存。在这种情况下,内存控制器被配置得相同,并映射到相同的地址。

Interleaving 由 NoC 控制。

2. 示例

2.1 示例说明

该设计使用 AXI4 流量发生器读写块 RAM。具体步骤为:

  • 使用模拟时钟生成器、AXI4 流量生成器、AXI NoC、AXI4 Block RAM 控制器和内存生成器创建块 RAM 实例。
  • 采用自顶向下设计流程,在模块设计画布中实例化 AXI NoC IP。
  • 借助 IP 集成器推断 NoC、时钟发生器和互连。
  • 创建设计后进行仿真,以验证是否满足带宽要求。

2.2 创建项目

2.2.1 平台信息

1)软件版本为:Vivado 2024.2

2)Versal 器件为:XCVE2302-SFVA784-1LP-E-S

3)创建项目,新建 Block Design

4)添加 IP:AXI NoC IP

2.2.2 AXI NoC Automation

对 AXI NoC IP 进行自动化设计:

  • 去掉 CIPS 勾选框
  • AXI Tranffic Generator:1
  • AXI BRAM Controller:1
  • MC Type:None

(注意:Sources 和 Destinations,各选了一个)

得到如下结果:

生成了一些新的 IP:

  • Source 端:
    • Simulation Trigger For NoC AXI TG
    • Performance AXI Traffic Generator
  • Destination 端:
    • AXI BRAM Controller
    • Embeded Memory Generator
  • 时钟:
    • Simulation Clock and Reset Generator

2.2.3 创建时钟和复位

上一个步骤中生成的 Block Design,没有时钟和复位,执行 Run Connection Automation 可以自动生成。全部使用保持默认设置即可:

结果如下图所示:

生成了两个新的 IP:

  • Clock Wizard
  • Processor System Reset

Clock Wizard 的输出时钟驱动 Simulation Clock and Reset Generator 的输入时钟。

这有两个目的:

  • 在仿真阶段,时钟由 Simulation Clock and Reset Generator 驱动。
  • 在 Impl 阶段,时钟由 Clock Wizard 驱动,Simulation Clock and Reset Generator 将直通。

由于 Clock Wizard 的输入时钟和复位源尚未连接,运行连接自动化链接再次变为活动状态继续执行 Run Connection Automation。保持默认即可:

最终的 Block Design 如下:

2.3 配置 NoC

1)NoC 配置决定了设计要使用一组参数:

  • 入口和出口端口的数量和类型
  • 输入时钟与每个端口的关联
  • 入口和出口端口之间的路由连接
  • 每个连接所需的 QoS

2)Inputs / Outputs Tab 可查看输入输出端口的配置

在本例中,定义了一个输入和一个输出,均连接到 PL 域,关联时钟为 aclk0。

偶校验:启用从 AXI 主设备到 NMU 连接的偶校验。可用的校验选项有:

  • 无:不进行奇偶校验
  • 地址:启用 AXI 地址奇偶校验
  • 数据:启用 AXI 数据奇偶校验
  • 地址和数据:启用 AXI 地址和数据奇偶校验

3)Connectivity Tab

显示哪些 NoC 入口接口(例如 S00_AXI )将路由到哪些出口接口(例如 M00_AXI )。

4)QoS Tab

QoS 选项卡允许您为每个 NoC 连接选择服务质量 (QoS) 设置。第一行显示入口端口 ( S00_AXI ) 的 QoS 设置。请注意,默认的读取和写入流量类别是 BEST_EFFORT。

显示了来自所选入口端口的每个输出连接的 QoS 属性集。在此设计中,只有一个输出连接 ( M00_AXI ) 对应于块 RAM 控制器的 AXI4 端口。这里可以指定所需的读写带宽。默认值 1720 MB/s 就足够了。

2.4 配置 AXI Traffic

Performance AXI Traffic Generator v1.0

1)Non-systhesizable TG Options

2)Number of Write Transactions

执行 100 次传输操作。

2.5 配置 Memory Size

1)更改 BRAM 大小

无法在 Embedded Memory Generator 中直接修改,即使修改后,Validate 之后又会恢复修改之前的值。应当在 Address Editor 中修改。

此页面中, Memory Size(存储器大小)为 4K bytes。

当 validate_bd_design 运行时,该值将传播到:

  • AXI BRAM Controller
  • Embeded Memory Generator

2)查看 AXI BRAM Controller IP 中的结果

Memory Size = Data_Width × Memory_Depth =  32 bit × 1024 = 4K bytes。

3)查看 Embeded Memory Generator IP 中的结果

Write Width = Read Width = 32 bit。

Memory Size = Width × Memory_Depth =  32 bit × 1024 = 4K bytes。

2.6 Validate BD

NoC Validate the Block Design 会调用 NoC Compiler 来查找 NoC 的最佳配置。

NoC Compiler 执行以下功能:

  • 完成逻辑入口和出口端口到物理 NMU 和 NSU 资源的映射
  • 在 QoS 约束下,为所有指定连接找到 NoC 的最优路径
  • 配置 NoC 内部资源,使其能够实现路由方案

通过单击工具栏上的 Validate Design 图标(F6)来执行验证。

验证后,NoC 查看器显示编译结果,QoS 标签显示达成的服务质量。

2.7 添加观察信号

Vivado 仿真器有一个事务视图功能,可以更清晰地查看 AXI 总线事务的波形。

仿真时,使用事务视图观察流量发生器和 NoC 之间的接口。

在 Block Design 中,选中下图所示的红线部分,右键单击并标记 Mark Simulation。

这会指示仿真器捕获并显示这条线上的 AXI-MM 事务。

仿真前,需要创建一个顶层 HDL wrapper。

2.8 运行仿真

1)仿真设置

注意仿真设置的顶层(design_1_wrapper_sim_wrapper): 

2)生成行为 RTL 模型并启动模拟器

进入仿真 GUI: 

包含两个 

3)运行仿真

4)复位仿真

2.9 查看结果

2.9.1 整体波形

  • Outstanding Reads:未完成的读取过程
  • Outstanding Writes:未完成的写入过程

2.9.2 事务详情

1)鼠标悬停在某个事务上会弹出一个窗口,显示该事务的详细信息。

2)高亮显示事务流:点击事务的某个部分(比如 “Write Data”)会高亮显示相关的部分。

2.9.3 事务全过程解读

  • 红色序号1:Performance AXI Traffic Generator 发起读写事务,数据位宽 512 bit
  • 红色序号2:数据通过 AXI NoC 到达 AXI BRAM 控制器,数据位宽是 32 bit

整个写事务,耗时 103.354ns,103.354ns/3.334=31clks 个时钟周期。

写事务过程详细图示:

3. IP 介绍

3.1 AXI Traffic Generator

3.1.1 IP 简介

Performance AXI Traffic Generator,高性能 AXI 流量发生器。

它有两个版本:

  • 仅用于仿真的不可综合版本
  • 可用于仿真和在硬件中运行的可综合版本

Vivado 中包含两种 AXI 流量发生器:

《AXI Traffic Generator LogiCORE IP Product Guide (PG125)》

《Performance AXI Traffic Generator LogiCORE IP Product Guide (PG381)》

后者提供更多的特性:

  • 更精细的流量控制: 可以更精确地控制流量的类型、数量、时序等
  • 更灵活的配置选项: 可以根据不同的测试场景进行更灵活的配置
  • 对 Versal 器件的: 评估基于 NoC 的解决方案的性能

参考:

Performance AXI Traffic Generator - IP Release Notes and Known Issueshttps://adaptivesupport.amd.com/s/article/75781?language=zh_CNhttps://adaptivesupport.amd.com/s/article/75781?language=zh_CNhttps://adaptivesupport.amd.com/s/article/75781?language=zh_CNhttps://adaptivesupport.amd.com/s/article/75781?language=zh_CN

3.1.2 Config Tab

3.1.3 可综合配置

3.1.4 不可综合配置

3.2 AXI BRAM Controller

3.2.1 IP 简介

参考:《AXI Block RAM (BRAM) Controller v4.1 Product Guide(PG078)》

1)AXI4 BRAM Controller 框图

2)Features

  • 支持 32 位、64 位、128 位、256 位、512 位和 1024 位 BRAM 数据宽度。
  • 特殊的突发处理: 它将一种叫做“FIXED”的传输方式特殊处理为“INCR”方式,并且不支持“FIFO”方式。这是一种为了简化自身设计而采取的折衷方案。
  • 特定的传输长度: 对于不同的传输方式(WRAP、FIXED、INCR),它有预设的连续传输次数(分别为 16、16 和 256 次)。这就像预先设定好每次搬运多少箱货物。
  • 支持窄突发: 即使需要传输的数据量小于存储器一次能处理的数据量,它也能有效地进行处理。
  • 简单直接: 它只使用基本的通信信号,没有使用一些高级的优化技术(如用户信号、重排序、缓存或缓冲)。

3)Supported Memory Size

| Data Width (Bits) | Memory Depths (Words)                          |
|-------------------|------------------------------------------------|
| 32                | 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k, 256k |
| 64                | 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k, 256k |
| 128               | 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k       |
| 256               | 512, 1k, 2k, 4k, 8k, 16k, 32k, 64k             |
| 512               | 512, 1k, 2k, 4k, 8k, 16k, 32k                  |
| 1024              | 512, 1k, 2k, 4k, 8k, 16k                       |
| 2048              | 512, 1k, 2k, 4k, 8k                            |

3.2.2 IP 配置

3.3 Embedded Memory Gen

参考:《Embedded Memory Generator LogiCORE IP Product Guide (PG326)》

3.3.1 IP 简介

Embedded Memory Generator IP 是一个高级存储器构造器,它使用 AMD 器件中的 Block RAM、UltraRAM 和 Distributed RAM 资源生成 Area and Performance-optimized 的存储器。

典型应用包括一下内容:

3.3.2 单端口 RAM

1)定义: 就像一条单行道,只有一个入口/出口。数据只能按顺序写入和读取,不能同时进行读写操作。

2)应用场景:

  • 处理器暂存 RAM(Scratch RAM): 用于处理器执行运算时的临时数据存储,速度快,但容量通常不大。例如,在进行复杂的数学计算时,中间结果可以先存放在暂存 RAM 中,运算完成后再取出。
  • 查找表(Look-Up Table, LUT): 用于存储预先计算好的数据,通过输入地址直接查找对应的值,提高运算速度。例如,在图像处理中,可以使用 LUT 来快速进行颜色转换。

3.3.3 简单双端口 RAM

1)定义: 像一条有两条独立的入口/出口的通道,可以同时进行读写操作,但通常有一些限制。例如,可能只允许一个端口读,另一个端口写,或者读写操作不能在同一地址进行。

2)应用场景:

  • 内容可寻址存储器(Content Addressable Memory, CAM): 与普通 RAM 通过地址查找数据不同,CAM 通过内容查找数据。输入一个数据,CAM 会返回该数据所在的地址。简单双端口 CAM 可以实现快速查找,但写入操作可能需要一些额外的控制。
  • FIFO(First-In, First-Out): 是一种先进先出的数据结构,数据从一个端口写入,从另一个端口按相同的顺序读出,就像排队一样。简单双端口 RAM 可以方便地实现 FIFO 功能,用于数据缓冲和传输。

3.3.4 真双端口 RAM

1)定义: 像一条有两条完全独立的双向车道,两个端口可以完全独立地同时进行读写操作,互不干扰。
2)应用场景:

  • 多处理器存储: 允许多个处理器同时访问同一块存储空间,实现数据的共享和交换。例如,在一个多核处理器系统中,不同的核心可以通过真双端口 RAM 共享数据,提高系统的并行处理能力。

3.3.5 单端口 ROM

1)定义: 只能读取数据,不能写入数据,数据在出厂前或烧录时就已经确定。类似于一张只读光盘。
2)应用场景:

  • 程序代码存储: 用于存储程序的指令代码,处理器从 ROM 中读取指令并执行。
  • 初始化 ROM: 用于存储系统的初始化代码和配置信息,在系统启动时加载。

3.3.6 双端口 ROM

1)定义: 有两个独立的读取端口,可以同时被两个不同的设备读取,但数据仍然是只读的。

2)应用场景:

  • 在两个处理器/系统之间共享的单个 ROM: 允许多个处理器或系统共享同一份只读数据,例如共享同一份固件代码或查找表,节省存储空间。

3.3.7 工作模式

该 IP 核在 Block Design 中使用的模式。

使用 IP 集成器时有两种模式可用,默认模式是 Memory Controller。

1)存储器控制器模式

  • 如果使用 AXI BRAM Controller 或 LMB BRAM Controller,请选择此模式。
  • 所有端口参数都将灰显,因为它们是从主设备生成的。

2)独立模式

  • 如果您使用自定义接口控制器,请选择此模式。可以选择和更新所有可用的参数。

4. 总结

本示例,使用 AXI4 流量发生器,通过 NoC 读写块 RAM。

  • IP 包括:模拟时钟生成器、AXI4 流量生成器、AXI NoC、AXI4 Block RAM 控制器和内存生成器创建块 RAM。
  • 通过 IP 集成器推断 NoC、时钟发生器和互连。
  • 创建设计后进行仿真,详细分析传输流程和时延。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9050.html

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

相关文章

【PostgreSQL内核学习 —— (WindowAgg(一))】

WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…

RubyFPV开源代码之系统简介

RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍(软件)3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐(硬件)4.1 天空端4.2 地面端4.3 按键硬件Raspberry PiRadxa 3W/E/C 5. 软件设计6. 参考资料 1. 源由 RubyFPV以…

MySQL(单表访问)

今天是新年,祝大家新年快乐,但是生活还是得继续。 后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都会及时修改的! 大部分截图和文章采…

汇编的使用总结

一、汇编的组成 1、汇编指令(指令集) 数据处理指令: 数据搬移指令 数据移位指令 位运算指令 算术运算指令 比较指令 跳转指令 内存读写指令 状态寄存器传送指令 异常产生指令等 2、伪指令 不是汇编指令,但是可以起到指令的作用,伪…

汇编基础语法及其示例

1.汇编指令 1.1汇编指令的基本格式 <opcode>{<cond>}{s} <Rd> , <Rn> , <shifter_operand> <功能码>{<条件码>}{cpsr影响位} <目标寄存器> , <第一操作寄存器> , <第二操作数> 注&#xff1a;第一操作寄存器…

FLTK - FLTK1.4.1 - 搭建模板,将FLTK自带的实现搬过来做实验

文章目录 FLTK - FLTK1.4.1 - 搭建模板&#xff0c;将FLTK自带的实现搬过来做实验概述笔记my_fltk_test.cppfltk_test.hfltk_test.cxx用adjuster工程试了一下&#xff0c;好使。END FLTK - FLTK1.4.1 - 搭建模板&#xff0c;将FLTK自带的实现搬过来做实验 概述 用fluid搭建UI…

基于物联网设计的疫苗冷链物流监测系统

一、前言 1.1 项目开发背景 随着全球经济的发展和物流行业的不断创新&#xff0c;疫苗和生物制品的运输要求变得越来越高。尤其是疫苗的冷链物流&#xff0c;温度、湿度等环境因素的控制直接关系到疫苗的质量和效力&#xff0c;因此高效、可靠的冷链监控系统显得尤为重要。冷…

JVM对象分配内存如何保证线程安全?

大家好&#xff0c;我是锋哥。今天分享关于【JVM对象分配内存如何保证线程安全?】面试题。希望对大家有帮助&#xff1b; JVM对象分配内存如何保证线程安全? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在JVM中&#xff0c;对象的内存分配是通过堆内存进行的。…

移动光猫怎么自己改桥接模式?

环境&#xff1a; 型号H3-8s 问题描述&#xff1a; 家里宽带用的是H3-8s 光猫&#xff0c;想改桥接模式。 解决方案&#xff1a; 1.默认管理员账号和密码&#xff1a; 账号&#xff1a;CMCCAdmin 密码&#xff1a;aDm8H%MdAWEB页面我试了登陆不了&#xff0c;显示错误 …

大数据Hadoop入门3

第五部分&#xff08;Apache Hive DML语句和函数使用&#xff09; 1.课程内容大纲和学习目标 2.Hive SQL-DML-load加载数据操作 下面我们随机创建文件尝试一下 先创建一个hivedata文件夹 在这个文件夹中写一个1.txt文件 下面使用beeline创建一张表 只要将1.txt文件放在t_1文件…

2025.1.26机器学习笔记:C-RNN-GAN文献阅读

2025.1.26周报 文献阅读题目信息摘要Abstract创新点网络架构实验结论缺点以及后续展望 总结 文献阅读 题目信息 题目&#xff1a; C-RNN-GAN: Continuous recurrent neural networks with adversarial training会议期刊&#xff1a; NIPS作者&#xff1a; Olof Mogren发表时间…

基于物联网的火灾报警器设计与实现(论文+源码)

1 总体方案设计 本次基于物联网的火灾报警器&#xff0c;其系统总体架构如图2.1所示&#xff0c;采用STM32f103单片机作为控制器&#xff0c;通过DS18B20传感器实现温度检测&#xff1b;通过MQ-2烟雾传感器实现烟雾检测&#xff1b;.通过火焰传感器实现火焰检测&#xff0c;当…

ResNeSt: Split-Attention Networks论文学习笔记

这张图展示了一个名为“Split-Attention”的神经网络结构&#xff0c;该结构在一个基数组&#xff08;cardinal group&#xff09;内进行操作。基数组通常指的是在神经网络中处理的一组特征或通道。图中展示了如何通过一系列操作来实现对输入特征的注意力机制。 以下是图中各部…

模糊综合评价

模糊综合评价的特点主要体现在以下几个方面&#xff1a; 一、系统性强 模糊综合评价法能够综合考虑多种因素的影响&#xff0c;将定性指标和定量指标相结合&#xff0c;对评价对象进行全面、系统的分析。这种方法避免了单一指标评价的片面性&#xff0c;提高了评价的准确性和…

宫本茂的游戏设计思想:有趣与风格化

作为独立游戏开发者之一&#xff0c;看到任天堂宫本茂20年前的言论后&#xff0c;深感认同。 游戏研发思想&#xff0c;与企业战略是互为表里的&#xff0c;游戏是企业战略的具体战术体现&#xff0c;虚空理念的有形载体。 任天堂长盛不衰的关键就是靠简单有趣的游戏&#xf…

deepseek-r1 本地部署

deepseek 最近太火了 1&#xff1a;环境 win10 cpu 6c 内存 16G 2: 部署 1>首先下载ollama 官网&#xff1a;https://ollama.com ollama 安装在c盘 模型可以配置下载到其他盘 OLLAMA_MODELS D:\Ollama 2>下载模型并运行 ollama run deepseek-r1:<标签> 1.5b 7b 8…

electron typescript运行并设置eslint检测

目录 一、初始化package.json 二、安装依赖 1、安装electron 2、安装typescript依赖 3、安装eslint 三、项目结构 四、配置启动项 一、初始化package.json 我的&#xff1a;这里的"main"没太大影响&#xff0c;看后面的步骤。 {"name": "xlo…

每日一题-判断是否是平衡二叉树

判断是否是平衡二叉树 题目描述数据范围题解解题思路递归算法代码实现代码解析时间和空间复杂度分析示例示例 1示例 2 总结 ) 题目描述 输入一棵节点数为 n 的二叉树&#xff0c;判断该二叉树是否是平衡二叉树。平衡二叉树定义为&#xff1a; 它是一棵空树。或者它的左右子树…

WS2812 梳理和颜色表示方法的对比:RGB和HSV

WS2812 WS2812是一种可编程的LED灯&#xff0c;具有RGB显示效果&#xff0c;可显示的颜色数量为2^24。 常用颜色表示方法 表示方法&#xff1a; RGB 表示 加法混色原理&#xff1a;RGB 颜色模型基于加法混色原理&#xff0c;将红&#xff08;Red&#xff09;、绿&#xff08…

一文简单回顾Java中的String、StringBuilder、StringBuffer

简单说下String、StringBuilder、StringBuffer的区别 String、StringBuffer、StringBuilder在Java中都是用于处理字符串的&#xff0c;它们之间的区别是String是不可变的&#xff0c;平常开发用的最多&#xff0c;当遇到大量字符串连接的时候&#xff0c;就用StringBuilder&am…