1. 程式人生 > >ZYBOZ7從入門到進階-2 zyboz7純PL開發之LED點燈

ZYBOZ7從入門到進階-2 zyboz7純PL開發之LED點燈

版權宣告:本文為博主原創文章,未經博主允許不得轉載。https://blog.csdn.net/a646123070

上一節,我們進行了ZYBOZ7的拆箱(ps:感覺在介紹一下具體的引數,效能指標就可以像手機測評一樣搞個開發板測評了,哈哈)。同時,我們也進行了開發工具的安裝,下面,讓我們用一個簡單的例子來熟練一下開發工具的使用。

1、建立一個新的空工程

首先開啟桌面上的 Vivado 20**.* 的圖示(我使用的版本是vivado2018.2),在Quick Start視窗下選擇Create Project 。

然後在彈出的頁面選擇Next。

之後會彈出建立工程名和選擇工程所在位置的頁面,填寫好這兩項資訊,同時勾選Create project subdirectory,之後點選next進入下一步。

接著選擇工程型別,我們一般選擇RTL Project,同時勾選Do not specify sources at this time(這樣可以跳過新增原始檔的步驟,原始檔可以後面再新增),之後點選兩次next跳過新增原始檔和約束的頁面進入下一步。

這一步是根據自己的開發板選擇器件型號,可以通過Parts直接通過型號進行搜尋,例如zyboz7-20開發板上的晶片型號為xc7z020clg400-1。也可以通過Boards找到開發板名字進行新增,這種方法需要先在vivado中新增zyboz7開發板資訊,具體操作請參考vivado新增開發板資訊,需要的檔案我也上傳到了csdn。如果不瞭解或者暫時不寫進開發板,可以隨便選一個型號,後面需要的時候再修改。之後點選next,進入下一步。

在這一步會出現新建立的工程的摘要,大體瀏覽一下沒有問題的話點選finish,這樣一個新的工程就建好了。

新建好的工程如下圖所示,主要包括 Flow Navigator和project Manager兩大部分。Flow Navigator從上而下的流程就是我們實現某一工程的具體流程,project Manager包含source(原始檔)和project summary(工程摘要)兩部分。

2、往新工程中新增原始檔和約束檔案(兩者無先後之分)

首先,在project Manager視窗的source子視窗的constraint資料夾右鍵點選,選擇Add source

在彈出的頁面選擇Add or create constraint,然後點選next

在新增或建立約束檔案的頁面,點選Add file按鈕,新增現有的約束檔案

點選完Add file按鈕後,會彈出新增約束檔案頁面,選擇約束檔案所在位置點選OK即可新增完成(本文所需要的約束檔案zybo-z7-master.xdc我已上傳到csdn,需要請下載)。

新增完約束檔案後,會返回到上一頁面,我們點選finish即可。

這樣,在project Manager視窗的source子視窗的constraint資料夾下會出現我們新增的約束檔案,只不過這是通用的約束檔案,所有的約束都被註釋掉了,我們需要做的就是針對我們自己的實驗,把我們需要的被註釋掉的管腳的註釋取消掉。雙擊我們新增的約束檔案就會開啟,然後把約束檔案中關於clock signal、switches、leds的註釋取消掉(把相關程式前邊的“#”號刪除即可)。

接下來就是新增原始檔,方法和新增約束檔案的差不多,這裡只大體說一下。
首先在project Manager視窗的source子視窗下的Design source資料夾右鍵點選選擇Add or creat design source,之後點選create file(這裡與新增約束檔案不一樣,約束檔案是新增,這裡是建立),在彈出的頁面填寫文件名字後點擊OK,然後點選finish即可新增完成原始檔。

之後在project Manager視窗的source子視窗下的Design source資料夾下面就有一個空的原始檔,我們雙擊開啟,把以下程式碼複製貼上進去即可完成原始檔的建立。

`timescale 1ns / 1ps
module led_2(
    input sysclk,
    input [3:0] sw,
    output reg[3:0] led
       );
    
    parameter LED_CNT1 = 25_000_000;       //每數0.5秒LED閃一次
    parameter LED_CNT2 = LED_CNT1 * 2;
    parameter LED_CNT3 = LED_CNT1 * 3;
    parameter LED_CNT4 = LED_CNT1 * 4; 
    
    reg [31:0] count;
    always @(posedge sysclk )  //計數器在0~LED_CNT4-1之間迴圈
    begin
      if(count == LED_CNT4 -1)
        count <= 0;
      else
        count <= count + 1;
    end
    
    always @(posedge sysclk )
    begin
    if (sw[0] == 1)
    begin
      if(count == LED_CNT1-1)
         led <= 4'b0001;
      else if(count == LED_CNT2-1)
         led <= 4'b0010;
      else if(count == LED_CNT3-1)
         led <= 4'b0100;
      else if(count == LED_CNT4-1)   
         led <= 4'b1000;   
    end
    
        else if (sw[1] == 1)
    begin
      if(count == LED_CNT1-1)
         led <= 4'b1000;
      else if(count == LED_CNT2-1)
         led <= 4'b0100;
      else if(count == LED_CNT3-1)
         led <= 4'b0010;
      else if(count == LED_CNT4-1)   
         led <= 4'b0001;   
    end
    
       else if (sw[2] == 1)
    begin
      if(count == LED_CNT1-1)
         led <= 4'b0001;
     // else if(count == LED_CNT2-1)
        // led <= 4'b0010;
      else if(count == LED_CNT3-1)
         led <= 4'b0100;
     // else if(count == LED_CNT4-1)   
       // led <= 4'b1000;   
    end
    
        else if (sw[3] == 1)
    begin
      if(count == LED_CNT1-1)
        // led <= 4'b0001;
     // else if(count == LED_CNT2-1)
         led <= 4'b0010;
     // else if(count == LED_CNT3-1)
       //  led <= 4'b0100;
      else if(count == LED_CNT4-1)   
         led <= 4'b1000;   
    end
    
     else if (sw[0] == 0 && sw[1] == 0 && sw[2] == 0 && sw[3] == 0)
       begin
         if(count == LED_CNT1-1)
            led <= 4'b0000;
         else if(count == LED_CNT2-1)
            led <= 4'b0000;
         else if(count == LED_CNT3-1)
            led <= 4'b0000;
         else if(count == LED_CNT4-1)   
            led <= 4'b0000;   
       end
    
    end
  
endmodule

新增模擬檔案的操作和上一步新增Verilog設計檔案基本一致,唯一的區別是選擇Add or Create Simulation Sources。本文由於程式簡單,不再進行模擬操作。

3、對工程進行RTL ANALYSIS(RTL分析)、SYNTHESIS(綜合)、IMPLEMENTATION(實現)、PROGRAM AND DEBUG ->Generate Bitstream(生成位元流檔案)

在Flow Navigator視窗下,首先進行RTL分析,分析完成後就行綜合,接著就是實現,最後生成位元流檔案。

4、下載到開發板

在Flow Navigator視窗下的PROGRAM AND DEBUG下的open hardware manager 中點選Open Target然後選擇Auto Connect 即可自動連線開發板。

連線好開發板之後,在open hardware manager 中點選點選Program Device,之後選擇我們的開發板,在新彈出的頁面點選Programe就可以將位元流檔案下載到開發板。

稍等片刻,便可以執行。(sw0控制往左的流水燈,sw1控制往右的流水燈,sw2控制led0和led2亮,sw3控制led1和led3亮)

至此,PL端的LED點燈就完成了。

文中使用到的資源、工程我已打包上傳到csdn資源中心。
作者學生一枚,文中難免有錯誤,指教、改錯請→[email protected]