原创 Avalon-MM读时序设置之Read Wait分析

2009-2-15 12:09 6826 7 8 分类: FPGA/CPLD

SOPC Builder利用Avalon总线协议建立外设与NiosII的通信,最直接的好处是,它省去了FPGA开发人员编写NiosII与外设连接的TOP EntityHDL代码。当然还有其他的好处,例如自动生成裁决器,用于多个主设备Master访问同一个外设时,并且可以时分复用的方式设置Master的优先级;当Avalon-MM位宽与外设位宽不一致时,SOPC自动完成其时序转换。


言归正传,具体Avalon-MM Slave的时序该如何设置呢?尤其是Read Wait


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


fae6d4e2-9336-4b96-9b56-89b4a863f079.JPG


* Minimum arbitration shares:可以由多少个Master访问;


先看下面这个时序图:



点击开大图


上述时序的Read Wait1Cycles


A:读周期开始;


B:输出地址、字节使能、读使能信号;


C:置位片选信号;


D:第一个等待周期结束(Read Wait: 1Cycles,也即等待周期结束,在下个时钟上升沿读入Readdata),锁存地址、字节使能等信号;


E:外设送出Readdata


F:锁存Readdata,读周期结束;


再看下面这个时序图:



点击开大图


上述时序的Read Wait2Cycles


A:读周期开始;


B:输出地址、字节使能、读使能信号;


C:置位片选信号;


D:第一个等待周期结束(Read Wait: 2Cycles,还有一个等待周期),锁存地址、字节使能等信号;


E:第二个等待周期结束(等待周期结束,在下个时钟上升沿读入Readdata)


F:外设送出Readdata


G:锁存Readdata,读周期结束;


经过上述描述,我们应该知道Read Wait如何设置了,但是我们想一想,如果这个值设置错误时,是如何表现的?我说说我现实遇到的问题。


有一个自制外设,完成对一个数据流的特殊段进行过滤并把该段数据放在On-Chip RAMRAM的数据读出接口是带寄存器输出,NiosII可以通过Avalon总线对RAM读,在读周期中的第三个时钟上升沿可以读入Readdata,也即Read Wait2Cycles。但是很不幸,我设置为Read Wait1Cycles


假设在RAM的零偏移地址开始,放着0x111111110x222222220x333333330x44444444,用Memory Monitor观察得到的却是:0xXXXXXXXX0x111111110x222222220x333333330x44444444。利用C将上述地址将16Bytes读入时,得不到正确数据。但是我们可以通过下述方法读入正确16Bytes数据:


A)    先读一遍零偏移地址,再从零到三将16Bytes读入;


B)     将零到四偏移地址20Bytes读入,截取后16Bytes读入;


C)     最正确的方法,Read Wait2Cycles


为什么会造成上述现象呢?当我们第一个读周期完成时,0x11111111刚刚锁存在RAM的输出寄存器上面,但是没有被NiosII读入;当第二个读周期完成时,0x22222222也刚刚锁存在RAM的输出寄存器上面,而此时NiosII读入的是0x11111111;周而复始,就造成了上述现象的发生。


总结,在读此篇文章之前,相信很多人就知道Read Wait如何设置,在这里长篇叙述,是想给自己的错误一个彻底的交待,避免再次发生。


参考文献:


Altera公司     Avalon Memory-Mapped Interface Specification.pdf

文章评论1条评论)

登录后参与讨论

用户1278632 2011-1-28 22:14

在一系统中,SDRAM 控制器 挂在Avalon-MM Slave上,但有两个Master要访问它,一个是NIOS CPU,一个是用户逻辑,不知如何设置它们的优先级,希望楼主指点一下。
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条