Xilinx Vivado zynq7000提高笔记.docx

上传人:b****8 文档编号:9560255 上传时间:2023-02-05 格式:DOCX 页数:21 大小:516.45KB
下载 相关 举报
Xilinx Vivado zynq7000提高笔记.docx_第1页
第1页 / 共21页
Xilinx Vivado zynq7000提高笔记.docx_第2页
第2页 / 共21页
Xilinx Vivado zynq7000提高笔记.docx_第3页
第3页 / 共21页
Xilinx Vivado zynq7000提高笔记.docx_第4页
第4页 / 共21页
Xilinx Vivado zynq7000提高笔记.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

Xilinx Vivado zynq7000提高笔记.docx

《Xilinx Vivado zynq7000提高笔记.docx》由会员分享,可在线阅读,更多相关《Xilinx Vivado zynq7000提高笔记.docx(21页珍藏版)》请在冰豆网上搜索。

Xilinx Vivado zynq7000提高笔记.docx

XilinxVivadozynq7000提高笔记

1.Modelsim仿真

1.添加modelsim路径:

Tool>options>

2.安装编译仿真库

使用modelSIm需要xilinxlibrary被编译。

运行1:

report_property[current_project]

运行2:

TclCommand

compile_simlib-help

compile_simlib-simulatormodelsim或

compile_simlib-simulatormodelsim-archall-languageall

运行3:

安装modelsim库到指定目录

compile_simlib-directoryD:

/modeltech64_10.1c/Xilinx_lib-simulatormodelsim

3.Modelsim中添加xilinx安装的modelsim库目录:

在编译完成库后,生成了一个modelsim.ini文件。

用记事本打开复制其安装目录信息到modelsim安装目录中modelsim自己的modelsim.ini文件中。

(需要去掉modesim.ini的只读特性)重启modelsim,库自动添加到软件中。

4.测试:

modelsim10.1cse

行为层:

通过

综合层:

时序仿真,测试通过

功能仿真,测试通过

应用层:

时序仿真,测试通过

功能仿真,测试通过

使用vivado仿真工具更方便快捷

5.Modelsim工程中添加仿真库的命令

voptzynq.tb_simulator_all+acc-ozz1-Lsimprims_ver-Lunisims_ver-Lxilinxcorelib_verglbl

仿真预编译为库名zynq.tb_simulator_all(后缀tb_simulator_all为仿真testbench文件),添加simprims_ver、unisims_ver、xilinxcorelib_ver、glbl库即可。

如提示不能编译的IP核,需将IP核生成的仿真文件加入工程。

2.DesignCheckpoint

设计检查点(DCP):

是指磁盘上保留存储器内设计准确表示的文件,可在每个步骤后(综合后、优化后、布局后)存储。

可将检查点读回到Vivado工具中,用以恢复设计状态。

文件格式:

.dcp

文件的产生:

.dcp:

工程synthesis后自动产生,在.runs\synth_1目录。

opt.dcp,placed.dcp,routed.dcp:

在工程implementation后自动产生,在.runs\impl_1目录。

作用:

用于存储网表或布线。

如文件,

z_system_wrapper.dcp

z_system_wrapper_opt.dcp,

z_system_wrapper_placed.dcp,

z_system_wrapper_routed.dcp

文件的利用:

1.减少综合、布线时间:

每个模块在synthesis后,可以直接添加.dcp文件到工程中,第二次综合时将直接使用该综合后的文件,减少综合时间。

布线dcp也一样。

2.直接替换对应的源程序,如此可防止源程序被泄露,同时该文件以黑箱形式出现,不能查看源程序。

文件的打开:

File>OpenCheckpoint,以网表的形式打开。

3.AXI总线

SpeedWay/zynqHW_2013_3_lab_5_v3.pdf

Pg059-axi-interconnect.pdf

3.1使用AXI总线:

AXIinterconnect逻辑核

注意AXI总线分类:

普通AXI总线:

GPAXI,仅支持32bits长度,低速,单向(有主从之分)

高速AXI总线:

HPAXI,32bits、64bits,高速,双向(没有主从之分)

AXIinterconnect包含了多个LogiCOREIP。

协议兼容性,可以被配置为支持AXI3,AXI4,AXI4-Lite

接口数据宽度:

AXI4和AXI3宽度:

32,64,128,256,512,1024bits

AXI4-Lite宽度:

32or64bits

接口地址宽度:

可达到64bits

支持只读、只写,以减少资源的使用。

功能:

1)AXICrossbar(交叉开关矩阵或纵横式交换矩阵)

每一个AXICrossbar实例都包含了一个AXICrossbar结构,但Crossbar不能直接被例化到没有AXIInterconnect的设计当中。

2)WidthConversion

每一个在AXIInterconnect核的SI和MI都可以被单独配置为一个数据宽度32,64,128,256,512,1024bits。

