时光飞逝,活动很快接近尾声了,今天周末来对近期的试用体验总结总结。我们从米尔提供的光盘SDK中,容易得知该MYD-C7Z010/20开发板的详细使用步骤,为此只要我们有足够的时间与耐心,对于初学者都不是很难的事。按照《MYiR Zynq FPGA 使用手册》操作,按部就班,循序渐进,久而久之对基于ZYNQ7开发FPGA应用程序有了深刻的认识与感悟。根据《MYiR Zynq FPGA 使用手册》说明,官方提供了11个实验供大家参考,本人利用中午休息的时间,在公司的电脑上搭建好Vivado编译环境,然后再建立工程,编译出BOOT.bin文件,将BOOT.bin文件拷贝进TF卡中,然后再测试,是否与手册介绍的一致。如若不一致,重新再创建工程,一一排除其它问题,找到出错的根本原因。
      《MYiR Zynq FPGA 使用手册》中介绍了11个实验的详细操作步骤,如果您仔细阅读过,就不难发现该使用手册层次清晰,由简单到复杂,由面面俱到到重点点拨。总体来描述一个Vivado工程从创建工程到生成BIN文件,步骤有:
①新建一个Vivado工程 → ②新建Block Design → ③添加IP核并配置 → ④生成综合文件 → ⑤生成FPGA顶层文件 → ⑥生成bit文件 → ⑦导出硬件配置文件 → ⑧启动SDK,新建fsbl → ⑨新建一个hello_world工程 → ⑩生成BOOT.bin文件
      由于笔记本的HDMI不支持输入,加之没有相适应的LCD屏,因此只验证了六个工程实验,感觉收获颇丰。
     在《MYiR Zynq FPGA 使用手册》中,当然也是存在诸多问题点的,比方说小标题,第五章的1.10写成了1.8,第十章、第十一章出现两个1.8。内容上也存在些许问题,第五章的pl_int中concat核输入管脚SW1连线是否必须改成Op1_0_1,没做说明;第五章的1.5添加xdc管脚约束没有详细说明需要添加三个管脚,导致1.6生成bit文件时编辑pl_int.xdc文件让开发人员一头雾水,怎么多出了SW2,SW3呢。总共做了6个实验的验证,除了第三章的uart_cycle测试结果与手册上描述的不一致外,其它实验结果都与手册描述不谋而合。关于第三章的uart_cycle的实验,米尔提供的uart_cycle工程程序如下:
/* ------------------------------------------------------------ */
  • /*              Include File Definitions                        */
  • /* ------------------------------------------------------------ */
  • #include <stdio.h>
  • #include "xparameters.h"     //The hardware configuration describing constants
  • #include "xil_io.h"          //Contains the Xil_Out32 and Xil_In32 functions
  • #include "xuartlite_l.h"     //
  • #include "xuartps_hw.h"
  • #define uchar unsigned char
  • #define uint unsigned short
  • /* ------------------------------------------------------------ */
  • /*              main function                                   */
  • /* ------------------------------------------------------------ */
  • #define UART_1_DEVICE_ID    0xE0001000
  • char uart1_inbyte(void) {
  •          return XUartPs_RecvByte(UART_1_DEVICE_ID);
  • }
  • void uart1_outbyte(char c) {
  •          XUartPs_SendByte(UART_1_DEVICE_ID, c);
  • }
  • /*
  • static void delay(int dly)
  • {
  •         int i, j;
  •         for (i = 0; i < dly; i++) {
  •                 for (j = 0; j < 0xffff; j++) {
  •                         ;
  •                 }
  •         }
  • }
  • */
  • void print1(const char *ptr)
  • {
  •           while (*ptr) {
  •                   XUartPs_SendByte (UART_1_DEVICE_ID,*ptr++);
  •           }
  • }
  • int main()
  • {
  •     uchar rxdb;
  •     print1("hellowolrd!\n");
  •     XUartLite_SetControlReg(XPAR_UARTLITE_0_BASEADDR,0x10); //enable interrupt
  •     XUartLite_SetControlReg(XPAR_UARTLITE_1_BASEADDR,0x10); //enable interrupt
  •     while(1)
  •     {
  •             //delay(1000);
  •         rxdb = uart1_inbyte();  
  •         XUartLite_SendByte(XPAR_UARTLITE_0_BASEADDR,rxdb);
  •         rxdb = XUartLite_RecvByte(XPAR_UARTLITE_1_BASEADDR);
  •         XUartLite_SendByte(XPAR_UARTLITE_1_BASEADDR,rxdb);
  •         rxdb = XUartLite_RecvByte(XPAR_UARTLITE_0_BASEADDR);
  •                 uart1_outbyte(rxdb);  
  •     }
  •     return 0;
  • }
  • 复制代码
    现将六个工程实验粗略地记录了一下,详情如下叙述。
    第一章通过串口打印输出字符信息
    第1章启动SDK截图如下:
    第1章启动SDK截图.png
    生成的BOOT.bin文件: 第1章BOOT.zip (39.97 KB, 下载次数: 1)