LED的驅動及流水燈實驗:
一、 實驗目的與要求
實驗目的與要求:讓使用者進一步了解、熟悉和掌握FPGA開發軟體QuartusⅡ的使用方法以及VHDL的程式設計方法;同時了解簡單時序電路的設計和硬體測試方法。
二、實驗裝置
- SmartSOPC+實驗箱
- 裝有QuartusⅡ的PC機
- JTAG下載下傳器
三、實驗内容
在LED1~LED8引腳上周期性地輸出流水資料,若原來輸出的資料是111100則表示點亮LED1、LED2。流水輸出一次後,輸出資料應該為1111000, 而此時則應點亮LED1 ~LED3三個LED發光二極管,這樣就可以實作LED流水燈。為了觀察友善,流水速率最好在2Hz左右。在QuickSOPC核心闆上有一48MHz的标準時鐘源,該時鐘脈沖CLOCK與晶片的28腳相連。為了産生2Hz的時鐘脈沖,在此編寫一個分頻程式,通過修改分頻系數來變改輸出頻率。當分頻系數為24X100時,輸出即為2Hz的頻率信号。
四、實驗步驟
- 啟動Quartus9.0建立一個空白工程,然後命名為led_flash.qpf。
- 建立工程
- 點選next輸入檔案資訊
-
建立VHDL程式檔案
建立檔案
選擇VHDL - 建立完成:
- 按名稱儲存
- 建立VHDL源程式檔案vhd檔案,編寫程式代碼并儲存(注意第一個實體必須和檔案名稱一緻) ,然後進行綜合編譯。若在編譯過程中發現錯誤,則找出并更正錯誤,直至編譯成功為止。
- 編譯完成後将晶片引腳配置設定
- 打開引腳配置設定
- 變量名對應IO口
- 多餘的IO口要設定三态輸入保護晶片(如下三步走)
打開DEVIEC
點開Pin設定,找到多餘引腳點開
選擇三态輸入
- 編譯完成最後将Altera ByteBlaster Il下載下傳電纜的兩端分别接到PC機的列印機并口和QuickSOPC核芯闆上的JTAG下載下傳口上,打開電源,執行下載下傳指令,把程式下載下傳到FPGA器件中。此時,即可在SmartSOPC實驗箱上看到流水燈。
- 點選下載下傳按鍵
- 按照以下四步下載下傳程式,此處我沒有連接配接試驗箱
選擇檔案
點選下載下傳
五、設計程式
程式設計分為兩個部分:
-
第一部分:根據48M時鐘信号輸入引腳clk來做分頻,配置每個計數的間隔時間。
時鐘分頻代碼:
process(sys_clk)
variable num: integer range 1 to 24000000;
begin
if rising_edge(sys_clk) then
if num=24000000
then num :=1; clk<=not clk;
else num :=num+1;
end if;
end if;
end process;
-
第二部分:對分頻後的跳變進行計數,根據計數的數目,來改變LED引腳的輸出狀态,此處我采用的是使用case選擇語句,在每個計數周期到來時,對數字count進行計數,count範圍0-7,依次循環,case根據判斷結果輸出led電平。
計數代碼:
process(clk)
variable n:integer range 0 to 7;
begin
if rising_edge (clk) then
if n=7 then n:=0;
else n:=n+1;
end if ;
end if;
case選擇判斷代碼:
case n is
when 0=>led<="01111111";
when 1=>led<="10111111";
when 2=>led<="11011111";
when 3=>led<="11101111";
when 4=>led<="11110111";
when 5=>led<="11111011";
when 6=>led<="11111101";
when 7=>led<="11111110";
when others=>led<="11111111";
end case;
六、實驗結果及分析
運作圖像:
分析:
程式下載下傳之後8個LED輪流點亮,符合預期效果。
七、程式連結:
- Gitee
- Github