注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
tx_xy的个人空间 https://home.eeworld.com.cn/space-uid-216158.html [收藏] [复制] [分享] [RSS]
日志

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

已有 2429 次阅读2010-5-5 18:36

尽管看了不少资料,但是一直对 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动态地址对齐和静态地址对齐的差异。

发表评论 评论 (1 个评论)
回复 zhangkun2012 2012-7-10 11:26
你好,你这个博客看不了图片啊

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章