在Avalon-MM接口规范中,有两种地址对齐方式:Native Address Alignment和Dynamic Bus Sizing。 riple
引入地址对齐的机制是为了解决主设备和从设备数据宽度不一致的问题。当主从设备数据宽度不一致时,主设备数据的宽度可能是从设备数据宽度的几倍或者几分之一。 riple
解决这一问题可以有两种方法: riple
1. 主设备一次访问固定地对应从设备一次响应,有效数据取二者之中最窄的。当主设备宽于从设备时,主设备可以访问全部的从设备数据;当主设备窄于从设备时,主设备只能访问从设备的部分数据。 riple
2. 主设备一次访问对应从设备的多次响应或几分之一次响应,有效数据取二者之中最宽的。当主设备宽于从设备时,主设备一次访问对应从设备的多次响应;当主设备窄于从设备时,主设备多次连续地址访问对应从设备一次响应,或者是主设备一次访问对应从设备一个地址对应数据的一部分。 riple
显然,前一种解决方法不能适用于主设备数据宽度窄于从设备数据宽度的情况。 riple
在自己动手连接宽度不同的主从设备时,对于前一种解决方法,可以通过硬连线实现窄数据向宽数据接口的映射。对于后一种解决方法,当主设备宽于从设备时,需要在从设备中用有限状态机(或功能等价的逻辑)来实现自发的多次响应;当主设备窄于从设备时,需要在主设备接口中增加一组字节使能信号,实现部分数据的选取。 riple
在Avalon-MM系统互连结构中,前一种解决方法对应Native Address Alignment,即从设备一个地址对应主设备一次访问,在主设备看来,从设备地址是和主设备的访问边界对齐的,系统互连结构通过硬连线实现窄数据对宽数据的映射。后一种解决方法对应Dynamic Bus Sizing,当主设备宽于从设备时,系统互连结构通过有限状态机实现对从设备的多次访问,不需要在从设备中实现数据宽度调整逻辑;当主设备窄于从设备时,系统互连结构采用从设备的字节使能信号或通过硬连线选取从设备接口的部分数据,只需要主设备连续发起多次访问即可,不需要主设备提供多余的位使能控制信号。 riple
由于主设备可以不实现数据宽度变换逻辑,一个主设备可以访问多种数据宽度的从设备而不需要重新调整接口逻辑;同理,一个从设备可以支持多种数据宽度的主设备而不需要重新调整接口逻辑。这就是Avalon-MM接口的优点:通过自动的互连逻辑生成功能,提高了主从设备的可重用性。 riple
从数据的角度看来,Dynamic Bus Sizing可以保证从设备数据和主设备地址的一一对应,Native Address Alignment是不恰当的,浪费主设备的地址空间,传输效率也低;但是从访问次数的角度看来,Native Address Alignment可以保证主设备访问次数和从设备访问次数的一一对应,Dynamic Bus Sizing会带来对从设备多余的访问。到底选择哪种方式,是由从设备决定的。在寄存器类型的从设备中,一次访问不仅仅涉及到数据,还影响到其他的逻辑,多余的访问是不可接受的;在存储器类型的从设备中,访问仅仅影响到数据本身,多余的访问是允许的,并且可以提高传输效率。 riple
所以,采用哪一种地址对齐方式是由从设备的属性决定的;主设备无权决定采用哪种地址对齐方式,但是主设备需要明确当前被访问的从设备采用的地址对齐方式,以确定一次访问的有效数据宽度和位置。 riple
今天就写到这,为了说清地址对齐这个概念,我对上面文字的表述方法作了三次大的修改,最终才确定了现在的写法。在修改的过程中,我也逐步加深了对这一概念的理解,许多以前似是而非的理解,现在都逐渐明确了。写作真的是“最有效的学习方式”。 riple
总结一下: riple
0. 数据宽度不一致也就是地址无法自然对齐,需要约定对齐方式。除了数据宽度不一致的情况外,数据字节的排列顺序问题(大小端问题)也是地址对齐的问题。Avalon-MM默认采用小端方式对齐。 riple
1. 地址对齐方式就是从设备的地址在主设备地址空间的排列方式。 riple
2. 地址对齐有两种方式:按照地址映射(Dynamic Bus Sizing),从设备地址在主设备的地址空间是连续排列的;按照访问映射(Native Address Alignment),从设备地址在主设备的地址空间是不连续排列的,按照主设备的访问单位小端对齐。 riple
3. Avalon-MM系统互连结构支持上面两种映射,不需要主、从设备实现数据宽度调整功能。 riple
4. 采用哪种方式由从设备的属性决定,从设备需要(在Component Editor中)声明自己支持的地址对齐方式,主设备需要明确被访问的从设备采用哪种地址对齐方式。 riple
5. Dynamic Bus Sizing适用于任何形式的主从设备数据宽度比,Native Address Alignment只适用于主设备数据宽度大于等于从设备的情况。 riple
托尼杰克马 2022-10-29 14:45
用户1571372 2012-3-20 11:04
ash_riple_768180695 2007-6-19 10:26
用户1053025 2007-6-19 10:10
用户936143 2006-10-25 13:50
开发工具不一样,GTK主要采用c语言开发,而GTK++采用c++开发。此外,它们所用的库也不一样。
用户65733 2006-10-24 18:54