close
当前位置: 物联网在线 > 技术文库 >

开始使用Xilinx Zynq 一款可全编程系统芯片 (SoC)

什么是FPGA

 

Xilinx以制造 可编程门阵列(FPGA)而闻名,它是基于一个通过可编程接点连接的可配置逻辑块(CLBs)矩阵。根据Control Engineering Europe中的 “FPGA的优点(Advantages of FPGA)”这篇文章,多种控制回路能够以不同但是十分快的速度在FPGA设备上运行。FPGA也可以在制造后再编程以达到别种应用或是功能需求,这使它在专业工程师中非常流行。许多工程师都把这种技术应用到机械学习,无线通信嵌入式视觉和云计算应用中。

什么是ZYNQ

 

Xilinx Zynq®-7000 全可编程系统芯片 (AP SoC)系列包含了基于嵌入式处理器的软件可编程性和FPGA的硬件可编程性。这个技术使得我们在单一设备上集成CPU,DSP,ASSP和混合信号功能时进行关键分析和硬件加速。

 

安装Vivado, SDK 和板支持文件

 

在创建数字或系统设计前你首先需要安装 Xilinx Vivado 设计套件。 Xilinx Vivado Webpack 这个版本是免费的,通过 Digilent Wiki 上提供的使用指导也可以帮助你快读安装和运行Vivado。在下载Vivado时,确保你使用设计工具(Design Tools)栏目中的“软件开发套件(Software Development Kit)”来安装SDK。为了防止你忘了这个步骤,你也可以返回安装软件来安装“软件开发套件(Software Development Kit)”。


 

一旦你下载并安装了Vivado,你需要把ZYBO板文件放入本地Xilinx Vivado文件夹,它定义了ZYBO板上的不同界面和协议。之后你就可以成功建立IP和SDK了。Diligent提供了一个教程:https://reference.digilentinc.com/reference/software/vivado/board-files?redirect=1. 

注意:在Vivado board文件安装指导中,你需要把头文件(board_files)放入你的本地文件夹。然后,我会推荐你复制独立的board文件(例如,一旦你下载了vivdado board文件,找到vivado-boards-master\new\board_files并复制“zybo文件夹”。否则你可能会在设计中碰到一些不必要的错误。

创建项目

 

我将会使用 Digilent ZYBO 并根据他们的 开始指南(getting started guide) 来创建一个简单的HelloWorld项目。

项目概要

在这个项目中你将会学到如何用四个板上的开关来控制板上的LED。当你按下四个不同的按钮后,你可以看到来自电脑端的多种信息。

设计流程

  • 打开Vivada并选择Zybo板
  • 创建一个新的Vivado项目
  • 在新的项目中创建一个空的板块设计工作区
  • 使用IP集成工具添加需要的IP模块并创建硬件设计
  • 验证并保存板块设计
  • 创建HDL系统封装
  • 运行设计综合与实现
  • 生成Bit文件
  • 导出包含了bit源文件的硬件设计到SDK工具
  • 开启 SDK

 

硬件设计概要 

你可以根据开始指南(getting started guide)中的步骤2-6来创建硬件设计,以下是一些说明。

  1. 自动运行模块(Run Block Automation)对话框可以让你提供微处理器系统需要的一些基础特性输入。
  2. “3.4)双击新的axi_gpio_0内核可以弹出自定义窗口。在IP设置页检查启动双通道,并点击OK”,你可以创建两种输入-SW和BTN。每一个axi_gpio内核都支持32位单双GPIO通道。在这个项目中,每个通道我们只需要四位。你可以在AXI GPIO Guide中找到详细信息。
  3.  “3.5)重复步骤3.3可以添加另一个GPIO内核,但是不要启动双通道”,你将会创建一个输出-LED。
  4. 自动运行连接可以帮助你hook界面和外部I/O接口
  5. 默认,UART界面中的一种已经被放置在ZYNQ IP中了

    请参考:http://blog.dev-flow.com/en/8-first-use-of-the-zynq-7000-processor-system-on-a-zynq/。

 

