“點(diǎn)燈”是我們板農(nóng)們拿到一塊板子后第一個(gè)要實(shí)現(xiàn)的目標(biāo),正如軟件工程師嘗試新的語言必然會(huì)先寫出“hello world”一樣。
學(xué)習(xí)FPGA也不例外,不要小瞧這只小小的LED,它能在你學(xué)習(xí)的路上帶給你光明,引導(dǎo)一個(gè)門外漢跨進(jìn)可編程邏輯世界的大門!
作為“寒假在家一起練”的第二次直播講座,我們今天就基于1個(gè)LED做了1個(gè)多小時(shí)的分享,從創(chuàng)建第一個(gè)FPGA項(xiàng)目、寫下第一句Verilog代碼,到調(diào)用FPGA的IP Cores,體驗(yàn)了FPGA的設(shè)計(jì)流程以及Verilog的基本語法規(guī)范。
用的平臺(tái)是這款:
模塊MIcroUSB右側(cè)白色的小東東就是一只用FPGA的IO連接的LED,左側(cè)的一只是電源指示燈,只要板上電源工作正常它就能亮。而FPGA連接的LED則可以通過編程FPGA內(nèi)部的邏輯實(shí)現(xiàn)不同的狀態(tài)。
BTW,蘇老師所有的FPGA項(xiàng)目中最前面的幾行代碼肯定是一個(gè)每秒跳動(dòng)一次的“心跳燈”,看著它跳動(dòng),心安。
先簡(jiǎn)單說一下點(diǎn)燈的要素 -LED點(diǎn)燈的工作原理:
LED的典型連接方式
燈亮以及燈亮?xí)r的亮度取決于下面的因素:
供電電源和控制管腳之間的壓差一定要大于LED的正向偏壓Vbias燈才能亮,否則是滅的。不同的器件,不同顏色的LED其偏壓也是不同的,要看數(shù)據(jù)手冊(cè);
改變電阻值R1(我們一般稱之為限流電阻), I = (3.3V-Vbias)/R1也就發(fā)生了變化,LED的亮度也跟著變;
已經(jīng)設(shè)計(jì)好的板子,限流電阻的值已經(jīng)可能動(dòng)態(tài)地改變,如果要調(diào)整LED的亮度,就要調(diào)節(jié)流經(jīng)LED和限流電阻上的平均電流;
項(xiàng)目1 - 讓LED燈亮起來:
創(chuàng)建項(xiàng)目一個(gè)新項(xiàng)目- LED
創(chuàng)建Verilog代碼 module(led),體會(huì)Verilog的語法結(jié)構(gòu);
module LED (led); output led; assign led = 1'b0; endmodule
編譯
分配管腳(查找管腳映射表,通過電路圖或項(xiàng)目中的表格)
生成jed文件
查看資源占用情況
下載到16管腳的FPGA模塊上
項(xiàng)目2 - 讓LED燈跳動(dòng)起來
在verilog邏輯中通過計(jì)數(shù)分頻產(chǎn)生12M/223(~1.5Hz) 的周期信號(hào),體會(huì)wire、reg的區(qū)別以及計(jì)數(shù)分頻的實(shí)現(xiàn)方法
module LED (clk_in,led);input clk_in;output led; reg [23:0] counter; always @(posedge clk_in) counter = counter + 1'b1; assign led = counter[23]; endmodule
編譯
分配管腳中補(bǔ)充新的clk管腳
生成jed文件
查看資源占用情況
下載到16管腳的FPGA模塊上
項(xiàng)目3 - 讓LED燈每秒剛好跳動(dòng)1次
修改Verilog邏輯,能夠產(chǎn)生精準(zhǔn)的1Hz的周期信號(hào),體會(huì)偶數(shù)分頻乃至奇數(shù)分頻的實(shí)現(xiàn)方法
module LED (clk_in,led);input clk_in;output led; parameter T1S = 12_000_000;parameter T05S = T1S/2; reg [23:0] counter; always @(posedge clk_in) begin if(counter < T1S-1) counter <= counter + 1'b1; else counter <= 1'b0; end assign led = (counter < T05S); endmodule
生成jed文件
查看資源占用情況
下載到16管腳的fpga模塊上,對(duì)比結(jié)果
項(xiàng)目4 - 心跳加速會(huì)如何?- 50Hz的心跳燈
修改verilog邏輯,產(chǎn)生50Hz的周期信號(hào)
生成jed文件
下載到16管腳的fpga模塊上,LED亮度變化,視覺暫留的效果,可以通過調(diào)節(jié)占空比控制LED的亮度(PWM),亮度與占空比(平均電流)非線性
單色的LED - 通過調(diào)節(jié)驅(qū)動(dòng)信號(hào)的占空比調(diào)節(jié)LED的亮度
3色的LED - 通過調(diào)節(jié)每種顏色的LED的亮度實(shí)現(xiàn)不同的顏色組合
項(xiàng)目5 - 體驗(yàn)內(nèi)部鎖相環(huán)的使用以及內(nèi)部IP Core的調(diào)用方式
添加PLL的IP
修改Verilog邏輯,通過PLL輸出的時(shí)鐘,產(chǎn)生1Hz的周期信號(hào)
生成jed文件
查看資源占用情況
下載到16管腳的fpga模塊上
其實(shí)還有更多可玩的,時(shí)間關(guān)系就讓同學(xué)們自己去琢磨和體驗(yàn)去了,比如:
“呼吸”燈 - 通過PWM來實(shí)現(xiàn)呼吸的效果
“流水”燈 -多只LED組合,通過邏輯編程可以實(shí)現(xiàn)炫酷的效果(1維)
“交通”燈 - R、G、B三色組合,通過狀態(tài)機(jī)的編程模擬道路交通燈的工作狀態(tài)
數(shù)碼管 - 其實(shí)也是幾根LED組合在一起的顯示器件
點(diǎn)陣LED屏 - 體會(huì)圖形化顯示的基本原理
一顆LED才幾分錢,但可以玩出很多花樣,可以鍛煉很多技能,是不是?
原文標(biāo)題:通過點(diǎn)燈的邏輯體驗(yàn)FPGA的編程流程以及Verilog語法基礎(chǔ)
文章出處:【微信公眾號(hào):FPGA入門到精通】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
FPGA
+關(guān)注
關(guān)注
1635文章
21837瀏覽量
608348 -
編程
+關(guān)注
關(guān)注
88文章
3649瀏覽量
94346
原文標(biāo)題:通過點(diǎn)燈的邏輯體驗(yàn)FPGA的編程流程以及Verilog語法基礎(chǔ)
文章出處:【微信號(hào):xiaojiaoyafpga,微信公眾號(hào):電子森林】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論