LED灯闪烁模块设计
1赞LED灯闪烁模块设计
1. 设计要求。
LED灯1s翻转一次
2. 模块分析
设计要求是1s翻转一次,那么顾名思义,可以将工程分成两个部分,首先需要一个延时模块,还需要一个LED控制模块。
当计时时间到时,LED就翻转一次,那么延时模块就需要输出给LED闪烁模块一个使能信号,表示计时时间到,LED闪烁模块就需要一直检测输使能模块,当检测到使能信号有效时LED灯就翻转一次。整个工程就像是两个“小人”,一个“小人”以时钟为基准单元数数,当计时到1s时就告诉另外一个“小人”,另外一个“小人”就翻转一下。

图1 工程模块
综合后的RTL视图

延时模块设计
module delay(clk,rst_n,delay_done); input clk; input rst_n; output delay_done;
reg [25:0] cnt;
localparam Delay1s=26'd49_999_999;
always@(posedge clk or negedge rst_n) if(!rst_n) begin cnt<=26'b0; end else if(cnt<Delay1s) cnt<=cnt+1'b1;
else cnt<=26'b0;
assign delay_done=(cnt==Delay1s)?1'b1:1'b0;
endmodule
|
led控制模块设计
module led_ctrl(clk,rst_n,delay_done,ledout); input clk; input rst_n; input delay_done; output [7:0] ledout;
reg [7:0] ledout;
always@(posedge clk or negedge rst_n) if(!rst_n) ledout<=0; else if(delay_done) ledout<=~ledout;
endmodule |
顶层模块设计
module led_flow(clk,rst_n,led_data); input clk; input rst_n; output led_data;
wire delay_done;
delay u_delay ( .clk(clk), .rst_n(rst_n), .delay_done(delay_done) );
led_ctrl u_led_ctrl ( .clk(clk), .rst_n(rst_n), .delay_done(delay_done), .ledout(led_data) ); endmodule
|
