本文档系列是我在实践将神经网络实现到Xilinx 的zynq的FPGA上遇到的问题和解决方法。
背景:FPGA的片上BRAM空间较少,难以实现大量的存储。DDR的内存空间较多,若作为global memory将能实现很多问题。
目的:用FPGA调用DDR
参阅的文档:DS176:Zynq-7000 AP SoC and 7 Series FPGAs Memory Interface Solutions Data Sheet
UG586: zynq-7000 AP Soc and 7 Series Devices Memory Interface Solutions
Xilinx zynq系列FPGA实现神经网络中相关资源评估
FPGA基础知识(六)UG586 Mermoy Interface Solutions
一、创建工程
1.1 打开vivado, 创建工程,RTL project,板子选择xc7z035ffg676-2
1.2 创建block design
二、创建与定制MIG IP
2.1 添加MIG,双击MIG IP
2.2 默认一个控制器,AXI4接口
2.3 next,选DDR3 SDRAM
2.4 默认设置800MHz时钟,然后修改Memory Part为MT41K256M16XX-125,Data Width选择32位,其他设置默认
2.5 AXI的Data Width选择64位和PS的HP接口对应,或者32位和GP接口对应,地址线读写仲裁选择ROUND_ROBIN,其他默认
2.6 因为刚才选了800MHz和4:1,所以这里的输入时钟选择200MHz,其他默认
2.7 系统时钟来自于FPGA内部,这里选择No buffer,其他默认
2.8 内部终端电阻选择50欧姆
2.9 开发板是固定的,所以选择fixed pin out
2.10 选择read XDC/UCF,这个是管脚分配的文件,选择开发板默认的DDR管脚分布。
2.11 点击validate之后一直点next,最后accept,generate
三、定制processing system
3.1 加入ZYNQ7 processing system
3.2 双击IP进行配置,先应用开发板的配置(Zedboard),配置起来更快。
3.3 配置MIO,bank0配置为3.3V,bank1配制为1.8V
3.4 检查各个外设是否与MIZ7035的核心板匹配,SD卡,WP信号没用,去掉
3.5 eMMC需要添加SD1接口,CD和WP信号无用,不用添加
3.6 外设复位,ENET上电复位;USB复位在PL上,而这里只能选PS的MIO引脚,所以忽略;没有I2C,取消掉
3.8 Block Design,点击run block automation,建立PS的接口
3.9 创建clocking wizard
外部GCLK的100MHz时钟,因为直接接入了时钟引脚,选择Global Buffer
因为PL DDR3的参考时钟配置的是200MHz,这里让MMCM输出200MHz,并将Reset设置为低有效
四、搭建系统
4.1 对clock的接口进行连接
4.2 点击Run Connection Automation进行连接,
时钟选择/mig_7series_0/ui_clk(200MHz)
4.3 重新进行连线
4.4 分配地址
4.5 新建IO 约束文件,新建IO约束文件MIZ7035_IO.xdc,内容如下
create_clock -name clk100m_i -period 10.00 [get_ports clk100m_i]
set_property VCCAUX_IO DONTCARE [get_ports clk100m_i]
set_property IOSTANDARD SSTL15 [get_ports clk100m_i]
set_property PACKAGE_PIN C8 [get_ports clk100m_i]
set_property PACKAGE_PIN H7 [get_ports rst_key]
set_property IOSTANDARD SSTL15 [get_ports rst_key]
set_property PACKAGE_PIN K10 [get_ports init_calib_complete]
set_property IOSTANDARD SSTL15 [get_ports init_calib_complete]
这个文件用于对相应的管脚和板子进行约束,具体化相应的管脚。我们一定要在block design和这里,名称要保持一致。
4.6 add constrians,create HDL wrapper,Generate output products.,generate
bitstream,生成相应的bit文件。
五、SDK
5.1 file-export-export hardware,需要包括相应的比特流
5.2 打开SDK,我的电脑用vivado直接打开SDK总是死机,所以我们直接打开SDK,目录改到之前的目录下面,创建新的applicaiton project
5.3 选择memory test
六、用FPGA运行
6.1 编译工程
6.2 连接FPGA
6.3 烧写比特流进入FPGA
6.4 运行及结果