载入中。。。
 
 
Avalon总线规范(上)
[ 2007-3-21 10:57:00 | By: edafans ]
 

Avalon总线规范

概   述

Avalon总线是一种相对简单的总线结构,主要用于连接片内处理器与外设,以构成可编程单芯片上系统(SOPC)。它描述了主从构件间的端口连接关系,以及构件间通信的时序关系。

Avalon总线的主要设计目标是:

●  简单性——提供一套容易学习、易于理解的协议

●  总线逻辑资源使用的优化——减少对可编程逻辑器件(PLD)中逻辑单元(LE)的占用

● 同步操作——这种方式能够与片上的用户自定义逻辑更好地集成,避免了复杂的时序分析问题

Avalon总线拥有多种传输模式,以适应不同外设的要求。Avalon总线的基本传输模式是在一个主外设和一个从外设之间进行单字节、半字或字(8、16或32位)的传输。当一次传输结束后,不论新的传输过程是否还是在同样的外设之间进行,Avalon总线总是可以在下一个时钟周期立即开始另一次传输。Avalon总线还支持一些高级传输模式和特性,例如支持需要延迟操作的外设、支持需要流传输操作的外设以及支持多个总线主设备并发访问。    Avalon总线支持多个总线主外设,允许单个总线事务中在外设之问传输多个数据单元。这一多主设备结构为构建SOPC系统提供了极大的灵活性,并且能适应高带宽的外设。例如,一个主外设可以进行直接存储器访问(DMA)传输,从外设到存储器传输数据时不需要处理器干预。

Avalon主从外设之间的交互是构建在从端口仲裁技术上的:当多个主外设同时要求访问同一个从端口时,从端口仲裁决定哪一个主外设取得访问权。从端口仲裁具有以下两个优点:

    ●  仲裁的细节被封装在Avalon总线内部。因而,主从外设的接口是一致的,与总线上的主从外设的数量无关。每个主外设到总线的接口都与总线上是否还有其他主外设无关

    ●  多个主外设只要不是在同一总线周期访问同一个从端口,便可同时执行多个总线传输

    Avalon总线是为SOPC环境而设计的,互连逻辑由PLD内部的逻辑单元构成。Avalon总线具有以下基本特点:

    ● 所有外设的接口与Avalon总线时钟同步,不需要复杂的握手/应答机制。这样就简化了Avalon总线的时序行为,而且便于集成高速外设。Avalon总线以及整个系统的性能可以采用标准的同步时序分析技术来评估

     ●  所有的信号都是高电平或低电平有效,便于信号在总线中高速传输。在Avalon总线中,由数据选择器(而不是三态缓冲器)决定哪个信号驱动哪个外设。因此外设即使在未被选中时也不需要将输出置为高阻态

     ●  为了方便外设的设计,地址、数据和控制信号使用分离的、专用的端口。外设不需要识别地址总线周期和数据总线周期,也不需要在未被选中时使输出无效。分离的地址、数据和控制通道还简化了与片上用户自定义逻辑的连接

AValon总线还包括许多其他特性和约定,用以支持SOPC Builder软件自动生成系统、总线和外设,包括:  

     ●  最大4GB的地址空间——存储器和外设可以映像到32位地址空间中的任意位置

     ●  内置地址译码——Avalon总线自动产生所有外设的片选信号,极大地简化了基于Avalon总线的外设的设计工作

     ●  多主设备总线结构——Avalon总线上可以包含多个主外设,并自动生成仲裁逻辑

     ●  采用向导帮助用户配置系统——SOPC Builder提供图形化的向导帮助用户进行总线配置(添加外设、指定主/从关系、定义地址映像等)。Avalon总线结构将根据用户在向导中输入的参数自动生成

     ●  动态地址对齐——如果参与传输的双方总线宽度不一致,Avalon总线自动处理数据传输的细节,使得不同数据总线宽度的外设能够方便地连接

术语和概念

与SOPC设计相关的许多术语和概念是全新的,或是与其在传统的片外总线结构中的意义有显著的不同。以下的术语和概念在后文中将会被多次到,它们构成了Avalon总线规范的概念框架。为了更好地理解Avalon总线规范,因此有必要特别说明相关术语和概念,以免混淆。

总线周期

总线周期是总线传输中的基本时间单元,定义为从Avalon总线主时钟的一个上升沿到下一个上升沿之间的时间。总线信号的时序以总线周期为基准来确定。

