news 2026/8/4 18:37:00

AXI4访问之4K边界

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AXI4访问之4K边界


一、4K边界
1.在AXI4协议中,一个burst传输是不能跨越4K边界的,这个是由于slave设备通常是4KB对齐的,为了
避免一次burst传输跨越了两个slave的风险,所以有了这个规范
2.操作系统设计按照page分页来设计,确保数据传输和缓存操作遵循4K边界对齐可以提高系统性能,减少缓存一致性问题,并简化内存管理。这是因为许多缓存系统是基于缓存行进行操作的,如果数据跨越了缓存行边界,可能需要额外的处理来确保数据的一致性。

二、4K边界之于地址还是数据
AXI4的4K边界指的是地址,还是数据量,比如一组DDR有两片16bit位宽DDR芯片,这时候4K边界应该怎么算?
注意AXI的4K边界指的是地址,而不是数据量。
4K边界指的是地址的低12bit为全0的地址,这个是系统一个page的大小通常是4Kbytes.
对于一组DDR内存,如果有两片16位宽的DDR芯片,计算4K边界还是基于整个DDR内存的物理地址空间来考虑,而不是单个芯片的位宽或容量。一组两片DDR芯片是并行的,所以它们在逻辑上应该被视为一个连续的地址空间。
每个DDR芯片的地址空间中的4K边界地址点是由其物理地址决定的,而不是由芯片的位宽决定的。换句话说,无论数据总线宽度是多少,4K边界始终是由地址的低12位决定的。

三、设计跨越4K边界怎么样理解呢?
假设如果我们有一个起始地址0x00010000,那么4K边界地址将是0x00010000(低12位为000000000000),0x00020000,0x00030000等,这些都是4K对齐的地址点。
在进行突发传输时,我们必须确保起始地址和结束地址都在同一个4K页面内。
判断原则就是:
Start_Address / 4096 == (Start_address + (burst_size * burst_length)) / 4096
代码可以这样写:
wire assert_valid_transaction = start_ar_addr[ MSB : 12 ] == end_ar_addr[ MSB : 12 ];

注意:一个burst传输的首地址和结束地址要在一个4kbyte的page页内。

四、PL的DDR和PS的DDR
1.pl的ddr不需要遵守4Kbyte边界,PS的ddr需要,ps的ddr是要过arm,arm操作系统有限制。

参考:https://www.cnblogs.com/xtt1993/p/19111276

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/4 5:48:12

libxslt XSLT转换库:鸿蒙PC上的XML转换工具

ohos-libxslt 是为 OpenHarmony 平台编译的 libxslt XSLT 转换库。本文档详细介绍如何在鸿蒙PC上安装和使用官方适配完成的 libxslt 库,包括 HNP 包的打包、安装和使用方法。 📋 目录 一、项目概述二、为什么需要 HNP 包三、HNP 包打包方法四、安装与使…

作者头像 李华
网站建设 2026/8/4 5:48:28

GPU算力租赁推荐:低成本训练YOLO大模型

GPU算力租赁推荐:低成本训练YOLO大模型 在智能制造、自动驾驶和智能安防等领域,目标检测早已不再是实验室里的概念,而是实实在在推动产业升级的核心能力。面对海量视频流的实时分析需求,系统不仅要求高精度识别,更对响…

作者头像 李华
网站建设 2026/8/4 5:48:34

VonaJS是如何做到文件级别精确HMR(热更新)的?

NestJS:项目级别HMR 如果使用过NestJS,就会知道NestJS是基于整个项目实现HMR(热更新)的。大致流程如下:当一个源码文件变更时,系统会自动将文件重新编译输出到dist目录,然后重启App。当项目非常…

作者头像 李华
网站建设 2026/8/4 5:47:59

口碑好的货架哪里有好的

口碑好的货架哪里有?答案在这里!在仓储物流、商业零售等众多行业中,选择一款口碑好的货架至关重要。它不仅关系到货物的存储效率,还影响着企业的运营成本和管理水平。那么,口碑好的货架哪里有呢?专业货架工…

作者头像 李华
网站建设 2026/8/4 14:43:02

pytorch框架训练、推理、模块冻结等各种细节说明

1.张量的requires_grad属性 import torch x = torch.randn(3, 3, requires_grad=False) y = x * 2 # y = 2x y.requires_grad=True z = y.mean() # z=(1/9)*(2x),微分是dz/dx = 2/9 # z=(1/9)*y,微分是dz/dy = 1/9 z.backward()print(x,x.requires_grad) print(y…

作者头像 李华
网站建设 2026/8/4 13:15:56

Java毕设项目推荐-基于Java语言的茶叶销售系统的前端设计与实现基于SpringBoot+Vue茶叶销售系统的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华