[转帖]Altera中Avalon突发传输


来源:http://wenku.baidu.com/view/87ee42886529647d272852ed.html

Avalon-MM 传输
Avalon-MM 的传输定义为外设(peripheral)与Avalon-MM 总线模块间的数据传输,分为Master 端传输和Slave 端传输两类,每类传输又分为基本(fundamental)传输、流水线(pipelined)传输、突发(burst)传输,以及带有流控制(Flow control)的传输和专门针对片外端口的三态(Tri-State)传输。一个Master 端传输和一个对应的Slave 端传输即可完成两个外设通过总线模块进行的一次数据传输,但Master 端传输与Slave 端传输的模式并不要求一致,两端传输模式可以随意搭配。同种类型的Master 端传输与Slave 端传输在时序上基本是一致的,其区别仅在于Master 端传输是由Master 端外设驱动总线模块,而Slave 端传输是由总线模块驱动Slave 端外设,以下对Avalon-MM 传输进行简单介绍是以Slave 端传输为例,所有要点都可应用于Master 端传输。

BURST模式是为了尽可能多传输数据。

Avalon交换架构 端口突发传输

Avalon接口支持突发传输。突发模式下,多个传输作为一个单元来处理,而不是每个数据单元作为一个独立的传输。突发传输最大化从端口的吞吐量,在从端口处理来自一个主端口的多个数据单元的时候可以达到最高的效率。

突发传输保证了主端口在突发传输的期间内对目标从端口的访问不会被打断。一旦一个主从端口对之间的突发传输开始,直到突发传输结束,Avalon交换架构不再允许任何其它的主端口访问该从端口。
Avalon主/从端口通过包含信号burstcount来支持突发传输。下面是主从端口的burstcount信号的特性:
Burstcount信号宽度必须是2~32。
在突发传输的开始,burstcount信号提供一个编码的值,指示当前的突发传输中包含有多少个连续的传输。
burstcount的最小值是1。
burstcount值为1的突发传输等同于一个单独的非突发的传输。
对于burstcount宽度为N的情况,最大突发长度为2N-1. 此时,burstcount的最高为为1,所有其它位是0。
Avalon突发传输不能保证主端口或从端口每个时钟周期进行一次传输。突发传输能够保证在突发传输期间主从端口对的仲裁是所定的。突发传输需要的时间是不确定的,取决于主从端口的外设逻辑。
4.9.1 限制

支持突发传输的端口面临如下的限制:
为了支持主端口的突发读传输,主端口必须支持流水线传输。由于流水线模式的主端口不允许使用三态属性,因此突发模式的主端口不能使用三态属性
为了支持从端口突发读传输,从端口必须支持:
可变的等待周期,即该端口必须包含waitrequest。因此,该端口不能使用建立和保持时间,这两个属性在使用可变等待周期的端口中是不允许的。
具有可变的延迟的流水线传输,即该端口必须包含readdatavalid信号。因此,从端口不能使用三态属性,三态属性在具有可变延迟的流水线端口中是不允许的。
4.9.2 主端口突发传输

对Avalon主端口来说,burstcount信号是输出信号。除了burstcount信号,突发传输还影响address、read、readdata、eaddatavalid、write、writedata和byteenable信号的行为。
突发传输开始时,主端口在address上发出有效的地址,在burstcount发出突发传输的长度。每一次突发传输主端口只发出一个地址值,对于突发传输中所有传输的地址由Avalon交换架构自动地推断。
当主端口开始地址为A,burstcount值为B的突发传输,该主端口提交了从地址A开始的B个连续的传输。突发传输直到主端口传输了B个单元的数据才完成。在当前的突发传输完成之前,主端口不能终止该突发传输,或者给出一个新地址。
4.9.2.1. 主端口突发写传输

