AXI_BVALID/AXI_BREADY的异步处理

AXI_BVALID/AXI_BREADY的异步处理

AXI_BVALID/AXI_BREADY的异步处理本质上是单比特信号的异步处理,但其对持续总cycle数也需要保持一致。并且需要考虑到VALID/READY的握手关系。

思路是用一个计数器对源时钟域的A_AXI_BVALID&A_AXI_BREADY做计数,然后转换成格雷码,再同步到目标时钟域去,再转换成顺序计数码,在目标时钟域根据B_AXI_BREADY生成对应的B_AXI_BVALID。同时需要注意把目标时钟域的计数器反过来同步到源时钟域,判断存储的bvalid个数即将满的时候把A_AXI_BREADY拉低,需要预留一定的反向同步时间。

以下是RTL代码:

module bvalid_sync(

input  a_axi_rstn,
input  a_axi_clk,
input  a_axi_bvalid,
output a_axi_bready,

input  b_axi_rstn,
input  b_axi_clk,
input  b_axi_bready,
output b_axi_bvalid
);

reg [3:0] cnt_a_axi_bvalid;
always @ (posedge a_axi_clk)
begin
  if (a_axi_rstn == 0)
    cnt_a_axi_bvalid <= 'd0;
  else if (a_axi_bvalid & a_axi_bready)
    cnt_a_axi_bvalid <= cnt_a_axi_bvalid + 'd1;
end

function [3:0] bin2gray; 
input [3:0] data_bin;
begin
bin2gray[3] = data_bin[3];
bin2gray[2] = data_bin[3]^
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值