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

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

3天内不再提示

地址边界与地址对齐

jf_78858299 来源:芯工阿文 作者:芯工阿文 2023-01-21 16:39 次阅读

数据传输是基于地址进行的。在分析和设计微架构时,除了地址域之外,如何选择地址信号,我觉得也是值得注意的问题。

地址边界

还记得刚开始工作时,被安排维护AXI总线重排序的公共模块,当时有一个地址对齐的概念,如64Byte地址边界、128Byte或者256Byte地址边界,那会花了有一段时间才搞清楚,但也仅仅是搞清楚,也不清楚引入这一概念的原因,能解决哪些问题。

所谓地址边界,若某地址能够被一整数除净,该地址就称为整数对应的地址边界。在系统内都是以0/1的二进制,这一整数一般指的是2的幂次方,如4、8、16、64、128等等。举例来说,0x200, 0x240, 0x880等等都是64Byte地址边界;0x200,0x880是128Byte地址边界,但0x240不是128Byte地址边界。再谈谈CacheLine的概念。为提升系统访问内存的速度,通常会引入缓存Cache,也就是将Memory的内容先搬运到CPU附近。这一缓存是以块为单位的,需要访问时,则先将对应的缓存块搬运到Cache内。这一缓存块就称为CacheLine,是缓存Cahe管理的最小单位,可基于系统需求选择大小,如64Byte或128Byte,甚至是4KByte。每个CacheLine,除了存储其本身的数据之外,还需要记录其地址、是否修改等等额外信息。粒度越小,记录额外信息的资源占比越大;粒度大了,又会对数据的利用率下降;具体大小则需基于需求来确定,如对于AI/GPU计算,可考虑使用4KByte的Caheline。

地址对齐

在考虑微架构设计和软硬件接口时,访问Memory尽可能按照整块地址的访问,地址边界对齐,尤其是写操作。在一般的CPU计算机系统,采用的地址边界大小至少为64Byte,使用更大的区间,如128Byte/256Byt,在一些场景也是能够带来收益的。

数据总线利用率

系统互联总线的位宽较大,如128、256、512bit,甚至2048bit。但是,每一拍数据的地址并不是随机,而必须基于一定规则排列,参考AXI协议,如256bits的数据位宽,其地址低位必须是0-31。传输32Byte数据,若起始地址为32Byte边界对齐,1拍可以传输完成,利用率为100%,否则需要占用2拍,其利用率只有50%。

图片

对于PCIe数据传输来说,其数据长度单位为DW,即4Byte,因此由于地址边界不对齐带来的影响比较小。

Full/Partial Write

系统存在CacheLine的定义,若访问操作为整CacheLine的写操作,则称为Full Write,否则为Partial Write。举例,CacheLine为64Byte,若访问地址低6位为0,长度为64Byte,就是Full Write;低6位不为0,或长度不为64Byte整数倍,则存在Partial操作。非地址对齐的访问操作,容易造成Partial Write,引入性能问题。

Read-modify-write

对于Cache、DDR,或者其余类似的Memory系统,存在最小操作粒度的概念。若写访问操作小于该最小操作粒度,则需要引入Read-modify-write。将对应地址的数据块读取出来,进行修改,再将数据写入对应地址,需要占用读通道的带宽。对于地址对齐的整块访问,直接写入即可。

DMA的地址选择

Host与PCIe Device之间大量数据的传输,基本都是由DMA(Direct Memory Access)完成的。简单来说,DMA就是从一个地址(源地址)读取连续的数据,再写入到另一个地址(目的地址)。硬件逻辑提供源地址、目的地址和搬运长度的软件编程接口,再被软件进行调用。复杂一些的硬件实现,还可以支持描述符、链表、搬运方式配置和其余系统属性的配置等等特性,如支持完成中断。

至于对数据搬运的地址选择,则是由调用DMA的软件进行控制的,但是也会受到上下游模块的约束,如Device侧的硬件引擎模块等等。

在考虑DMA数据流时,需基于系统层面对各模块的数据访问需求进行设计,尽可能使得DMA在Host和Device之间的数据搬运是地址边界对齐的。这一对齐包含两个方面,一是访问Device/Host的读写访问是基于地址边界对齐,二是源地址和目的地址的低位是相等的。两者其实是类似的,没有满足后者,也会引入大量的非地址对齐的操作。至于后者的地址低位,则需基于硬件实现进行考虑,考虑点就是上面描述的几点要素。

再来看看第二方面引入的逻辑复杂度,源地址和目的地址的低位相等。考虑源和目的方向使用了AMBA总线,数据位宽为512bit/64Byte,若需支持地址不对齐的场景,则需要512个64bit位宽的MUX;若仅需支持地址的低6bit相等,则完全不需要进行移位处理;若仅需支持地址的低2bit性能,硬件逻辑规模也减小为512个16bit位宽的MUX。大量的MUX逻辑也容易引入Congestion风险,需要做额外的优化处理。

图片

结语