总线传输

 Avalon总线传输是指对数据的一次读或写操作,可能需要一个或多个总线周期来完成。AValon总线支持的传输宽度包括字节(8位)、半字(16位)和字(32位)。

流传输模式

流传输模式在流模式主外设和流模式从外设之间建立一个开放的信道,以提供连续的数据传输。只要存在有效数据,便能通过该信道在主从端口对之间传输,主外设不必为了确定从外设是否能够发送或接收数据而不断地访问从外设的状态寄存器。流传输模式使得主从端口对之间的数据吞吐量达到最大,同时避免了从外设的数据上溢或下溢。它对于DMA传输特别重要。

延迟读传输模式

    有些同步外设在第一次访问时需要几个时钟周期的延迟,此后每个总线周期都能返回数据。对于这样的外设,延迟读传输模式可以提高带宽利用率。延迟传输使得主外设可以发起一次读传输,转而执行一个不相关的任务,等外设准备好数据后再接收数据。这个不相关的任务可以是发起的另一次读传输,尽管上一次读传输的数据还没有返回。在取指令操作(经常访问连续地址)和DMA传输中,延迟传输是非常有用的。在这两种情况下,CPU或DMA主外设会预取期望的数据,从而使同步存储器处于激活状态,并减少平均访问时间。

AvalON总线模块

    Avalon总线模块是系统模块的主干,是SOPC设计中外设之间通信的主要信道。Avalon总线模块由各类控制、数据和地址信号以及仲裁逻辑组成,它将构成系统模块的外设连接起来。Avalon总线模块是一种可配置的总线结构,它可以随着用户的不同互联需求而改变。

    Avalon总线模块是由SOPC Builder自动生成的。因此系统用户不需要关心总线与外设的具体连接。Avalon总线模块很少作为分离的单元使用,这是因为用户几乎总是使用SOPCBuilder自动将处理器和其他Avalon总线外设集成到系统模块中。对于用户来说,valon总线模块通常可以被看作是连接外设的途径,如图4.1。

图4.1  Avalon  总线模块框图──一个系统实例

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

    ●  数据通道复用——Avalon总线模块中的数据选择器将数据从选中的从外设传送到        相应的主外设

●  地址译码——地址译码逻辑为每个外设产生片选信号。这简化了外设的设计,因        为外设不必各自对地址线进行译码来产生片选信号

    ●  等待周期生成——为适应具有特殊同步要求的外设,加入等待周期可以将总线传        输延长一个或多个总线周期。当目标从外设不能在一个时钟周期内响应时,总线模块会加入等待周期使主外设暂停。当读使能和写使能信号具有建立时间或保持        时间要求时也会加入相应等待周期

    ●  动态地址对齐——动态地址对齐隐藏了宽度不同的外设之间连接的细节。例如,        通过32位的主端口读传输来访问16位存储器时,动态地址对齐会自动执行两次        从端口读传输,以便从16位存储器设备中取出32位数据。这一特性简化了主外        设中硬件和软件的复杂性,因为主外设不必考虑从外设的物理特性

    ●  中断优先级分配:当一个或多个从外设产生中断时,Avalon总线模块会将中断传        递给相应的主外设,同时传递优先级最高的中断请求(IRQ)号

    ●  延迟传输功能——Avalon总线模块内部包含了在主从端口对之间进行延迟传输所        需要的逻辑

    ●  流传输模式——Avalon总线模块内部包含了在主从端口对之间进行流传输所需要        的逻辑

Avalon外设

Avalon总线上外设可以在片内,也可以在片外。它完成一定的功能,并通过Avalon总线与其他的系统构件通信。外设是模块化的系统构件,可以根据系统的要求在设计时增加或删除。

Avalon外设包括存储器和处理器,还包括传统的外设模块,例如UART、PIO、定时器和总线桥等。任何用户自定义逻辑只要提供了连接Avalon总线的地址、数据和控制信号,就能成为Avalon外设。Avalon外设连接到Avalon总线模块为其分配的特定端口上。除了Avalon总线信号外,外设还可以拥有自定义的端口,用来连接系统模块外的用户自定义逻辑。

Avalon外设分为主外设和从外设两类,能够在Avalon总线上发起总线传输的外设是主外设。一个主外设至少拥有一个连接到Avalon总线模块上的主端口。主外设也可以拥有从端口,使得该外设可以响应Avalon总线上由其他主外设发起的总线传输。从外设只能响应Avalon总线传输,而不能发起总线传输。存储器设备和UART等从外设,通常只有一个连接到Avalon总线模块上的从端口。

