FMQL开发流程
整体开发流程如下:
具体开发流程:
Vivado工程搭建 首先根据自己项目的功能需求,结合原理图,明确vivado工程中所需搭建的PS和PL部分的资源。
搭建使用的是vivado.2版本的vivado
创建vivado工程:
双击vivado软件,打开后点击Create Progect选项
点击next,输入工程名字,选择保存路径,勾选Create Project Subdirector,路径不能有中文,工程名字不能有“-”中横线。
继续点击next,选择第一个选项RTL Project,勾选Do not specify sources at this time,这个选项是添加编程文件,咱们开发zynq一般不需要自己写代码,所以勾上这个选项。
点击next,弹出SOC型号选择的窗口,芯片型号可以从原理图中获得,如果原理图中的芯片型号不全,可去找硬件同时询问具体型号,在search中搜索自己所需的芯片型号,选中该型号,点击next
之后会弹出一个参数显示界面,确认SOC型号正确后点击finish,完成工程的创建。
工程创建完成后,会进入正式的编辑工程的界面,如下所示
点击左侧菜单栏中的Create Block Design选项,弹出窗口,填写block design工程的名字,这里使用默认名字,可根据自己需求修改
点击OK,然后点击左侧菜单的Create Block Design选项,如下所示,可以关掉
IP Catalog和Project Summary两个窗口,一般用不到。
点击右侧页面中或右侧页面上方菜单栏中的“+”,可以添加IP核,或者右击右侧空白部分,在弹出的菜单中选择Add IP选项,首先必须添加的是zynq的PS IP核,点击加号后搜索zynq出来的就是PS的IP核,选中双击即可添加。
可以通过双击PS IP核打开PS的配置界面,配置PS的资源等,最重要需要配置的是DDR的选型。同理PL部分的IP和也可以双击打开配置界面进行一些参数的配置。
其他具体搭建block design的细节这里不再赘述,工程连接如下:
/download/qq_38584212/87924602
搭建完工程后首先一定要保存,然后点击右侧上方菜单中的对号按钮(图中红色标出),检查搭建的block design是否正确,弹出successful代表block design无连线错误。
右击Source菜单中的带黄色小三角的design_1,弹出菜单中选择Generate Output Products
弹出窗口中选择Global选项,点击Generate,输出产品。
之后同样右击这个带黄色小三角的design_1,弹出菜单中选择Create HDL Wrapper,生成顶层文件,顶层文件用于后续添加约束文件使用,生成对应需要约束的管脚。
双击Source菜单中前面带蓝色点的design1_wrapper,可以在右侧窗口中看到已经生成的对应需要约束的一些管脚。
接下来需要给这些管脚添加对应的约束,右击Source菜单中的constrs_1,弹出菜单中选择Edit Constraints Sets
在新弹出的窗口中点击Create File,填写约束文件.xdc的名字,点击OK,在constrs_1目录下会新增加一个后缀名为.xdc的约束文件。
然后点击左侧菜单中的Open Elaborated Design选项,会跳出添加约束的界面(根据block design大小的不同,打开的时间也不一样,有的工程可能打开需要十几二十分钟)打开后如下图所示,需要选择对应的约束管脚和电压,直到表中没有红色字样提示,说明所有需要添加的约束的管脚都分配了对应的约束。
也可以选择在之前新建的xdc文件中通过手动添加代码的方式添加约束(这个方法不建议,容易出错)
自己工程中所需的PL端的约束管脚,要去原理图中查找。
例如网口的约束,可以通过从RJ45插座的位号开始查找,再找到对应的PYH芯片,PHY芯片连接的就是PL端的约束。
将约束添加完毕后,保存工程,上方会提示Reload的字样,点击Reload,对应的.xdc文件中就自动添加了约束的代码。
全部做完后,点击左侧菜单中的Generate Bitstream选项
弹出界面中,选第一个选项,后面下拉可以选择编译工程所用的CPU的数量,数量越多,工程编译的越快,但是占用电脑资源会越多,点击OK,等待完成综合、实现、生成bit文件。
成功生成bit文件后,会弹出如下窗口,点击Cancel
导出hdf文件,点击File-Export-Export HardWare
弹出窗口中,勾选上include bitstream,点击ok,对应vivado工程目录下会多出一个.sdk的文件夹,里面存放的是.hdf文件。
接下来就是去vivado工程的目录下,找到FMQL移植需要的.bit,.hdf,.bd,.xci四个文件,四个文件所在的目录如下:
.bit文件
路径:\your_project\project_1.runs\impl_2\*.bit
.hdf文件
路径:\your_project\project_1.sdk\*.hdf
.bd文件
路径:\your_project\project_1.srcs\sources_1\bd\design_1\*.bd
.xci文件
路径:\your_project\project_1.srcs\sources_1\bd\design_1\ip\
design_1_processing_system7_0_1\*.xci
FMQL移植部分
打开Procise软件,新建Procise工程,点击New Project,填写工程名字,点击Next
选择芯片型号,可直接看芯片上印刷的型号,或看原理图以及询问硬件同事,芯片型号选错误可能会导致最终系统无法启动、卡死。
之后一直点击Next、点击fimish,完成工程新建
点击上方菜单栏中的Tools-Integrated Tools Options
弹出窗口中,IAR的选项中添加IAR的安装路径,这样就可以通过Procise直接自动链接打开IAR软件。
点击最上方菜单栏中的PSOC,下拉菜单中选择第一项From Vivado
弹出窗口中点击Browse,第一个选项选择之前从vivado工程中取出来的四个文件中的.bd文件,第二个选项选择.xci文件,然后点击OK。
点击OK后会弹出一个对话框,提示引出DDR和FIXED_IO,点击确定
等待几秒钟,弹出新窗口,选中FSBL和DeviceTree两个选项,点击OK
等待几秒钟Procise会自动连接打开IAR软件,点击IAR软件上方菜单中的make按钮,图中红色圈出,下面编译窗口提示errors:0,说明编译成功。
再次提醒:IAR软件不能远程使用,否则会编译失败
编译成功后,会在Procise的工程目录中生成fsbl以及设备树源码文件夹
Fsbl路径:\Your Project\SDK\design_1_platform\FSBL\Debug\Exe\fsbl.out
DeviceTree路径:\ Your Project \SDK\design_1_platform\DeviceTree
取出fsbl.out文件和DeviceTree文件夹
fsbl.out、bit文件、uboot.elf三个文件用于生成BOOT.bin
DeviceTree文件夹和.hdf文件用来编译生成.dtb设备树文件
再次切换回Procise软件,选择菜单栏中的PSOC-Create Boot Image选项
弹出的窗口中选择Basic,点击第一行的Browse,选择路径,用于存放生成的BOOT.bin和.bif文件。
Lock in下拉选择BOOT.bin文件存放路径,File name填写.bif文件名字,这个文件咱们用不上,大家随意填写就好,然后点击save。
点击Add按钮,弹出窗口点击Browse按钮,依次选择添加fsbl、bit文件、u-boot.elf文件,添加顺序不能错,否则Linux无法启动。
都添加完毕后最后点击Create Image,生成BOOT.bin文件。
虚拟机中编译生成.dtb设备树文件
打开编译FMQL设备树使用的虚拟机
将之前IAR编译生成的在Procise工程目录下的DeviceTree文件夹拷贝到虚拟机的任意目录下(这个目录自己定义,后续在编译设备树指令中将DeviceTree所在路径修改为自己定义的路径即可)
我的放在了自己定义的一个目录下了。
然后将.hdf文件拷贝到虚拟机的如下目录:
退回到编译环境目录FMQL-Linux-SDK_下:
右击鼠标,选择在终端中打开
执行指令:source env.sh 重新打开的控制台需要重新执行一遍该指令
执行指令:./build.sh --hw /home/fmsh/tangbojian/DeviceTree/ --hdf device-tree/xlnx-dts/design_1_wrapper.hdf dtb
编译设备树
其中/home/fmsh/tangbojian/DeviceTree/路径配置为自己存放DeviceTree文件夹的路径,design_1_wrapper.hdf改为自己viaodo工程中生成的.hdf文件的名字即可。
如果搭建的vivado工程没有PL部分,编译设备树时,不需要引入.hdf文件,执行的编译设备树指令变为:
./build.sh --hw /home/{user_name}/Downloads/DeviceTree/ --nofpga dtb
设备树编译成功后会在Image目录下生成system-top.dtb文件,使用时需要改名为devicetree.dtb使用。
修改设备树节点:
fmql与zynq修改设备树节点的方法不同,fmql添加的节点都放在一个名字叫system-user.dtsi的文件内,需要通过父节点的引用来定义新的子节点,对应目录如下所示:
不要在其余四个文件中修改设备树,即便修改了,编译后也不会生效,其余四个文件是通过DeviceTree文件夹以及.hdf文件编译后生成的,里面有vivado工程搭建的资源的设备树节点的描述,大家使用时,可以先不修改system-user.dtsi文件编译一次,这样其余四个文件中的设备树节点就根据你的DeviceTree文件夹以及.hdf文件进行了更新,然后再通过其余四个文件中的设备树节点的引用名字,在system-user.dtsi文件中通过引用添加新的设备树子节点信息。
下面是添加了EMMC分区节点和网口中PYH节点的system-user.dtsi文件的例子:
新添加的设备树节点信息,重新编译后,在上述四个文件中是看不到的,只能反编译刚才编译出来的system-top.dtb文件才能看到新添加的节点是否生效。
反编译指令:dtc -I dtb -O dts system-top.dtb > devicetree.dts
编译出的devicetree.dts文件可以直接打开查看。
PHY节点的地址信息根据原理图和PHY芯片的手册确定。
再加上Rootfs就可以起系统了。
希望大家点赞、收藏、关注哦!!!ヾ(o◕∀◕)ノ
ZYNQ-Linux开发之(五)Vivado工程搭建 设备树修改方法 复旦微电子fmql开发 vivado联合procise IAR的linux系统开发-保姆级教程-非常详细