Verilog實現雙向流水燈


  實現一個雙向流水燈,從右往左流動,到最左邊時,再從左邊往右流動,然后再從右邊開始流動,如此不斷反復。燈亮、間隔時間都為0.2s,本實驗共有四個LED燈,從左到右依次為LED[3]、LED[2]、LED[1]、LED[0],FPGA輸出低電平點亮。

實現思路:

1. 定義一個0.2s的計數器

2. LED[3]、LED[0]作為邊界標志位,在被點亮時 ,切換流向,即LED[3]、LED[0]為低電平時,要進行方向轉換,所以要定義一個1bit reg變量存儲標志

 

實驗代碼:

 1 //燈亮、間隔時間都為0.2s的雙向流水燈
 2 module flow_led(
 3 input clk,
 4 input rst_n,
 5 output reg  [3:0]led
 6 );
 7 
 8 parameter    SYS_FRQ        =    50;                                        //時鍾輸入頻率,50MHz
 9 parameter    LED_FLOW_TIME    =    18'd200_000;                        //LED流水燈亮間隔時間,單位us,這里是0.2s
10 parameter    LED_FLOW_CNT_TIME    =    LED_FLOW_TIME * SYS_FRQ;        //LED流水燈,每個燈亮的時鍾周期數
11 
12 reg [23:0]    flow_cnt;                 //0.2s計數器
13 reg flow_flag;                        //流向標志,0----從右往左,1----從左往右
14 
15 
16 //流水燈每個燈亮時間計數器
17 always @(posedge clk or negedge rst_n)
18     if(!rst_n)
19         flow_cnt <= 24'b0;
20     else if(flow_cnt == LED_FLOW_CNT_TIME - 1'b1)
21             flow_cnt <= 24'b0;
22     else
23         flow_cnt <= flow_cnt + 1'b1;
24         
25 
26 //流水方向邊界,分別為四個LED燈的兩邊,即LED[0]、LED[3],在這兩個地方需要轉換標志,以改變其流向
27 always @(posedge clk or negedge rst_n)
28     if(!rst_n)
29         flow_flag <= 1'b0;
30     else if(led[0] == 1'b0)
31         flow_flag <= 1'b0;
32     else if(led[3] == 1'b0)
33         flow_flag <= 1'b1;
34     else
35         flow_flag <= flow_flag;
36 
37 
38 //流水效果實現
39 always @(posedge clk or negedge rst_n)
40     if(!rst_n)
41         led <= 4'b1110;                //FPGA輸出低電平時,點亮LED
42     else if(flow_flag == 1'b0)        //從右往左
43         begin
44             if(flow_cnt == LED_FLOW_CNT_TIME - 1'b1)
45                 led <= {led[2:0], led[3]};    
46             else
47                 led <= led;
48         end
49     else if(flow_flag == 1'b1)        //從左往右
50         begin
51             if(flow_cnt == LED_FLOW_CNT_TIME - 1'b1)
52                 led <= {led[0], led[3:1]};
53             else
54                 led <= led;
55         end
56     else
57         led <= led;
58     
59 
60 endmodule
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM