Avalon总线规范(中文版)

Avalon总线规范(中文版)
Avalon总线规范(中文版)

Avalon总线规范

参考手册

(Avalon从端口传输与流模式从端口传输部分)

Avalon 总线是一种将片上处理器和外设连接成片上可编程系统(SOPC)的一种简单总线结构。

Avalon总线是一种接口方式,它规定了主从设备之间的接口方式及其通信时序。Avalon 总线的设计目的在于:

■简便:提供了简单易学的协议;

■优化总线逻辑的资源利用:节约了可编程器件(PLD)内部的逻辑单元(LE);

■同步操作:将PLD 上的其他用户逻辑很好的集成在一起,从而避免了复杂的时序分析;基本的Avalon 总线事务可以在主﹑从设备之间传送一个字节,半字或字(8,16 或32 位)。

当一次事务处理完成,总线可以迅速的在下一个时钟到来的时候在相同的主从设备之间或其他的主从设备间开始新的事务。Avalon 总线也支持一些高级功能,如“延迟型(latency-aware)外设”,“流(streaming)外设”及多总线主设备。这些高级的功能使其允许在一个总线事务中进行外设间的多数据单元的传输。Avalon 总线支持多个总线主设备。多主设备的结构为SOPC 系统及高带宽外设提供了很大程度上的稳定性。例如,一个主外设可以进行直接存储器访问(DMA),而不需要处理器在数据传输路径上从外设将数据读入存储器。Avalon 总线上,主设备和从设备之间的相互作用是基于一种被称为“从设备(slave-side)仲裁”的技术。从设备仲裁决定了当多主设备在同一时刻尝试连接同一个从设备的时候,哪个主设备获得从设备控制权。从设备仲裁具有两个优势:

1.仲裁细节内嵌于Avalon 总线内部。所以,主设备和从设备的接口具有一致性,不考虑总线上的主设备和从设备的数量。在每一个和Avalon 总线相连接的主设备看来,它都是总线上唯一的主设备。

2.多个主设备可以同时完成总线事务,就像他们并不是在同一个总线周期连接到同一个从设备一样。Avalon总线的设计是为了配合片上可编程系统(SOPC)的。它是一种由PLD 内部逻辑和布线资源的主动片上总线结构。Avalon 结构的一些原则如下:

1.与外设的接口同步于Avalon时钟。所以,没有复杂的,异步的握手/应答模式。Avalon 总线(及整个系统)的性能可以通过使用标准的同步时序分析技术来实现测量。

2.所有的信号都是有效“低”和“高”,这样便于总线操作的立即转换。位于Avalon 内部的多路复用器(不是三态缓冲器)来决定哪个信号驱动哪个外设。

3.地址,数据和控制信号使用分离的,专用端口,这样简化了外设的设计。外设不需要对地址和数据的总线周期进行解码,也不需要在非使能的时候禁止输出。

功能简介

Avalon 也包括很多的功能和约定来支持SOPC Builder 软件自动产生的系统﹑总线和外设:

高于4G 的地址空间-存储器和外设可以被映射为32位地址空间中的任何地址。

同步接口-所有的Avalon信号都被Avalon总线时钟同步。这样简化了Avalon总线的相关时序行为并便于高速外设的集成。

分离的地址,数据和控制线路-分离的,专用的地址和数据路径更便于与用户逻辑相连接。外设不需要对数据和地址周期进行译码。

内置地址译码器-Avalon总线自动的为所有外设产生片选(Chip Select)信号,大大的简化了Avalon 外设的设计。

多主设备总线结构-在Avalon 总线上可以存在多个主外设。Avalon总线自动产生仲裁逻辑。基于向导式的配置-方便使用的图形化向导引导用户完成对Avalon总线的配置(增加外设,确定主/从关系,定义存储器映射)。Avalon总线结构的自动产生是由用户在向导界面的输入来决定的。

动态总线容量-Avalon总线自动处理数据位宽不匹配的外设间传送数据的细节,便于在多种不同宽度的设备间接口。

名词及概念

许多与SOPC相关的名词和概念都完全是新的,他们和传统的片外总线结构有着本质的不同。设计者需要懂得这点,以便可以理解Avalon总线规范。下面的名次及概念构成了一个理论化的框架,而Avalon总线规范就是建立在这一框架的基础上的。它们贯穿于整个文档。

总线周期

总线周期被定义为Avalon主时钟的相邻上升沿之间的时间间隔,它是总线时钟周期的基本单元。总线信号时序参照于总线周期时钟。

总线传输

Avalon总线的一次传输是对数据的一次读/写操作,它可能持续一个或多个总线周期。Avalon 总线所支持的传输位宽为:一个字节(8 位),半个字(16 位)或一个字(32 位)。

流传输

流传输为“流主设备”和“流从设备”之间的连续性数据传输建立一个开放式的管道。

带有延迟的读传输

有些同步设备在刚刚开始传输的时候,需要延迟几个时钟周期才能够完成其第一次读数据的过程,而在之后的传输过程中就可以每一个周期返回一个数据。带有延迟的读传输可以增加这些同步设备的带宽利用率。延迟性传输允许一个主设备发出读请求后,转而执行另一个无关任务,过一段时间再接收数据。尽管之前的数据还没有接受到,这个无关的任务也可以发出另一次读请求。这有利于进行连续标准地址的存取的指令存取操作和DMA 传输。这样,CPU和DMA主设备可以预读取其需要的数据,所以这使得同步存储器保持活跃状态,并减少了平均存储延时。

SOPC Builder软件及Avalon总线的产生

SOPC Builder是Altera开发的一款系统生成和集成工具。SOPC Builder所产生的片上电路系统模块包括Avalon总线、主外设和从外设。SOPC Builder 提供了图形化的用户接口,应用这种接口可以实现向系统模块中添加主、从外设,配置外设及配置Avalon 总线将外设连接起来。这样,SOPC Builder自动的创建并连接HDL模块,便可以实现用户PLD 设计的每一个部分。

