Avalon总线的地址对齐与NIOS编程

首先关于地址对齐的概念我不详述了,大家可以参考这篇文章:Avalon总线的地址对齐:Dynamic Addressing和Native Addressing

假设我们定制了一个外设,数据宽度是32位,地址是2位。如果我们想让地址线干点其他的事,而不是传地址,例如:

1 if(cs&wr)
2 begin
3 case(addr)
4     2‘b00:  //自定义
5     2‘b01:  //自定义
6 endcase
7 end

那在Nios EDS中,如何确定addr呢?也就是说我们使用IOWR_32DIRECT(BASE, OFFSET, DATA)时,怎么确定OFFSET?

相信大家已经想到答案了,答案其实很简单:OFFSET为0x00对应addr为2‘b00,OFFSET为0x04对应addr为2‘b01,OFFSET为0x08对应addr为2‘b10,OFFSET为0x0C对应addr为2‘b11。

其他数据宽度也是一样,假设数据宽度是8位,地址是2位,IOWR_32DIRECT(BASE, 0x00, DATA)就是对应addr的2‘b00,IOWR_32DIRECT(BASE, 0x01, DATA)就是对应addr的2‘b01,其余类推即可。

还有一篇文章大家也可以参考一下:理解Avalon总线的静态地址对齐与动态地址对齐

时间: 2024-10-12 12:48:33

Avalon总线的地址对齐与NIOS编程的相关文章

Avalon总线的地址对齐与EDS编程

首先关于地址对齐的概念我不详述了,大家可以参考这篇文章:Avalon总线的地址对齐:Dynamic Addressing和Native Addressing. 假设我们定制了一个外设,数据宽度是32位,地址是2位.如果我们想让地址线干点其他的事,而不是传地址,例如: 1 if(cs&wr) 2 begin 3 case(addr) 4 2'b00: //自定义 5 2'b01: //自定义 6 endcase 7 end 那在Nios EDS中,如何确定addr呢?也就是说我们使用IOWR_32

Qsys自定义组件的开始-Avalon总线规范(中文)

学习FPGA这么长时间了,一直没有整理自己的学习内容,这回要把每一段时间的学习内容总结一下,就从自定义组件开始吧.一定要坚持下来呀!! Avalon 总线规范 参考手册   (Avalon从端口传输与流模式从端口传输部分)  //*************************************    http://www.altera.com 免责声明: 本手册原自Altera 公司发布的<Avalon Bus Specification-Reference Manual>,一切权力

关于 avalon总线理解(整理)

1,一个基于Avalon接口的系统会包含很多功能模块,这些功能模块就是Avalon存储器映射外设,通常简称Avalon外设.所谓存储器映射外设是指外设和存储器使用相同的总线来寻址,并且CPU使用访问存储器的指令也用来访问I/O设备.为了能够使用I/O设备,CPU的地址空间必须为I/O设备保留地址. 2,Avalon外设分为主外设和从外设,能够在Avalon总线上发起总线传输的外设是主外设,从外设只能响应Avalon总线传输,而不能发起总线传输.主外设至少拥有一个连接在Avalon交换架构上的主端

[C/C++]_[中级]_[数据地址对齐]

场景: 1. 有些频繁使用的指针变量地址不对齐的话运行效率和对齐后的运行效率差别很大,所以在创建堆空间时,有必要对内存地址对齐提高运行效率. 2. 有些音视频处理的代码或者说自定义的malloc基本都是地址对齐的. 3. 使用原子访问的互锁函数时,InterlockedExchangeAdd都需要地址对齐. 4. 主要还是宏APR_ALIGN, 这个说是Apache源码里,就借用一下吧. 解决方案: 1. 其实就是让地址值对对齐量求模为0, 地址值最多增加n-1个偏移地址就可就可以整出n.  &

Avalon总线学习 ---Avalon Interface Specifications

Avalon总线学习 ---Avalon Interface Specifications 1.Avalon Interfaces in a System and Nios II Processor 2.Avalon Interfaces in a System Design and External Processor 3.传统的读和写时序图 4.在slave端,读和写,被主设备设置了wait信号 5.Piplined 读数据,Latency可调 6. 7 8. 9. 10 11 12 13

嵌入式C语言自我修养 07:地址对齐那些事儿

7.1 属性声明:aligned GNU C 通过 attribute 来声明 aligned 和 packed 属性,指定一个变量或类型的对齐方式.这两个属性用来告诉编译器:在给变量分配存储空间时,要按指定的地址对齐方式给变量分配地址.如果你想定义一个变量,在内存中以8字节地址对齐,就可以这样定义. int a __attribute__((aligned(8)); 通过 aligned 属性,我们可以直接显式指定变量 a 在内存中的地址对齐方式.aligned 有一个参数,表示要按几字节对齐

地址对齐

ARM指令和51单片机指令不同,ARM所有指令的长度都是固定的,都是4个字节32位.而51单片机的指令的长度不是固定的,有单字节指令也有双字节指令. ARM的数据总线宽度也是32位的,所以ARM可以处理32位的数据,这就要求所有的数据也必须是存放在地址为4的整数倍的单元处. 正常情况下,R15中的值应该为4的整数倍,访问数据时给的地址也应该是4的整数倍.这种情况就是地址对齐.如果不满足这种情况,那么就是非地址对齐. 非地址对齐访问程序存储器: 当访问程序存储器时,所给的地址是非对齐的,那么对于A

C语言精要总结-内存地址对齐与struct大小判断篇

在笔试时,经常会遇到结构体大小的问题,实际就是在考内存地址对齐.在实际开发中,如果一个结构体会在内存中高频地分配创建,那么掌握内存地址对齐规则,通过简单地自定义对齐方式,或者调整结构体成员的顺序,可以有效地减少内存使用.另外,一些不用边界对齐.可以在任何地址(包括奇数地址)引用任何数据类型的的机器,不在本文讨论范围之内. 什么是地址对齐 计算机读取或者写入存储器地址时,一般以字(因系统而异,32位系统为4个字节)大小(N)的块来执行操作.数据对齐就是将数据存储区的首地址对齐字大小(N)的某个整数

【信息表示】地址对齐

本节研究地址对齐的相关问题: 地址对齐 说明几点: (1)地址对齐可以简化处理器和存储器系统之间的硬件设计:如果可以保证所有的int类型地址对齐成4的倍数,就可以使用一个存储器操作读或写值,相反如果一个int型的变量存放在奇地址上,那么要进行两次存储器读后进行拼凑成int型变量才可以: (2)在GCC中,2字节数据类型(如short)地址对齐必须是2的倍数,因此地址最低位必须是0,而较大的数据类型(如int.int*.float.包括long long.double.long double)的地