在SOPC环境中,区分以下两类外设是十分重要的,它们均可以是主外设或从外设。

    1.系统模块内部的外设
    如果一个外设可以在SOPC Builder的库中找到,或者用户指定了用户自定义外设的设计文件的位置,SOPC Builder便会自动将该外设连接到Avalon总线模块上。这样的外设便是系统模块内部的外设,它是系统模块的一部分。该外设连接Avalon总线模块的地址、数据和控制端口的细节对于用户来说是透明的,其他非Avalon总线的端口作为系统模块的端口引出到外部,这些端口可以直接连接到物理设备引脚,也可以连接到其他片上模块的端口。

2.系统模块外部的外设

Avalon总线外设也可以位于系统模块的外部。用户将外设放置在系统模块外部可能出于以下几种原因:

●  外设实际存在于PLD芯片的外部

●  外设需要通过一些时序转换逻辑来连接Avalon总线信号

● 外设的设计在生成系统模块时尚未完成 
 
在以上情况下,可以把Avalon总线模块信号作为系统模块的端口引出到外面,连接到外部的外设。

主端口

主端口是主外设用于在Avalon总线上发起传输的一组信号。主端口直接连接到Avalon总线模块上。实际上,一个主外设可以拥有一个或多个主端口,也可以拥有从端口。这些主端口和从端口之间的相互关系取决于外设的设计,而在这些端口上的单个总线传输必须符合Avalon总线规范。主传输是指以主端口的视角进行描述的Avalon总线传输。

从端口

从端口是外设用于接受来自另一个Avalon外设主端口的总线传输的一组信号,从端口直接连接到Avalon总线模块上。实际上,主外设也可以拥有从端口,使得它能够响应来自Avalon总线上其他主外设的总线传输。从传输是指以从端口的视角进行描述的Avalon总线传输。

    主从端口对

主从端口对是指通过Avalon总线模块连接到一起的一个主端口和一个从端口的组合。在结构上,这些主端口和从端口连接到Avalon总线模块的相应端口上。实际上,主端口的控制和数据信号穿过Avalon总线模块,与从端口进行交互。主端口和从端口之间的连接,即建立主从端口对,是在SOPC Builder中指定的。

PTF文件与SOPC BuiIder参数和选项

Avalon总线和外设的配置是在SOPC Builder的GUI界面中指定的。用户在GUI界面中指定各种参数和选项,这些参数和选项会存入一个系统PTF文件。PTF文件是一个文本文件,它完整地定义了以下内容:

●  Avalon总线模块结构与功能的参数

●  每个外设结构与功能的参数

●  每个外设的主/从角色

●  每个外设提供的端口信号(例如读使能、读数据、写使能、写数据)

● 每个可被多个主端口访问的从端口的仲裁机制

PTF文件传递给HDL生成器用来创建系统模块实际的寄存器传输级(RTL)描述。

3.Avalon总线传输

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

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

3.1  主端口接口与从端口接口
  
当讨论Avalon总线传输时,必须注意讨论的是总线的哪一边,是主端口接口还是端口接口。由主端口输出的信号与输入到目标外设的从端口的对应信号可能会有较大的差别。

从端口的信号活动总是主外设发起总线传输的结果。但是,实际的从端口输入信号并非直接来自主端口。Avalon总线模块传递来自主端口的信号,并对信号进行裁剪(例如插入等待周期;在主端口间进行仲裁),以满足从外设的需要。

由于以上原因,对Avalon总线传输的介绍将分为主传输类型和从传输类型两个部分。大多数用户只关心从传输,因为他们设计的用户自定义外设一般都是从外设。这时,用户只需考虑Avalon总线模块和用户自定义外设之间的信号。只有当用户创建主外设时才涉及到主传输。

3.2 Avalon总线时序
 
Avalon总线是一个同步总线接口,由一个Avalon总线主时钟定时,所有总线传输的信号都与Avalon总线时钟同步。同步总线接口并不意味着所有的Avalon总线信号都是锁存的。比如,Avalon的chipselect信号便是由组合逻辑产生的,其输入是同步于Avalon总线时钟的寄存器的输出。因此,外设不能使用Avalon信号的边沿,因为Avalon信号在达到稳定之前会变化多次。就像所有同步设计一样,Avalon总线外设只能在时钟上升沿对稳定的信号作出响应,且必须在时钟上升沿输出稳定的信号。

