简介
本次开发使用环境 Windows 10 SDSoc 18.2 vivado 18.2 开发板 zedboard。本次实验通过vivado搭建硬件平台,SDSoc来编写代码。The FPGA is an inherently parallel processing fabric capable of implementing any logical and arithmetic function that can run on a processor. The main difference is that the Vivado® HighLevel Synthesis (HLS) compiler [3], which is used by SDSoC to transform C/C++ software descriptions into RTL, is not hindered by the restrictions of a cache and a unified memory space.
ug1235 原话
使用 EMIO 的好处就是,当 MIO 不够用时, PS 可以通过驱动 EMIO 控制 PL 部分的引脚,接下来就来详细介绍下EMIO 的使用。
EMIO 的使用和 MIO 的使用其实是非常相似的。区别在于, EMIO 的使用相当于 PS + PL 的结合使用的例子。所以, EMIO 需要分配引脚,以及编译综合生成 bit 文件。
1.1 搭建vivado平台
开始创建一个空项目
这里我使用的是zedboard板子,使用其他平台的可以根据自己的芯片来选择。
记得创建BD文件时 文件名和之前的项目名字要一样。
点击"+"号创建ip核,并且搜索输入zynq,添加就完事了。
并且设置相对应的EMIO 宽度这款板子是8位LED灯所以设置成8位,最多64位。
设置完毕后会出现GPIO_0 选中该管脚 按下Ctrl+t 就可自动扩展。
重新命个名,方便看。
接下来进行管脚约束,把EMIO绑定到板子上的LED。以下是管脚绑定的命令
1. 外部时钟输入的约束如下:
create_clock -period (clock period) -name (clock name) -waveform { (Traise), (Tfall) } [get_ports (clock port name)]
2. 已建立的时钟改名
create_generated_clock -name (clock name) [get_pins (path)]
3.input/output delay 设置
set_input_delay -clock [get_clocks (clock name)] (delay time ns) [all inputs]
set_output_delay -clock [get_clocks (clock name)] (delay time ns) [all outputs]
4. 建立时钟组
set_clock_groups -name (group name) -asynchronous -group {(clock name) (clock name) }
set_clock_groups -name (group name) -asynchronous -group [get_clocks (clock name)]
5. 管脚分配
set_property PACKAGE_PIN (pin location) [get_ports (port name)]
set_property IOSTANDARD (level:LVDS,LVCMOS18,LVCMOS33 etc.) [get_ports (port name)]
6. 管脚作为时钟线
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets (port_name)]
7. 管脚拉高
set_property PULLUP true [get_ports (port name)]
8. 当 vivado 报错说有某些管脚没有分配时,加下面两句
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]
set_property SEVERITY {Warning} [get_drc_checks UCIO-1]
我们在这里就使用 5 管脚分配命令
首选查阅原理图,明白自己的外设接入了哪些管脚。
填写完毕后 点击红色按键 选中global 后ok,右键BD文件 选择
接下来,选择默认的第二个就行。
好吧,在上面的电压设置错误,然后报错了。管脚分配应该设置成如下样式。
set_property PACKAGE_PIN T22 [get_ports {EMIO_0_tri_io[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[0]}]
set_property PACKAGE_PIN T21 [get_ports {EMIO_0_tri_io[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[1]}]
set_property PACKAGE_PIN U22 [get_ports {EMIO_0_tri_io[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[2]}]
set_property PACKAGE_PIN U21 [get_ports {EMIO_0_tri_io[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[3]}]
set_property PACKAGE_PIN V22 [get_ports {EMIO_0_tri_io[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[4]}]
set_property PACKAGE_PIN W22 [get_ports {EMIO_0_tri_io[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[5]}]
set_property PACKAGE_PIN U19 [get_ports {EMIO_0_tri_io[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[6]}]
set_property PACKAGE_PIN U14 [get_ports {EMIO_0_tri_io[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {EMIO_0_tri_io[7]}]
接着生成bitstream。就可以来生成让sdsoc使用的dsa文件了。