ZYNQ学习日志-------软硬件调试

工程创建

可以按照hello world的步骤一步一步建立,也可以直接将工程全部拷贝过来。方法上篇已有步骤,此次直接拷贝。

IP核添加

此次工程用到了字节的两个IP核,math_ip和GPIO_LITE_ML_1.0,其中math就是一个普通加法器,可直接用vivado自带的加法器,一样的用法,GPIO是输出流水灯控制的核。将这两个文件夹拷入新建的工程下,然后在setting中,IP目录下的Repository中将拷贝过来的IP核添加进去。

在这里插入图片描述
随后就打开block design,将math_ip_v1_0添加
在这里插入图片描述
再将GPIO添加
在这里插入图片描述
添加完之后就可以连线了,由于这的布线十分简单,使用自动连线就行。run connection automation。
连好都就如图
在这里插入图片描述
如果觉得布局很乱,就右键空白处,regenerate layout。
在这里插入图片描述
其中,led管脚是要输出的,需要添加约束的,在BD中,给它一个输出管脚。
在这里插入图片描述
在这里插入图片描述
完成后继续添加IP,
在这里插入图片描述
双击新出的VIO IP核,进行配置,,输入1个管脚,输出3个管脚
在这里插入图片描述
在这里插入图片描述
将此IP手动连接。与math连接,对应相连即可。
在这里插入图片描述
继续添加ila,并配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再将其连线,clk连clk,另一个连LED
在这里插入图片描述
觉得图不好看,就重新布局,右键空白处,regenerate layout。
给四个led口添加约束,新建一个XDC文件,并写入

set_property PACKAGE_PIN J16 [get_ports {GPIO_LED[0]}]
set_property PACKAGE_PIN K16 [get_ports {GPIO_LED[1]}]
set_property PACKAGE_PIN G15 [get_ports {GPIO_LED[2]}]
set_property PACKAGE_PIN H15 [get_ports {GPIO_LED[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_LED[*]}]
#bit compress  
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 
set_property CFGBVS VCCO [current_design] 
set_property CONFIG_VOLTAGE 3.3 [current_design]

我们的工程是拷贝过来的,更改了底层文件后,顶层文件也更改了,所以需要重新生成,先将原来的顶层文件remove
在这里插入图片描述
删除后,再生成
在这里插入图片描述
此步可能会出现一些问题,所以需要检查,可以打开头文件代码看看是否有output的存在,因为我们是需要输出4位LED的,所以必然存在
在这里插入图片描述
如果没有,就继续删除顶层,创建顶层,若还是不行,在下面输入框重置工程
在这里插入图片描述
正确后进入下一步。

这步完成后就可以生成bit文件进入SDK了。
进入之后,新建一个空工程,步骤参考hello world。
添加一个main.c,代码如下

#include <stdio.h>
#include "xparameters.h"
#include "xil_io.h"
#include "sleep.h"
#include "xil_types.h"

#define XGpio_axi_WriteReg(BaseAddr, RegOffset, Data)	\
		Xil_Out32((BaseAddr) + (u32)(RegOffset), (u32)(Data))
#define XPAR_GPIO_LITE_ML_0 XPAR_GPIO_LITE_ML_0_BASEADDR
#define GPIO_LITE_ML_REG0 0
#define MATH_IP_BASE XPAR_MATH_IP_0_BASEADDR
#define MATH_REG0 0
#define MATH_REG1 4
#define MATH_REG2 0
u8 val=0;
int main()
{
	u8 i=0;

	Xil_Out32(MATH_IP_BASE+MATH_REG0,0X42);
	Xil_Out32(MATH_IP_BASE+MATH_REG1,0X12);
	val = Xil_In32(MATH_IP_BASE+MATH_REG2);
	xil_printf("val=%x",val);

	XGpio_axi_WriteReg(XPAR_GPIO_LITE_ML_0,GPIO_LITE_ML_REG0,0X00);
	while(1)
	{
		for(i=0;i<=3;i++)
		{
		XGpio_axi_WriteReg(XPAR_GPIO_LITE_ML_0,GPIO_LITE_ML_REG0,1<<i);
		usleep(500000);
		}
		i=0;
	}
}

Xil_Out32是往地址里写入数据的函数。写入两个数a,b,,得到a+b。
while里是流水灯程序。
然后就可以下载进板子了,步骤参考hello world。

运行后,
在这里插入图片描述
串口反馈两个数字之和,为0x42和0x12,和为0x54,此处反馈的为十六进制。
到此处就调通了。

软硬件调试

vivado 连接

将板子正确连入后,open target。进入此界面
在这里插入2222222描述
打开对应IP核,可在右下角的框中添加触发条件,这选择WREADY,并且value选择1(高电平触发)。
在这里插入图片描述
到此就可以在main.c中打断点,进行调试,执行到加法器时,就可触发。可看到,触发后写入的数据为0x42.同理其余核也可进行调试检查。
在这里插入图片描述
若有遗漏,后续再补充。代码在文末。

源代码链接: 代码