handshake 握手电路 小例

 

    A sponsor a request(REQ) for sending data out

    B return with an ACK and start to receive the data once recognizing the request from A

    

module TwoPhaseHandshake(clkA,rsta_n, clkB,rstb_n, DataA, ReqA, Ack, AckA, DataB, Req, ReqB); 

   input clkA; 
   input clkB;
   input rsta_n;
   input rstb_n;
   input DataA; 
   input ReqA; 
   output Ack; 
   output AckA; 
   output DataB; 
   output Req; 
   output ReqB; 
   
   wire SysADFOUT; 
   wire SysASync; 
   wire SysASyncOUT; 
   wire SysAxorOUT; 
   wire SysBDFOUT; 
   wire SysBSync; 
   wire SysBSyncOUT; 
   wire SysBxorOUT; 
   wire ReqBOUT; 
   wire AckOUT; 
   wire ReqOUT; 

   
   assign Ack = AckOUT; 
   assign Req = ReqOUT; 
   assign ReqB = ReqBOUT; 


   assign AckA = SysASyncOUT^ SysADFOUT ; 
   assign ReqBOUT = SysBSyncOUT^ SysBDFOUT; 


always @(posedge clkA or negedge rsta_n) 
if(~rsta_n)
    { SysADFOUT,SysASyncOUT ,SysASync} <= 3'b0;
else 
    { SysADFOUT,SysASyncOUT ,SysASync} <= { SysASyncOUT,SysASync, AckOUT }; 


always @(posedge clkA or negedge rsta_n) 
if(~rsta_n)
   ReqOUT <=1'b0;
else
   ReqOUT <= ReqOUT^ReqA; 


always @(posedge clkB or negedge rstb_n) 
if (~rstb_n)
    { SysBDFOUT,SysBSyncOUT ,SysBSync} <= 3'b000;
else
    { SysBDFOUT,SysBSyncOUT ,SysBSync} <= { SysBSyncOUT,SysBSync, ReqOUT }; 

// Once request from clkA was received, will return ACK back!

always @(posedge clkB or negedge rstb_n) 
if (~rstb_n)
   AckOUT <= 1'b0;
else
   AckOUT <= AckOUT^ReqBOUT;

always @(posedge clkB) 
if(ReqBOUT) 
    DATAB<=DATAA; 


endmodule

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值