1.PL侧的闪灯
本文参考ZCU106开发之PL侧闪灯
(1)首先打开vivado建立一个project:PL_LED
(2)在project中创建一个设计文件:PL_LED.v
具体代码如下,我使用的是vivado的2019.1版本:
//1.PL端led闪灯实验
//zcu06
//2021年3月15日
module PL_LED(
input clk_125_p_i,
input clk_125_n_i,
output reg led_0
);
parameter HALF_LED_PERIOD = 32'd25_000_000;
reg[31:0] div_counter; //分频计数器
wire clk_50M;
wire rst;
wire locked;
clk_wiz_0 clk_wiz_0
(
.clk_out1(clk_50M),
.reset(1'b0),
.locked(locked),
.clk_in1_p(clk_125_p_i),
.clk_in1_n(clk_125_n_i)
);
assign rst = !locked;
always @(posedge clk_50M) begin
if(rst)
begin
led_0<=1'b0;
div_counter<=32'd0;
end
else
begin
if(div_counter==HALF_LED_PERIOD)
begin
led_0<=!led_0;
div_counter<=32'd0;
end
else
begin
led_0<=led_0;
div_counter<=div_counter+32'd1;
end
end
end
endmodule
(3)增加约束文件PL_LED.xdc
这里用H9和G9连接调用的ip核,将led接到AL11上。
set_property PACKAGE_PIN H9 [get_ports clk_125_p_i]
set_property IOSTANDARD LVDS [get_ports clk_125_p_i]
set_property PACKAGE_PIN G9 [get_ports clk_125_n_i]
set_property IOSTANDARD LVDS [get_ports clk_125_n_i]
set_property PACKAGE_PIN AL11 [get_ports led_0]
set_property IOSTANDARD LVCMOS12 [get_ports led_0]
(4)连接jtag下载线,并将下载模式设置为jtag模式
将板子上sw6的四个开关全部按到on端(0000)jtag,在vivado里面打开设备,并将生成的bit文件导入,pl侧最右边的一个led灯闪烁亮了。
2.PS侧MIO闪灯
本文参考ZCU106开发之PS侧MIO闪灯
要使用PS侧点亮MIO闪灯,需要使用zynq的SDK模块以及MIO模块,这里可以参考正点原子SDK开发部分。
(1)首先打开vivado建立一个project:PS_MIO_LED
(2)在IP INTEGRATOR中点击Create Block Design创建一个IP
(3)在Diagram中点击加号,搜索zynq,点击所对应的Zynq UltraScale+ MPSoc
(4)双击IP Zynq UltraScale+ MPSoc并进行有关配置部分。首先是对Bank电压的配置,分别改为LVCMOS18(Bank0) LVCMOS18(Bank1) LVCMOS18(Bank2) LVCMOS33(Bank3) 。SD中打开SD1(本次未用到),I/OPeripherals中打开PMU(本次未用到),UART0和UART1打开(本次未用到),GPIO打开GPIO0 MIO(一定要打开),SWDT中打开SWDT0和SWTD1(本次未用到),TTC全部打开(本次未用到),GEM3打开(本次未用到),USB0打开(本次未用到)。PSS_REF_CLK保持33.330MHZ,并关闭一些本实验用不到的东西。
(如果我们这里不对Bank进行配置,后面会在生成比特流文件时候报错,类似如下:
[Labtools 27-3421] xczu15_0 PL Power Status OFF, cannot connect PL TAP. Check POR_B signal.
我在实验中还发现如果同时连接jtag和uart的USB线也会报出这样的错误
遇到这种出现红灯直接左上角两个复位按键按一遍,不行直接关了重新开)
配置完成如下图所示可以点击ValidateDesign来进行效验
(5)在source栏的模块上右键Generate Output Products,再次右键点击CreateHDL Wrapper,点击GenerateBitstream生成比特流文件。
(6)SDK配置。在File下点击Export->Export Hardware,之后再点击File下面的Launch SDK文件。
(7)在SDK软件打开后,点击File->new->project,我们可以创建一个名为LED的项目。然后在LED的文件夹中打开src,在src中新建一个led.c文件。
#include "xgpiops.h"
#include "sleep.h"
int main()
{
static XGpioPs psGpioInstancePtr;
XGpioPs_Config* GpioConfigPtr;
int iPinNumber= 23; //MIO23
u32 uPinDirection = 0x1; //1表示输出, 0表示输入
int xStatus;
//--MIO的初始化
GpioConfigPtr = XGpioPs_LookupConfig(XPAR_PSU_GPIO_0_DEVICE_ID);
if(GpioConfigPtr == NULL)
return XST_FAILURE;
xStatus = XGpioPs_CfgInitialize(&psGpioInstancePtr,GpioConfigPtr,
GpioConfigPtr->BaseAddr);
if(XST_SUCCESS != xStatus)
print(" PS GPIO INIT FAILED \n\r");
//--MIO的输入输出操作
XGpioPs_SetDirectionPin(&psGpioInstancePtr, iPinNumber,uPinDirection);//配置MIO输出方向
XGpioPs_SetOutputEnablePin(&psGpioInstancePtr, iPinNumber,1);//配置MIO的第7位输出
while(1)
{
XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 1);//点亮MIO的第7位输出1
usleep(500000); //延时
XGpioPs_WritePin(&psGpioInstancePtr, iPinNumber, 0);//熄灭MIO的第7位输出0
usleep(500000); //延时
}
return 0;
}
(其实这段代码我目前还没有看懂,但是它的指令是让MIO23闪烁)
(8)上板,连接zcu106的jtag端口和电脑,sw6调至0000,打开电源并连接设备,烧录进去bit文件,之后在SDK软件中打开调试,Debug as Launch on Hardware,然后点击下图中的播放键运行程序。
(9)观察右上角的MIO23,可以发现它在闪烁。
PS侧MIO闪灯