当接口的数据宽度与交换开关矩阵的数据不同时,这个WidthConversion模块会自动地根据路径实例化通路。

当设置不同宽度时,AXIInterconnect核可以通过多个SI时隙路径同时兼容收发数据包。

3)时钟转换

当使用同步转换机制时,必须使用同样的时钟源,在时钟转换核当中,所有的时钟域都会被同步化。

当使用异步模式时,所有的时钟域交叉会被运行在FIFO核当中。

这样读写时钟域可以异步。

4)ProtocolConversion

每一个SI和MI在AXIInterconnect当中的都可以被独立配置为AXI4,AXI3或AXI4-Lite协议,当协议接口被配置时,AXIProtocolConverter核自动在路径上实现。

5)AXIRegisterSlices

可以选择插入AXI寄存器。

可以打破关键的时间路径获得更高的时钟频率。

对于每一个RegisterSlice,你可以选择性地在任意AXI通道中使能流水线。

将会引入一个时钟周期的延时。

两种模式使用AXIRegisterSlices

FULLY_REFISTERED:

使用了2级深度的FIFObuffer来实现。

LIGHT_WEIGHT:

简单使用一级流水线寄存器来实现。

6)AXIDataFIFO

可选择插入AXIDataFIFO核心来提供数据buffer以获得更高的数据传输率。

对于每一个FIFO实例,你可以选择使能写通道或读通道或两者都使用buffer。

AXIDataFIFO不支持缓存AXI4-Lite协议。

对于缓存,在AXI4-Lite下不支持FIFO,支持RegisterSlices

 

3.2PL:

配置AXIinterconnect

(1)32bGPAXIMasterPorts,选择MAXIGP0Interface

(2)选择ClockConfiguration,使能FCLK_CLK0,设置为50MHz

(3)选择PS-PLConfiguration,在General的时钟复位中使能FCLK_RESET0_N

(4)添加IP核,axi_interconnect,并连接

(注意M00_AXI端口,需要打开进行协议设置和位宽、时钟设置)

(5)配置AXI地址,AddressEditer—>AutoAssignAddress

(6)使用axi4lite2abus_v1_0_AXI.v

最多只使用了2级触发器,接口转换。

将AXI总线简化为仅有数据、地址和使能信号,axi-4lite协议。

处理器作为Master对总线进行读与写。

此时PL完全被动。

如需通知处理器读取数据,需要PL部分加入中断。

(7)CPU中断

3.3PS:

访问AXIinterconnect

PS部分查找AXI接口:

1)AXI访问地址确认

访问地址查看PL对AXI的配置(3.2.5)

AXI1接口地址:

p_send_1=(long*)0x43c10000;

AXIO接口地址:

p_send_0=(long*)0x43c00000;

2)SDK下访问:

a.声明地址:

staticlong*p_send0=(long*)0x43c00000;

staticlong*p_send1=(long*)0x43c00004;

注意地址必须是4的倍数,是否默认值为8位需要留出4个8bits作32bits。

当p_send0+1时,按32位地址进行计算,因地址已经占用4byts,所以加1的结果为地址0x43c00004。

即:

p_send0+1=43c10004!

=43c10001。

即:

32bit的子帧加1值为4,32bits的常数加1值为1

b.写AXI,直接向地址进行赋值:

*p_send0=0xAAAAAAAA;

*p_send1=0x55555555;

C.读AXI,直接从对应地址读出数据

地址必须为4的倍数,

D.读写参考axi_bram_ctrl_0的例程文件

从bsp库中调用库函数:

#include"xil_io.h"

读AXI总线:

u32Xil_In32(u32Addr)

{

return*(volatileu32*)Addr;

}

写AXI总线:

voidXil_Out32(u32OutAddress,u32Value)

{

*(volatileu32*)OutAddress=Value;

}

 

问题:

1.处理器读AXI死机,是在等候PL响应。

时序问题。

(Bd文件中,M00_AXI端口设置需要配置为AXI4lite协议)

2.处理器只能读得1bit?

toAXI_bus:

3

fromAXI_bus:

reg43C00008=1

toAXI_bus:

4

fromAXI_bus:

reg43C0000C=0

toAXI_bus:

5

fromAXI_bus:

reg43C00010=1

toAXI_bus:

6

fromAXI_bus:

reg43C00014=0

未知原因?

建议使用例程。

在例程中重新建立ARM_system,和AXI总线,同样的程序,能够正常运行。

 

测试工程:

Note/zynq_test/AXI_BUS_TEST.rar

4.双CPU工作

4.1建立工程

为双CPU分别建立BoardSupportPackage

Standalone_bsp_cpu0

Standalone_bsp_cpu1

分别在package工程上建立应用工程

Hello_cpu0