系统模块

考虑在可编程芯片上实现用户自定义系统的结构,其中一部分是由SOPC Builder自动产生的。

在Altera PLD上实现的完整系统如图1所示。出于本文的目的,系统模块的一些部分是由

SOPC Builder自动产生的。系统模块应该包括最少一个Avalon主外设和一个Avalon从外设,例如UART,定时器或者PIO。系统模块的外部逻辑可以包含用户Avalon外设及其他的和系统模块不相关的用户逻辑。系统模块必须与设计者的PLD设计连接起来。系统模块的端口依赖于其所包括的外设及在SOPCBuilder中进行的设置,并随其变化。这些端口包括直接到Avalon总线的接口及在系统模块中的用户自定义的和外设相连的接口。

Avalon总线模块

Altera PLD上集成用户逻辑的系统模块Avalon总线模块是任何一个系统模块的“脊梁”。它是SOPC设计中外设通信的主要路径。Avalon总线模块是所有的控制、数据、地址信号及控制逻辑的总和,是其将外设连接起来并构成了系统模块。Avalon总线模块实现了可配置的总线结构,其可以为设计者外设之间的相互连接而改变。Avalon总线模块是由SOPC Builder自动产生的,所以设计师并不用亲自将总线和外设连接起来。Avalon总线模块基本上不会作为分离的单元而单独使用,因为系统设计者总是利用SOPC Builder将处理器和其他Avalon外设自动地集成于一个系统模块之中。设计者对Avalon总线的注意力通常限于与用户Avalon外设相连接地具体的端口上。

Avalon总线模块(一条Avalon总线)是一个主动的逻辑单元,它取代了PCB板上的被动的,金属总线。(见图2)这就是说,Avalon总线模块的端口可以被看作是所有连接到被动总线的引脚连接。本手册只是定义了包含于Avalon总线模块接口中的端口,逻辑行为和信号顺序,而没有提及物理总线的电气或物理的性能。

图2 .Avalon 总线模块框图-范例系统

Avalon总线模块为连接到总线的Avalon外设提供了以下的服务:

■数据通道多路转换——Avalon总线模块的多路复用器从被选择的从外设向相关主外设传输数据。

■地址译码——地址译码逻辑为每一个外设提供片选信号。这样,单独的外设不需要对地址线译码以产生片选信号,从而简化了外设的设计。

■产生等待状态(Wait-State)——等待状态的产生拓展了一个或多个周期的总线传输,这有利于满足某些特殊的同步外设的需要。当从外设无法在一个时钟周期内应答的时候,产生的等待状态可以使主外设进入等待状态。在读使能及写使能信号需要一定的建立时间/保持时间要求的时候也可以产生等待状态。

■动态总线宽度——动态总线宽度隐藏了窄带宽外设与较宽的Avalon总线(或者Avalon 总线与更高带宽的外设)相接口的细节问题。举例来说,一个32位的主设备从一个16位的存储器中读数据的时候,动态总线宽度可以自动的对16位的存储器进行两次读操作,从而传输32位的数据。这便减少了主设备的逻辑及软件的复杂程度,因为主设备不需要关心外设的物理特性。

■中断优先级(Interrupt-Priority)分配——当一个或者多个从外设产生中断的时候,Avalon 总线模块根据相应的中断请求号(IRQ)来判定中断请求。

■延迟传输(Latent Transfer)能力——在主、从设备之间进行带有延迟传输的逻辑包含于Avalon总线模块的内部。

■流式读写(Streaming Read and Write)能力——在主、从设备之间进行流传输使能的逻辑包含于Avalon总线模块的内部。

Avalon外设

连接于Avalon总线的Avalon外设是逻辑器件——无论片上还是片外的——它们进行着某种

系统级的任务,并通过Avalon总线与其他的系统部件相通信。外设是模块化的系统部件,依赖于系统的需要,可以在设计的时候增加或者移除。Avalon外设可以是存储器、处理器,也可以是传统的外设器件,如UART,PIO,定时器或总线桥。任何的用户逻辑都可以成为Avalon外设,只要它满足本文所述的提供与Avalon总线接口的地址、数据及控制信号接口。连接于Avalon总线的外设将被分配专用的端口。除了连接于Avalon总线的地址、数据及控制端口之外用户也可以自行定制端口。这些于用户逻辑相连接的信号扩展了系统模块的应用。Avalon外设要么是主外设,要么是从外设。主外设可以于Avalon上开启总线传输,其至少有一个连接于Avalon总线模块的主端口。主外设也可以有一个从端口其允许此设备接受其他连接于Avalon 总线的主设备开启的总线传输。而从设备只能响应Avalon 总线传输,而不能够开启总线传输。像存储器,UART 这样的从设备,通常只有与Avalon总线模块相连接的一个从端口。在SOPC 环境中,区分以下Avalon 总线主设备/从设备的外设类型是十分重要的。

系统模块内部外设

如果SOPC Builder在外设库中找到了一个外设,或者设计者指定了一个用户外设的设计文件,SOPC Builder将自动的将此外设与Avalon总线模块相连接。这种外设是指系统模块之内的外设,也就是被认为是系统模块的一个部分。与Avalon总线相连接的地址、数据及控制端口是向用户隐藏的。外设中任何附加的非Avalon端口将作为系统模块的端口显示于外。这些端口可能与物理管脚直接相连或者可能与片上的其他模块相连。

系统模块外部外设

Avalon总线外设也可以存在于系统模块之外。设计者选择将模块置于系统模块之外

可能有以下几个原因:

■外设在物理上位于PLD 器件之外

■外设需要某些粘连逻辑(glue logic)使其与Avalon 总线信号连接