Avalon总线模块也可以连接异步外设,例如片外异步存储器。但设计时需要考虑一些额外因素:由于Avalon总线模块的同步操作,Avalon信号只以Avalon总线时钟周期为间隔变化。此外,如果异步外设的输出直接连接到Avalon总线模块,用户必须保证输出信号在时钟上升沿之.前达到稳定。

    Avalon总线规范并不定义在时钟上升沿之间信号是如何变化的。信号的变化由Avalon总线时钟触发,信号只要在捕获时钟上升沿之前达到稳定就可以了。因此总线规范中的Avalon总线时序图中不会描绘精确的时间信息。在时钟上升沿之间信号是可变的,它取决于用于实现系统的Altera PLD器件的特性。类似地,Avalon总线没有规定固有的最高性能。系统模块在特定的器件上综合布线之后,用户必须对系统模块进行标准的时序分析,以确定Avalon总线传输能达到的最高速度。

3.3 AvaIon总线信号
  
由于Avalon总线是一个由HDL文件综合而来,所以在连接Avalon总线模块和Avalon外设时需要一些特别的考虑。对于传统的片外总线结构,所有外设都共享一组固定的、预先设计的金属线路,而Avalon总线与此不同:SOPC Builder必须准确地了解每个外设提供了哪些Avalon端口,以便连接外设与Avalon总线模块。它还需要了解每个端口的名称和类型,这些信息定义在系统PTF文件中。

    Avalon总线规范不要求Avalon外设必须包含哪些信号。它只定义了外设可以包含的各种信号类型(例如地址、数据、时钟等)。外设的每一个信号都要指定一个有效的Avalon信号类型,以确定该信号的作用,一个信号也可以是用户自定义的。在这种情况下,SOPCBuilder不将该端口与Avalon总线模块连接。Avalon信号类型首先分为主端口信号和从端口信号两类。因而,外设使用的信号类型首先由端口的主/从角色来决定。每个单独的主端口或从端口使用的信号类型由外设的设计决定。例如,设计一个只有输出的PIO从外设只需定义用于写传输(输出方向)的信号,而不需定义用于读传输的信号。尽管中断请求(IRQ)输出是从端口允许的信号类型,但也不是必须使用。

Avalon总线规范不规定Avalon外设信号的命名规则。不同信号类型的作用是预先定义的,而信号的名称是则由外设决定。信号可以按照它的信号类型来命名,也可以遵照系统级的命名规范采用不同的名称。下面的章节中讨论Avalon总线传输时会涉及到一些Avalon信号,例如readdata信号和irq信号。在这里将信号类型的名称作为信号名称,但外设信号的实际名称可以与此不同。

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


表4.1中列举的信号类型都是高电平有效。Avalon总线还提供了各个信号类型的反向形式。在PTF声明中,在信号类型名称后面添加“_n”,便可将对应的端口声明为低电平有效。这对许多使用低电平有效逻辑的片外外设非常有用。

不论外设实现在系统模块的内部还是外部,Avalon总线信号及操作都是相同的。在内部实现的情况下,SOPC Builder自动将外设的主端口或从端口连接到Avalon总线模块。在外部实现的情况下,用户必须手工地将主端口或从端口连接到系统模块。在任何情况下,Avalon总线信号的行为都是相同的。

3.4并发多主端口的AvaIon总线需考虑的事项

    Avalon总线允许多个主端口连接到Avalon总线模块。而且实现Avalon总线的并发多主端口功能时,Avalon总线模块不需要额外的特殊信号。当多个主外设试图同时访问同一个从外设时,Avalon总线模块内部的从端口仲裁逻辑会被用来解决冲突。仲裁机制对于Avalon总线外设是完全透明的。因而,不论是否使用了仲裁,应用于主端口和从端口的Avalon总线传输协议是相同的。

    换句话说,从端口不会意识到有多个主外设同时请求总线传输。类似地,被仲裁逻辑强制等待的主外设也不会意识到另一个获胜的主外设的存在。主端口只是简单地发现它的等待请求信号被置为有效,并一直等待,直到目标从外设准备好处理总线传输。将仲裁的细节隐藏在Avalon总线模块内部极大地简化了外设的设计,任何Avalon外设在单主端口和多主端口结构中都可以使用。

4.Avalon从端口传输

    本节讨论从端口和Avalon总线之间的总线传输。从一个抽象的、系统级的视角来看主外设与从外设如何交换数据。然而,以从外设的视角来看,数据传输发生在外设的从端口和Avalon总线模块之间。在下面关于从端口的总线传输的讨论中,假定在Avalon总线上的某个主外设已成功地在Avalon总线模块的主端口一边发起了一次传输。作为结果,Avalon总线模块随后对相应地从端口发起总线传输。本节讨论的焦点仅限于Avalon总线模块和从端口之间的交互。