主端口突发写传输的开始和主端口基本写传输是相似的。除了burstcount信号之外,主端口发出address、writedata、write和byteenable(如果需要)信号。如果Avalon交换架构还没有准备好,它在下一个clk的上升沿之前发出waitrequest。最后,Avalon交换架构使waitrequest失效, 同时在下一个clk的上升沿捕获address和burstcount信号。Avalon交换架构还在这个clk的上升沿捕获writedata的第一个数据单元。主端口必须在突发传输期间保持address、byteenable和burstcount不变。
Address和burstcount信号规定了剩余的突发传输的行为。当主端口发起了burstcount值大于1的突发传输,须遵循一下的规则:
如果主端口指定了burstcount值为N,那么要完成突发传输,主端口必须在N个clk的上升沿发出write信号,并且提供新的writedata。仲裁端口对的仲裁被锁定直到主端口完成该突发传输。
主端口可以通过在clk的上升沿使write信号失效来延迟传输,这样能够阻止Avalon交换架构捕获当前时钟周期的writedata。
Avalon交换架构可以通过发出waitrequest来延迟传输,这样做强迫主端口在一个附件的时钟周期内保持writedata和write不变。
主端口必须在整个突发传输期间内置所有的byteenable信号线有效。.

主端口突发写传输

(A) 主端口发出address、burstcount、write和writedata的第一个单元。本例中,burstcount值为4。
(B) Avalon交换架构置waitrequest有效,表明它没有做好处理突发传输的准备。作为响应,主端口保持所有输出不变。
(C) Avalon交换架构置waitrequest无效。
(D) Avalon交换架构在clk的上升沿捕获address、burstcount、write和writedata的第一个单元(D0)。
(E) 主端口置address和burstcount无效, 这两个信号在突发传输的剩余部分被忽略。主端口提供writedata 的下一个单元(D1)。
(F) Avalon交换架构在clk的上升沿捕获writedata下一个单元 (D1)。
(G) 主端口置write无效,表示它这个周期没有有效的writedata。
(H) write信号为无效,所以Avalon交换架构在材料库的上升沿不捕获writedata。
(I) 主端口提供有效的writedata (D2) ,并重新置write有效。
(J) Avalon交换架构在clk的上升沿捕获writedata (D2) 。
(K) 主端口提供writedata 的最后的一个单元(D3).
(L) Avalon交换架构置waitrequest有效,导致主端口在整个时钟周期内保持所有的输出不变。
(M) Avalon交换架构使waitrequest无效。
(N) Avalon交换架构在clk的上升沿捕获writedata 的最后的单元(D3)。主端口突发写传输结束。
4.9.2.2 主端口突发读传输
主端口突发读传输和具有延迟的主端口流水线读传输是相似的。主端口突发读传输具有明显的地址阶段和数据阶段,并且使用readdatavalid信号来指示主端口何时必须捕获readdata。不同点在于一个单独的突发传输地址对应多个数据阶段。
主端口突发读传输的开始类似于主端口的流水线读传输。主端口除了burstcount信号之外,还发出address和read信号。如果Avalon交换架构没有准备好,它就在下一个clk的上升沿之前发出waitrequest信号。最后,Avalon交换架构使waitrequest失效,同时在下一个clk的上升沿捕获address和burstcount。这时地址阶段结束。多个数据阶段随之开始。
当主端口开始burstcount值大于1的读传输,要遵循下面的规则:
如果主端口制定了burstcount值为N,那么要完成突发传输,Avalon交换架构必须确保在N个clk的上升沿发出readdatavalid。主端口端口对的仲裁一直保持锁定,直到Avalon交换架构返回突发传输的所有数据。
只要Avalon交换架构置readdatavalid信号有效,主端口必须捕获readdata。Readdata的每一个值只是在这个时钟周期有效。
主端口必须在整个突发传输期间置所有的byteenable信号线有效。

主端口突发读传输