■在系统模块产生的时候,外设的设计还没有完成

在这些情况下,相应的Avalon总线模块信号作为系统模块的端口现于外部(及指定的外设)。主端口(Master Port)

主端口是主外设上用于开启Avalon总线传输的一系列端口的集合。主端口与Avalon总线模块直接相连。实际上,一个主外设可能有一个或多个主端口及一个从端口。这些主端口及从端口的相互依赖关系是由对外设进行设计时决定的。但是,这些主、从端口上的单独的总线传输应该总是遵循本文所述。本文中所提及的所有主设备传输都是指单独的主端口的Avalon 总线传输。

从端口(Slave Port)

从端口是指在位于某一外设上的,从另一外设主端口接受Avalon 总线传输的一系列端口的集合。从端口也直接与Avalon总线模块相连接。主外设也可以有一个从端口,通过这个从端口可以使其接受Avalon 总线上其他主设备的传输。本文所提及的所有从设备传输都是指单独的从端口的Avalon 总线传输。

主-从端口对(Master-Slave Pair)

“主-从端口对”是指通过Avalon总线模块相连接的一个主端口和一个从端口构成的组合。从结构上讲,这些主、从端口与Avalon 总线模块上的相应端口相连接。主端口的控制及数据信号可以有效的通过Avalon总线模块与从端口相互作用。主、从端口之间的连接(这就构成了主-从端口对)是在SOPC Builder 中所确定的。

PTF文件、SOPC Builder参数及开关

Avalon 总线及外设的配置可以利用基于向导的SOPC Builder 图形用户接口(GUI)来完成。通过这个GUI,用户可以设定不同的参数和开关,然后据此产生系统的PTF 文件。PTF 文件是一个文本化的文件,它定义了:

■定义Avalon 总线模块结构、功能的参数

■定义每个外设定义结构、功能的参数

■每个外设的主、从角色

■外设端口(如读使能、写使能、写数据等)

■通往多主端口的从端口的仲裁机制

然后,PTF文件通过HDL产生器创建了系统模块的寄存器传输级(RTL)描述。更多的关于系统PTF文件的信息请查看“SOPC Builder数据文档”(SOPC Builder DataSheet)和“SOPC Builder PTF 文件参考手册”(SOPC Builder PTF File Reference Manual)__

1.3 Avalon 总线传输

Avalon总线规范定义了主端口和从端口之间通过Avalon总线模块传输数据所需要的信号和时序。构成Avalon总线模块和外设之间接口的信号随着传输模式的不同而不同。首先,主传输与从传输的接口不同,使用主端口与从端口的信号定义不同。此外,通过系统PTF文件的设置,所需信号的确切类型与数量也是可变的。

Avalon总线规范提供了各种选项来剪裁总线信号和时序,以满足不同类型外设的需要。Avalon总线基本传输模式在一个主从端口对之间每次只传送一个单元的数据。可以通过插入等待周期来延长一次总线传输的时间,以满足低速外设的需要。流传输模式以及支持并发多主端口传输的能力满足高带宽外设的需要。所有Avalon从传输的信号时序都源自从端口的基本传输模式。同样,主端口的基本传输模式是所有Avalon 主传输的基础。

1.3.1主端口接口与从端口接口

当讨论Avalon总线传输时,必须注意讨论的是总线的哪一边,是主端口接口还是从端口接口。由主端口输出的信号与输入到目标外设的从端口的对应信号可能会有较大的差别。从端口的信号活动总是主外设发起总线传输的结果。但是,实际的从端口输入信号并非直接来自主端口。Avalon总线模块传递来自主端口的信号,并对信号进行裁剪,以满足从外设的需要。由于以上原因,对Avalon总线传输的介绍将分为主传输类型和从传输类型两个部分。大多数用户只关心从传输,因为他们设计的用户自定义外设一般都是从外设。边时,用户只需考虑Avalon 总线模块和用户自定义外设之间的信号。只有当用户创建主外设时才涉及到主传输。

1.3.2 Avalon 总线时序

Avalon总线是一个同步总线接口,由一个Avalon 总线主时钟定时,所有总线传输的信号都与Avalon总线时钟同步。同步总线接口并不意味着所有的Avalon 总线信号都是锁存的。比如,Avalon 的chipselect信号便是由组合逻辑产生的,其输入是同步于Avalon 总线时钟的寄存器的输出。因此,外设不能使用Avalon信号的边沿,因为Avalon 信号在达到稳定前会变化多次。就像所有同步设计一样,Avalon 总线外设只能在时钟上升沿对稳定的信号作出响应,且必须在时钟上升沿输出稳定的信号。Avalon总线模块也可以连接异步外设,例如片外异步存储器。但设计时需要考虑一些额外因素:由于Avalon总线模块的同步操作,Avalon 信号只以Avalon总线时钟周期为间隔变化。此外,如果异步外设的输出直接连接到Avalon 总线模块,用户必须保证输出信号在时钟上升之前达到稳定。Avalon 总线规范并不定义在时钟上升沿之间信号是如何变化的。信号的变化由Avalon总线时钟触发,信号只要在捕获

时钟上升沿之前达到稳定就可以了,因此,总线规范中的Avalon 总线时序图中不会描绘精确的时间信息。类似地,Avalon 总线没有规定固有的最高性能。系统模块在特定的器件上综合布线之后,用户必须对系统模块进行标准的时序分析,以确定Avalon 总线传输达到的最高速度。

1.3.3 Avalon 总线信号

