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、实验结果
板级验证符合预期。
======== ======\\ ======= -
|| || \\ // \\ /-\
|| || || // // \\
|| || // || // \\
====== ======= || === ========
|| || || \\ // \\
|| || \\ || // \\
|| || \\ // // \\
|| || ======= // \\
作者:绿叶落秋风,专注FPGA技术分析和分享,转载请注明原文链接:https://www.cnblogs.com/electricdream/p/13263021.html,文中资源链接如下:
1. GITHUB开源仓库