(A) 主端口发出address、burstcount和read。本例中,burstcount值为4。
(B) Avalon交换架构置waitrequest有效,表示它没有做好处理突发传输的准备。作为响应,主端口保持所有的输出不变。
(C) Avalon交换架构置waitrequest无效。
(D) Avalon交换架构在clk的上升沿捕获address和burstcount。 主端口可以在此clk的上升沿开始一次新传输或突发传输。 (本例中不是如此).
(E) 这是Avalon交换架构可以返回有效readdata的最早的时钟上升沿。本例中,Avalon交换架构没有发出readdatavalid,所以主端口不捕获readdata。
(F) 一段时间后,Avalon交换架构提供有效的readdata,并置readdatavalid有效。
(G) 主端口在clk的上升沿捕获readdata 的第一个单元(D0)。
(H) 主端口在clk的上升沿捕获readdata的下一个单元 (D1)。
(I) Avalon交换架构没有有效的readdata,所以它置readdatavalid无效。Avalon交换架构可以保持eaddatavalid 无效任意个时钟周期。
(J) 一段时间后,Avalon交换架构提供有效的readdata,并重新置readdatavalid有效。
(K) 主端口在clk的上升沿捕获readdata 的下一个单元(D2) 。
(L) 主端口在clk的上升沿捕获readdata最后的单元(D3) 。主端口突发读传输结束。
4.9.3 从端口突发传输

对于Avalon从端口来说,burstcount是一个输入信号。突发传输除了影响burstcount的行为,还对address、read、readdata、readdatavalid、write、writedata和byteenable信号的行为产生影响。从端口还可以使用输入信号beginbursttransfer,Avalon交换架构在每个突发传输的第一个时钟周期发出该信号。
在突发传输开始时,Avalon交换架构在address上发出有效的地址,在burstcount上发出突发传输的长度。对于地址为A、burstcount 值为B的突发传输,从端口从地址A开始,执行B个连续的传输。突发传输在从端口处理完第B个数据单元之后结束。
一次突发传输,从端口只捕获一次地址。突发传输从这个捕获的地址开始,外设的逻辑推断出突发传输中所有剩余传输的地址。推断出的地址与从端口使用的是本地地址对齐还是动态地址对齐有关:
如果使用本地地址对齐,地址保持不变。例如,address为0x1000、burstcount值为0x0A的突发写传输,向不变的地址0x1000写入10个数据单元。
如果使用动态地址对齐,每传输一个数据单元从端口地址增加1。例如,address为0x1000、burstcount值为0x04的写传输,会向从端口地址0x1000、0x1001、0x1002和0x1003传输4个数据单元。
4.9.3.1 从端口突发写传输

从端口突发写传输的开始是和从端口基本写传输的开始相类似的。Avalon交换架构除了burstcount之外,还发出chipselect、address、byteenable、writedata和write信号。如果从端口没有准备好进行传输,它就在下一个clk的上升沿之前置waitrequest有效。最后,从端口置waitrequest无效,并且在下一个clk的上升沿捕获address和burstcount。从端口也在这个clk的上升沿捕获writedata的第一个单元。这是从端口捕获有效的burstcount和address的唯一时刻。
当从端口开始burstcount值大于1的突发写传输,需要遵循如下的规则:
如果Avalon交换架构指定burstcount值为N,要完成突发传输,从端口必须接受N 个连续的writedata数据单元。支持端口对之间的仲裁被锁定直到突发传输结束,以保证数据按照主端口发起突发传输的顺序到达。
从端口必须只在write有效的时才捕获writedata。对于第2个或其后的数据单元,Avalon交换架构能够在任意的clk的上升沿使write失效,来表示它现在没有提供有效的writedata。这不会终止突发传输,只会延迟突发传输直到Avalon交换架构重新置write有效。
chipselect信号是write的反映。当Avalon交换架构使write失效,同是也使chipselect失效。
从端口可以在clk的上升沿通过置waitrequest有效来延迟传输, 这将强迫Avalon交换架构在一个额外的周期内保持writedata、write和byteenable不变。
Avalon交换架构在突发传输期间置byteenable 的所有信号线有效。

从端口突发写传输