由于Avalon总线是一个由HDL文件综合而来,所以在连接Avalon 总线模块和Avalon外设时需要一些特别的考虑。对于传统的片外总线结构,所有外设都共享一组固定的.预先设计的金属线路,而Avalon 总线与此不同:SOPC Builder必须准确地了解每个外设提供了哪些Avalon端口,以便连接外设与Avalon总线模块。它还需要了解每个端口的名称和类型,这些信息定义在系统PTF文件中。Avalon 总线规范不要求Avalon 外设必须包含哪些信号。它只定义了外设可以包含的各种信号类型(例如地址.数据.时钟等)。外设的每一个信号都要指定一个有效的Avalon信号类型,以确定该信号的作用,一个信号也可以是用户自定义的。在这种情况下,SOPC Builder不将该端口与Avalon 总线模块连接。Avalon信号类型首先分为主端口信号和从端口信号两类。因而,外设使用的信号类型首先由端口的主从角色决定。每个独立的主端口或从端口使用的信号类型由外设的设计决定。例如,设计一个只有输出的PIO从外设只需要定义用于写的信号,而不需要定义用于读的信号。尽管中断请求输出是从端口允许的信号类型,但也不是必须使用。Avalon 总线规范不规定Avalon外设信号的命名规则。不同信号类型的作用是预先定义的,而信号的名称则是由外设决定。信号可以按照它的信号类型来命名,也可以遵照系统级的命名规范采用不同的名称。下面章节中讨论的Avalon 总线传输时会涉及到一些Avalon信号,例如readdata信号和irq信号。在这里信号类型的名称作为信号名称,但外设信号的实际名称可以与此不同。

作为一个例子,表1.1 列举了部分Avalon 从端口可用的信号类型。信号的方向是从外设的角度定义的。例如时钟信号clk(方向为in)对于从外设来说是输入信号,而对于Avalon总线模块来说是输入信号。

表1.1 中例举的信号类型都是高电平有效。Avalon 总线还提供了各个信号类型的反向形式。在

PTF 声明中,在信号类型名称加”_n”,便可将对应的端口声明为低电平有效。这对许多使用低电平有效的片外外设非常有用。

1.3.4 并发多主端口的Avalon 总线需要考虑的事项

Avalon 总线允许多个端口连接到Avalon 总线模块。而且实现Avalon总线的并发多主端口功能时,Avalon总线模块不需要额外的特殊信号。当多个主外设试图同时访问同一个外设时,Avalon总线模块内部的从端口仲裁逻辑会被用来解决冲突。仲裁机制对于Avalon总线外设完全是透明的。因而,不论是否使用了仲裁,应用于主端口和从端口的Avalon 总线传输协议是相同的。换句话说,从端口不会意识到有多个主外设同时请求总线传输。类似地,被仲裁逻辑强制等待的主外设也不会意识到另一个获胜的主外设的存在。主端口只是简单地发现它的等待请求信号被置为有效,并一直等待,直到目标外设准备好处理总线传输。将仲裁的细节隐藏在Avalon总线模块内部极大简化了外设的设计,任何Avalon 外设在单主端口和多主端口结构中都可以使

用。

1.4 Avalon 从端口传输

1.4.1 从传输的Avalon 总线信号

表2 列举了外设的从端口与Avalon总线间接口的信号类型。信号的方向是以外设的角度定义的。外设提供的信号由外设的设计和PTF文件中的信号定义决定,不需要提供全部的信号类型。

上述信号如果不加说明都是高电平有效,此外,Avalon总线也提供上述信号的低电平有效版本,在信号名称后加”_n”表示低电平有效,如:read 信号为高电平有效,而read_n为低电平有效。

1.4.2 Avalon 总线上的从端口读传输

1.4.

2.1 基本从端口传输模式

基本从端口传输模式是所有Avalon 从端口传输的基础。所有其它的从端口传输使用的信号都包含了基本从端口传输的信号,并扩展了基本从端口操作时序。基本从端口传输由Avalon 总线模块发起,然后从端口向Avalon 总线模块传输一个单元的数据。基本从端口读传输没有延迟。例4.1 显示了一个基本从端口读传输的例子。在Avalon 基本读传输中,总线传输开始于一个时钟上升沿,并在下一个时钟上升沿结束,不插入等待周期。由于传输在一个时钟周期内完成,目标外设必须能够立即.异步向Avalon 总线模块输出相应地址的内容。在clk 的第一个上升沿,Avalon 总线向目标外设传递address、byteenable_n 和read_n信号。Avalon 总线模块内部对address 进行译码,产生片选并驱动从端口的chipselect 信号。一旦chipselect 信号有效,从端口在数据有效时应立即驱动readdata 输出。最后,Avalon总线模块在下一个时钟上升沿捕获readdata。

例4.1 基本从端口读传输

时序说明:

(A)第一个总线周期开始于clk 上升沿;

(B)Address 和read_n 信号有效;

(C)Avalon 总线对address 译码,输出有效的chipselect;

(D)片选有效后,从端口在第一个总线周期内必须返回有效数据;

(E)Avalon 总线在下一个clk 上升沿捕获readdata,读传输到此结束。另一个总线传输可以在下一个总线周期开始。无等待周期的基本读传输只适用于完全异步的外设。目标外设必须在外设被选中或地址变化时立即向Avalon 总线提供数据。为使传输正常工作,readdata 的输出必须在一下个时钟上升沿有效且稳定。锁存输入或输出端口的同步外设不能使用无等待周期的基本从端口读传输。大部分片上外设都采用同步接口,因此至少需要一个时钟周期来捕获数据。在读传输中,需要至少一个等待周期,除非该外设是具有延迟的。外设的从端口还可以使用字节使能信号byteenable_n, 对byteenable_n 的解释是由外设决定的。在最简单的情况下,从端口可以忽略byteenable_n,每当read_n 有效时总是驱动所有的字节段。Avalon总线模块在每次读传输中捕获readdata 的全部位宽度。如果在读传输中某个字节未使能,其返回到Avalon 总线模块的值是不确定的。当chipselect 无效时,从端口必须忽略所有其它输入信号,其输出信号没有必要置为高阻。此外,chipselect的上升沿或read_n 的下降沿不能用作读传输开始的标志,因为这些边沿的稳定性是没有保证的。

