同樣話不多說直接上代碼:
//自己修改過的流水燈,從板子上的led4亮到led1,延遲改為了2s
module led_water(
led,
clk,
rst_n
); // 模塊名及端口參數
input clk; // 輸入端口定義,50M 時鍾
input rst_n;
output[3:0] led; // 輸出端口定義
reg[3:0] led; //變量led_out 定義為寄存器型
reg[26:0] counter; /*變量led_out 定義為寄存器型,至於為甚么要定義27位寬,
是因為延遲時間的要求,要計數100000000次的話,那么該次數
值在2的26次方到2的27次方之間,所以采用27位寬*/
/*接下來嚴格按照明德揚代碼編寫規范,一個always中只一個輸出信號。第一個always塊用於編寫計數器*/
always @(posedge clk or negedge rst_n)begin
if(rst_n == 1'b0)begin
counter <= 0;
end
else if(counter == 27'd99999999)begin /*時鍾周期為50MHz,那么一個時鍾周期就是1/50M=20ns,
那么若要實現延遲2s下一個燈亮的話,就要計數時鍾周期100000000次。*/
counter <= 0;
end
else begin
counter <= counter+1;
end
end
//第二個always塊用於編寫流水燈
always @(posedge clk or negedge rst_n)begin
if(rst_n == 1'b0)begin
led <= 4'b0000;
end
else if(led == 4'b0000 && counter == 99_999_999)begin
led <= 4'b1111;
end
else if(counter == 99_999_999)begin
led <= led<<1;
end
end
endmodule