3.1 Avalon-MM介绍
可以使用Avalon-MM接口实现主从设备之间的读写接口,典型的设备如:
- 微处理器
- 内存
- UARTS
- DMAs
- Timers
Avalon-MM接口可以很简单,也可以很复杂,比如具有固定周期的读写传输的SRAM具有很简单的Avalon-MM,具有突发传输能力的流水线接口可能会是很复杂。
图5是个典型的系统,高亮显示一个连接到互联架构上的Avalon-MM从接口
Avalon-MM设备一般仅包括设备逻辑要求的信号。
图6为一个从设备的例子,16bit通用I/O设备,仅响应写请求,设备仅包括从设备写传输要求的从信号。
在Avalon-MM从设备中的每个信号对应充当一个Avalon-MM信号的作用,一个Avalon-MM接口仅能作为每个信号的一个实例。
3.2 Avalon-MM接口信号作用
3.3 接口属性
3.4 定时
3.5 传输
3.5.1 典型的读写传输
从设备可以通过发出waitrequest信号,来延迟传输。
图7 带等待请求的读写传输
参照这个定时图:
- address,byteenable,read在clk的上升沿断言,从设备断言waitrequest阻塞传输
- waitrequest被采样,因为waitrequest被断言,于是进入等待周期,adrress、read、write和byteenable保持不变
- 从设备在clk的上升沿之后解除断言,从设备输出readdata和response
- 主设备采样readdata、response和失效的waitrequest信号,完成传输
- Address、writedata、byteenable和write信号在clk的上升沿后断言,从设备断言waitrequest以阻塞传输
- 从设备在clk上升沿后解除断言waitrequest
- 从设备捕获写数据结束传输
3.5.2 使用waitrequestAllowances属性的传输
WaitrequestAllowance属性是指定:在waitrequest信号断言之后,Avalon-MM Master能发布的或Avalon-MM必须接收的传输次数。
WaitrequestAllowance = 0,对应于前面说的典型的读写传输,在典型的读写传输时序中,waitrequest有效将停止当前的传输。
当waitrequestAllowance到达时,Master必须解除read或write信号。
3.5.2.1 waitrequestAllowances等于2
图8:Master写:waitrequestAllowance = 2
- Avalon MM Master驱动write和data
- Avalon MM Slave断言waitrequest,因为waitrequestAllowance是2,所以,master能完成额外的2次数据传输
- 按要求,Master解除断言write,因为slave在第三个周期还在断言waitrequest。
- Avalon MM master驱动write和data,slave没有断言waitrequest,write完成
- Avalon master驱动write和data,尽管slave断言了waitrequest,因为waitreauestAllowance = 2,write完成
- Avalon master驱动write和data,slave没有断言waitrequest,write完成。
3.5.2.2 waitrequestAllowances等于1
图9:Master write:waitrequestAllowance = 1
3.5.3 具有固定等待周期的读和写传输
使用readWaitTime和writeWaitTime属性,Slave能设定一个固定长度的等待状态,使用固定的等待周期,可以代替waitrequest信号的作用。地址和控制信号(byteenable、read、write)保持不变。
图11中,slave的writeWaitTime = 2,readWaitTime = 1
图11:slave接口具有固定等待状态的读写传输
- 在时钟的上升沿,master断言address和read
- 下个上升沿表示第一个时钟的结束,仅1个wait-state周期,readWaittime = 1
- Slave在时钟上升沿断言readdata和response,读传输结束
- Slave得到Writedata,address,byteenable和write信号
- 在2个等待周期后,写传输结束
3.5.4 流水线(Pipelined)传输
- Wait states:等待周期确定地址相位的长度,等待周期限制了一个端口的最大通过率,如果一个slave响应一个传输请求需要1个等待周期,每次传输端口需要2个时钟周期
- Pipeline Latency:流水线延迟确定数据何时返回,与地址相位没有关系
3.5.4.1 具有可变延迟的读传输
下面的图显示一些slave读传输,slave具有可变的latency,在这个图中,slave能接受的最大悬挂传输是2个,slave使用waitrequest来避免超过这个最大悬挂传输数。最大悬挂传输个数是slave的一个属性。
- master断言address和read,发起一次读传输
- slave捕获addr1
- slave捕获addr2
- slave断言waitrequest,阻塞第三个传输,因为slave已经接收到可最大悬挂的读操作个数(2)
- slave断言data1,响应addr1的操作,slave解除waitrequest
- slave捕获addr3,总线上捕获data1,
- slave捕获addr4,总线上捕获data2
- slave驱动redadatavalid和readdata以响应第三个读传输
- slave捕获addr5,总线捕获data3,read信号解除断言,waitrequest不再相关
- 互联捕获data4
- Slave驱动data5,断言readdatavalid,完成最后一个悬挂的都传输数据相位
3.5.4.2 具有固定延迟的读传输
图13 具有2个周期固定延迟的流水线读传输
- master通过断言read和addr1发起一次读传输
- slave断言waitrequest阻塞传输延缓一个周期
- slave在clk上升沿捕获addr1,地址相位在这儿结束
- slave在2个周期呈现readdata,结束传输
- addr2和read被断言,发起又一次读传输
- master在下个周期发起第三个读传输,这发生在前一次传输的数据被读出之前。
3.5.5 突发(Burst)传输
3.5.5.1 写burst
- master断言address,burstcount,write,输出第一个单元的writedata
- slave立即断言waitrequest,表示slave并没有准备这次传输
- waitrequest为低,slave捕获addr1,burstcount,以及第一个单元的writedata,随后的传输周期中,address和burstcount被忽略
- 在clk的上升沿,slave捕获第二个单元的data
- 当write失效时,burst暂停
- 在clk的上升沿,Slave捕获第三个单元的数据
- Slave断言waitrequest,作为响应,所有的输出保持不变直到下个时钟周期
- 在clk的上升沿,Slave捕获最后一个单元的数据,slaveburst写结束
在上图中,beginbursttransfer信号在burst的第一个时钟周期被断言,在下个时钟周期解除福安眼,即使slave断言了waitrequest,beginbursttransfer信号依然仅在第一个时钟周期断言
3.5.5.2 读burst
- 在clk的上升沿,Master A断言地址address(A0),burstcount和read,slave断言waitrequest阻塞传输,使得除了beginbursttransfer以外的信号都保持不变,直到下个周期
- 在clk的上升沿,Slave捕获A0和burstcount,新的传输能在下个周期启动
- Master B驱动address(A1),burstcount和read,slave断言waitrequest阻塞传输,使得除了beginbursttransfer以外的信号都保持不变,直到下个周期。在这个时候,最早,Slave能返回第一个读请求的读数据
- Salve呈现valid的readdata,并断言readdatavalid,传输第一个数据字给master A
- Master A的第二个字被传输,slave解除断言readdatavalid,暂停read burst,slave端口能保持readdatavalid无效,可持续任意个时钟周期
- Master B的第一个字被返回