4.1的AvaIon总线信号

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


 表4.2  从传输的  Avalon总线信号

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

在下面对Avalon从传输的讨论中,read、write和byteenable信号将采用低电平有效的形式,这与采用低电平有效的读使能、写使能和字节使能的传统习惯相似。这些信号以read_n、write_n和byteenable_n的形式出现。

在真实的环境下,总线传输不是孤立的事件,它们经常是连续发生的。例如,一个从端口读传输之后会紧接着一个不相关的写传输。所以在下面的时序图中,在读(写)传输之前或之后,信号显示为未定义值。

4.2 AVaIon总线上的从端口读传输

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   基本从端口读传输
上述信号如果不加说明都是高电平有效,此外,Avalon总线也提供上述信号的低电平有效版本,在信号名称后添加“一n”表示是低电平有效,如:read信号为高电平有效,而read_n为低电平有效。

在下面对Avalon从传输的讨论中,read、write和byteenable信号将采用低电平有效的形式,这与采用低电平有效的读使能、写使能和字节使能的传统习惯相似。这些信号以read_n、write_n和byteenable_n的形式出现。

在真实的环境下,总线传输不是孤立的事件,它们经常是连续发生的。例如,一个从端口读传输之后会紧接着一个不相关的写传输。所以在下面的时序图中,在读(写)传输之前或之后,信号显示为未定义值。

4.2 AVaIon总线上的从端口读传输

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的下降沿不能用作读传输开始的标志,因为这些边沿的稳定性是没有保证的。

4.2.2待周期的从端口读传输

具有固定等待周期的从端口读传输使用的信号与基本读传输使用的相同,不同点只是信号的时序。具有等待周期的从端口读传输适用于不能在一个时钟周期内提供数据的外设。

例如,若指定了一个等待周期,Avalon总线模块在提供了有效的地址和控制信号后,会等待一个时钟周期再捕获外设的数据。Avalon总线模块在每次读传输时都会等待固定数量的总线周期。

例4.2显示了具有单个等待周期的从端口读传输的时序。Avalon总线模块在第一个总线周期中提供address、byteenable_n、read_n和chipselect信号。由于具有等待周期,外设不必在第一个总线周期内提供readdata。第一个总线周期是第一个(也是惟一一个)等待周期。从端口可以随时捕获地址和控制信号,片上的同步外设通常在第二个总线周期开始(等待周期结束)时的clk上升沿捕获地址和控制信号。在第二个总线周期期间,目标外设向Avalon总线模块提供readdata。在第三个也是最后一个时钟上升沿,Avalon总线模块由从端口捕获readdata并结束总线传输。

时序说明:

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

(B)address和read_n信号有效;

(C)Avalon总线对address译码,并设置chipselect有效;

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

(D)clk上升沿标志着第一个且是惟一的一个等待周期结束。如果从端口是同步的,它可以在clk上升沿捕获address、read_n和chipselect;
(E)从端口在第二个总线周期内返回有效数据;
(F)Avalon总线在clk上升沿捕获readdata,读传输到此结束。另一次总线传输可以开始于下一个总线周期。

具有单个等待周期的读传输经常用于同步的片上外设。在合理的PLD设计中,模块间的接口应当通过寄存器来同步。加入了一个等待周期后,外设可以在chipselect有效后的下一个clk 上升沿捕获address、byteenable_n、read_n和chipselect,这使得目标外设具有至少一个完整的总线周期来向Avalon总线模块提供返回数据。

    例4.3显示了具有多个等待周期的从端口读传输。它和例4.2几乎是一样的,只是Avalon
总线在由从外设获取readdata之前等待多于一个总线周期。

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

    外设控制的等待周期使得目标外设能够根据提供数据的需要将Avalon总线模块的读操作暂停(stall)任意多个总线周期。在这种传输模式下,外设向Avalon总线模块提供数据所需的时间是不固定的。

例4.4显示了这种情况,外设控制等待周期的读传输模式使用了waitrequest信号。它是一个从端口的输出信号。当从端口的read_n信号有效后,从端口若要延长读传输,它必须在第一个总线周期内返回waitrequest。当waitrequest有效后,Avalon总线模块便暂停工作,不再捕获readdata。Avalon总线模块在waitrequest失效后的下一个clk上升沿捕获readdata。