软件设计概要

你可以根据开始指南(getting started guide)中的步骤7-10来创建软件设计,以下是一些说明。

当你打开“src”文件夹中的“helloworld.c’’文件后(参考开始指南(getting started guide)中的步骤9.4),你可以通过以下步骤在用户界面看到一些预设功能和库的详细内容。

标记功能/库

 

 

 

 

 

 

 

 

 

 

右击预设功能/库并打开新选项看到声明

 

 

 

 

 

 

 

 

 

 

以下是代码和注释

/*****************************************************
Getting Started Guide for Zybo

This demo displays the status of the switches on the
LEDs and prints a message to the serial communication
when a button is pressed.

Terminal Settings:
   -Baud: 115200
   -Data bits: 8
   -Parity: no
   -Stop bits: 1

1/6/14: Created by MarshallW
****************************************************/

/*include libraries from Xilinx*/
#include <stdio.h>
#include "platform.h"
#include <xgpio.h>
#include "xparameters.h"
#include "sleep.h"

int main()
{
   XGpio input, output; /*Declare two structure input & output. XGpio is*/
   int button_data = 0; /*Declare & Define initial button value*/
   int switch_data = 0; /*Declare & Define initial switch value*/

   /*Initialize the XGpio instance provided by the caller based on the given DeviceID.*/

   XGpio_Initialize(&input, XPAR_AXI_GPIO_0_DEVICE_ID);	/*We define AXI_GPIO_0 as inputs - BTN & SW*/
   XGpio_Initialize(&output, XPAR_AXI_GPIO_1_DEVICE_ID);/*We define AXI_GPIO_1 as inputs - LED*/

   XGpio_SetDataDirection(&input, 1, 0xF);			/*set first channel of input tristate buffer to input*/
   XGpio_SetDataDirection(&input, 2, 0xF);			/*set second channel of input tristate buffer to input*/

   XGpio_SetDataDirection(&output, 1, 0x0);		/*set only channel of output tristate buffer to output*/

   init_platform(); /*Initialize the platform hardware resources*/

   /*Indefinite loop - running forever*/
   while(1){
      switch_data = XGpio_DiscreteRead(&input, 2);	/*Read the switch (SW) value*/

      XGpio_DiscreteWrite(&output, 1, switch_data);	/*Write the switch (SW) value to LED (LD)*/

      button_data = XGpio_DiscreteRead(&input, 1);	/*Read the button (BTN) value*/

      /*Set up if-else-if statement to print message in the
       *UART terminal. This depends on whether one or
       * more buttons are pressed
       */

      if(button_data == 0x0){} /*If no button is pressed, do nothing*/

      /*If button value is binary 0001 (decimal 1), button 0 (BTN0) is pressed. Use pre-defined function Xil-printf
       * to print the message in the terminal
       */
      else if(button_data == 0x1)
         xil_printf("button 0 pressed\n\r");

      /*If button value is "binary 0010 (decimal 2)", button 1 (BTN1) is pressed. Use pre-defined function Xil-printf
       *to print the message in the terminal
       */

      else if(button_data == 0x2)
         xil_printf("button 1 pressed\n\r");

      /*If button value is "binary 0100 (decimal 4)", button 2 (BTN2) is pressed. Use pre-defined function Xil-printf
       *to print the message in the terminal
       */

      else if(button_data == 0x4)
         xil_printf("button 2 pressed\n\r");

      /*If button value is "binary 1000 (decimal 8)", button 3 (BTN3) is pressed. Use pre-defined function Xil-printf
       *to print the message in the terminal
       */

      else if(button_data == 0x8)
         xil_printf("button 3 pressed\n\r");

      else
         xil_printf("multiple buttons pressed\n\r"); /*All other values, print "multiple buttons pressed*/

      usleep(200000);			/*Delay 200000us*/

   }
   cleanup_platform(); /*Clean up all caches*/
   return 0;

}

 

 

