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]