1.4.

2.2 具有固定等待周期的从端口读传输

具有固定等待周期从端口传输使用的信号与基本读传输使用的相同,不同点只是信号的时序。具有等待周期的从端口读传输适用于不能在一个时钟周期内提供数据的外设。例如,若指定了一个等待周期,Avalon 总线模块在提供了有效的地址和控制信号后,会等待一个时钟周期再捕获外设的数据。Avalon 总线模块在每次读传输时都会等待固定数量的总线周期。例4.2 显示了具有单个等待周期的从端口读传输的时序。Avalon总线模块在第一个总线周期提供address、byteenable、read_n 和chipselect 信号。由于具有等待周期,外设不必在第一个总线内提供readdata。第一个总线周期是第一个(也是唯一一个)等待周期。从端口可以随时捕获地址和控制信号,片上的同步外设通常在第二个总线周期开始(等待周期结束)时的clk 上升沿捕获地址和控制信号。在第二个总线周期间,目标外设向Avalon总线模块

提供readdata。在第三个也是最后一个时钟上升沿,Avalon 总线模块由从端口捕获readdata。在第三个也是最后一个时钟上升沿,Avalon 总线模块由从端口模块readdata并结束总线传输。时序说明:

(A)第一个总线周期开始于clk 上升沿;

(B)Address 和read_n 信号有效;

(C)Avalon 总线对address 译码,输出有效的chipselect;

(D)clk上升沿标志着第一个且是唯一的一个等待周期结束。如果从端口是同步的,它可以在clk上升沿捕获address、read_n、和chipselect;

(E)从端口在第二个总线周期内返回有效数据;

(F)Avalon总线在下一个clk上升沿捕获readdata,读传输到此结束。另一个总线传输可以在下一个总线周期开始。

例4.2 具有一个固定等待周期的从端口读传输

具有单个等待周期的读传输经常用于同步的片上外设。在合理的PLD 设计中,模块间的接口应当通过寄存器同步。加入了一个等待周期后,外设可以在chipselect 有效后的下一个clk 上升沿捕获address、byteenable、read_n 和chipselec t,这使得目标外设具有至少一个完整的总线周期来向Avalon 总线模块提供返回数据。例4.3显示了具有多个等待周期的从端口读传输。它和例4.2 几乎是一样的,只是Avalon总线在由外设获取readdata 之前等待多于一个总线周期。

1.4.

2.3 具有外设控制等待周期的从端口读传输

外设控制的等待周期使得目标外设能够根据提供数据的需要将Avalon 总线模块的读操作暂停任意多个总线周期。在这种传输模块下,外设向Avalon总线模块提供数据所需的时间是不固定的。例4.4 显示了这种情况,外设控制等待周期的读传输模式使用了waitrequest 信号。它是一个从端口的输出信号。当从端口的read_n 信号有效后,从端口若要延长读传输,它必须在第一个总线周期内返回waitrequest。当waitrquest 有效后,Avalon总线模块便暂停工作,不再捕获readdata。Avalon总线模块在waitrequest 失效后的下一个clk 上升沿捕获readdata。Avalon总线模块没有超时机制来限制从端口暂停总线的时间。当Avalon 总线模块暂停后,系统模块内的某个主外设也被暂停,并等待着由目标从外设返回需要的数据。一个从端口能够将主端口永久地“挂起”。因此,外设必须保证不会使waitrequest 无限期地保持有效。

时序说明:

(A)第一个总线周期开始于clk 上升沿;

(B)Address 和read_n 信号有效;

(C)Avalon 总线对address 译码,输出有效的chipselect;

(D)从端口在下一个clk 上升沿之前置waitrequest 有效

(E)Avalon 总线模块在clk 上升沿读取waitrequest。这时waitrequest 有效,因而在该时钟上升沿不捕获readdata;

(F-G)waitrequest 一直保持有效,可以占用任意多个总线周期;

(H)从端口提供了有效的readdata;

(I)从端口置waitrequest 无效;

(J)Avalon 总线在下一个clk 上升沿捕获readdata,读传输到此结束。另一次总线传输可以开始于下一个总线周期。若一个从端口采用了外设控制等待周期的读传输模式,对该端口的其它传输模式会有一些限制,比如不能再使用建立时间和保持时间。这些限制只影响从端口,不影响连接到Avalon 总线模块上的其它外设。在大多数情况下,产生waitrequest 信号的外设是片上同步外设,不需要考虑建立时间和等待时间。

1.4.

2.4 具有建立时间的从端口读传输

Avalon 总线模块按照用户设计或者外设默认,能够自动满足各个从端口信号的建立时间要求,发起读传输的主外设不必考虑各个信号对建立时间与保持时间的要求。具有建立时间的从端口读传输使用的信号与基本读传输使用的相同,不同点只是信号的时序。这种传输方式通常用于一些片外外设,它们要求在读使能信号有效前address 和Chipselect 信号需要稳定一段时间。一个非零的建立时间N意味着address、byteenable_n和chipselect 信号提供给从端口之后,在read_n有效之前有N个总线周期的延迟。要注意chipselect 不受建立时间的影响,若外设对于read_n 和chipselect 都要求有建立时间,用户必须在接口中手工添加适当的逻辑(一个与门)。完成总线传输所需的总线周期的总数取决于建立时间和等待周期的总线周期。例如,若一个外设具有参数setup_Time=”2”和Read_Wait_States=”3”,它将花费6 个总线周期来完成传输:2个总线周期的建立时间,3个总线周期的等待周期,1 个总线周期用来捕获数据。例4.5显示了具有一个总线周期的建立时间和一个固定等待周期的从端口读传输。

时序说明:

