理解Avalon总线的静态地址对齐与动态地址对齐
2014-05-16 16:26
330 查看
尽管看了不少资料,但是一直对 Avalon slave 的动态地址对齐和静态地址对齐的理解不是很透彻。前两天自己做了一个SOPC的自定义组件,通过Deprecated这个选项的不同选取,一下子就理解了Avalon slave的两种地址对齐方式之间的区别。
下面以Altera提供的PWM自定义外设的例子,介绍两种地址对齐方式的区别。该例子有所改动,源代码中的32-bit的接口被改成了8-bit的接口,如果不这样改动的话,接口是32位,就不存在动态和静态对齐之分,动态对齐和静态对齐都是对于数据总线小于32-bit位宽的slave而言。
上图是在制作自定义PWM组件时,在Deprecated选项框中,Slave addressing选择DYNAMIC。
上图是在制作自定义PWM组件时,在Deprecated选项框中,Slave addressing选择NATIVE。
上图中,把两个自定义组件同时添加到系统中。由图中可以看出,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动态地址对齐和静态地址对齐的差异。
下面以Altera提供的PWM自定义外设的例子,介绍两种地址对齐方式的区别。该例子有所改动,源代码中的32-bit的接口被改成了8-bit的接口,如果不这样改动的话,接口是32位,就不存在动态和静态对齐之分,动态对齐和静态对齐都是对于数据总线小于32-bit位宽的slave而言。
上图是在制作自定义PWM组件时,在Deprecated选项框中,Slave addressing选择DYNAMIC。
上图是在制作自定义PWM组件时,在Deprecated选项框中,Slave addressing选择NATIVE。
上图中,把两个自定义组件同时添加到系统中。由图中可以看出,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动态地址对齐和静态地址对齐的差异。
相关文章推荐
- a2a4 关于AVALON总线动态地址对齐
- 关于AVALON总线动态地址对齐
- avalon 总线时序关系理解
- NIOS II 自定义IP核的静态地址对齐和动态地址对齐
- 关于 avalon总线理解(整理)
- 结构体变量对齐的理解,不同的对齐方式,造成不同的内存划分,从而满足不同平台的读写效率.
- 基于AVALON总线的IP核定制 PWM
- 每天进步一点点------SOPC的Avalon-MM IP核(一) avalon总线的信号时序
- 对I2C总线时序的一点理解以及ACK和NACK(NAK)
- I2C总线之(三)---以C语言理解IIC
- 对I2C总线协议的一些理解
- Nios II Avalon MM 外设地址对齐
- 关于NIOS中Avalon总线的问题分析
- 从需求的角度去理解Linux系列:总线、设备和驱动
- 深刻理解Linux总线设备驱动框架,才能驾驭Linux驱动开发
- 有关数据对齐的初步理解
- 从需求的角度去理解嵌入式Linux:总线、设备和驱动
- 以系统观点理解总线、接口(端口)、适配器和控制器(REV#3)
- c/c++中内存对齐完全理解
- 以C语言的方式理解IIC总线