Zynq学习笔记基本设计流程.docx

上传人:b****6 文档编号:13583553 上传时间:2023-06-15 格式:DOCX 页数:14 大小:682.35KB
下载 相关 举报
Zynq学习笔记基本设计流程.docx_第1页
第1页 / 共14页
Zynq学习笔记基本设计流程.docx_第2页
第2页 / 共14页
Zynq学习笔记基本设计流程.docx_第3页
第3页 / 共14页
Zynq学习笔记基本设计流程.docx_第4页
第4页 / 共14页
Zynq学习笔记基本设计流程.docx_第5页
第5页 / 共14页
Zynq学习笔记基本设计流程.docx_第6页
第6页 / 共14页
Zynq学习笔记基本设计流程.docx_第7页
第7页 / 共14页
Zynq学习笔记基本设计流程.docx_第8页
第8页 / 共14页
Zynq学习笔记基本设计流程.docx_第9页
第9页 / 共14页
Zynq学习笔记基本设计流程.docx_第10页
第10页 / 共14页
Zynq学习笔记基本设计流程.docx_第11页
第11页 / 共14页
Zynq学习笔记基本设计流程.docx_第12页
第12页 / 共14页
Zynq学习笔记基本设计流程.docx_第13页
第13页 / 共14页
Zynq学习笔记基本设计流程.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Zynq学习笔记基本设计流程.docx

《Zynq学习笔记基本设计流程.docx》由会员分享,可在线阅读,更多相关《Zynq学习笔记基本设计流程.docx(14页珍藏版)》请在冰点文库上搜索。

Zynq学习笔记基本设计流程.docx

Zynq学习笔记基本设计流程

Zynq学习笔记(基本设计流程)

ZynqStandalonetraining

1.从“所有程序\xilinxDesignTools\Vivado2013.2\启动Vivado2013.2,创建新工程:

LED_Controller,RTLProject,verilog,选择part:

family:

Zynq-7000;package:

clg484.(XC7Z020-1CLG484C)

2.点击FlowNavigator/IPIntegrator/CreateBlockDesign,建立一个Zynq的框图设计。

设计名为System

3.在框图的上方处,点击AddIP,(可以在Search中加7过滤),选ZYNQ7ProcessingSystem;

4.双击ZYNQ7ProcessingSystemIP模块,打开PS的配置窗口。

●配置PS的bank电平,bank0:

LVCMOS3.3V,bank1:

LVCMOS1.8V

●打开MemoryInterfaces,配置QSPI。

1-6,8(FeedbackClk)。

点“+”可以看配置后的各个参数。

●点击I/OPeripherals,配置UART1:

MIO48..49,BaudRate配置在PS-PLConfiguratin中。

●勾选USB0,28-39

●勾选Ethernet0,改EMIO为MIO:

16-27,打开“+”,勾选MDIO:

52-53

●添加SD040-45,CD:

47,WP:

46

●点开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。

将PS上的固定IO脚引到FPGA的外面。

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";#include"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(&Gpio,LED_CHANNEL,0);

12.等待键盘输入数据函数(1-9)。

value=inbyte();

13.转换成周期,体现为灯的亮度。

周期越小灯越亮。

period=value-0x30;

brightness=period*110000;

14.通过GPIO写周期数控制灯的亮度。

XGpio_DiscreteWrite(&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.上电。

输入0,1-9测试

附件:

/*

*main.c

*

*Createdon:

2013-7-23

*Author:

910704

*/

/*

*main.c

*

*Createdon:

2013-7-23

*Author:

910704

*/

#include"xparameters.h"

#include"xgpio.h"

#defineGPIO_EXAMPLE_DEVICE_IDXPAR_GPIO_0_DEVICE_ID

#defineLED_CHANNEL1

#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(InstancePtr,LED_CHANNEL,Mask)

#defineXGpio_DiscreteSet(InstancePtr,Mask)\

XGpio_DiscreteSet(InstancePtr,LED_CHANNEL,Mask)

#endif

XGpioGpio;

main(){

u32Status;

u32value=0;

u32period=0;

u32brightness=0;

print("begindebugprogram\n\r");

/*

*InitializetheGPIOdriver

*/

Status=XGpio_Initialize(&Gpio,GPIO_EXAMPLE_DEVICE_ID);

xil_printf("Status=%d\n\r",Status);

XGpio_SetDataDirection(&Gpio,LED_CHANNEL,0);

print("XGpio_SetDataDirection\n\r");

XGpio_DiscreteWrite(&Gpio,LED_CHANNEL,0);

print("ledsno\n\r");

while

(1){

print("SelectaBrightnessbetween0and9\n\r");

value=inbyte();

period=value-0x30;

xil_printf("BrightnessLevel%dselected\n\r",period);

//SincetheLEDwidthis1e6clkcycles,weneedtonormalize

//theperiodtothatclk.Sinceweacceptvalues0-9,thatwill

//scaleperiodfrom0-999,000.0turnsoffLEDs,999,000isfull

//brightness

brightness=period*110000;

//Writetheduty_cyclewidth(Period)outtothePLGPIOperipheral

XGpio_DiscreteWrite(&Gpio,LED_CHANNEL,brightness);

}

returnXST_SUCCESS;

}

//Verilog模块

modulePWM_Controller(

inputClk,

input[31:

0]DutyCycle,

output[7:

0]PWM_out

);

//SetsPWMPeriod.Mustbecalculatedvs.inputclkperiod.

//Forexample,settingthisto20willdividetheinputclockby2^20,or1Million.

//Soa50MHzinputclockwillbedividedby1e6,thusthiswillhaveaperiodof1/50

parameterperiod=20;

reg[period-1:

0]count;

reg[7:

0]PWM_out;

always@(posedgeClk)

count<=count+1;

always@(Clk)

if(count

PWM_out<=8'hFF;

else

PWM_out<=8'h00;

endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2