握手机制
如图1所示,xclk的上升沿将数据1发送到总线上,同时发送一个数据有效信号xreq。yclk上升沿采集xreq信号,经过两级寄存器同步信号,避免亚稳态。检测到yreq2为高时,说明可以采集总线上的数据。这是,发送一个yack确认收到数据信号。经过两级同步器,xclk上升沿采集xack2确认信号,在下一时钟上升沿将数据2发送到总线上。
注意,如果数据是从快时钟向满时钟传递,那么xreq信号必须保持一个目的时钟周期的脉冲,避免目的时钟采集不到数据。

另一种方式的代码如下:
采用握手机制,发送域现将数据锁存在总线上,随后发送一个req信号给接受域;接受域在检测到req信号后,锁存总线数据,并送回一个有效的ack信号表示读取完成应答;检测到应答信号ack后,撤销req信号,接受域在检测到req撤销后也相应撤销ack信号,完成一次正常的握手信号。
module handshake(
input clk, //50MHZ时钟
input rst_n, //复位信号
input req, //数据发送请求信号
input [15:0]data_in, /