6,125
社区成员
发帖
与我相关
我的任务
分享
module div_led(
input clk, //100M
input rst_n,
input key1, //low active
input key2,
output led1, //高电平点亮
output led2,
output led3,
output led4
);
reg key1_d; //1 clock delayed key1
reg key2_d; //1 clock delayed key2
reg [31:0] counter; //div counter
reg counter_ena_neg; //div counter enable, low active
reg [7:0] counter_inc_val; //1 clock increase value
wire key1_down;
wire key2_down;
assign key1_down = key1_d && ~key1;//按键是否按下,取下降沿
assign key2_down = key2_d && ~key2;
always @(posedge clk) begin //按键延时1周期
key1_d <= key1;
key2_d <= key2;
end
always @(posedge clk or negedge rst_n)//是否启动计数器
if (~rst_n)
counter_ena_neg <= 1'b0;
else if (key2_down)
counter_ena_neg <= ~counter_ena_neg;
always @(posedge clk or negedge rst_n)//计数器增加速度
if (~rst_n)
counter_inc_val <= 8'b10000;
else if (key1_down)
counter_inc_val <= {counter_inc_val[6:0], counter_inc_val[7]};
always @(posedge clk or negedge rst_n) //计数器
if (~rst_n)
counter <= 0;
else if (~counter_ena_neg)
counter <= counter + counter_inc_val;
assign led1 = counter[31:30] == 2'd0; //使用分频值点亮led
assign led2 = counter[31:30] == 2'd1;
assign led3 = counter[31:30] == 2'd2;
assign led4 = counter[31:30] == 2'd3;
endmodule