Avalon总线协议(一)
Avalon总线主要用于软核处理器NIOS Ⅱ与外设,常用于高速数据传输流、读写寄存器和存储器、控制片外器等。即用户自定义的逻辑与NIOS Ⅱ处理器之间进行通信常用的总线接口是Avalon-MM或者Avalon-STNIOS Ⅱ处理器和各外设之间通过Avalon-MM总线进行交互,而外设之间的点到点数据传输通过Avalon-ST总线完成Avalon-MMAvalon-STAvalon-TCAval
Avalon总线主要用于软核处理器NIOS Ⅱ与外设,常用于高速数据传输流、读写寄存器和存储器、控制片外器等。
什么意思呢这句话?
即 用户自定义的逻辑 与 NIOS Ⅱ处理器 之间进行 通信
常用的总线接口是Avalon-MM或者Avalon-ST
NIOS Ⅱ处理器和各外设之间通过Avalon-MM总线进行交互,而外设之间的点到点数据传输通过Avalon-ST总线完成
Avalon 总共有七种接口:
- Avalon Clock Interface, Avalon时钟接口 -- 驱动或接收时钟信号的接口
- Avalon Reset Interface, Avalon复位接口 -- 驱动或接收复位信号的接口
- Avalon Memory Mapped Interface(Avalon-MM), Avalon存储器映射接口 --基于地址的读/写接口,是主-从连接的典型接口。
- Avalon Streaming Interface(Avalon-ST), Avalon Streaming接口 --支持单向数据流的接口,包括多数据流、数据包和DSP数据的传输。
- Avalon Conduit Interface, Avalon Conduit接口 --适用于不适合其他Avalon类型的单个/多个信号。使用该信号可以将信号导出到顶层SOPC系统,这样就可以将它连接到设计的其他模块。
- Avalon Tri-State Conduit Interface(Avalon-TC), Avalon三态Conduit接口 -- 与片外设备的接口。多个外设可以通过信号多路复用来共享管脚,从而减少FPGA的管脚数和PCB上的走线数量。
- Avalon Intterrupt Interface, Avalon中断接口 --允许组件向其他组件发送信号的接口。
Avalon接口通过属性描述它们的行为,每种接口类型的规范定义了所有接口的属性和默认值。
每种接口都有自身的信号角色(Signal Roles),其中有一些信号是必须的,而有一些信号则是可选的。
目录
1.Avalon时钟接口
Avalon时钟接口定义了组件使用的时钟,分为两个信号:Clock Sink信号和Clock Source信号
Clock Sink信号为其他接口和内部逻辑提供时钟和时序参考,有clockRate属性:
名称 | 默认值 | 值范围 | 说明 |
clockRate | 0 | 表示Clock Sink接口的频率(Hz)。 |
Clock Source信号为从一个组件中输出一个时钟信号,具有三个属性:
名称 | 默认值 | 值范围 | 说明 |
associateDirectClock | N/A | 输入时钟名 | 直接驱动该时钟的时钟名称 |
clockRate | 0 | 表示驱动时钟输出的频率(Hz) | |
clockRateKnown | false | true,false | 指示时钟频率是否已知 |
所有同步接口都有一个associatedClock属性,该属性指定组件上的哪个时钟源(clock source)用作接口的同步参考。
Avalon 时钟产生两个主要的系统信号,即 50MHz 的时钟信号和复位信号。
Clock 组件(Avalon 时钟)的时钟由 Qsys 外部的 FPGA 逻辑部分接口引人,通过它产生的50MHz的时钟信号供给整个 Qsys 系统上的所有组件。
2.Avalon复位接口
Avalon时钟复位接口分为Reset Sink信号和Reset Source信号。
Reset Sink信号包含两个信号角色reset/reset_n和reset_req。
reset/reset_n为必需的输入信号角色,能够将接口或组件的内部逻辑复位成用户定义的状态,复位的同步属性由synchronousEdges参数定义。
reset_req是一个可选输入信号角色,复位信号的早期指示,用来禁止时钟使能或屏蔽片上存储器的地址总线,在异步复位输入置位时防止地址转变。
Reset Sink信号属性为:
名称 | 默认值 | 值范围 | 说明 |
associatedClock | N/A | 时钟名称 | 与此接口同步的时钟的名称。如果synchronousEdges的值为DEASSERT或者BOTH,那么需要使用此属性。 |
synchronousEdges | DEASSERT | NONE DEASSERT BOTH | 表明复位输入所需要的同步类型。 NONE --不需要同步 DEASSERT --复位是异步的,取消复位是同步的 BOTH --复位和取消复位是异步的 |
所有同步接口都有一个associatedReset属性,用于指定复位接口逻辑的复位信号。
Reset Source信号包含reset/reset_n和reset_req,作用与上信号相同,但属性不同。
名称 | 默认值 | 值范围 | 说明 |
associatedClock | N/A | 时钟名称 | 与此接口同步的时钟的名称。如果synchronousEdges的值为DEASSERT或者BOTH,那么需要使用此属性。 |
associatedDirectReset | N/A | 复位名称 | 复位输入的名称,此复为输入通过one-to-one链路直接驱动此复位源。 |
associatedResetSinks | N/A | 复位名称 | 指定复位输入,使复位源对复位进行复位。 |
synchronousEdges | DEASSERT | NONE DEASSERT BOTH | 表明复位输入所需要的同步类型。 NONE --不需要同步 DEASSERT --复位是异步的,取消复位是同步的 BOTH --复位和取消复位是异步的 |
Clock 组件产生的复位信号由 Qsys 外部的 FPGA 逻辑部分接口引入通过它产生的复位信号同样供给整个 Qsys 系统上的所有组件。
3.Avalon存储器映射接口
Avalon存储器映射接口(Avalon-MM)主要用于实现主-从(Master-Slave)组件的读写接口,微处理器、存储器、UART、DMA、定时器是常用的包含Avalon存储器映射接口的组件。
Avalon MM master通过内部互联Interconnect连接Avalon MM slave,就是主连接从,
至于其他设备,如uart,一端连接到桥上,另一端连接到真实的串口。
Avalon-MM接口是同步的。每个 Avalon-MM接口都与一个相关联的时钟接口同步。
Avalon-MM总线在系统中有 2条即Nios处理器的指令总线和数据总线。指令总线连接着Nios II处理器、JTAG UART和片上RAM。指令存储在片上RAM中,通过Avalon-MM 总线读取,而JTAG UART 组件集成在 Nios II处器中可以确保在线调试仿真时,控制片上RAM的指令运行。数据总线将Nios II处理器连接到所有外设上,实现对各个外设寄存器的读写访问。
对 Avalon-MM接口的最低要求是只读接口需要使用readdata,或者只写接口需要使用writedata和write。
Avalon-MM接口属性
3.1 传输
两个基本概念:
传输(Transfer) -- 传输是对一个字或一个或多个数据符号的读或写操作。传输发生在Avalon-MM接口和互连(interconnect)之间。传输需要一个或多个时钟周期才能完成。master和slave都是传输的一部分,Avalon-MM master启动传输,Avalon-MM slave做出响应。
Master-slave pair --指传输中涉及的master接口和slave接口。在传输过程中,主接口控制和数据信号通过互连结构并与从接口交互。
典型的Avalon-MM接口进行读写传输
通过waitrequest(高电平有效)置为高电平,slave可将互连暂停。
通常agent通常在时钟的上升沿之后接收address,byteenable,read或者write和writedata。在上升时钟沿之前,agent置位waitrequest来暂停传输。当agent置位waitrequest时,传输延迟。waitrequest置位期间,地址和其他控制信号保持不变。agent接口解除置位waitrequest之后,第一个clk上升沿上的传输完成。
Slave可以无限期的拉高waitquest信号,但是必须保证slave接口不要无限期拉奥,避免出现slave一直不响应、master一直等待的现象。
- address,byteenable和read在clk的上升沿后置位。agent置位waitrequest,暂停传输。
- waitrequest被采样。由于waitrequest置位,因此周期变成一个等待状态(wait-state)。address,read,write和byteenable保持不变。
- agent在clk的上升沿之后解除置位waitrequest。agent置位readdata和response。
- host对readdata,response和解除置位的waitrequest(完成传输)进行采样。
- address,writedata,byteenable和write信号在clk的上升沿之后置位。agent置位waitrequest,暂停传输。
- agent在clk的上升沿之后解除置位waitrequest。
- agent采样写数据结束传输。
固定等待状态的读和写传输
agent可以使用readWaitTime和writeWaitTime属性来指定固定等待状态。使用固定等待状态是使用waitrequest来停止传输的一个替代方法。地址和控制信号byteenable,read和write)在传输期间保持不变。将readWaitTime或writeWaitTime设置为<n>相当于将waitrequest置位<n>个周期每传输。
- host在clk的上升沿置位address和read。
- clk的下一个上升沿标记第一个也是唯一一个等待状态(wait-state)周期的结束。readWaitTime为1。
- agent在clk的上升沿置位readdata和response。读传输结束。
- agent可使用writedata,address,byteenable和write信号。
后面还有流水线传输、突发传输等传输方式
3.2 地址对齐
互连仅支持对齐的访问。
Master只能发送其数据位宽倍数的地址,可通过拉低byteenable_n的某几位来写入数据。
例如向地址2上写入中的2字节的数据,byteenables=4’b1100。
3.3 Avalon-MM 寻址
动态地址对齐(dynamic bus sizing)在不同数据宽度host-agent对之间的传输过程中管理数据。
从机数据)在主地址空间中以连续字节对齐。
如果主数据宽度大于从数据宽度,那么主地址空间中的字映射到从地址空间中的多个位置。例如,从16-bit agent的32-bit host读会在agent一端产生两次读取传输。读取是针对连续的地址。
如果主数据宽度小于从数据宽度,互连会管理agent的字节数据通路。在host读传输期间,互连仅向较窄的host呈现agent数据的相应字节数据通路。在host写传输期间,互连自动置位byteenable信号,只将数据写入指定的agent字节数据通路。
Agent的数据宽度必须是8,16,32,64,128,256,512或者1024 bit。
一些时序说明:Avalon 总线 时序 介绍
一些信号和属性:avalon总线MM主设备、avalon总线MM从设备
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)