日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

永远的流水灯(Verilog)

發(fā)布時(shí)間:2024/6/21 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 永远的流水灯(Verilog) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 為了更好地學(xué)習(xí)FPGA和深入理解Verilog語(yǔ)法,首先從最簡(jiǎn)單的流水燈做起。雖然簡(jiǎn)單,但是也包含了不少知識(shí)。通過(guò)這次實(shí)驗(yàn)項(xiàng)目,可以了解開發(fā)軟件的使用及Verilog的編程方法,熟悉模塊化設(shè)計(jì)的方法。

2. 該項(xiàng)目主要實(shí)現(xiàn)的功能為:

(1)10位的流水燈

(2)中間兩個(gè)led燈每隔100ms閃爍一次

(3)兩邊的led燈每隔100ms流動(dòng)一下,從中間向兩邊流水。

3. 具體實(shí)現(xiàn)如下

(1)首先定義一個(gè)時(shí)間計(jì)數(shù)寄存器counter,每當(dāng)達(dá)到預(yù)定的100ms時(shí),計(jì)數(shù)寄存器就清零,否則的話寄存器就加1。然后計(jì)算計(jì)數(shù)器計(jì)數(shù)的最大值。時(shí)鐘頻率為50MHZ,也就是周期為1/50M 為20ns,要計(jì)數(shù)的最大值為T100MS= 100ms/20ns-1 = 4999_999。

代碼實(shí)現(xiàn)為

always @ (posedge clk or negedge rst)

if(!rst) //高電平復(fù)位

counter<=25'd0;

else if(counter==T100ms)

counter<=25'd0;

else

counter<=counter+1'b1;

(2)如何控制led的亮滅呢,無(wú)非就是給端口賦高低電平,有的是高電平亮,有的是低電平亮,我用的FPGA學(xué)習(xí)板為高電平亮。每隔100ms對(duì)其端口值取反就可以實(shí)現(xiàn)閃爍的led

(3)流水燈的實(shí)現(xiàn)。在FPGA中實(shí)現(xiàn)流水燈的方法有很多種,我只列取了三種供參考學(xué)習(xí)。首先是運(yùn)用FPGA的并行處理特點(diǎn),建立四個(gè)always模塊分別對(duì)每隔led分別控制,也可以建立四個(gè)模塊分別對(duì)各個(gè)燈控制。所對(duì)應(yīng)的時(shí)序圖如圖1-a,每一個(gè)模塊控制相應(yīng)的led燈,彼此之間互不影響,依靠總的時(shí)鐘進(jìn)行工作。

圖1-a

這種方法能夠充分體現(xiàn)FPGA并行處理的特點(diǎn),實(shí)現(xiàn)起來(lái)也很容易。

頂層代碼為

moduletop_module(CLK, RSTn, LED_Out);

input CLK;

input RSTn;

output [3:0]LED_Out;

wire LED1_Out;

led1_module U1

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED1_Out)

);

wire LED2_Out;

led2_module U2

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED2_Out)

);

wire LED3_Out;

led3_module U3

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED3_Out)

);

wire LED4_Out;

led4_module U4

(

.CLK(CLK),

.RSTn(RSTn),

.LED_Out(LED4_Out)

);

assign LED_Out = {LED4_Out, LED3_Out,LED2_Out, LED1_Out};

第二種方法為循環(huán)移位法。通過(guò)給led賦初值,然后循環(huán)左移或者循環(huán)右移,但是需要設(shè)置一個(gè)條件。否則就會(huì)出現(xiàn)溢出的情況。如圖2-a設(shè)置一個(gè)條件當(dāng)要出現(xiàn)溢出的時(shí)候讓它回到初始的狀態(tài),這樣就可以實(shí)現(xiàn)流水了。

圖2-a

代碼實(shí)現(xiàn)為

always @(posedge clk or negedge rst)

if(!rst)

led<=4'b0001; //初值,最低位led[0]燈亮

else if(counter==T100ms)

begin

if(led==4'b0000) //當(dāng)溢出最高位時(shí)

led<=4'b0001; //回到復(fù)位時(shí)的狀態(tài)

else

led<=led<<1; //循環(huán)左移一位

end

第三種數(shù)據(jù)拼接法,所謂的數(shù)據(jù)拼接就把原來(lái)的數(shù)據(jù)拆成一位一位的,在特定位置上拼接上一個(gè)數(shù)。例如在4位的led的低位拼接一個(gè)1. Led[3:0]<={led[2:0],1’b1};接即實(shí)現(xiàn)了數(shù)據(jù)的拼接,當(dāng)然可以實(shí)現(xiàn)任意位,任意bit數(shù)的拼。和循環(huán)移位類似,數(shù)據(jù)拼接的實(shí)現(xiàn)只是把移位命令改成拼接的命令即可。

總結(jié)

以上是生活随笔為你收集整理的永远的流水灯(Verilog)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。