[米聯客-安路飛龍DR1-FPSOC] FPGA基礎篇連載-05 FPGA流水燈實驗

米联客(milianke)發表於2024-07-23

軟體版本:Anlogic -TD5.9.1-DR1_ES1.1

作業系統:WIN10 64bit

硬體平臺:適用安路(Anlogic)FPGA

實驗平臺:米聯客-MLK-L1-CZ06-DR1M90G開發板

板卡獲取平臺:https://milianke.tmall.com/

登入"米聯客"FPGA社群 http://www.uisrc.com 影片課程、答疑解惑!

1概述

流水燈以及Helloworld實驗是我們首次接觸程式設計必做的實驗。我們這裡就要完成經典的流水燈實驗。通才來說,能夠獨立完成本實驗代表了程式設計者初步掌握了程式設計共計的使用和基本的程式設計能力,已經站在了程式設計世界的大門口了。

在完成本實驗前,請確保已經完成前面的實驗,包括已經掌握以下能力:

1:完成了TD軟體安裝

2:完成了modelsim安裝以及TD庫的編譯

3:掌握了TD模擬環境的設定

4:掌握了modesim透過do檔案啟動模擬

實驗目的:

1:掌握流水燈入門實驗的程式碼編寫

2:掌握模擬測檔案tb的編寫

3:掌握modelsim模擬

4:編譯並且固化程式到FPGA驗證

1.1 LED燈簡介

發光二極體,簡稱為LED,是一種常用的發光器件,透過電子與空穴複合釋放能量發光,它在照明領域應用廣泛。相比其它燈光源,LED效率高、壽命較長、功耗小、低碳環保、材料不易受到環境影響而相對穩定。

發光二極體與普通二極體一樣具有單向導電性,在LED當中只有正極接入正極,負極接入負極它才會有電流流通進去。電流從LED陽極流向陰極時,半導體晶體就發出從紫外到紅外不同顏色的光線,光的強弱與電流有關。常用的是發紅光、綠光或黃光的二極體。發光二極體的反向擊穿電壓大於5伏,使用時必須串聯限流電阻以控制透過二極體的電流。

直插型發光二極體

貼片型發光二極體

1.2 硬體電路分析

L1_DR1開發板共有8LED,其中1PS端的LED7PLLED。當FPGA輸出為高電平時,LED點亮;當FPGA輸出為低電平時,LED燈熄滅。

1.3 程式設計

本次實驗目的為7LED實現流水燈的效果,LED變換間隔時間需要基於系統時鐘來計數,實現間隔時間的計時,除此之外,新增系統復位使程式恢復至預設狀態,輸出結果由7LED燈亮滅顯示。命名模組名為run_led,此模組需要兩個輸入的埠,分別為系統時鐘和系統復位,輸出為7位的 LED

2 FPGA工程

fpga工程的建立過程不再重複,如有不清楚的請看前面實驗。

米聯客的程式碼管理規範,在對應的FPGA工程路徑下建立uisrc路徑,並且建立以下資料夾

01_rtl:放使用者編寫的rtl程式碼

02_sim:模擬檔案或者工程

03_ip:放使用到的ip檔案

04_pin:fpgapin腳約束檔案或者時序約束檔案

05_boot:放編譯好的bit或者bin檔案(一般為空)

06_doc:放本一些相關文件(一般為空)

3 Modelsim模擬

3.1準備工作

再次提醒,在進行modelsim模擬前,請提前完成,如果有不清楚的,以下3步請看前面課程內容:

1:完成了modelsim安裝以及TD庫的編譯

2:掌握了TD模擬環境的設定

3:掌握了modesim透過do檔案啟動模擬

對於向執行什麼級別的模擬,就執行對應的HDL2Bit Flow

HDL2Bit Flow 執行至 Read Design 這一步時,可執行 Behavioral Simulation

HDL2Bit Flow 執行至 Optimize RTL 這一步時,可執行 Post-RTL Simulation

HDL2Bit Flow 執行至 Optimize Gate 這一步時,可執行 Post-Gate Simulation

HDL2Bit Flow 執行至 Optimize Routing 這一步時,可執行 Post-Route Simulation

以執行Behavioral Simulation模擬來說,只要執行Read Design 這一步,如下圖

右擊FPGA Flow Read DesignRerun

3.2產生do檔案

tool選單中選擇simulation

我們這裡也是選擇已經編寫好的模擬測試檔案

模擬測試檔案原始碼如下,對於led這種低速模擬,模擬精度可以設定為1ns,另外模擬階段可以把間隔時間設定小一些,這樣模擬速度就快了:

`timescale 1ns / 1ns

module sim_top_tb();

reg I_sysclk,I_rstn; //時鐘訊號以及復位訊號

wire [6:0] O_led; //模擬的LED 訊號

run_led#

(

.T_INR_CNT_SET(1000) //設定一個較小的時鐘計數引數,可以大大縮小我們模擬需要的時間

)

run_led_inst(

.I_sysclk(I_sysclk), //例化時鐘介面

.I_rstn(I_rstn), //例化復位介面

.O_led(O_led) //例化led介面

);

initial begin

I_sysclk <= 1'b0; //時鐘訊號的暫存器設定初值

I_rstn <= 1'b0; //復位訊號的暫存器設定初值

#100; //延時100個時間單位

I_rstn <= 1'b1; //復位恢復高點平,模擬復位完成

end

always #20 I_sysclk=~I_sysclk; //每過20個時鐘週期,模擬的系統時鐘訊號進行一次翻轉

endmodule

可以看到產生的do檔案中,自動新增了模擬檔案tb_run_led.v以及run_led.v程式路徑

3.3啟動modelsim模擬

啟動後,右擊需要觀察的訊號,新增到波形視窗

設定restart

設定執行100ms(如果執行時間太長可以修改小一些)

4下載演示

下載程式前,先確保FPGA工程已經編譯。

4.1硬體連線

(該教程為通用型教程,教程中僅展示一款示例開發板的連線方式,具體連線方式以所購買的開發板型號以及結合配套程式碼管腳約束為準。)

請確保下載器和開發板已經正確連線,並且開發板已經上電(注意JTAG端子不支援熱插拔,而USB介面支援,所以在不通電的情況下接通好JTAG後,再插入USB到電腦,之後再上電,以免造成JTAG IO損壞)

4.2程式下載

單擊下載按鈕

可以看到已經識別到晶片

4.2.1下載bit

選擇bit檔案

選中後單擊Run

下載成功

可以看到流水燈開始執行。

4.3執行結果

(該教程為通用型教程,教程中僅展示一款示例開發板的上板現象,具體現象以所購買的開發板型號以及配套程式碼上板現象為準。)

相關文章