AMBA协议AXI-Lite(AXI-Lite从机代码板级验证)

文章介绍了使用Xilinx的Zynq7000FPGA和Vivado平台,基于AXI_Lite接口进行软硬协同验证的过程。首先修改了从机接口模板代码,添加了LED和按键接口,然后创建并封装了IP核。接着,在SOC中搭建了设计,包括添加测试IP、配置MicroBlaze和内存大小,以及自动完成连线。在引脚约束阶段,指定了LED和按键的引脚。软件设计部分涉及通过SDK编写main.c文件,实现对AXI_Lite接口的读写操作以测试功能。最终,通过AXI_Lite总线进行了一系列的功能验证,如LED控制和按键检测。


前言

  在前一章中我们已经完成了从机接口模板代码的设计;在本篇中,我们将对设计的从机代码进行板级验证;


一、环境

  验证FPGA选用Xilinx的Zynq 7000,基于Vivado平台进行;
  认证过程将采用软硬协同验证,其中内核为MicroBlaze;


二、测试IP

  测试IP核将基于模板代码修改:
修改后的逻辑文件

//AXI Slave interface
module axi_lite_logic#(

	//axi-lite parameter definition start here
	//data width / address width
	parameter integer     C_AXI_SLV_REG_NUM = 8,
	parameter integer     C_AXI_DATA_WIDTH = 32,
	parameter integer     C_AXI_ADDR_WIDTH = $clog2(C_AXI_SLV_REG_NUM*4)+1
	)
(
	output wire   [3:0]                           led,
	input  wire   [3:0]                           key,
	//system signals definition
	input  wire  						 	      s_axi_aclk,
	input  wire  						 	  s_axi_aresentn,  
	//write address signals definition	  
	input  wire [C_AXI_ADDR_WIDTH - 1:0] 	    s_axi_awaddr,
	input  wire                          	   s_axi_awvalid,
	output wire                          	   s_axi_awready,
	//write data signals definition
	input  wire [C_AXI_DATA_WIDTH - 1:0]   		 s_axi_wdata,
	input  wire                            		s_axi_wvalid,
	output wire                            		s_axi_wready,   
	input  wire [(C_AXI_DATA_WIDTH/8) - 1:0]	 s_axi_wstrb,
	//write response signals definition
	output wire [1:0]                            s_axi_bresp,
	output wire                                 s_axi_bvalid,
	input  wire                                 s_axi_bready,
	//read address signals definition
	input  wire [C_AXI_ADDR_WIDTH - 1:0] 	     s_axi_araddr,
	input  wire                         	    s_axi_arvalid,
	output wire                                 s_axi_arready,
	//read data signals definition
	output wire [C_AXI_DATA_WIDTH - 1:0]   		 s_axi_rdata,
	output wire                            		s_axi_rvalid,
	input  wire                                 s_axi_rready,
	//read response signals definition
	output wire                                  s_axi_rresp,
	//protect signals definition
	input  wire                                 s_axi_arprot
);

	localparam integer     ADDR_SHIFT = C_AXI_DATA_WIDTH/16;


	reg [C_AXI_ADDR_WIDTH - 1:0]    axi_awaddr;
	reg                            axi_awready;
	reg							    axi_wready;
	reg [1:0]                        axi_bresp;
	reg                             axi_bvalid;
	reg                                  aw_en;
	reg [C_AXI_ADDR_WIDTH - 1:0]    axi_araddr;
	reg                            axi_arready;
	reg                             axi_rvalid;
	reg [C_AXI_DATA_WIDTH - 1:0]	 axi_rdata;
    reg [C_AXI_DATA_WIDTH - 1:0]  reg_data_out;


	wire                        register_wr_en;

	//register definition
	reg [(C_AXI_DATA_WIDTH - 1) : 0]  slv_reg[0:(C_AXI_SLV_REG_NUM-1)];

	assign led = slv_reg[0][3:0];

    //inner logic definition
    assign register_wr_en = axi_wready & s_axi_wvalid & axi_awready & s_axi_awvalid; 

    //inner signal connect
    assign s_axi_awready = axi_awready;
    assign s_axi_wready = axi_wready;
    assign s_axi_bresp = axi_bresp;
    assign s_axi_bvalid = axi_bvalid;
    assign s_axi_arready = axi_arready;
    assign s_axi_rdata = axi_rdata;
    assign s_axi_rvalid = axi_rvalid;
    assign s_axi_rresp = 2'b00;

	//---------------------------write address input logic--------------------------------//
	//transmit finish whe s_axi_awvalid=1 axi_awready = 1 s_axi_wvalid = 1
	always @(posedge s_axi_aclk) begin : address_input_proc_
		if(~s_axi_aresentn) begin
			axi_awaddr <= 'b0;
			axi_awready <= 1'b0;
			aw_en <= 1'b1;
		end 
		else begin
			if(aw_en && s_axi_awvalid && (~axi_awready) && (s_axi_wvalid))
			begin
				aw_en <= 1'b0;
			 	axi_awaddr <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPRAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值