虽然Nios II CPU是32位构架,但是Avalon总线作为一种开放的总线结构,为了兼容各种位宽的CPU和外设,Avalon Interconnect Fabric地址总线使用的是字节寻址的方式,也就是A0地址一定指向外设的某个字节(但是不一定和外设地址线的A0连接,详后);而不是同CPU宽度的某个32bit空间。
所以,在自定义Avalon MM外设的时候,如果是Avalon MM Master,地址线一定是32根,最低位寻址到一个字节(不一定会用到~~)。
首先注意到Avalon MM Slave可以声明自己采用的地址对齐方式有两种:Native alignment 和Dynamic Alignment。
动态地址对齐方式是将MM从设备的地址空间连续地映射到主设备空间。内存类型的从设备控制器应该采用这种方式。在这种方式下,主设备的每一次读传输(或写传输)对应从设备一次或多次读传输(或写传输)。譬如,主设备数据宽度为32bit,从设备为16bit,则主设备每发起一次读传输,从设备将被读两次,用于返回32bit数据(由Avalon Interconnect Fabric逻辑插入状态机实现,用户无需关心具体实现),同理,每一次写操作,从设备执行两次写入操作。Dynamic对齐方式数据宽度限定为8*2^n次方,即只能为8 16 32 64等值。
源生地址对齐方式将从设备的自然数据宽度(即从设备DATABUS宽度)映射到主设备的单位数据宽度(即主设备的DATABUS宽度),假设主设备宽度为32比特,从设备为16比特,且假设从设备的0x00映射到主设备0x00;则从设备的0x02映射到主设备的0x04。寄存器表类型的外设可以考虑使用这种对齐方式。在这种对齐方式里面,主设备发起的每一次读传输(或写传输),只会对应从设备的一次读传输(或写传输),如果主设备数据宽度大于从设备,那么高位内容被零填充,如果主设备宽度小于从设备,则高位自动被抛弃(Truncated)。
那么,如果要书写这些不同方式的外设,应该如何设定Avalon MM Slave控制器的地址线和可选的byteenable信号呢?其实,对于每一个从设备,地址线的最低位指向从设备单位数据宽度(one word)。在这里,word大小可以是8,16,32,64….而不用担心外设是用Dynamic还是Native地址对齐。
如果是Dynamic外设,为了方便不同数据宽度的主设备读取,最好包含byteenable信号。byteenable信号为one hot编码,每一根信号线(lane)对应一个字节。信号的宽度取决于从设备数据总线的宽度,如果为16,则byteenable信号宽度为2.;如果为32bit,则byteenable信号宽度为4。这样在SOPC Builder生成系统的时候,Avalon Interconnect Fabric会自动适配这些信号线到具体的Fabric地址线,譬如外设宽度为16,则从设备控制器的A0连接到Fabric的A1。而Fabric的A0会看外设是否声明了byteenable信号,如果存在,则将A0译码成2bit宽度的Byteenable信号(并连接到外设声明的byteenable信号)。如果没有,则Fabric A0没有连接。
如果是Native外设,从设备的地址线连接到内部Fabric的方式和Dynamic是一致的,只是没有了byteenable信号,以及低位地址线的译码。
在SOPC Builder里面用component editor添加组件的时候,在Interface选项卡里,每个Avalon MM栏里面都有一个Deprecated子栏目,展开它,选择Slave Addressing的方式为Dynamic。如果是内存,还要勾选Memory Device。这个选项卡还真的有些猥琐,不注意还看不到,不过没办法,人家都说了是Deprecated。
在Nios II EDS里面,提供两类IO指令来直接存取DYNAMIC外设和NATIVE外设,如下图:
IORD和IOWR直接指定外设的基地址和偏移量,这个偏移量的话是Width of
BUS的整数倍,也就是说,如果CPU为32bit宽度,则单位偏移量就是4个字节,也就是,写REGNUM==0的寄存器就是基地址的寄存器,REGNUIM==1的话就是第二个寄存器,地址的话自然是BASE_ADDR+4。
而IORD_8DIRECT读取的正如后面所说,是BASE_ADDR+OFFSET位置的一个字节。
不过我比较奇怪的是,如果我用IOWR_32DIRECT(BASE,2,DATA)之类的指令会出现什么后果呢,也就是说,BASE+OFFSET不是4的整数倍,但是却想去读取一个32bit的数据。感觉这种情况硬件是不支持的。。。
来自: http://hi.baidu.com/narshben/blog/item/3692c21f398df8c6a6866956.html
查了下资料很多都是如下: 1. this.$options.data() 这个可以获取原始的data值,thi […]...
自定义IP之——Avalon MM slave 接口的IP 读数据(readdata)的控制 在 设计 ava […]...
Avalon 总线广泛应用于外设和软核或者硬核交互,其时序简单明了,也非常适合用来作为划分模块的接口信号。 […]...
转载至-->http://www.cnblogs.com/smile-ls/archive/2013/0 […]...
在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上 […]...
==================转自友人blog================ 国学大师王国维先生认为 […]...
奈奎斯特采样定理部分 一、概述 在数字信号处理领域中,采样定理是连续时间信号(通常称为“模拟信号”)和离散时间 […]...
单项联表和双向联表的区别 Reference:【https://blog.csdn.net/kangxidag […]...
笔记 J2EE涉及的技术很多,我们只需要重点学习其中的一部分技术就可以了,对于其他部分只要做到心中有数,哪天需 […]...
上一章注册完小程序,添加新建的项目,大致的准备开发已经完成,本章要分享的是要创建一个简单的页面了,创建小程序页 […]...
1. 比特币记账 每个数据块规定1M,10分钟翻页,记账奖励+手续费,每个数据块存储着上个数据块头的 […]...
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs […]...
最近朋友嫌弃自己笔记本机械硬盘太慢,在我的蛊惑下买了块固态硬盘,想改善一下开机时间,本来以为很简单的事,没想到 […]...
Audio Firefox:支持 Ogg Vorbis和WAV Opera :支持Ogg Vorbis […]...
unicornviewer(PDG浏览器)! 附件:unicornviewer.rar...
ServerBootstrap的构造: 1 public class ServerBootstrap exte […]...
Powered By WordPress