(A)第一个总线周期开始于clk 上升沿;

(B)Address 和byteenable_n 有效,read_n 信号仍保持无效;

(C)Avalon 总线对address 译码,输出有效的chipselect;

(D)clk 上升沿标志着建立时间总线周期结束,并开始总线等待周期;

(E)Avalon 总线模块置read_n 有效;

(F)clk上升沿标志着总线等待周期结束;

(H)Avalon总线在下一个clk上升沿捕获readdata,读传输到此结束。另一次总线传输可以开始于下一个总线周期。

如果一个外设能够同时支持读和写总线传输,并且指定了建立时间,那么读传输和写传输具有同样的建立时间。

1.4.3 在Avalon 总线上的从端口写传输

1.4.3.1 基本从端口写传输

和从端口读传输类似,基本从端口写传输是所有Avalon 从端口写传输的基础。所有其它的从端口写传输模式使用的信号都包含了基本从端口写传输的信号,并扩展了基本从端口写时序。基本从端口写传输由Avalon 总线模块发起,由Avalon总线模块向从端口传输一个单元的数据。基本从端口写传输没有延迟。例4.6 显示了基本从端口写传输,没有等待周期、建立时间和保持时间。Avalon 总线模块提供address、writedata、byteenable_n 和write_n 信号,然后设置chipselect有效。从端口在下一个时钟上升沿捕获地址、数据和控制信号,写传输立即结束。整个传输过程仅花费一个总线周期。从外设可以在传输结束后再花费一些总线周期来实际处理写入的数据。如果外设不能在每个总线周期都接受数据,则需要加入等待周期。例4.6 基本从端口写传输

时序说明:

(A)写传输开始于clk 上升沿;

(B)Writedata、address、byteenable_n、write_n 信号有效;

(C)Avalon 总线模块对address 译码,并向从端口设置有效的chipselect;

(D)从端口在下一个clk 上升沿捕获writedata、address、byteenable_n、write_n和chipselect,写传输到此结束。另一次读或写传输可以开始于下一个总线周期。基本写传输只适合于同步外设,包括许多片上外设,例如PIO 和定时器等。基本写传输的时序不适合于异步外设,因为包括write_n 和chipselect 在内的所有输出信号同时失效,这会在片外存储器等异步外设中造成竞争冒险现象。对于这样的外设,用户可以设定信号的保持时间,这将在后面的章节中讨论。

当writedata比一个字节宽时,字节使能信号byteenable_n可以写入特定的字节段。Byteenable_n是一组信号线,其中每一次对应于writedata 的一个字节段。Byteenable_n通常用于片外的16 位或32 位字寻址的存储器设备。当写入单个字节数据时,address 仅指定相应的字或半字地址,而byteenable_n 精确地指定要写入哪个字节。表4.3 是使用byteenable_n 的一些例子,其中假定从端口是一个32 位的外部存储器。

1.4.3.2 具有固定等待周期的从端口写传输

具有固定等待周期的从端口写传输使用的信号与基本写传输使用的相同,不同点只是信号的时序:Avalon 总线模块在每次总线传输时都会插入固定数量的等待周期。具有等待周期的从端口写传输通常用于不能在一个总线周期内从Avalon 总线模块捕获数据的外设。在这种情况下Avalon总线模块在第一个总线周期中提供address、writedata、byteenable、write_n 和chipselect 信号。这和基本写传输开始时一样。在等待期间,这些信号保持稳定。在固定数量的等待周期后从端口捕获来自Avalon 总线模块的数据。此后传输结束,Avalon 总线模块同时使所有信号失效。

例4.7 显示了具有一个等待周期的从端口写传输实例。

时序说明:

(A)写传输开始于clk 上升沿;

(B)Writedata、address、byteenable_n、write_n 信号有效;

(C)Avalon 总线模块对address 译码,并向从端口设置有效的chipselect;

(D)在第一个(也是唯一一个)总线等待周期在该clk 上升沿结束。所有来自Avalon

总线模块的信号保持不变;

(E)从端口在该clk 上升沿或之前捕获writedata、address、byteenable_n、write_n和

chipselect,写传输到此结束。另一次读或写传输可以开始于下一个总线周期。

1.4.3.2 具有外设控制等待周期的从端口写传输

外设控制等待周期使用目标外设能够根据需要将Avalon 总线模块暂停任意多个总线周期。某些外设读取数据时所需的总线周期是不固定的。因为每次传输都可能遇到不同的条件。这种传输模式对于这些外设非常适用。外设控制等待周期的传输模式使用了waitrequest 信号,它是一个从端口的输出信号。Avalon总线模块在第一个总线周期中提供address、writedata、byteenable_n、write_n、和chipselect信号,这和基本写传输开始时一样。从端口若需要额外的时间来捕获数据,它必须在下一个时钟上升沿之前设置waitrequest 有效。当waitequest 有效后,Avalon 总线模块便暂停工作,使得address、writedata、byteenable_n、write_n 和chipselect 信号保持稳定。在从端口设置waitrequest 无效后,总线传输在下一个时钟上升沿结束。Avalon 总线模块没有超时机制来限制从端口强制总线暂停的时间。当Avalon 总线模块被暂停后,系统模块内的某个主外设也被暂停,并等待着从端口读取写入的数据。这样就使得一个从外设能够将主外设永久地“挂起”。因此,外设必须保证不会使waitrequest 无限期地保持有效。例4.8 显示了一个具有外设控制等待周期的从端口写传输的实例。

时序说明:

(A)写传输开始于clk 上升沿;

(B)Address、writedata、byteenable_n、和write_n 信号有效;

(C)Avalon 总线模块对address 译码,然后置chipselect 有效;

(D)从端口在下一个clk 上升沿之前置waitrequest 有效;

