理解Avalon总线的静态地址对齐与动态地址对齐

来源:互联网 发布:淘宝的快递为什么便宜 编辑:程序博客网 时间:2024/05/21 14:49
尽管看了不少资料,但是一直对 Avalon slave 的动态地址对齐和静态地址对齐的理解不是很透彻。前两天自己做了一个SOPC的自定义组件,通过Deprecated这个选项的不同选取,一下子就理解了Avalon slave的两种地址对齐方式之间的区别。

下面以Altera提供的PWM自定义外设的例子,介绍两种地址对齐方式的区别。该例子有所改动,源代码中的32-bit的接口被改成了8-bit的接口,如果不这样改动的话,接口是32位,就不存在动态和静态对齐之分,动态对齐和静态对齐都是对于数据总线小于32-bit位宽的slave而言。

b6518765-0b94-48e7-a380-806145e08e2d.JPG

上图是在制作自定义PWM组件时,在Deprecated选项框中,Slave  addressing选择DYNAMIC

b626f762-7702-4ea7-a198-adcdd39984fc.JPG

上图是在制作自定义PWM组件时,在Deprecated选项框中,Slave  addressing选择NATIVE。

7c8b6d30-61cf-4519-8af3-239a490e04df.JPG

上图中,把两个自定义组件同时添加到系统中。由图中可以看出,pwm_avalon_interface_dynamic_0这一外设的地址空间为0x00000800 — 0x00000803,共4个字节;而pwm_avalon_interface_native_0这一外设的地址空间为0x00000804 — 0x00000813共16个字节。

分析:在pwm_avalon_interface.v文件中,Avalon总线的地址宽度为2-bit,因此一共会有4个数据。在使用动态地址对齐方式的时候,地址的增长方式以8-bit为单位增长。这种方式的优点是可以得到一个连续的存储器空间,但缺点是当32-bit的NIOS II core 对该外设每进行一次操作,则物理上相当于对该外设进行了4次操作,大部分寄存器类型的slave器件都不能容忍。在使用静态地址对齐方式的时候,地址的增长以32-bit位单位增长。这种方式的缺点是相对于同样的外设,他需要更大存储空间,优点是每对该器件进行一次操作,实际的每次读写也的确只有一次,没有额外的副作用。当一个32位的Nios II core读一个8位宽的slave时,其获得的32位数据低8位从slave获取,而高24位则没有定义。同样,当它读16宽的slave时,其获得的32位数据低16位从slave获取,而高16位则没有定义。当Nios II core想继续读下一个8位(或16位)时,则需要增长字节地址4。除非你一定需要一个连续的地址空间,否则使用静态地址对齐方式是比较保险的方式。

结论:在做自定义组件时,同样的代码,地址对齐方式选择的不同,得到的自定义组件占用的存储器空间大小有所区别,通过这一细微的区别,可以很直观的看出Avalon动态地址对齐和静态地址对齐的差异。
0 0
原创粉丝点击