地址对齐的概念非常简单,但容易被忽略。对于软件人员来说,DMA就是应该支持任意地址到任意地址的数据搬运;但对硬件设计来说,可能需要付出很大的代价才能达成要求。可以考虑做一些折衷,软件做一些简单修改,使用地址对齐的数据搬运,硬件实现侧对地址对齐的操作进行尽量的优化,而对非地址对齐的做一些简化处理,不考虑性能但满足功能,达到较优的PPA。

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

    关注

    9

    文章

    1880

    浏览量

    64554
  • 地址
    +关注

    关注

    1

    文章

    32

    浏览量

    10763
  • 微架构
    +关注

    关注

    0

    文章

    22

    浏览量

    7043
收藏 人收藏

    评论

    相关推荐

    购买海外虚拟IP地址可以通过以下几种方式#虚拟IP地址

    ip地址
    jf_62215197
    发布于 :2024年08月16日 07:16:04

    如何实现局部数组的地址对齐

    Hello我想使局部数组地址128字节对齐,不知道在C6000平台,CCS5.5上,能否实现。全局变量,用DATA#pragma DATA_ALIGN(arr,128),但是不知道局部数组如何实现地址
    发表于 08-27 10:22

    【工程源码】NIOS II 自定义IP核的静态地址对齐和动态地址对齐

    本文和设计代码由FPGA爱好者小梅哥编写,未经作者许可,本文仅允许网络论坛复制转载,且转载时请标明原作者。如果使用静态地址对齐(每个寄存器在Avalon总线上占4个字节的地址)设置IP使用静态
    发表于 02-27 19:20

    探讨一下地址边界地址对齐的概念及其选择

    数据传输是基于地址进行的。在分析和设计微架构时,除了地址域之外,如何选择地址信号,我觉得也是值得注意的问题。地址边界还记得刚开始工作时,被安
    发表于 09-07 14:41

    请问MDK怎么让一个函数对齐到1K地址边界

    RT,需要运行时删除部分函数,怎么让它对齐在flash扇区边界上?
    发表于 11-03 07:49

    IP地址,IP地址是什么意思

    IP地址,IP地址是什么意思 基本定义 IP地址都是一个十分重要的概念,INTERNET的许多服务和特点都是通过IP地址体现出来的。
    发表于 04-03 15:12 1671次阅读

    ATM地址,ATM地址是什么意思

    ATM地址,ATM地址是什么意思 异 步传输模式(ATM)使用地址来确定和定位ATM设备。在ATM中,地址是呼叫建立过程中通过UNI信令确定的,然后据此寻找合
    发表于 04-06 16:00 1526次阅读

    基于ARM程序的字节对齐的分析

    首先说说,什么叫对齐。如果一个数据是从偶地址开始的连续存储,那么它就是半字对齐,否则就是非半字对齐;半字对齐的特征是bit0=0,其他位为任
    发表于 09-19 16:04 0次下载

    mac地址和ip地址是什么决定的

    IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的
    发表于 03-07 17:14 7727次阅读
    mac<b class='flag-5'>地址</b>和ip<b class='flag-5'>地址</b>是什么决定的

    什么叫偏移地址_偏移地址怎么计算

    本文开始介绍了什么是偏移地址或概念,其次介绍了偏移地址的计算方法及段地址和偏移地址计算规律,最后介绍了获取C++类成员变量的地址偏移方法。
    的头像 发表于 04-16 09:42 10.7w次阅读
    什么叫偏移<b class='flag-5'>地址</b>_偏移<b class='flag-5'>地址</b>怎么计算

    一个跟地址对齐有关的应用异常案例

    也就是说,基于CortexM3内核的芯片,它支持部分指令的非对齐访问,但非对齐访问要慢于对齐访问。即非对齐访问是需要代价的,访问效率会受到影响。所以,我们在应用中要尽量遵循
    的头像 发表于 02-04 15:20 2560次阅读
    一个跟<b class='flag-5'>地址</b><b class='flag-5'>对齐</b>有关的应用异常案例

    工程师笔记|一个地址对齐引起的 HardFault 异常

    关键词:地址对齐,Hardfault,STM32G0 目录预览 1. 概述 2. 问题描述与分析 3. 问题解决 4. 总结 1.概述 客户在使用 STM32G070 的时候,KEIL MDK 为
    的头像 发表于 02-10 11:05 2235次阅读

    一个地址对齐引起的HardFault异常

    一个地址对齐引起的 HardFault 异常
    的头像 发表于 09-18 10:57 786次阅读
    一个<b class='flag-5'>地址</b>未<b class='flag-5'>对齐</b>引起的HardFault异常

    AXI总线:读写地址结构

    。 控制信息以及起始地址在读/写地址通道(AWC/ARC)传输。 注意:单次 burst 传输中的数据,其地址不能跨越 4KB 边界。 关于这点在笔者参考的一个来源这样表示,目前笔者觉
    的头像 发表于 10-31 16:06 1012次阅读
    AXI总线:读写<b class='flag-5'>地址</b>结构

    怎么绑定IP地址和MAC地址

    本篇文章主要说一说怎么在本地计算机上绑定IP和MAC地址以及通过路由器绑定IP和MAC地址,并且这两者绑定可以解决什么问题。   先来说说怎么去绑定 本地计算上绑定IP和MAC地址: 首先获取IP
    的头像 发表于 12-01 22:48 210次阅读