(E)Avalon 总线模块在该clk 上升沿读取waitrequest。如果waitrequest 有效,这个总线周期就成为一个等待周期,address、writedata、byteenable_n 和write_n 信号保持不变;(F-G)waitrequest 一直保持有效,这可以占用任意多个总线周期;

(H)从端口最终捕获了writedata;

(I)从端口置waitrequest 无效;

(J)写传输在下一个clk 上升沿结束。另一次总线传输可以开始于下一个总线周期。若一个从端口采用了外设控制等待周期的写传输模式,对该端口的其它传输模式会有一些限制,比如不能再使用建立时间和保持时间。这些限制只影响该从端口,不影响连接到Avalon 总线模块上的其它外设。在大多数情况下,产生waitrequest 信号的外设是片上的同步外设,不需要考虑建立时间和等待时间。

1.4.3.4 具有建立时间和保持时间的从端口写传输

Avalon 总线模块按照用户设定或者外设默认,能够自动满足各个从端口信号的建立时间要求,发起读传输的主外设不必考虑各个信号对建立时间与保持时间的要求。具有建立时间的从端口写传输使用的信号与基本使用的相同,不同点只是信号的时序。这种传输方式通常用于一些片外外设,它们要求在write_n 脉冲的前后address、byteenable_n、wretedata 和chipselect 信号需要稳定一段时间。一个非零的建立时间M 意味着在address、byteenable_n、wretedata 和chipselect 信号提供给从端口之后,在write_n有效之前有M 个总线周期的延迟。同样地,一个非零的保持的保持时间N 意味着在write_n失效后,address、byteenable_n、wretedata 和chipselect 保持N 个总线周期的稳定。要注意chipselect 不受建立时间与保持时间的影响,若外设对于write_n 和chipselect 都要求有建立时间和保持时间,用户必须手工向从端口接口添加适当的逻辑(一个与门)。完成总线传输所需要的总线周期的总数取决于建立时间、等待周期和保持时间的总线周期数。例如,若一个外设具有参数Setup_Time=”2”、Read_Wait_States=”3”和Hold_Time=”2”,它将花费8 个总线周期来完成传输:2 个总线周期的建立时间,3 个总线周期的等待周期,2 个总线周期的保持时间,1 个总线周期用来捕获数据。从端口不必同时使用建立时间与保持时间,只有建立时间或只有保持时间的传输也是可以的。例4.9 显示了同时具有建立时间和保持时间的从端口写传输。

时序说明:

(A)第一个总线周期开始于clk 上升沿;

(B)Address、byteenable_n、和writedata 信号有效,write_n 仍保持无效;

(C)Avalon 总线模块对address 译码,然后置chipselect 有效;

(D)该clk 上升沿标志着建立时间总线周期结束;

(E)Avalon 总线模块置write_n 有效;

(F)Avalon 总线模块下一个clk 上升置write_n 无效;保持时间总线周期开始,Address、byteenable_n、writedata 和chipselect 信号失效,写传输到此结束。如果一个外设能够同时支持读和与传输,并且指定了建立时间,那么读传输和写传输具有同样的建立时间。

1.5 Avalon 主端口传输(略)

1.6 高级Avalon 总线传输之流传输模式

流传输模式在流模式主外设和流模式从外设之间建立一个开放的专为信道以提供连续的数据传输。这个信道使得只要存在有效数据便能在主从端口对之间流动,主外设不必为了确定从端口是否能够发送或接收数据而不断地访问从外设的状态寄存器。流传输模式使得主从端口两者之间的数据吞吐量达到最大,同时避免了外设的数据上溢或下溢。它对于DMA传输特别重要。例如一个DMA 控制器可能只包含简单的流控制信号和一个计数器,它用来在一个从外设和一个存储器之间连续地传输数据。

1.6.1 流模式从端口传输

除了在基本从端口中使用的信号之外,流模式外设的接口中又引入了三个信号:readfordata、dataavailable 和endofpacket。流模式从端口就是指使用了一个或多个上上述信号的从端口。从端口通过设置readyfordata有效来表示它已准备好接受来自Avalon总线模块的写传输。从端口通过设置dataavailable有效来表示它已能够为来自Avalon 总线模块的读传输提供数据。当这些信号无效时,会迫使Avalon 总线模块(以及发起传输的流模式主端口)等待,直到从端口准备好继续为止。

Avalon总线模块只在readyfordata 或dataavailable 有效时才会发起传输的行为(仅适用于在流模式主从端口对之间传输的情况)。非流模式的主端口可能随时向从端口发起传输,不管从端口是否为流模式端口。例如,Avalon 总线模块可以向一个流模式从端口发起一个来自于非流模式主端口(CPU)的从传输,即使此时另一个来自流模式主端口(DMA 控制器)的传输正因为dataavailable无效而在等待。

在任何传输期间,流模式从端口可以设置endofpacket 信号有效。此信号通过Avalon总线模块传递到主外设以便它能响应。对于endofpacket 信号的解释取决于用户设计。Endofpacket 信号不保证Avalon 总线模块会停止到从端口的传输流。例如,endofpacket可以用作包描述器,使得主外设能在一个长的数据流中知道包的开始与结束位置。此外,endofpacket 也可设计为用来中断传输流,迫使主端口稍后继续进行读或写传输。

流模式从端口读传输流模式从外设通过设置dataavailable 有效来表示它能够接收读传输。Avalon总线模块在dataavailable 无效时不能发起读传输。当dataavailable 有效时,Avalon 总线模块能够通过在一个clk 上升沿设置chipselect 有效来开始一次读传输,这与其它的Avalon总线相似。

