【Avalon总线】2.avalon总线MM从设备
来源:互联网 发布:淘宝猫胡子是假货吗 编辑:程序博客网 时间:2024/06/04 23:18
1 Avalon内存映射接口
Avalon内存映射接口是主从设备基于地址读写的接口。在这个接口的定义中也能够看到Avalon内存映射接口应该存在两种类型的接口,分别是Avalon内存映射主接口和Avalon内存映射从接口,以下用主接口和从接口代替。主接口和从接口有自身的信号,在实际应用中只需要选择组件中逻辑所需要的信号即可。
2 Avalon内存映射从接口
2.1 Avalon内存映射从接口信号
首先介绍从端口的信号。从端口的信号在下表中显示,只读从端口最小接口只需要readdata信号,只写从端口最小接口只需要writedata和write。
信号
宽度
方向
描述
read
read_n
1
输入
读请求信号。如果该信号存在,那么需要readdata
write
write_n
1
输入
写请求信号。如果该信号存在。那么需要writedata
address
1-32
输入
指定从地址空间偏移量。如,当address=0,则指向第一个<从机数据宽度>位,address=1,这指向第二个<从机数据宽度>位。
readdata
8,16,32,
64,128,
256,512
1024
输出
读过程读出的数据
writedata
8,16,32,
64,128,
256,512
1024
输入
写过程从总线上传输过来的数据,数据的宽度需要和readdata的宽度相同。
byteenable
byteenable_n
1,2,4
8,16,32,
64,128
输入
读写过程中字节使能信号。在读过程中指定那些字节的信号能够被读取,在写过程中指定哪些字节能够被写入。
begintransfer
1
输入
在每个读写周期开始时由总线置位。
waitrequest
waitrequest_n
1
输出
当从设备无法回复读过写请求时,该信号置位。当该信号置位的时候,除了begintransfer和beginbursttransfer信号之外的信号保持原值。
readdatavalid
readdatavalid_n
1
输出
用于可变延迟,流水式读取过程。当有有效信号响应先前的请求时,该信号置位。
burstcount
1-32
输入
用于计算突发传输的次数。
beginbursttransfer
1
输入
用于显示突发传输何时开始进行。在一个周期后置无效。
readyfordata
1
输出
用于表示设备已准备好写入
dataavailable
1
输出
用于表示设备已准备好读取
resetrequest
resetrequest_n
1
输出
复位请求
2.2 Avalon内存映射从接口时序
Avalon内存映射接口遵循同步协议,所以Avalon内存映射接口基本上都和时钟复位接口配合使用。
一次传输是一个word的读写,word的位宽在8-1024bits,一次传输过程需要一个或者多个时钟周期完成。
2.2.1 典型的从设备读写
本小节介绍由waitrequest控制的读写传输过程。读写过程需要同时受waitrequest控制,不可以只有其中一个受waitrequest控制。
从设备在时钟上升沿得到总线上的address, byteenable, read或者write和writedata。此时需要在下一个时钟上升沿之前置位waitrequest以保持传输,地址和控制信号保持原值。传输会在waitrequest失效后的下一个时钟上升沿时结束。(注意不要一直置位waitrequest,否则传输将无法结束)。
图1 典型的从设备读时序图
图2 典型的从设备写时序图
2.2.2 有固定等待时间的从设备读写
传输等待时间指的是地址有效和进行数据读写之间的时间差,在等待过程中保持地址等信号不变。除了用waitrequest来设定传输等待时间,还可以用readWaitTime和writeWaitTime来达到同样的效果。设置readWaitTime和writeWaitTime为N等效于在每个传输周期过程中置位waitrequest信号N个周期。
图3 有固定等待时间的从设备读传输时序图
图4 有固定等待时间的从设备写传输时序图
2.2.3 流水从设备传输过程
流水传输过程仅适用于读过程。流水传输过程能够增加吞吐量,达到更高的速度。这些设备往往在开始第一次数据传输之前需要多个周期,而之后的每个周期都可以得到一个数据。在得到readdata之前可以开始新的流传输过程。流传输延迟的定义是在获得地址之后,在几个时钟周期后可以得到数据,这几个时钟周期就是流传输延迟。
2.2.3.1 可变流传输延迟的流水从设备传输过程
可变流传输延迟的流水读过程除了有不是流传输的读过程所有的信号之外,还有readdatavalid。readdatavalid信号决定了流传输延迟(Pipeline Latency)。而waitrequest可以将待传输的数量维持在一个可以接受的范围内(即加入等待时间)。
图5 带流传输延迟的从设备流传输读过程
2.2.3.2 固定流传输延迟流传输从设备读过程
通过readWaitTime来控制流传输延迟时间,通过waitrequest控制等待时间。
图6 固定流传输延迟流传输从设备读过程
2.2.4 突发传输
突发传输不是对单个word进行处理,而是将多个传输过程作为一个单元进行传输。突发传输可以增加从端口的吞吐量,在处理多个word时有更高的效率。突发传输需要avalon内存映射从接口有burstcount信号。对于读从接口,还需要有waitrequest,readdatavalid信号。
在突发传输开始时,从接口接收到地址A和burstcount。则将对地址A到(地址A+burstcount)进行处理,在处理过程中不再接收address,这是和之前的传输方式都不同的。之后再数据的传输过程中,最快可以在每个时钟上升沿都获得一个数据。
2.2.4.1 从接口写突发传输
从接口写突发传输遵循如下规则:
1) 在突发写传输达到规定的数量之前,主从对一直会被锁定。
2) write信号被置位时才获取writedata。
3) 可以用waitrequest信号来延迟突发传输。此时,writedata,write和byteenable保持不变。
图7 突发写传输时序图
2.2.4.2 从接口读突发传输
从接口突发读传输和有可变延迟的流传输类似。唯一的不同点就是一次突发传输只传输一个地址。
从接口读突发传输遵循如下规则:
1) burstcount位N,则从设备回复N个words的数据。
2) 可以用readdatavalid来延迟读突发传输。
从接口读突发传输时序如图所示。
图8 突发读传输时序图
从上图也可以看出,从设备对主设备并不敏感,他只是对各种信号做出相应,而不管这些信号是从哪个设备过来的。
2.2.4.3 Line-Wrapped Bursts传输
Line–Wrapped Bursts传输可以提高处理器的效率。在此不做详细的介绍。
2.2.5 地址对齐
数据宽度不同的主从接口通讯存在地址对齐的问题。Avalon内存映射接口能够解决地址对齐的问题,所以任何宽度的接口都可以进行互联。此时存在三种情况。
1)主从接口宽度相同
这种情况是我们最希望看到的情况,此时接口间可以很方便的进行通讯。
2)主接口宽度大于从接口
举例说明,当32位的主接口要读取16位从接口,那么总线会执行2次读传输(32位数据),将32位的数据传输给主接口。
3)主接口宽度小于从接口
举例说明,16位的主接口要读取32位从接口的数据,此时总线会选取合适的byte来压缩数据。16位的主接口要向32位从接口写数据时数据,通过控制byteenable信号来写数据。
通过下表能更加清晰的看到地址对齐的作用。
主接口地址
32位主接口数据
与16位从接口通讯
与64位从接口通讯
0x00
偏移115:0:偏移015:0
偏移031:0
0x04
偏移315:0:偏移215:0
偏移063:32
0x08
偏移515:0:偏移415:0
偏移131:0
0x0C
偏移715:0:偏移615:0
偏移163:32
*一个地址对应着8位的数据(1 Byte)。
SOPC软件在8.0版本之前可以设置native addressing。举例说明,当32位的主接口要读取16位的从接口,读取时,32位的低16位为读取过来的数据,而高位则置为0,即0x00nn。当32位主接口要写16位的从接口,则低16位被写入从接口中,而高16位被忽略。native addressing在实现上需要额外的逻辑,导致性能下降,现在已经被弃用了。也就是说主设备的一个word对应从设备的一个word。下图将让你更好得了解native addressing。
图9 主设备宽于从设备时的native addressing
图10 主设备窄于从设备时native addressing
- 【Avalon总线】2.avalon总线MM从设备
- Avalon总线
- 【Avalon总线】1.Avalon总线总体介绍
- Nios II 系统的Avalon总线
- 关于AVALON总线动态地址对齐
- 关于AVALON总线动态地址对齐
- Avalon-MM and Avalon-ST
- avalon
- AVALON-MM接口
- 基于AVALON总线的IP核定制 PWM
- 关于NIOS中Avalon总线的问题分析
- Avalon-MM Clock Crossing Bridge
- niosII的那些事--基于AVALON总线的IP核定制
- 【FPGA黑金开发板】NIOSII那些事儿--基于AVALON总线的IP定制(十七)
- 理解Avalon总线的静态地址对齐与动态地址对齐
- 实现FPGA Verilog HDL与NIOS II的通信数据交换——利用AVALON总线
- Avalon接口类型浅析——Avalon-MM接口与Avalon-ST接口辨析
- Avalon-MM接口地址对齐方式浅析
- HTML表格
- Python学习:HTML表单
- Python中的多进程和多线程
- Zookeeper is not connected yet!
- java的发展和基础;java的基础数据类型介绍;
- 【Avalon总线】2.avalon总线MM从设备
- 自执行函数
- Apache按日期切割访问日志
- C++字符串分割和C语言常用格式控制
- 小白学Git(2)——Git管理修改
- QT中多线程,函数无法执行的问题
- 【C++】EasyPushBox
- 【编译原理】LL(1)文法分析全过程(FIRST/FLLOW/SELECT集等)实现(c++语言)
- 第十三周【项目1