时光飞逝,活动很快接近尾声了,今天周末来对近期的试用体验总结总结。我们从米尔提供的光盘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工程程序如下:
  1. /* ------------------------------------------------------------ */
  2. /*              Include File Definitions                        */
  3. /* ------------------------------------------------------------ */
  4. #include <stdio.h>
  5. #include "xparameters.h"     //The hardware configuration describing constants
  6. #include "xil_io.h"          //Contains the Xil_Out32 and Xil_In32 functions
  7. #include "xuartlite_l.h"     //
  8. #include "xuartps_hw.h"
  9. #define uchar unsigned char
  10. #define uint unsigned short
  11. /* ------------------------------------------------------------ */
  12. /*              main function                                   */
  13. /* ------------------------------------------------------------ */
  14. #define UART_1_DEVICE_ID    0xE0001000
  15. char uart1_inbyte(void) {
  16.          return XUartPs_RecvByte(UART_1_DEVICE_ID);
  17. }
  18. void uart1_outbyte(char c) {
  19.          XUartPs_SendByte(UART_1_DEVICE_ID, c);
  20. }
  21. /*
  22. static void delay(int dly)
  23. {
  24.         int i, j;
  25.         for (i = 0; i < dly; i++) {
  26.                 for (j = 0; j < 0xffff; j++) {
  27.                         ;
  28.                 }
  29.         }
  30. }
  31. */
  32. void print1(const char *ptr)
  33. {
  34.           while (*ptr) {
  35.                   XUartPs_SendByte (UART_1_DEVICE_ID,*ptr++);
  36.           }
  37. }
  38. int main()
  39. {
  40.     uchar rxdb;
  41.     print1("hellowolrd!\n");
  42.     XUartLite_SetControlReg(XPAR_UARTLITE_0_BASEADDR,0x10); //enable interrupt
  43.     XUartLite_SetControlReg(XPAR_UARTLITE_1_BASEADDR,0x10); //enable interrupt
  44.     while(1)
  45.     {
  46.             //delay(1000);
  47.         rxdb = uart1_inbyte();  
  48.         XUartLite_SendByte(XPAR_UARTLITE_0_BASEADDR,rxdb);
  49.         rxdb = XUartLite_RecvByte(XPAR_UARTLITE_1_BASEADDR);
  50.         XUartLite_SendByte(XPAR_UARTLITE_1_BASEADDR,rxdb);
  51.         rxdb = XUartLite_RecvByte(XPAR_UARTLITE_0_BASEADDR);
  52.                 uart1_outbyte(rxdb);  
  53.     }
  54.     return 0;
  55. }
现将六个工程实验粗略地记录了一下,详情如下叙述。
第一章通过串口打印输出字符信息
第1章启动SDK截图如下:
第1章启动SDK截图.png
生成的BOOT.bin文件: 第1章BOOT.zip (39.97 KB, 下载次数: 1)