第三章 PL通过NoC读写DDR4实验#

实验VIvado工程为“pl_rw_ddr”。

3.1 硬件介绍#

开发板的PL端有4颗16bit ddr4

../_images/image87.png

3.2 Vivado工程建立#

Versal的DDR4是通过NoC访问,因此需要添加NoC IP进行配置。

3.2.1 创建一个Block design并配置NoC#

  1. 选择Create Block Design

    ../_images/image54.png ../_images/image88.png
  2. 添加CIPS

    ../_images/image56.png ../_images/image57.png
  3. 双击CIPS,选择PL_Subsystem,只有PL端的逻辑

    ../_images/image58.png
  4. 添加NoC IP

    ../_images/image89.png
  5. 配置NoC

    选择一个AXI Slave和AXI Clock,选择”Single Memory Controller”

    ../_images/image90.png

    选择Inputs为PL

    ../_images/image911.png

    连接port

    ../_images/image92.png

    DDR4配置

    ../_images/image93.png ../_images/image94.png

    配置完成,点击OK

  6. 配置CIPS,添加复位

    ../_images/image95.png ../_images/image96.png ../_images/image97.png ../_images/image98.png

    点击Finish

  7. 添加Clocking Wizard,配置输出时钟150MHz,作为PL端读写时钟

    ../_images/image99.png ../_images/image100.png
  8. 添加IBUFDS为NoC和Clocking Wizard提供参考时钟,并导出S00_AXI,CH0_DDR4_0等总线,添加axi_clk,axi_resetn为PL端提供时钟和复位。

    ../_images/image1011.png

    双击参考时钟引脚,并配置频率为200MHz

    ../_images/image102.png

    双击AXI总线,并配置

    ../_images/image103.png ../_images/image104.png
  9. 分配地址

    ../_images/image105.png ../_images/image106.png
  10. Create HDL

    ../_images/image107.png

3.2.2 添加其他测试代码#

其他代码主要功能是读写ddr4并比较数据是否一致,这里不做详细介绍,可参考工程代码。

../_images/image108.png
  1. 在mem_test.v中添加mark_debug调试

../_images/image109.png
  1. 引脚绑定

    ../_images/image110.png
  2. 综合

    ../_images/image1111.png
  1. 综合完成后点击Set up debug

    ../_images/image112.png ../_images/image113.png ../_images/image114.png

    根据需求设置采样点数

    ../_images/image115.png ../_images/image116.png

    之后保存,并生成pdi文件

    ../_images/image511.png

3.3 下载调试#

生成pdi文件以后,使用JTAG下载到开发板,在MIG_1窗口会显示DDR4校准等信息

../_images/image117.png

在hw_ila_1中可以查看调试信号

../_images/image118.png

3.4 实验总结#

本实验通过PL端Verilog代码直接读写ddr4,主要了解NoC的配置方法,如何通过NoC访问DDR4,后续的实验中都要用到此配置。