zynq 7000 SDK下的流水灯实验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leon_zeng0/article/details/82312553

zynq 7000 的流水灯实验是最简单的纯PL 的实验, helloworld 是SDK下的最简单实验,但不包括任何PL。

本文是这2者综合下的最简单实验, PS 和 PL 都有的情况下最简单实验。其结果与流水灯实验一样,但是通过SDK的方式来实现。

本实验的前提是做过上面2个实验。否则看不懂的话,请参考我的上面2文,操作细节在这里可能没有描述那么清楚。

1:创建工程,取名led_sdk, 注意选择好FPGA器件 , 我的是 xc7z010clg400-1。工程的创建详情可以查看zynq 7000 的流水灯实验,或者helloworld 实验。

2:原理图设计

左边Flow Navigator里, IP INTEGRATOR下点击 Create Block Design, 对话框中输入原理图名 system。

在原理图中点击+ 添加IP 核,这里有很多Xilinx提供的IP,我们找到ZYNQ7 Processing System 并双击 添加,不要选择后面带BFM(总线功能模型)的,带BFM的IP 为先前的IP处理器版本。

再添加axi gpip 的ip核。

3:配置

双击Diagram界面里的ZYNQ Processing System,打开ZYNQ系统的配置界面。

DDR 配置是与硬件相关的,查看你的硬件资料,准确选择,这是我板的情况 MT41K128M16-JT。

时钟设置,输入频率可能也与硬件相关。FCLK_CLK0 这里要勾取,因为有PL 需要。

这里也要勾取。

这里和helloworld 一样,选取串口,与硬件有关,查看你板子设计情况。这个应该可以不选,但想查看输出信息就需要,方便调试。

led 只是用了4位,并且全部是输出,所以需要点击axi_gpio 设置如下:

上面2个ip 设置好后,点击下面2处。

Run Connection时:

都连接好,就是这样的原理图了。

点击一下,看看地址分配,记下这个地址。

3: 生成 HDL 文件

按下图依次点击(右击 system.bd),Create HDL Wrapper 和 Generate Output Products。

查看下io端口的名字, 在 system_wrapper.v 中:

添加约束文件led_sdk.xdc,文件内容如下:

set_property PACKAGE_PIN J16 [get_ports {gpio_rtl_0_tri_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_0_tri_o[0]}]
set_property PACKAGE_PIN K16 [get_ports {gpio_rtl_0_tri_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_0_tri_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_0_tri_o[2]}]
set_property PACKAGE_PIN H15 [get_ports {gpio_rtl_0_tri_o[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {gpio_rtl_0_tri_o[3]}]
set_property PACKAGE_PIN G15 [get_ports {gpio_rtl_0_tri_o[2]}]

4个led 对应哪4个端口,请查核你的硬件设计。gpio_rtl_0_tri_o则是我们在上面system_wrapper.v 看到的端口名。

产生比特流:

点击产生比特流,需要好些时间。细节可以对照zynq 7000的流水灯实验一文。

4:SDK 部分:

然后输出硬件,菜单 File ->Export ->Export Hardware

弹出对话框时,记得勾取包含比特流,如下,因为有PL 硬件。

FIle ->Launch SDK就进入SDK编程阶段

在SDK 里, 菜单 File -> New -> New application Project

出现对话框,输入工程名,检查硬件平台,虽然我是输入了SDK 但他还有一些自定义板的,一不小心硬件平台还不与你的一致。这里小心一点。 

OS Platform 选 standalone

样板取 hello World或者Empty Application

5: 把下面代码替代你helloworld.c 文件内容

#include <stdio.h>
//#include "platform.h"
#include "xparameters.h"
#include "xil_io.h"

#define MY_IP    0x41200000    //0x43c00000

int main()
{
    //init_platform();

    print("Hello World\n\r");
    u32 Delay;
    u32 Ledwidth;

      while (1)
      {
          for (Ledwidth = 0x0; Ledwidth < 4; Ledwidth++)
          {
              Xil_Out32(MY_IP,1 << Ledwidth);
              printf("led=%x\n\r",1<<Ledwidth);
              for (Delay = 0; Delay < 28000000; Delay++);
          }
      }
    //cleanup_platform();
    return 0;
}

保存文件并编译连接,右键你的工程,选 Build Project

然后右键你的工程,选 Run As -> 1: Launch on hardware(System Debugger)

如果你像 helloworld 那样连接usb 转串口线,就可以在终端上看到 hello world。 同时4个led 像流水一样依次点亮。

改变Delay < 28000000这个数据,可以控制流动的快慢。

实验就做完了。

猜你喜欢

转载自blog.csdn.net/leon_zeng0/article/details/82312553