AXI协议详解(四)

AXI协议详解(四)_第1张图片

上一篇我们完成了一个内存式的axi4从机的rtl设计,并进行了仿真验证。是不是有点不过瘾呢?本周我们将在ZYNQ中测试一下之前的从机是否真的能满足功能,回复AXI4可以获取最新的rtl设计以及zynq下的测试环境,有条件的朋友可以实际看下效果~

先说最重要的部分,本次测试发现之前的从机的几处错误,后台的代码已经更新。

首先是hand_ar信号无法拉低的问题,更改过后的代码如下所示,更改过的地方有两个部分:

  • hand_ar拉低的条件(arvalid && arready && (arlen_cnt_r == arlen_r))更改为最后一个数据握手成功的时刻(rvalid && rready && (arlen_cnt_r == arlen_r))
  • hand_ar拉高的条件(arvalid && arready)提前拉高,(arvalid && ~arready && ~hand_ar)
// hand_ar
always@(posedge aclk or negedge aresetn)begin
    if(!aresetn)
        hand_ar <= 1'b0;
    else if(arvalid && ~arready && ~hand_ar)
        hand_ar <= 1'b1;
    else if(rvalid && rready && (arlen_cnt_r == arlen_r))
        hand_ar <= 1'b0;
end

其次是hand_aw信号拉高的时刻稍晚,可能会导致写数据地址同步错误的问题。这个问题在仿真中并没有出现,但是在实测当中,顺序写数据时第二个数据写入地址总是偏移4,其他的写数据过程均正确,后续更改hand_aw信号后功能正常。将awvalid && awready更改为了awvalid && ~awready && ~hand_aw(为了避免问题,将hand_ar的拉高时间也做了相应的改变)

// hand_aw
always@(posedge aclk or negedge arese

你可能感兴趣的:(通信协议,fpga,芯片,verilog,debug)