AXI4的IP的输入配置

AXI4的IP的输入配置

1、实验原理

前面一篇验证中验证了AXI中的data_reg_out是输出缓存器。这里再引入一个slv_reg2作为slv—_reg1的输入输出配置寄存器。这里先实现一个简单的功能:当slv_reg2为16'hffff时,slv_reg1作为输入口,否则slv_reg1作为输出口(输入输出相对主机而言,方便区分)。

2、实验操作

(1)硬件设计

对reg_data_out的配置寄存器:

    always @(*)
    begin
          // Address decoding for reading registers
          case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )
            2'h0   : reg_data_out <= slv_reg0;
            2'h1   : reg_data_out <= (slv_reg2=='hffff)? BTN : slv_reg1; //slv_reg1;
            2'h2   : reg_data_out <= slv_reg2;
            2'h3   : reg_data_out <= slv_reg3;
            default : reg_data_out <= 0;
          endcase
    end

在修改模块后需要再次打包,在打包后回到bd设计界面时,会在上面提示更新IP,点击后会在下面弹出IP列表,选择有感叹号的IP,再点击下面的update就可以了。然后生成bit流。这里需要等待一段时间。

(2)软件设计

#include "xil_io.h"
#include "sleep.h"
#include "stdio.h"
#include "xparameters.h"
#define IP_BASE XPAR_MYIP_V1_0_0_BASEADDR
#define REG0_OFFSET 0
#define REG1_OFFSET 4
#define REG2_OFFSET 8
int main(){
    int BTN;
    Xil_Out32(IP_BASE+REG2_OFFSET,0xffff);
 //Xil_Out32(IP_BASE+REG2_OFFSET,0x0000);
    while(1){
        BTN=Xil_In32(IP_BASE+REG1_OFFSET);

        Xil_Out32(IP_BASE+REG0_OFFSET,BTN);

    }
}

就是多了一个对reg2的输出,通过切换reg2的值确定逻辑判断是否存在。

3、实验结果

板级验证符合预期。

原文地址:https://www.cnblogs.com/electricdream/p/13263021.html