(A) Avalon交换架构发出chipselect、address、burstcount、write和writedata的第一个单元。本例中,burstcount值为4。
(B) 从端口置waitrequest有效,表示它没做好处理突发传输的准备。作为响应,Avalon交换架构保持所有的输出不变。
(C) 从端口置waitrequest无效。
(D) 从端口在clk的上升沿捕获address、burstcount、write和writedata 的第一个单元(D0)。这是从端口捕获address和burstcount的唯一时刻。
(E) 从端口在clk的上升沿捕获writedata的下一个单元 (D1)。
(F) Avalon交换架构置write无效,表示它这个周期没有有效的writedata。
(G) 从端口在clk的上升沿不捕获writedata,因为write为无效。
(H) 一段时间之后,Avalon交换架构再次置write和writedata有效。
(I) 从端口在clk的上升沿捕获writedata的下一个单元(D2)。
(J) 从端口置waitrequest有效。作为响应,Avalon交换架构在整个时钟周期里保持所有的输出不变。
(K) 从端口置waitrequest无效。
(L) 从端口在clk的上升沿捕获writedata 的最后的单元(D3) ,从端口的突发写传输结束。
4.9.3.2 从端口突发读传输

从端口突发读传输同具有可变延迟的从端口流水线读传输是相似的。突发读传输有明显的地址和数据阶段,并且从端口使用readdatavalid信号来指示它何时在提供有效的readdata。两者的区别在于一个单独的突发地址阶段对应多个数据阶段。
在从端口突发读传输开始的时候,Avalon交换架构除了发出burstcount之外,还发出chipselect、address和read信号。 如果从端口还没有准备好,从端口在下一个clk的上升沿之前置waitrequest有效。最后,从端口置waitrequest无效,并且在下一个clk的上升沿捕获address和burstcount,地址阶段结束。多个数据阶段随之开始。
当从端口开始burstcount值大于1的突发读传输时,要遵循如下的规则:
如果Avalon交换架构制定了burstcount值为N,要完成突发传输,从端口必须产生N个连续的readdata数据单元。主从端口对之间的仲裁一直保持锁定直到突发传输结束。
从端口通过在clk的上升沿发出有效的readdata和置readdatavalid有效来提供数据单元。置readdatavalid无效不会终止突发传输,只会将突发传输延迟到从端口重新置readdatavalid有效。
在突发传输期间,Avalon交换架构置byteenable的所有信号线有效。

从端口突发读传输

(A) Avalon交换架构发出ddress、burstcount和read。本例中,burstcount值为4。
(B) 本例中,从端口置waitrequest有效,表示它没做好处理突发传输的准备。作为响应,Avalon交换架构再保持所有的输出一个周期不变。
(C) 从端口置waitrequest无效。
(D) 从端口在clk的上升沿捕获address和burstcount。Avalon交换架构可以在此clk的上升沿开始一次新的传输。(本例中不是如此)
(E) 这是从端口能返回有效数据的最早的时钟上升沿。本例中,从端口没发出readdatavalid,所以Avalon交换架构在这个clk的上升沿不捕获readdata。
(F) 一段时间之后, 从端口提供有效的readdata,并置readdatavalid有效。
(G) Avalon交换架构在clk的上升沿捕获readdata的第一个单元 (D0)。
(H) Avalon交换架构在clk的上升沿捕获readdata的下一个单元 (D1)。
(I) 从端口没有有效的readdata,所以它置readdatavalid无效。从端口可以保持readdatavalid无效任意个周期。
(J) 一段时间之后,从端口提供有效的readdata,并再次置readdatavalid有效。
(K) Avalon交换架构在clk的上升沿捕获readdata的下一个单元(D2)。
(L) Avalon交换架构在clk的上升沿捕获readdata的最后的单元(D3)。从端口的突发读传输结束。

优质内容筛选与推荐>>
1、博弈论学习笔记(九)合作、突变与平衡
2、数据库快速配置
3、spring boot: @EnableScheduling开启计划任务支持,@Scheduled计划任务声明
4、(十)T检验-第一部分
5、设计模式(十九):访问者模式


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号