2020年1月29日 星期三

DE2-115 LED Blink ( LED 閃爍)

DE2-115 LED Blink 

源自於https://coldnew.github.io/4d1ad2ce/
`timescale 1ns / 1ps

module led_blink(LEDG, CLOCK_50);
output [7:0]LEDG;
input CLOCK_50;

reg [3:0] led;

assign clk= CLOCK_50;
assign LEDG[3:0]=led[3:0];

reg [26:0]  counter;

   always @(posedge clk) begin
      if (counter == 27'd50000000) begin
         led <= led + 1;
         counter <= 0;
      end
      else begin
         counter <= counter +1;
      end
   end

endmodule



在 DE2-115 開發紀錄: 硬體認識 一文中,我們發現了 DE2-115 上面有一堆 LED 燈可以使用,就讓我們來建立最簡單的專案,並透過撰寫程式來控制這些 LED 燈吧 !
本文將採用業界比較常用的 Verilog 進行示範,在參照這篇文章之前,需要自行安裝好 Intel® Quartus® Lite Edition 或是進階版本。

開發目標

我們要透過純粹的可程式邏輯(Programmable Logic, PL) 去控制 LED,也就是說,我們只寫硬體描述語言 Verilog 來控制 DE2-115 上面的 LED,讓他依照我們設定的頻率進行閃爍/亮滅。
在這邊,我們選用 DE2-115 上面的 LEDG0 ~ LEDG3,也就是挑選出四個綠色的 LED 來進行我們這個 LED 閃爍燈專案,具體對應的 FPGA 腳位請參照上圖。
另外,從上面的電路可以看出,當我們從 FPGA 輸出高位準的訊號出來的時候,此時 LED 為亮,反之,若設定該腳位為低位準(邏輯 0)的話,則 LED 為暗。

建立我們的專案

我們首先透過 File -> New Project Wizard 建立一個新的專案
點選 Next >
在這邊,我設定專案位置存放到 /home/coldnew/blink 去,專案名稱為 blink ,而程式的進入點則是 blink 這個模組名稱。 設定完成後,點選 Next >
由於此時我們沒有樣板,因此選擇 Empty project , 點選 Next >
由於我們還沒有開始撰寫程式,無法加入寫好的檔案,這邊直接選 Next >
選擇 DE2-115 的 FPGA 型號與類別,在 DE2-115 開發紀錄: 硬體認識 有提到採用的是 Cyclone IV 的 EP4CE115F29C7 晶片,選擇好後選擇 Next >
接下來,在 EDA Tool Settings 這邊選擇採用 ModelSim-Altera 來驗證 Verilog HDL 檔案,我們會在之後的文章做簡單的模擬驗證。
都好了後,可以看一下建立新的專案的一些資訊,按下 Finish 完成專案的建立

撰寫程式

建好專案後,你會發現如果對 Project Navigator 裡面的 blink 點兩下,會彈出 Can't find design entity "blink 的視窗,這是因為我們還沒建立我們的程式碼檔案 blink.v , 這邊就來建立它。
首先點選 File -> New ,會看到如下的視窗,在這邊我們要使用 Verilog 進行開發,因此選擇 Verilog HDL File 來建立我們的檔案
接下來,在這個檔案加入類似 zybo board 開發記錄: 透過可程式邏輯控制 LED 閃爍 一文的程式碼,並將此檔案除存為 blink.v (注意到這個模組名稱和前面提到的 進入點(top-level design entity) 要相同)
`timescale 1ns / 1ps

module blink(output reg [3:0] led,
             input clk);

   reg [26:0]      counter;

   always @(posedge clk) begin
      if (counter == 27'd50000000) begin
         led <= led + 1;
         counter <= 0;
      end
      else begin
         counter <= counter +1;
      end
   end

endmodule
這個程式做了什麼呢? 在 DE2-115 開發紀錄: 硬體認識 一文中,我們知道了進到 DE2-115 的時脈為 50M Hz, 如下圖:
由於 50M Hz 的速度太快,我們需要簡易的除頻器讓輸入的時脈可以慢一點點,這樣我們的 LED 才不會因為 視覺暫留效應看起來就像是恆亮的狀態。
在這邊的程式,我們透過一組暫存器來存放當前計數的狀態,每計數 50 百萬次後,就讓 LED 暫存器的數值增加,反之則是讓計數器的內容增加。
也就是說,由於我們的時脈輸入將會設定為 50 MHz,因此讓計數器計數 50 百萬次後調整 LED 暫存器的資訊,相當於 每 1 秒 修改一次 LED 暫存器的內容

腳位設定

由於我們建立這個專案的時候還是空專案,並未指定對應的 FPGA 腳位,因此就現在來設定吧。
在設定腳位之前,需要執行 Processing -> Start Compilation 讓 Quartus 編譯與分析我們的程式。
編譯都順利的話,Quartus 會提出我們程式的報告
現在,讓我們來指定腳位的對應吧~ 點選 Assignments -> Pin Planner 進入到腳位設定視窗
進入到 Pin Planner 後,照著我們一開始的規劃,將相對應的腳位填上
這樣這個專案就差不多告成囉,不過由於我們剛設定好腳位對應,所以還需要 再編譯一次
這次編譯好了以後,就可以下載到 DE2-115 試試看

下載到 DE2-115

要下載到 DE2-115 的話,選擇 Tools -> Programmer 召喚下載用的程式
假設在 Programmer 頁面下,並未看到 USB Blaster 這樣的下載器資訊的話,你可能需要點選一下 Hardware Setup 去指定下載器
如果有看到下載器的話,就點選 Start 就會開始下載囉~ 下載完成就會看到 Progress 這個欄位顯示 100% (Successful) 了
好了我們已經下載完成,去看看我們的板子的顯示狀況吧 !

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...