上次的閃爍燈實驗,重新熟悉了FPGA開發的流程,這次實現一個最簡單的流水燈
BJEPM開發板上有4個LED,和黑金里面的教程類似,因此以這個為模板來進行
基本思路是:(原理參考verilog那些事建模篇)
設計四個模塊,掃描周期一樣,但是是在周期內的不同時間段來實現
設計框圖:
下面直接上代碼了
led1_module:
1 /**************************************** 2 *文件名:led1_module.v 3 *功能:實現第一個流水燈掃描效果 4 ****************************************/ 5 6 module led1_module( 7 CLK,RST_n, 8 LED1 9 ); 10 11 input CLK; 12 input RST_n; 13 output LED1; 14 15 //************************************ 16 //因為掃描周期為1s,所以每個燈亮0.25s 17 //50MHZ的晶振下計數值為12_500_000 18 parameter COUNT_1S = 26'd50_000_000; 19 20 21 //************************************ 22 reg [25:0]count; 23 24 always @(posedge CLK or negedge RST_n) 25 if(!RST_n) 26 count <= 26'd0; 27 else if(count == COUNT_1S) 28 count <= 26'd0; 29 else 30 count <= count + 1'b1; 31 32 //*************************************** 33 reg rLED1; 34 35 always @(posedge CLK or negedge RST_n) 36 if(!RST_n) 37 rLED1 <= 1'd0; 38 else if(count >= 0 && count <= 26'd12_500_000) 39 rLED1 <= 1'd1; 40 else 41 rLED1 <= 1'd0; 42 43 assign LED1 = rLED1; 44 45 endmodule
led2_module:
1 /**************************************** 2 *文件名:led2_module.v 3 *功能:實現第二個流水燈掃描效果 4 ****************************************/ 5 6 module led2_module( 7 CLK,RST_n, 8 LED2 9 ); 10 11 input CLK; 12 input RST_n; 13 output LED2; 14 15 //************************************ 16 //因為掃描周期為1s,所以每個燈亮0.25s 17 //50MHZ的晶振下計數值為12_500_000 18 parameter COUNT_1S = 26'd50_000_000; 19 20 21 //************************************ 22 reg [25:0]count; 23 24 always @(posedge CLK or negedge RST_n) 25 if(!RST_n) 26 count <= 26'd0; 27 else if(count == COUNT_1S) 28 count <= 26'd0; 29 else 30 count <= count + 1'b1; 31 32 //*************************************** 33 reg rLED2; 34 35 always @(posedge CLK or negedge RST_n) 36 if(!RST_n) 37 rLED2 <= 1'd0; 38 else if(count >= 26'd12_500_000 && count <= 26'd25_000_000) 39 rLED2 <= 1'd1; 40 else 41 rLED2 <= 1'd0; 42 43 assign LED2 = rLED2; 44 45 endmodule
led3_module:
1 /**************************************** 2 *文件名:led3_module.v 3 *功能:實現第三個流水燈掃描效果 4 ****************************************/ 5 6 module led3_module( 7 CLK,RST_n, 8 LED3 9 ); 10 11 input CLK; 12 input RST_n; 13 output LED3; 14 15 //************************************ 16 //因為掃描周期為1s,所以每個燈亮0.25s 17 //50MHZ的晶振下計數值為12_500_000 18 parameter COUNT_1S = 26'd50_000_000; 19 20 21 //************************************ 22 reg [25:0]count; 23 24 always @(posedge CLK or negedge RST_n) 25 if(!RST_n) 26 count <= 26'd0; 27 else if(count == COUNT_1S) 28 count <= 26'd0; 29 else 30 count <= count + 1'b1; 31 32 //*************************************** 33 reg rLED3; 34 35 always @(posedge CLK or negedge RST_n) 36 if(!RST_n) 37 rLED3 <= 1'd0; 38 else if(count >= 26'd25_000_000 && count <= 26'd37_500_000) 39 rLED3 <= 1'd1; 40 else 41 rLED3 <= 1'd0; 42 43 assign LED3 = rLED3; 44 45 endmodule
led4_module:
1 /**************************************** 2 *文件名:led4_module.v 3 *功能:實現第四個流水燈掃描效果 4 ****************************************/ 5 6 module led4_module( 7 CLK,RST_n, 8 LED4 9 ); 10 11 input CLK; 12 input RST_n; 13 output LED4; 14 15 //************************************ 16 //因為掃描周期為1s,所以每個燈亮0.25s 17 //50MHZ的晶振下計數值為12_500_000 18 parameter COUNT_1S = 26'd50_000_000; 19 20 21 //************************************ 22 reg [25:0]count; 23 24 always @(posedge CLK or negedge RST_n) 25 if(!RST_n) 26 count <= 26'd0; 27 else if(count == COUNT_1S) 28 count <= 26'd0; 29 else 30 count <= count + 1'b1; 31 32 //*************************************** 33 reg rLED4; 34 35 always @(posedge CLK or negedge RST_n) 36 if(!RST_n) 37 rLED4 = 1'd0; 38 else if(count >= 26'd37_500_000 && count <= 26'd50_000_000) 39 rLED4 <= 1'd1; 40 else 41 rLED4 <= 1'd0; 42 43 assign LED4 = rLED4; 44 45 endmodule
led_module:
1 /********************************************* 2 *文件名:led_module.v 3 *功能:實現四位LED流水燈效果(掃描頻率為1s) 4 *平台:win7 64 quartus ii 64bit 5 *連接:CLK -- 12 RST_n -- 44 6 LED1-4 -- 21-18 (高電平點亮) 7 *********************************************/ 8 9 module led_module( 10 CLK,RST_n, 11 LED1,LED2,LED3,LED4 12 ); 13 14 input CLK; 15 input RST_n; 16 output LED1; 17 output LED2; 18 output LED3; 19 output LED4; 20 21 led1_module U1( 22 .CLK(CLK), 23 .RST_n(RST_n), 24 .LED1(LED1) 25 ); 26 27 led2_module U2( 28 .CLK(CLK), 29 .RST_n(RST_n), 30 .LED2(LED2) 31 ); 32 33 led3_module U3( 34 .CLK(CLK), 35 .RST_n(RST_n), 36 .LED3(LED3) 37 ); 38 39 led4_module U4( 40 .CLK(CLK), 41 .RST_n(RST_n), 42 .LED4(LED4) 43 ); 44 45 endmodule
在軟件綜合過后,下載到板子里,可以看到最終實現流水燈效果~~~