本文根据下面图片为原理:
跨时钟域单bit握手协议代码如下:
module handshake(
input clk_1,//快时钟域 5ns一个周期
input clk_2,//慢时钟域 12ns一个周期
input rst_n,//低复位
input d_in,//快时钟域单bit数据输入
output d_out//慢时钟域单bit数据输出
);
reg d_req;
reg d_req_d1,d_req_d2,d_req_d3;
reg d_ack,d_ack_d1;
assign d_out = d_req_d2 & ~d_req_d3;
always@(posedge clk_1)//快时钟域请求信号 d_req
begin
if(!rst_n)
d_req <=1'd0;
else if(d_in==1'd1)
d_req <=1'd1;
else if(d_ack_d1==1'd1)
d_req <=1'd0;
end
always@(posedge clk_2)
begin
if(!rst_n)
begin
d_req_d1 <=1'd0;
d_req_d2 <=1'd0;
d_req_d3 <=