例4.3 具有多个固定固定塬从端口读传输 

    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信号的外设是片上的同步外设,不需要考虑建立时间和等待时间。

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

4.2.4具有建立时问的从端口读传输

Avalon总线模块按照用广设定或者外设默认,能够自动满足各个从端口信号的建立时间要求,发起读传输的主外设不必考虑各个信号对建立时间与保持时间的要求。具有建立时间的从端口读传输使用的信号与基本读传输使用的相同,不同点只是信号的时序。

 这种传输方式通常用于一些片外外设,它们要求在读使能信号有效前address和chipselect信号需要稳定一段时间。一个非零的建立时间N意味着在address、bytenablei_n和Ichipselect信号提供给从端口之后,在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仍保持无效;

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

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

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

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

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

(G)外设提供有效的readdata;

(H)Avalon总线在clk上升沿捕获readdata,开始于下一个总线周期。

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

4.3在AVaIon总线上的从端口写传输

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位的外部存储器。

表4.3   32位从端口字节使能的使用


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

 具有固定等待周期的从端口写传输使用的信号与基本写传输使用的相同,不同点只是信号的时序:Avalon总线模块在每次总线传输时都会插入固定数量的等待周期。

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

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


时序说明:

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

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

(c)Avalon总线模块对address译码,并向从端口设置有效的chipselect;
(D)第一个(也是惟一一个)总线等待周期在该clk上升沿结束。所有来自Avalon总线模块的信号保持不变;

(E)从端口在该clk上升沿或其之前捕获writedata、address、byteenable??_n、write_n和chipselect,写传输到此结束。

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

外设控制等待周期使得目标外设能够根据需要将Avalon总线模块暂停任意多个总线周期。某些外设读取数据时所需的总线周期是不固定的。因为每次传输都可能遇到不同的条件。这种传输模式对于这些外设非常适用。

外设控制等待周期的传输模式使用了waitrequest信号,它是一个从端口的输出信号。Avalon总线模块在第一个总线周期中提供address、writedata、byteenable_n、write_n和chipselect信号,这和基本写传输开始时一样。从端口若需要额外的时间来捕获数据,它必须在下一个时钟上升沿之前设置waitrequest有效。当waitrequest有效后,Avalon总线模块便暂停工作,使得address、writedata、byteenable_n、write_n和chipselect信号保持稳定。在从端口设置waltrequest无效后,总线传输在下一个时钟上升沿结束。

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信号的外设是片上的同步外设,不需要考虑建立时间和等待时间。

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

4.3.4问和保持时间的从端口写传输

Avalon总线模块按照用户设定或者外设默认,能够自动满足各个从端口信号的建立时问要求,发起读传输的主外设不必考虑各个信号对建立时间与保持时问的要求。具有建立时间的从端口写传输使用的信号与基本写传输使用的相同,不同点只是信号的时序。

这种传输方式通常用于一些片外外设,它们要求在write_n脉冲的前后address、byteenable_n、writedata和chipselect 信号需要稳定一段时间。一个非零的建立时间M意味着在address、byteenable_n、writedata和chipselect信号提供给从端口之后,在write_n有效之前有M个总线周期的延迟。同样地,一个非零的保持时间N意味着在write_n失效之后,address、byteenable_n、writedata和chipselect保持N个总线周期的稳定。要注意chipselect不受建立时间与保持时间的影响,若外设对于write_n和chipselect都要求有建立时间和保持时间,用户必须手工向从端口接口添加适当的逻辑(一个与门)。

完成总线传输所需的总线周期的总数取决于建立时问、等待周期和保持时间的总线周期数。例如,若一个外设具有参数Setup_Time=“2”、Read_Wait_States=“3”和Hold_Time=“2”,它将花费8个总线周期来完成传输:2个总线周期的建立时间,3个总线周期的等待周期,2个总线周期的保持时间,1个总线周期用来捕获数据。

从端口不必同时使用建立时间与保持时问,只有建立时间或只有保持时间的传输也是可以的。例4.9显示了同时具有建立时间和保持时间的从端口写传输。

例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、writedata、byteenable_n和chipselect信号保持不变;

(G)Avalon总线模块在下一个clk上升沿使address、byteenable_n、writedatatat和chipselect信号失效,写传输到此结束。

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

4.5 Avalon主端口传输