Read_n、byteenable_n 和readdata 的时序与一般的从端口传输相同。用户可以设置建立时间和等待周期,包括外设控制的等待周期。在传输结束后,如果外设不能立即为以后的读传输提供数据,则必须置dataavailable无效,使得Avalon 总线模块不会试图在下一个clk 上升沿发起另一次新的读传输。当外设置dataavailable无效时,会迫使Avalon 总线模块将到这一从端口的chipselect、read_n、address 和byteenable_n 置为无效。因此,在外设将dataavailable 再次置为有效之前,Avalon 总线不会对该从端口发起另一次读传输。如果流模式主端口在从端口的dataavailable 无效时发起了一次读传输,Avalon 总线模块会简单地迫使主端口等待,直到从端口能够再次传输数据。Avalon 总线规范不规定endofpacket 的功能,该信号只是简单地通过Avalon总线模块传递给主端口。从端口应当在设置有效的readdata 的同时设置endofpacket 有效,这使得主端口可以在捕获readdata 的同时捕获endofpacket。从端口可以每次传输都使endofpack失效,也可以无限期地使endofpacket 有效,并等待主端口将它复位。

例4.17 显示了流模式从端口读传输。在这个例子中,假定一个Avalon 流模式主外设发起了一个流传输模式读序列,传输在从端口的dataavailable 有效时开始,此外假定主端口会连续不断地发起流传输操作。在传输中的某一时刻,从端口使dataavailable 失效,迫使Avalon 总线模块以及主端口等待。此后从端口再次设置dataavailable 失效,Avalon 总线模块继续从端口读取数据。在本例中,注意数据是从一个固定的从端口地址中读出的。从端口每次都

提供新的数据。这种操作在寄存器控制的外设是常见的,例如UART 和SPI。

例4.17 中的从端口在使dataavailable 失效之前的最后一个数据单元上设置endofpackete 有效。这不是必须的,endofpacket 同dataavailable 以及主外设如何响应没有内在的联系。当dataavailable 仍旧有效时,Avalon 总线模块使chipselect 和read_n 失效,从而结束了传输序列。这意味着是主端口,而不是从端口,有权结束传输序列。

流模式从端口写传输

流模式从外设通过设置readfordata 有效来表示它能够接受写传输。Avalon 总线模块在readyfordata 无效时不能发起传输。当readfordata 有效时,Avalon 总线模块能够通过在一个clk 上升沿设置chipselect 和address 有效来开始一次写传输。这与其它Avalon 总线写传输相似。Write_n、byteenable_n 和readdata 的时序与一般的从端口写传输相同。基于系统PTF 文件中的声明,传输可以使用建立时间、保持时间和等待周期,包括外设控制的等待周期。在一次传输结束后,如果外设不能接受随后的写传输数据,则必须置readyfordata 无效,使得Avalon 总线模块不会在下一个clk 上升沿发起另一次写传输。当外设使readyfordata 失效时,会迫使Avalon 总线模块将送到这一从端口的chipselect、write_n、address 和byteenable_n 置为无效。因此,在外设将readyfordata 再次置为有效之前,Avalon 总线模块不会对该从端口发起另一次写传输。如果流模式主端口在从端口的readyfordata 无效时发起了一次写传输(或继续地起连续的传输),Avalon 总线模块会简单地迫使主端口等待,直到能再次从从端口捕获数据。

Avalon 总线规范不规定endofpacket 的功能。该信号只是简单地通过Avalon 总线模块传输给主端口。从端口应该在它从Avalon 总线模块捕获了writedata 后立即设置endofpacket 有效。而且必须在chipselect 失效前设置endofpacket 有效,以便主端口能在同一总线传输中捕获endofpacket。从端口可以每次传输都使endofpacket 失效,也可以无限期地使endofpacket 有效,并等待主端口将它复位。如果流模式从外设需要一定的保持时间(非常少见的情况),那么endofpacket 应该保持有效直至Avalon 总线模块使chipselect失效(即使write_n 已失效后)。

例4.18 显示了流模式从端口写传输。在这个例子中,假定一个Avalon 流模式主外设发起

了一

个流传输操作序列,传输在从端口的readfordata 有效时开始。此外假定主端口会连续不断地发起写传输。在传输序列中的某一时刻,从端口使readyfordata 失效,迫使Avalon总线模块以及主端口等待。此后从端口再次设置readyfordata 有效,Avalon 总线模块继续从端口写传输序列。在本例中,注意数据是向一个固定的从端口地址写入的。这在操作一个寄存器控制的外设时是常见的,例如UART 和SPI。

例4.18 显示了从端口在写传输序列期间设置endofpacket 有效。这种操作依赖于主外设和从外设的设计。Endofpacket 同readyfordata 以及主外设如何响应没有内在的联系。当readyfordata 仍旧有效时,Avalon 总线模块使chipselect 和write_n 失效,从而结束了传输序列。这意味着是主端口,而不是从端口,有权结束传输序列。

时序说明:

(A)第一个总线周期开始于CLK 上升沿;

(B)从Avalon 总线到从端口的锁存输出address、write_n 和writedata 有效;

(C)Avalon 总线模块对address 译码,然后置chipselect 有效;

(D)如有必要,从端口在当前总线传输的最后一个clk 上升沿之前置endofpacket有效。在本例中,从端口在一个总线周期后使endofpacket 失效,但这对于不同的外设设计可能会不同;

(E)从端口在该clk 上升沿捕获writedata 和address;

(F-G) 在chipselect 和write_n 保持有效的每个总线周期中,Avalon 总线模块都产生有效的writedata,且从端口必须在下一个clk 上升沿捕获数据。在本例中,address保持不变,但并不是所有的外设设计都是如此;

(H) 流模式从端口使readyfordata 失效,迫使Avalon 总线模块搁置所有后续的流模式写传输。注意此时write_n、chipselect 和writedata 仍然保持有效,表明流模式主端口仍在等待传输的结束。作为对readyfordata 的响应,Avalon 总线模块随后使address、write_n、chipselect 和writedata 失效;

相关主题
相关文档
最新文档