Hello_cpu1

4.2双处理器同时在线调试DEBUG

选择配置选项Run>debugConfiguration的DeviceInitialization选项卡的ResetType选项,将ResetEntireSystem改为ResetProcessorOnly。

注:

SDK2013.4下,在不烧写PL配置程序下可直接下载程序,cpu0,cpu1按先后顺序在线运行后,不需任何唤醒设置,即可同时运行。

SDK2013.4同时调试。

Help中搜索Multi-Processor,查看多核处理器的调试,如图所示。

Step1:

选择配置。

Step2:

配置软件。

选择处理器,分别勾选各自的下载程序,点击Debug即开始调试。

SDK2014.4同时调试,可能cpu1的运行必须由cpu0激活。

 

4.3在地址分配,或根据程序大小分配:

从应用工程下的lscript.ld文件,更改hello_cpu0与hello_cpu1的DDR地址,其它不变。

cpu0

ps7_ddr_0_S_AXI_BASEADDRbaseaddress(0x00100000)size(0x00100000)

cpu1

ps7_ddr_0_S_AXI_BASEADDRbaseaddress(0x00200000)size(0x00100000)

DownloadingProgram--F:

/zynq_work/zynq_test/AXI_project_1/project_1.sdk/hello_cpu1/Debug/hello_cpu1.elf

section,.text:

0x00200000-0x0020170b

section,.init:

0x0020170c-0x00201723

section,.fini:

0x00201724-0x0020173b

4.4在cpu0中添加激活程序。

第一步:

DisableCacheonOCM

使用函数:

Xil_SetTlbAttributes(0xFFFF0000,0x14de2);

第二步:

载入CPU1程序的存储地址到CPU1处理器的入口地址:

*(unsignedint*)(0xFFFFFFF0)=(unsignedint)0x200000;

第三步:

cpu0发出唤醒命令,唤醒cpu1

print("CPU0:

sendingtheSEVtowakeupCPU1\n\r");

sev();

需要定义:

#definesev()__asm__("sev")

在SDK2014.1下在线运行cpu1,然后再在线运行cpu0,同时工作起来。

注意顺序不能颠倒,否则不能唤醒cpu1.

同时在线运行:

运行cpu1时,软件runconfiguration中,需要设置处理器0,否则软件报错不能在线运行。

不影响硬件的双CPU同时工作。

4.5实际运行验证

按加密启动方式生成镜像文件。

使用RSA加密镜像。

the_ROM_image:

{

[pskfile]F:

\zynq_work\zynq_key_test\key_tool\rsa_zedboard\psk.pk1

[sskfile]F:

\zynq_work\zynq_key_test\key_tool\rsa_zedboard\ssk.pk1

[bootloader,authentication=rsa]F:

\zynq_work\zynq_key_test\key_tool\rsa_zedboard\ready_for_download\fsbl_rsa_debug.elf

F:

\zynq_work\zynq_key_test\key_tool\rsa_zedboard\ready_for_download\hello_cpu0.elf

F:

\zynq_work\zynq_key_test\key_tool\rsa_zedboard\ready_for_download\hello_cpu1.elf

}

RSA镜像下载到QSPI:

XMDConsole

1.cdF:

/zynq_work/zynq_key_test/key_tool/rsa_zedboard/ready_for_download

2.connectarmhw

3.sourceps7_init.tcl

4.ps7_init

5.dowu-boot.elf

6.con

7.stop

8.dow-datacpu2_rsa_boot0.bin0x2000000;0x2000000是DDR中20M的位置,将认证文件下载到DDR的20M(0x2000000)处。

9.con

COM终端

程序已下载到DDR中,通过串口终端对ARM的u-boot进行操作,使DDR中的程序写到QSPI中。

1.sfprobe0;获得QSPI的操作对象

2.sferase00x800000;对QSPI从0开始擦除8M的长度。

3.sfwrite0x20000000x80000x600000;将DDR的20M开始的,长度为6M(0x600000)的内容写入32K(0x8000)开始的QSPI中,即将认证文件写入QSPI。

重启后,同时正常工作。

工程:

Note/zynq_test/SDK2014_CPU2work.rar

5.FSBL配置

1)FSBL启动文件具有通用性,与PL、PS的配置变化没直接关系。

2)FSBL如需使启动的文件支持RSA加密,需要添加变量常数:

RSA_SUPPORT

Properties>C/C++Build>Setting>symbols>添加

3)测试启动时间常数:

FSBL_PERF

4)其它参数配置:

查看fsbl.h中的说明

FSBL_DEBUG_GENERAL/*generaldebugmessages*/

FSBL_DEBUG_INFO/*Moredebuginformation*/

DEBUG

RSA_SUPPORT

6.SDK技巧

SDK软件工程的直接运行:

SDK软件工程可在未下载bit文件的情况下,直接运行软件工程,或仅下载SDK软件程序,也能直接正常运行。

原因:

Ps7处理器初始化,从vivado导出hw_platform后,该文件夹生成的ps7_init.tcl文件可以对处理器进行初始化。

如果未下载FPGA的bit文件时,在该硬件平台生成的软件可直接运行在处理器上,此时处理器的MIO口的配置,全依赖于ps7_init.tcl文件。

此时zynq7在没有bit文件下,完全用作ARM处理器。

ARM处理器的配置情况:

查看hw_platform_0/ps7_init.html文件

驱动情况:

查看文件bsp/system.mss

7.SDK_ps7全局计时器的使用

程序:

全局时钟头文件xtime_l.c/h

定义:

计数器计数频率为内核主频/2

#defineCOUNTS_PER_SECOND(XPAR_CPU_CORTEXA9_CORE_CLOCK_FREQ_HZ/2),

参考1:

FSBL的FSBL_PERF时间常数设置。

参考2:

sleep()函数

函数:

XTime_SetTime(XTimeXtime)一般不设置。

复位、写时间值到全局时钟计数器寄存器。

多处理器下,任意一处理器使用该函数,将复位所有处理器。

XTime_GetTime(XTime*Xtime)获取当前时钟计数器值

实例1:

秒延时文件sleep.c

#include"sleep.h"

#include"xtime_l.h"

#include"xparameters.h"

intsleep(unsignedintseconds)

{XTimetEnd,tCur;

XTime_GetTime(&tCur);

tEnd=tCur+((XTime)seconds)*COUNTS_PER_SECOND;

do{XTime_GetTime(&tCur);

}while(tCur

return0;

}

实例2:

时间测量函数fsbl/main.c

#include"xtime_l.h"

XTimetCur=0;

XTime_GetTime(&tCur);

XTimetEnd=0;

FsblMeasurePerfTime(tCur,tEnd);

voidFsblMeasurePerfTime(XTimetCur,XTimetEnd)

{doubletDiff=0.0;

doubletPerfSeconds;

XTime_GetTime(&tEnd);

tDiff=(double)tEnd-(double)tCur;

/**ConverttPerfintoSeconds*/

tPerfSeconds=tDiff/COUNTS_PER_SECOND;

/**ConverttPerfintoSeconds*/

tPerfSeconds=tDiff/COUNTS_PER_SECOND;

printf("%fseconds\r\n",tPerfSeconds);

}

8.封装IP

8.1在工程中添加源程序(addsources),可添加外部IP

(ConfigurableIP,DSPcomposite,embeddedsub-design)

格式:

.xco.xci.mdl.slx.bd

8.2创建IP轮廓(IPDefinition)

选择Tools-->CreateAndPackageNewIP。

如需将当前工程封装为IP,选择封装当前工程,点击finish将把整个工程生成对应IPDefinition。

如需将其他文件封装为IP,选择程序文件目录,点击finish将在指定的目录建立IPDefinition,并自动为IP新建一个工程。

8.3封装IP

在FlowNavigator的ProjectManager中选择PackageIP。

然后可在PackageIP中设置IP名,查看使用的文件等,最后点击最后一项的PackageIP按钮,将产生封装好的IP。

8.4查看生成的IP

在IPIntegrator中创建IP模块文件,bd文件

添加生成的IP文件

双击IP后产生配置说明,该模块中可以定义位宽。

可以定义位宽是因为在verilog程序中定义了常量parameter。

8.5生成IP文件

在.runs\synth_1目录生成黑箱文件(checkpointfile):

axi4lite_reg_if_v1_0.dcp

该文件可以作源文件如HDL文件一样添加和使用。

在.srcs\sources_1\bd\z_system\ip\z_system_axi4lite_reg_if_v1_0_0_0目录查找到

IP文件:

z_system_axi4lite_reg_if_v1_0_0_0.xci

该目录是新建bd文件后,在z_system.bd中添加生成的IP而产生。

9.数学库的使用

添加数学库函数:

C/C++Build>setting>ARMgcclinker>libraries>添加库“m”

头文件中加入

10.

 

附录:

Axi4lite总线协议:

moduleaxi4lite2abus_v1_0#

//Userstoaddparametershere

//Userparametersends

//Donotmodifytheparametersbeyondthisline

 

//ParametersofAxiSlaveBusInterfaceS00_AXI

parameterintegerC_S00_AXI_DATA_WIDTH=32,

parameterintegerC_S00_AXI_ADDR_WIDTH=24

//Userstoaddportshere

outputBUS2IP_RDn,

output[C_S00_AXI_ADDR_WIDTH-1:

0]BUS2IP_RDADDR,

input[C_S00_AXI_DATA_WIDTH-1:

0]I

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1