众所周知,绝大多数芯片的寄存器地址都是以0,4,8,c结尾,那为什么是以0,4,8,c结尾呢?这个问题在我刚参加工作后的一段时间一直没太搞明白,后来才逐渐有了一定的理解。
说到这个问题又必须提到计算机中数据存储的单位,分为位,字节,字。一个位代表一个bit,一个字节代表8位。严格来讲,字在不同的计算机中大小不同,在32位机中一个字是32bit,而在64位机中一个字是64bit,但有些资料中不论CPU的位数是多少,都认为16bit为一个字。
在我们常用的地址空间中,一个地址对应一个字节,称为字节地址。但由于我们是32位的寄存器,包含4个字节,所以就对应了4个地址,称为字地址空间。
那既然都是0,4,8,c结尾,地址的低两位都是0,那么这两个bit是不是就从来都是无效的呢?也不是,只是一般情况下我们的寄存器都是32位一起配置,那么这种情况下低两位是无效的,但我们如果是想在32位总线中实现字节地址空间,也就是8bit单独配置,就需要用到低两位进行32位寄存器中的字节选择。文章来源:https://www.toymoban.com/news/detail-805955.html
一个典型的应用例子就是AHB协议中HSIZE[2:0]信号的使用,HSIZE信号规定了每次传输的大小,从3'b0到3'b111分别对应了8到1024的传输,如果我们的HSIZE配置成3'b0或者3'b1时,就需要根据地址的低两位判断写到32位寄存器的那个字节,这里有涉及到了大小端的问题,小端就是低地址写到地位,高地址写到高位,大端与之相反。这种操作方式在AHB中也称为窄传输文章来源地址https://www.toymoban.com/news/detail-805955.html
到了这里,关于关于芯片寄存器地址的理解(字节地址,字地址)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!