Zynq学习笔记(基本设计流程)Word格式.docx
《Zynq学习笔记(基本设计流程)Word格式.docx》由会员分享,可在线阅读,更多相关《Zynq学习笔记(基本设计流程)Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
l点击I/OPeripherals,配置UART1:
MIO48..49,BaudRate配置在PS-PLConfiguratin中。
l勾选USB0,28-39
l勾选Ethernet0,改EMIO为MIO:
16-27,打开“+”,勾选MDIO:
52-53
l添加SD040-45,CD:
47,WP:
46
l点开GPIO,勾选GPIOMIO,设置MIO的Direction:
50-51为输入,MIO7只能是输出,其余为输入输出。
若看不到,就向右拉移动条。
5.配置PS时钟:
CLKIN=33.3333(常用的)。
CPU=666.6666;
DDR_CLK=533.333.
CPUClockRatio=6:
2:
1,均为默认值。
设置外设时钟。
QSPI的模块内部有一个2分配的电路,应此想设置他的工作频率为100M,就需要将输入时钟设为200MHz。
SDIO(即SD卡的时钟),设为50MHz。
Ether0:
1000MHz。
PL时钟:
勾选FCLK_CLK0时钟并设置相应的时钟:
100MHz。
6.配置DDR。
EnableDDR(打勾)。
DDR3,MT41J128M16HA-15E,32BIT(两片拼接而成),InternalVref打勾;
填写Train/BoardDetail,两种方式:
一用户直接写;
二通过计算。
选择“计算”方式,然后点OK,填写各组信号线在PCB板上的实际长度和Package的数值,相应的Delay参数就计算好了。
7.在输出DDR上右击设为MakeExternal。
将PS上的固定IO脚引到FPGA的外面。
8.在输出FIXED上右击设为MakeExternal。
9.在system的空白处右击,AddIP…,添加AXIGPIO,设置为ALLOutput。
点击RunConnectionAutomation自动连线GPIO的S-AXI。
10.在GPIO的脚右击选择MakeExternal。
选择输出端口gpio,Ctrl+E,打开ExternalInterfaceProperties,修改端口的Name为LED_DutyCycle。
(也可以在BlockDesign中右击,选择CreateInterfacePort,产生一个输出端口,然后连接。
)
11.产生时钟输出端口。
右击:
CreatePort,鼠标移动到端口上,出现铅笔,连接FCLK_CLK0.
12.其它信号保持默认。
13.使用tools中的ValidateDesign检验设计是否合理。
不合理就会报错,一般是连线不对,需要调整连线。
14.可以使用重新布局按钮,自动将IP放置整齐。
输出时钟脚可以通过生产的Port来连接。
15.在Source中右击CreateHDLWrapper。
16.添加预先写好的PWM_Controller.v到工程的源文件下。
17.连接到PWM_Controller到CPU上,并修改LED_DutyCycle_tri_o,FCLK_CLK_0为内部连线.
PWM_Controllerpwm1(
.Clk(FCLK_CLK_0),
.DutyCycle(LED_DutyCycle_tri_o),
.PWM_out(LEDS)
);
根据verilog的语法要求,屏蔽以下语句:
//FPGA_CLK_0,
//LED_DutyCycle_tri_o,
//outputFPGA_CLK_0;
//output[31:
0]LED_DutyCycle_tri_o;
18.添加输出端口:
LEDS。
LEDS,
output[7:
0]LEDS;
19.保存文件。
20.综合。
点击RunAnalysis。
综合完成后,点击“OpenSynthesizedDesign”,打开综合后的网表设计,准备分配引脚。
21.选择菜单“Layout”/IOPlanning,在右下部的I/OPort找到LEDS,打开选择LEDS[7]并设置Site=U14,依次设置其他LEDS的引脚。
LEDS[0:
7]=T22,T21,U22,U21,V22,W22,U19,U14.
在LEDS的I/OStd上,修改IO标准LVCOS3.3:
LVCMOS33*。
File\SaveConstraints,保存文件为top.xdc。
在Sourse\Constraints\constrs_1下可以看到。
22.Synthesis、Implementation、GenerateBitstream。
同时选择“OpenImplementDesign”。
23.File/Export/ExporthardwaretoSDK…,选择“LaunchSDK ”。
24.在SDK中,建立板级支持包。
(也可以和应用工程一起建立)。
25.(红色选做)建立ApplicationProject应用程序helloworld。
26.建立Jtag配置(USB),ProgramFPGA.然后才能下载程序进行调试。
27.然后,RUN/Debug。
开始软件设计
1.在SDK中创建应用工程。
File\New\ApplicationProject,工程名:
LED_Dimmer,使用已有的板级支持包,Next,模板:
空工程。
2.建立一个main.c源文件。
File/New/SourceFile。
此时会有错误,但正确编辑main.c文件后错误会消失。
3.下面是main.c的具体设计步骤,附件为完整的程序,可以拷贝以节省时间。
4.点击system.mss,可以找到外设的驱动和例程,axi_gpio_1,Examples(点击);
打开xgpio_example.c。
5.在main.c中从xgpio_example.c中拷贝并添加两个头文件。
#include"
xparameters.h"
;
xgpio.h"
6.定义GPIO的ID号:
#defineGPIO_EXAMPLE_DEVICE_IDXPAR_AXI_GPIO_1_DEVICE_ID
在Parameter.h上用F3可以查到GPIO的ID为XPAR_AXI_GPIO_1_DEVICE_ID。
7.GPIO有两个通道,定义使用第一个。
#defineLED_CHANNEL1
8.例化驱动或定义驱动的句柄:
XGpioGpio;
9.GPIO初始化:
Status=XGpio_Initialize(&
Gpio,GPIO_EXAMPLE_DEVICE_ID);
10.设置GPIO的方向为输出。
XGpio_SetDataDirection(&
Gpio,LED_CHANNEL,0);
11.往GPIO写0,灭灯。
XGpio_DiscreteWrite(&
12.等待键盘输入数据函数(1-9)。
value=inbyte();
13.转换成周期,体现为灯的亮度。
周期越小灯越亮。
period=value-0x30;
brightness=period*110000;
14.通过GPIO写周期数控制灯的亮度。
Gpio,LED_CHANNEL,brightness);
15.此时在standalone_bsp_0中一直有一个红色的错误,可以采用Project\Clean…=>
Project\BuildAll的方法消除。
16.ProgramFPGA。
17.进入软件调试环境Debug软件程序。
或RunAs….
18.测试。
打开串口调试助手(不能使用SDK的Terminal),利用键盘,输入0-9的数字。
0关灯,1-9越来越亮。
【上电启动的配置】Lab8
1.利用FSBL模板建立FSBL的boot程序。
2.使用XilinxTools/CreateZynqBootImage命令建立镜像文件。
首先在FSBLelf的Browse中选择Boot.elf,该文件会自动添加到下边的文件列表中。
然后添加Bitstream,在hw下;
再添加LED_Dimmer.elf文件。
三者的顺序不能颠倒。
最后Create。
3.使用xilinx-tool/ProgramFlash.选择qspisingle,offset可以不填写内容。
Program.
4.设置boot模式。
输入0,1-9测试
5.将LED_Dimmer.BIN文件名字改为BOOT.BIN(后缀不用修改),再拷贝到SD卡中,并插入Zedboard。
6.设置boot模式。
7.上电。
附件:
/*
*main.c
*
*Createdon:
2013-7-23
*Author:
910704
*/
#defineGPIO_EXAMPLE_DEVICE_IDXPAR_GPIO_0_DEVICE_ID
#ifdefPRE_2_00A_APPLICATION
#defineXGpio_SetDataDirection(InstancePtr,DirectionMask)\
XGpio_SetDataDirection(InstancePtr,LED_CHANNEL,DirectionMask)
#defineXGpio_DiscreteRead(InstancePtr)\
XGpio_DiscreteRead(InstancePtr,LED_CHANNEL)
#defineXGpio_DiscreteWrite(InstancePtr,Mask)\
XGpio_DiscreteWrite(Instanc