天天看點

FPGA流水燈LED的驅動及流水燈實驗:

LED的驅動及流水燈實驗:

一、 實驗目的與要求

​ 實驗目的與要求:讓使用者進一步了解、熟悉和掌握FPGA開發軟體QuartusⅡ的使用方法以及VHDL的程式設計方法;同時了解簡單時序電路的設計和硬體測試方法。

二、實驗裝置

  1. SmartSOPC+實驗箱
  2. 裝有QuartusⅡ的PC機
  3. JTAG下載下傳器

三、實驗内容

​ 在LED1~LED8引腳上周期性地輸出流水資料,若原來輸出的資料是111100則表示點亮LED1、LED2。流水輸出一次後,輸出資料應該為1111000, 而此時則應點亮LED1 ~LED3三個LED發光二極管,這樣就可以實作LED流水燈。為了觀察友善,流水速率最好在2Hz左右。在QuickSOPC核心闆上有一48MHz的标準時鐘源,該時鐘脈沖CLOCK與晶片的28腳相連。為了産生2Hz的時鐘脈沖,在此編寫一個分頻程式,通過修改分頻系數來變改輸出頻率。當分頻系數為24X100時,輸出即為2Hz的頻率信号。

四、實驗步驟

  1. 啟動Quartus9.0建立一個空白工程,然後命名為led_flash.qpf。
  • 建立工程

FPGA流水燈LED的驅動及流水燈實驗:

  • 點選next輸入檔案資訊
FPGA流水燈LED的驅動及流水燈實驗:
  • 建立VHDL程式檔案

    建立檔案

    FPGA流水燈LED的驅動及流水燈實驗:
    選擇VHDL
    FPGA流水燈LED的驅動及流水燈實驗:
  • 建立完成:
FPGA流水燈LED的驅動及流水燈實驗:
  • 按名稱儲存
FPGA流水燈LED的驅動及流水燈實驗:
  1. 建立VHDL源程式檔案vhd檔案,編寫程式代碼并儲存(注意第一個實體必須和檔案名稱一緻) ,然後進行綜合編譯。若在編譯過程中發現錯誤,則找出并更正錯誤,直至編譯成功為止。
FPGA流水燈LED的驅動及流水燈實驗:
  1. 編譯完成後将晶片引腳配置設定
  • 打開引腳配置設定
FPGA流水燈LED的驅動及流水燈實驗:
  • 變量名對應IO口
FPGA流水燈LED的驅動及流水燈實驗:
  • 多餘的IO口要設定三态輸入保護晶片(如下三步走)

打開DEVIEC

FPGA流水燈LED的驅動及流水燈實驗:

點開Pin設定,找到多餘引腳點開

FPGA流水燈LED的驅動及流水燈實驗:

選擇三态輸入

FPGA流水燈LED的驅動及流水燈實驗:
  1. 編譯完成最後将Altera ByteBlaster Il下載下傳電纜的兩端分别接到PC機的列印機并口和QuickSOPC核芯闆上的JTAG下載下傳口上,打開電源,執行下載下傳指令,把程式下載下傳到FPGA器件中。此時,即可在SmartSOPC實驗箱上看到流水燈。
  • 點選下載下傳按鍵
FPGA流水燈LED的驅動及流水燈實驗:
  • 按照以下四步下載下傳程式,此處我沒有連接配接試驗箱

選擇檔案

FPGA流水燈LED的驅動及流水燈實驗:

點選下載下傳

FPGA流水燈LED的驅動及流水燈實驗:

五、設計程式

程式設計分為兩個部分:

  1. 第一部分:根據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;
           
  1. 第二部分:對分頻後的跳變進行計數,根據計數的數目,來改變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;
           

六、實驗結果及分析

運作圖像:

FPGA流水燈LED的驅動及流水燈實驗:
FPGA流水燈LED的驅動及流水燈實驗:

分析:

程式下載下傳之後8個LED輪流點亮,符合預期效果。

七、程式連結:

  1. Gitee
  2. Github