本章描述了主/从握手过程,并概述了 READY 和 VALID 握手信号的关系和默认值。 它包含以下部分:
所有五个通道都使用相同的 VALID/READY 握手来传输数据和控制信息。 这种双向流控制机制使mater和slave都能够控制数据和控制信息移动的速率。 源生成 VALID 信号以指示数据或控制信息何时可用。 目的地产生 READY 信号以指示它接受数据或控制信息。 仅当 VALID 和 READY 信号均为高电平时才会发生传输。
主接口和从接口上的输入和输出信号之间不得有组合路径。
图 3-1至图 3-3 展示了握手序列的示例。 在图 3-1 中,源提供数据或控制信息并将 VALID 信号驱动为高电平。 来自源的数据或控制信息保持稳定,直到目的地驱动 READY 信号为高电平,表明它接受数据或控制信息。 箭头显示传输发生的时间。
不能等待READY拉高之后再去拉高VALID信号。一旦VALID信号被拉高,那么必须等待握手发生,VALID信号才能被拉低。
在图 3-2 中,目的地在数据或控制信息有效之前驱动 READY HIGH。 这表明一旦数据或控制信息有效,目的地就可以在一个周期内接受数据或控制信息。 箭头显示传输发生的时间。
可以去等待VALID信号拉高之后再去拉高READY信号。如果READY信号拉高,可以在VALID信号是高电平的时候拉低READY信号。
在图 3-3 中,源和目的地碰巧在同一个周期中表明它们可以传输数据或控制信息。 在这种情况下,传输会立即发生。 箭头显示传输发生的时间。
单独的 AXI 协议通道握手机制描述如下:
master只有在驱动有效地址和控制信息时才可以断言 AWVALID 信号。 它必须保持有效,直到slaver接受地址和控制信息并确定相关的 AWREADY 信号。
AWREADY 的默认值可以是 HIGH 或 LOW。 推荐的默认值为 HIGH,但如果 AWREADY 为 HIGH,则slave必须能够接受提供给它的任何有效地址。
默认的 AWREADY 值 LOW 是可能的,但不推荐,因为这意味着传输至少需要两个周期,一个周期用于声明 AWVALID,另一个周期用于声明 AWREADY。
在写突发期间,mater只有在驱动有效写数据时才能断言 WVALID 信号。 WVALID 必须保持有效,直到从机接受写入数据并置位 WREADY 信号。
WREADY 的默认值可以是高电平,但前提是slave始终可以在单个周期内接受写入数据。
mater在驱动突发中的最终写入传输时必须断言 WLAST 信号。
当 WVALID 为低电平时,WSTRB[3:0] 信号可以采用任何值,但建议将它们驱动为低电平或保持在其先前值。
只有当slave驱动有效的写响应时,它才能断言 BVALID 信号。 BVALID 必须保持有效,直到master接受写响应并置位 BREADY。
BREADY 的默认值可以是 HIGH,但前提是master始终可以在单个周期内接受写响应。
只有当master驱动有效的地址和控制信息时,它才能断言 ARVALID 信号。它必须保持有效,直到slave接受地址和控制信息并置位相关的 ARREADY 信号。
ARREADY 的默认值可以是 HIGH 或 LOW。推荐的默认值为 HIGH,但如果 ARREADY 为 HIGH,则slave必须能够接受提供给它的任何有效地址。
低的默认 ARREADY 值是可能的,但不推荐,因为这意味着传输至少需要两个周期,一个用于断言 ARVALID,另一个用于断言 ARREADY。
只有当slave驱动有效读取数据时,它才能断言 RVALID 信号。 RVALID 必须保持有效,直到master接受数据并置位 RREADY 信号。即使slave只有一个读取数据源,它也必须仅在响应数据请求时才将 RVALID 信号置为有效。
master接口使用 RREADY 信号来指示它接受数据。 RREADY 的默认值可以是高电平,但前提是mater能够在执行读取事务时立即接受读取数据。
当slave驱动突发中的最终读取传输时,它必须置位 RLAST 信号。
地址、读、写和写响应通道之间的关系是灵活的。
例如,写入数据可以出现在与其相关的写入地址之前的接口处。 当写地址通道包含比写数据通道更多的寄存器级时,就会发生这种情况。 写数据也可能出现在与地址相同的周期中。
当互连必须确定目标地址空间或slave空间时,它必须重新对齐地址并写入数据。 这需要确保写入数据仅向其指定的slave发送有效信号。
必须保持的两个关系是:
为了防止死锁情况,您必须观察握手信号之间存在的依赖关系。
在任何事务中:
注意:
虽然在断言 READY 之前等待 VALID 被断言是可以接受的,但默认情况下在 VALID 断言之前断言 READY 也是可以接受的,这可以导致更有效的设计。
图 3-4 和图 3-5 显示了握手信号的相关性。 单向箭头指向可以在前一个信号被声明之前或之后被声明的信号。 双头箭头指向必须仅在前一个信号断言后才能断言的信号。
图 3-4 显示,在读事务中:
图 3-5 显示,在写事务中:
注意:
重要的是,在写事务期间,master在驱动 WVALID 之前不得等待 AWREADY 被置位。 如果slave在断言 AWREADY 之前相反地等待 WVALID,这可能会导致死锁情况。(如果Salve先等在Master写数据WVALID,然后再断言写地址AWREADY,会导致死锁)(相当于数据已经发好,但是一直不知道该发到那个地址中。)
AWREADY* 之前相反地等待 WVALID,这可能会导致死锁情况。(如果Salve先等在Master写数据WVALID,然后再断言写地址AWREADY,会导致死锁)(相当于数据已经发好,但是一直不知道该发到那个地址中。)