前言
在前一章中我们已经完成了从机接口模板代码的设计;在本篇中,我们将对设计的从机代码进行板级验证;
一、环境
验证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 <

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

被折叠的 条评论
为什么被折叠?



