PS-PL通信:Zynq硬核通过AXI-Lite写寄存器

一.硬件平台
(1)添加Zynq硬核。新建工程后打开block design,右键添加IP:Zynq Processing System,这个在选芯片型号时支持Zynq才能添加进去(Tools-Settings可更改),相当于硬核处理器。
配置硬核如下:
PS-PL Configuration勾选一个FCLK_RESET0_N 和M AXI GP0 interface;
外设管脚勾选一个UART并在MIO Configuration里绑定FPGA管脚号;
时钟勾选一50MHZ时钟即可。其他选项为默认。
(2)改装AXI-Lite的IP。选择Tools-creat and repackage IP-Creat a new AXI4 peripheral,编辑IP名、版本等信息,并选择IP目录;选择AXI-Lite(用于寄存器的配置),Slave,4个寄存器。完成配置,自动生成接口、驱动、仿真模型;
打开Edit IP,进入IP编辑面板(区别于工程面板)-在Design Source内打开.v接口文件(主要结构为读写寄存器函数)-在User edit区域添加自己的功能,例如

output reg LED;
always@(posedge clk or negedge rst)
begin
	if(!rst)
		LED<=0;
	else if(slv_reg==32'hffff_ffff)
		LED<=1;
end 

-到.v接口文件添加LED端口-回到IP编辑版面,点击Package IP中未打勾的选项,更新IP配置-Repackage IP
(3)联通PL-PS(PL:program logic;PS:processing system)。添加上一步封装的IP-将LED make external-Run auto-Run Connection auto(自动添加AXI-Lite总线及接口,只有基于协议的模块才有这个功能)-添加ILA(在线逻辑分析仪)检测AXI-Lite协议,一端接总时钟,一端接AXI口;

(4)生成比特流。右键Sources工程,Generate Output Product-Generate HDL wrapper-添加管脚约束文件Constrains,并设定LED管脚,如

set_property PACKAGE_PIN G20 [get_ports LED]
set_property IOSTANDARD LVCMOS33 [get_ports LED]

完成后Generate bit stream,开始综合Synthesis(IP如有误可右键Edit In IP Package)后生成比特流。File-Export Hardware-include bitstream

二.联合SDK开发
(5)创建板级支持包。Launch SDK,New一个Application Project,并加入上一步生成的硬件平台-选择Hello world.c例程,完成一个板级支持包
(6)添加驱动。将硬件平台Source里的驱动文件复制到新建的工程,并在头文件include进去。
保存后控制台会自动编译,这里遇到一个error,undefine Xilin_In,回去定位到驱动文件,需要再include Xin_io.h;之后又新出现一个error:conflicting types for…,原因是新添加的.h文件重复include了另一个头文件,注释掉一个即可。
(7)测试例程。右键选择工程-Debugs AS Launch on Hardware(System Debugger)-Run Program FPGA-打开SDK Terminal-设置串口驱动-连接成功后逐步测试函数
(8)基本读写函数分析。

AXI_LITE_REGS_mWriteReg(u32 BaseAddress, unsigned RegOffset, u32 Data);
#define AXI_LITE_REGS_mWriteReg(BaseAddress, RegOffset, Data) \
  	Xil_Out32((BaseAddress) + (RegOffset), (u32)(Data))
AXI_LITE_REGS_mReadReg(u32 BaseAddress, unsigned RegOffset)
#define AXI_LITE_REGS_mReadReg(BaseAddress, RegOffset) \
    Xil_In32((BaseAddress) + (RegOffset))

只要有基地址+偏移量+数据就可以使用这两个读写函数。基地址可以在block design页面找
例如:

always@(posedge clk)
begin
	AXI_LITE_REGS_mWriteReg((u32)0x4300000,0,0xffff_ffff)
	//对寄存器0写入数据0xffff_ffff
		if(slave_regs_0==0xffff_ffff)
			LED=1;
end

(9)ILA观测。使PS端进入Debug模式,使能ILA的时钟。设置触发条件,逐步调试,观察AXI总线时序。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值