本节讨论主端口和AvaIon总线之间的总线传输。从一个抽象的、系统级的视角来看,是主外设与从外设交换数据。然而,以主外设的视角来看,数据传输只发生在外设的主端口和Avalon总线模块之间。如果主外设访问的地址并不在Avalon总线已定义的外设地址的范围内,便会产生未知结果。然而,从外设是否存在并不影响主端口与Avalon总线模块之间的接口:Avalon总线模块接受来自主端口的传输,随后向相应的从端口发起和终止从传输。因而,本节讨论的焦点仅限于Avalon总线模块和主端口之间的接口。

与多种Avalon从传输模式相比,主传输模式较少且简单。在下面的讨论中假定Avalon主外设是一个同步的片上模块,这对于Avalon主外设来说几乎总是正确的。对于主端口传输,有一条原则:在发起总线传输时设置所有信号有效,然后等待直至Avalon总线模块使waitrequest信号失效。有了这一原则,再考虑到基本从端口读传输和写传输,主端口的接口便非常容易理解了。

4.5.1 主传输的AvaIon信号

表4.4列举了外设的主端口与Avalon总线模块之间接口的信号类型。外设提供的端口由外设的设计决定,不需要提供表4.4列出的全部信号。

表4.4   Avalon 主端口信号

4.5.2 AvaIon总线上的基本主端口读传输

在基本主端口读传输中,主端口通过向Avalon总线模块提供有效的地址和读请求信号 (在时钟上升沿)发起总线传输。在理想的情况下,读取的数据在下一个时钟上升沿之前从Avalon总线模块返回,总线传输在一个总线周期内结束。如果在下一个时钟上升沿读取的数据还未准备好,Avalon总线模块便设置一个等待请求并使主端口暂停,直至数据从目标从端口取回。基本主端口读传输没有延迟。

主端口读传输开始于clk的上升沿。在第一个clk上升沿之后,主端口立即设置address和read_n有效。如果Avalon总线模块不能在第一个总线周期内提供readdata,它会在下一个clk上升沿之前设置waitrequest有效。如果主端口在clk上升沿发现waitrequest有效,它则会等待。主端口必须使所有输出信号保持稳定,直到waitrequest失效后的下一个clk上升沿。在waitrequest失效后,主端口在下一个clk上升沿捕获readdata,并使address和read_n失效。主端口可以在下一个总线周期立即发起另一次总线传输。

例4.10显示了Avalon总线模块未设置waitrequest时的读传输。读传输在一个总线周期内结束。

注意:即使waitrequest信号从未有效,它仍然是在基本主端口读传输中起作用的信号。

例4.10 无等待周期的基本主端口读传输 


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

(B)主端口设置有效的address、byteenable_n和read_n;

(C)有效的readdata在第一个总线周期内从Avalon总线模块返回;

(D)主端口在下一个clk上升沿捕获readdata,并使它的所有输出信号失效。读传输到此结束,另一次总线传输可以开始于下一个总线周期。

无等待周期的基本主端口读传输通常只在目标从外设是异步的且无延迟时有用。

例4.11显示了Avalon总线模块设置了时钟周期数不定的waitrequest信号时的读传输。如果Avalon总线模块设置了N个总线周期的waitrequest信号,整个总线传输将花费(N+1)个总线周期。

时序说明:

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

(B)主端口设置有效的address、byteenable n和read n:

(C)Avalon总线模块在下一个clk上升沿之前置waitrequest有效;

(D)主端口在clk上升沿发现waitrequest有效。这一总线周期变为一个等待周期;

(E-F)在waitrequest有效期间,主端口使所有输出信号保持稳定;

(G)有效的readdata从Avalon总线模块返回;

(H)Avalon总线模块置waitrequest无效;

(I)主端口在下一个clk上升沿捕获readdata,并使所有输出信号失效。读传输到此结束,另一次总线传输可以开始于下一个总线周期。

Avalon总线模块没有对主端口进行超时限制。在waitrequest信号保持有效期间,主端口必须一直暂停。

如果主端口使用了byteenable_n信号,所有的byteenable_n信号线在主端口读传输期间必须置为有效。在向较宽的外设进行写传输期间,主端口可以使用byteenable_n指定个别的字节段。但byteenable_n在主端口读传输中不使用,且必须置为有效。

4.5.3 AValon总线上的基本主端口写传输