运行项目

 

你可以根据步骤11来运行项目。在你对FPGA进行编程并成功创建应用后,你可以看到以下:

  1. 试着按下四个开关,并且各自相对应的LED会亮起
  2. 在串口端,按下每一个按钮,会弹出“按钮已被按下”的信息。


(责任编辑:ioter)

用户喜欢...

DRAx 信息娱乐系统 SOC – 音响主机

JacintoTMDRAx 应用处理器系列可实现丰富的汽车信息娱乐解决方案,其中涵盖了各种系统功能和不同分辨率的显示尺寸,包括从基本 AM/FM 数字音频广播、媒体播放、远程信息处理和手机镜像,一...


JacintoTM DRAx 信息娱乐系统 SOC – 汽车音频放大器

使用 JacintoTMDRAx 汽车处理器系列可以设计出创新的下一代车载音频系统。传统的环绕声产品经过扩展后包括: 噪声消除(道路和发动机) 噪声生成(电动发动机) 每名乘客自定义(声泡) 音...


Jacinto DRAx 信息娱乐系统 SOC – 数字驾驶舱

功能强大的 Jacinto DRAx 汽车处理器可用于实现汽车数字驾驶舱解决方案,能够将多个车辆 ECU 的功能集成到单个功能强大的 Jacinto DRAx SoC 中,而该 SoC 可支持所有的用户界面和通信功能,其中包...


Jacinto DRAx 信息娱乐系统 SOC – 数字仪表组

汽车仪表板是汽车业持续实现数字驾驶舱变革的一个重要部分。汽车行业正在进行全面升级,将仪表组从模拟解决方案升级到混合型解决方案以及完全可重新配置的数字解决方案,旨在呈现丰...


使用全可编程SoC简化您的增强现实系统

研究表明,我们人类与世界的视觉互动,因为我们处理视觉图像比以其他形式呈现的信息快许多倍,例如书面文本。 增强现实(AR)与其虚拟现实(VR)表亲一样,使我们能够体验对周围环境的...


虚拟现实从SoC开始

William Wong | 2018年4月5日 高通公司的 新虚拟现实(VR)参考设计 (图1) 以及配套的VR开发套件与SDK利用其Snapdragon 845片上系统(SoC)。 Snapdragon 845是许多最新智能手机的基础,包括 三星的 新款...


以前的英特尔Exec能否成功采用旧的ARM SoC?

由英特尔总裁ReneJames领导的创业公司安培计算公司(Ampere Computing)推出了基于ARM的服务器SoC,承诺加速超大规模云计算创新。 蕾妮詹姆斯 詹姆斯的新公司将瞄准由英特尔主导的快速增长的数据...


[原创] On Semi RSL10多协议无线系统级芯片(SoC)开发方案

On Semi公司的RSL10是超低功耗的多协议无线系统级芯片(SoC),采用ARMR CortexRM3处理器(48MHz)和LPDSP32 DSP核(音频CODEC),支持蓝牙...


RohdeSchwarz便携式4.0GHz的频谱分析仪里面的Zynq AP SoC

背景: 无论是在实验室调试嵌入式设备,还是在外场解决复杂的问题,都需要一款便携式的频谱分析仪,在要求有高性能和较宽的测试范围的同时,我们还希望这个仪器有着较小的功耗,这...


Aldec的边缘计算示例: Zynq SoC 的 FPGA架构将嵌入式视觉/ ADAS性能提升了10倍

Aldec的一个应用工程师 Farhad Fallah 在 New Electronics 网站上发表的一篇题​​为生活在边缘的文章最近引起了我的注意,因为它简洁地描述了为什么 FPGA 对于许多高性能的边缘计算应用如此有用...