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。进入此界面

打开对应IP核,可在右下角的框中添加触发条件,这选择WREADY,并且value选择1(高电平触发)。

到此就可以在main.c中打断点,进行调试,执行到加法器时,就可触发。可看到,触发后写入的数据为0x42.同理其余核也可进行调试检查。

若有遗漏,后续再补充。代码在文末。
源代码链接: 代码