大俠好,歡迎來到FPGA技術江湖。本系列將帶來FPGA的系統性學習,從最基本的數字電路基礎開始,最詳細操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業學生、初入職場小白及打算進階提升的職業開發者都可以有系統性學習的機會。
系統性的掌握技術開發以及相關要求,對個人就業以及職業發展都有著潛在的幫助,希望對大家有所幫助。本次帶來Vivado系列,本篇為FPGA零基礎學習之Vivado-LED流水燈實驗。話不多說,上貨。
Vivado-LED流水燈實驗
作者:李西銳校對:陸輝
流水燈是大多數學習者接觸到的第一個實驗,也是非常經典的一個實驗,在此,我們一起學習一下流水燈。
LED,又名發光二極管。LED燈工作電流很小(有的僅零點幾毫安即可發光),抗沖擊和抗震性能好,可靠性高,壽命長。由于這些優點,LED燈被廣泛用在儀器儀表中作指示燈、液晶屏背光源等諸多領域。
發光二極管與普通二極管一樣具有單向導電性。給它加上陽極正向電壓后,通過5mA左右的電流就可以使二極管發光。通過二極管的電流越大,發出的光亮度越強。不過我們一般將電流限定在3~20mA之間,否則電流過大就會燒壞二極管。
在我們的開發板上有四個LED,設計邏輯為:FPGA 輸出高電平時,LED 點亮;FPGA 輸出低電平時,LED 熄滅。
本次設計框架如上圖。
管腳說明:
設計代碼如下:
parameter 可以定義一個參數(默認是32 位)。在寫代碼時,對于某些數字,設計者經常利用定義參數的方式進行編寫,方便修改,也方便閱讀。
其中計數器,需要計數到1s所需的次數,時間到了之后,LED燈切換點亮。按照此規則,實現LED的循環點亮。
在verilog 中,“{}”( 大括號)的第一個特殊作用為位拼接。{a,b}相當于將a 和b 拼接為一個整體,并且是高位為a,低位為b。當led 輸出為4’b0001 時,第一個led 點亮;經過1 秒鐘,輸出4’b0010 時,第二個led 點亮;經過1 秒鐘,輸出4’b0100 時,第三個led 點亮;經過1 秒鐘,輸出4’b1000 時,第四個led 點亮;經過1 秒鐘,輸出4’b0001 時,第一個led 點亮······按照上述的過程周而復始,就形成了流水燈。
不難發現,led 的輸出,一直為3 個0,1 個1。并且1 的位置每1 秒鐘移動一次,從頭到尾,然后又到頭。這種現象可以利用移位的思想進行實現。即:led[3]<=led[2]; led[2]<=led[1];led[1]<=led[0]; led[0]<=led[3];如果將被賦值的組成一個整體,那就是led,賦值的組成一個整體就是{led[2:0], led[3]}。
仿真代碼:
$stop 是一個系統任務,功能為將仿真工具的仿真停止。運行分析綜合后,打開RTL 仿真。
點擊Run Simulation,打開仿真器。可以看到如圖所示波形。
由于我們設計的流水燈是每1 秒鐘流動一個,在上述的仿真中,led 數值是不會變化的。如果仿真幾秒鐘的話,仿真的時間會比較長。在此不建議仿真幾秒鐘的時長,有可能會導致電腦卡住。
仿真時,可以將t 的值,改成一個較小值。例如:10。然后在此編譯仿真。改的時候我們可以在仿真文件中加入一句話:
修改后我們重新運行仿真工具,可以看到如圖所示波形:
這樣我們可以清楚的看到輸出變化的過程。另外,我們這樣做還有一個省事的地方,就是我們下板不需要再修改t的參數。
接下來我們分配引腳,生成下板文件。
分配好之后,點擊Generate Bitstream。
生成完成之后,點擊open Hardware Manager。下板即可。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1629文章
21736瀏覽量
603387 -
led
+關注
關注
242文章
23277瀏覽量
660876 -
流水燈
+關注
關注
21文章
433瀏覽量
59712 -
數字電路
+關注
關注
193文章
1605瀏覽量
80622 -
Vivado
+關注
關注
19文章
812瀏覽量
66538
原文標題:FPGA零基礎學習之Vivado-LED流水燈實驗
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論