几乎对所有无延迟外设的写操作都会采用基本主端口写传输。主端口通过向Avalon总线模块提供有效的地址、数据和写请求信号,在时钟上升沿发起总线传输。在理想的情况下,目标外设在下一个时钟上升沿之前捕获数据,写传输在一个总线周期内结束。如果目标外设不能在第一个总线周期内捕获数据,Avalon总线模块便会使主端口暂停,直至从端口捕获了数据。

    主端口写传输开始于clk的上升沿。在第一个clk上升沿之后,主端口立即设置address、writedata和write_n有效。如果数据不能在第一个总线周期内被捕获,Avalon总线模块会在下一个clk上升沿之前设置waitrequest有效。主端口必须使address、writedata和write_n保持稳定,直到waitrequest失效后的下一个clk上升沿。在waitrequest失效后,主端口在下一个clk上升沿使address、writedata和write_n失效。主端口可以在下一个总线周期发起另一次总线传输。

例4.12显示了基本主端口读传输的一个例子。在这个例子中,Avalon总线模块未设置waitrequest信号,写传输在一个总线周期内结束。

例4.12  基本主端口写传输 

时序说明:

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

(B)主端口设置有效的addreSS、byteenable_n、writedata和write_n;

(C)在该clk上升沿waitrequest无效,因而读传输到此结束,另一次读或写传输可以紧跟在下一个总线周期。

无等待周期的基本主端口写传输通常只在目标从外设是异步的且无延迟的情况下有用

例4.13显示了另一个例子,Avalon总线模块设置了2个总线周期的waitrequest信号,整个总线传输花费3个总线周期。

例4.13  具有2个周期等待请求的基本主端口读传输 

时序说明:

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

(B)主端口设置有效的address、byteenable_n、writedata和write_n;

(C)waitrequest在该clk上升沿有效,因而这一总线周期成为第一个等待周期。主端口使所有输出信号保持稳定;

(D)waitrequest在该clk上升沿仍然有效,因而这一总线周期成为第二个等待周期。主端口使所有输出信号保持稳定;

(E)Avalon总线模块置waitrequest无效;

(F)在该clk上升沿waitrequest无效,因而主端口使所有输出信号失效,读传输到此结束。另一次读或写传输可以紧跟在下一个总线周期。

主端口可以通过字节使能信号byteenable_n写入特定的字节段。若提供了该信号,byteenable_n是一组2或4位的信号线,其中每一位对应于writedata的一个字节段。byteenable_n通常用于片外采用16位或32位字寻址的存储器设备。当写入单个字节数据时,address仅指定相应的字或半字地址,而byteenable_n精确地指定要写入哪个字节。表4.5是32位主端口使用byteenable_n的一些例子。

表4.5  32位主端口字节使能的使用 

若要写入单个字节,主端口应当将字节地址向下对齐到最近的主设备字边界,然后设置byteenable_n[字节地址-主端口字地址]位有效。如果主端口没有byteenable引脚,Avalon总线模块认为来自这一主端口的所有写入数据的字节段全部有效。

举例来说,一个32位的主端口要写入地址为OxE的一个字节,它应当将地址线置为OxC,并置byteenable[3]有效。一个64位的主端口若要写入同一位置的一个字节,它应当使用地址Ox8,并置byteenable[7]有效。

 
 
  • 标签:Avalon总线 SOPC 规范 
  •  
    Re:Avalon总线规范(上)
    [ 2009-3-13 8:45:00 | By: 访客txo0Rf(游客) ]
     
    访客txo0Rf(游客)顶,很好!
     
    个人主页 | 引用 | 返回 | 删除 | 回复
     
     
    Re:Avalon总线规范(上)
    [ 2007-6-26 9:02:00 | By: hhh_gjf ]
     
    hhh_gjf翻译的不错
     
     
     
    Re:Avalon总线规范(上)
    [ 2007-5-19 10:28:00 | By: ustchero(游客) ]
     
    ustchero(游客)这个规范翻译得不错,比开着金山词霸看英文版好多了。
    只是这么多传输模式,对每一种有标准的verilog代码描述就好了。
     
    个人主页 | 引用 | 返回 | 删除 | 回复
     
     
    Re:Avalon总线规范(上)
    [ 2007-4-5 14:46:00 | By: 欣阳(游客) ]
     
    欣阳(游客)找到这篇文章真是太好了!谢谢!
     
    个人主页 | 引用 | 返回 | 删除 | 回复
     
    发表评论:
    载入中。。。

    载入中。。。
    时 间 记 忆
    载入中。。。
    最 新 评 论
    载入中。。。
    专 题 分 类
    载入中。。。
    最 新 日 志
    载入中。。。
    最 新 留 言
    载入中。。。
    搜 索
    用 户 登 录
    载入中。。。
    友 情 连 接
    博 客 信 息
    载入中。。。