- //`timescale 1ns / 1ps
- ////////////////////////////////////////////////////////////////////////////////////
- //// Company:
- //// Engineer:
- ////
- //// Create Date: 2020/12/14 19:22:24
- //// Design Name:
- //// Module Name: led_breath
- //// Project Name:
- //// Target Devices:
- //// Tool Versions:
- //// Description:
- ////
- //// Dependencies:
- ////
- //// Revision:
- //// Revision 0.01 - File Created
- //// Additional Comments:
- ////
- ////////////////////////////////////////////////////////////////////////////////////
- //module led_breath(
- // input i_sys_clk, //输入时钟
- // input i_sys_rst_n,
- // output [3:0] o_led
- // );
-
-
- // /* 计数器r_cnt_2us循环计数,计到99为2us */ //计数r_cnt_2us 计数器
- // parameter p_cnt_2us_max = 7'd100 - 1'b1;
- // reg [7:0] r_cnt_2us = 7'b0;
- // always @(posedge i_sys_clk or negedge i_sys_rst_n)
- // begin
- // if (i_sys_rst_n == 1'b0)
- // r_cnt_2us <= 7'd0;
- // else if(r_cnt_2us == p_cnt_2us_max)
- // r_cnt_2us <= 7'd0;
- // else
- // r_cnt_2us <= r_cnt_2us + 1'b1;
- // end
-
-
- // /* 计数器r_cnt_2ms,每2us加一,计到999为2ms */ //计数r_cnt_2ms
- // parameter p_cnt_2ms_max = 10'd1000 - 1'b1;
- // reg [9:0] r_cnt_2ms = 10'b0;
-
- // always @(posedge i_sys_clk or negedge i_sys_rst_n)
- // begin
- // if (i_sys_rst_n == 1'b0)
- // r_cnt_2ms <= 10'd0;
- // else if(r_cnt_2us == p_cnt_2us_max && r_cnt_2ms == p_cnt_2ms_max)
- // r_cnt_2ms <= 10'd0;
- // else if(r_cnt_2us == p_cnt_2us_max)
- // r_cnt_2ms <= r_cnt_2ms + 1'b1;
- // else
- // r_cnt_2ms = r_cnt_2ms;
- // end
-
-
- // /* 计数器r_cnt_2s,每2ms加一,计到999为2s */ //计数r_cnt_2s 计数
- // parameter p_cnt_2s_max = 10'd1000 - 1'b1;
- // reg [9:0] r_cnt_2s = 10'b0;
- // reg [3:0] r_led = 4'b0;
- // always @(posedge i_sys_clk or negedge i_sys_rst_n)
- // begin
- // if (i_sys_rst_n == 1'b0)
- // r_cnt_2s <= 10'd0;
- // else if(r_cnt_2us == p_cnt_2us_max && r_cnt_2ms == p_cnt_2ms_max && r_cnt_2s == p_cnt_2s_max)
- // r_cnt_2s <= 10'd0;
- // else if(r_cnt_2us == p_cnt_2us_max && r_cnt_2ms == p_cnt_2ms_max)
- // r_cnt_2s <= r_cnt_2s + 1'b1;
- // else
- // r_cnt_2s <= r_cnt_2s;
- // end
-
-
- // /* r_flag标志 */
- // reg r_flag = 1'b0;
- // always @(posedge i_sys_clk or negedge i_sys_rst_n)
- // begin
- // if (i_sys_rst_n == 1'b0)
- // r_flag <= 1'b0;
- // else if(r_cnt_2us == p_cnt_2us_max && r_cnt_2ms == p_cnt_2ms_max && r_cnt_2s == p_cnt_2s_max)
- // r_flag <= ~r_flag;
- // else
- // r_flag <= r_flag;
- // end
-
-
-
- // /* control */
- // always @(posedge i_sys_clk or negedge i_sys_rst_n)
- // begin
- // if (~i_sys_rst_n)
- // r_led <= 4'b0000;
- // else if (r_cnt_2s >= r_cnt_2ms && r_flag == 1'b0) //2s>两毫秒,0
- // r_led <= 4'b1111;
- // else if (r_cnt_2s < r_cnt_2ms && r_flag == 1'b0) //2s<2ms,0
- // r_led <= 4'b0000;
- // else if (r_cnt_2s >= r_cnt_2ms && r_flag == 1'b1) // 2s>2ms, 1
- // r_led <= 4'b0000;
- // else if (r_cnt_2s < r_cnt_2ms && r_flag == 1'b1) // 2s<2ms, 1
- // r_led <= 4'b1111;
- // else
- // r_led <= 4'b0000;
- // end
-
- // /* 信号输出 */
- // assign o_led = r_led;
-
- // endmodule
- `timescale 1ns/1ps
- module led_breath(
- clk,led,rst
- );
- input clk;
- input rst;
- output reg[3:0] led;
- parameter p_2us_max=32'd100-32'd1;
- parameter p_2ms_max=32'd1000-32'd1;
- parameter p_2s_max=32'd1000-32'd1;
- reg [32:1]cnt_2us;//2us计数器计数计到99次,2ms计数器加1
- always@(posedge clk or negedge rst)
- begin
- if(rst!=1)
- cnt_2us<=32'd0;
- else if(cnt_2us==p_2us_max)
- cnt_2us<=32'd0;
- else
- cnt_2us<=cnt_2us+32'd1;
- end
- reg[32:1] cnt_2ms; //2ms 计数器计数计到999次,2s计数器加1
- always@(posedge clk or negedge rst)
- begin
- if(rst!=1)
- cnt_2ms<=32'd0;
- else if(cnt_2ms==p_2ms_max&&cnt_2us==p_2us_max)
- cnt_2ms<=32'd0;
- else if(cnt_2us==p_2us_max)
- cnt_2ms<=cnt_2ms+32'd1;
-
- else
- cnt_2ms<=cnt_2ms;
- end
- reg[32:1] cnt_2s; //2s计数器计计到999次,清零,重新计数
- always@(posedge clk or negedge rst)
- begin
- if(rst!=1)
- cnt_2s<=32'd0;
- else if(cnt_2s==p_2s_max&&cnt_2ms==p_2ms_max&&cnt_2us==p_2us_max)
- cnt_2s<=32'd0;
- else if(cnt_2us==p_2us_max&&cnt_2ms==p_2ms_max)
- cnt_2s<=32'd1+cnt_2s;
- else
- cnt_2s<=cnt_2s;
- end
- //always@(posedge clk or negedge rst)
- //begin
- //if(rst!=1)
- // led<=4'b0000;
- //else if(cnt_2s>=cnt_2ms)
- //led<=4'b1111;
- //else if(cnt_2s<cnt_2ms)
- //led<=4'b0000;
- //else
- //led<=4'b0000;
- //end
- reg flag;// 定义标志位
- always@(posedge clk or negedge rst)
- begin
- if(rst!=1)
- flag<=1'b0;
- else if(cnt_2s==p_2s_max&&cnt_2ms==p_2ms_max&&cnt_2us==p_2us_max)
- flag<=~flag;
- else
- flag<=flag;
- end
- //led由亮变暗的过程
- //always@(posedge clk or negedge rst)
- //begin
- //if(rst!=1)
- //led<=4'b0000;
- //else if(cnt_2s>=cnt_2ms)
- //led<=4'b1111;
- //else if(cnt_2s<cnt_2ms) //灭到亮的过程
- //led<=4'b0000;
- //else
- //led<=4'b0000;
- //end
- //利用标志位来判断亮暗的过程
- always@(posedge clk or negedge rst)
- begin
- if(rst!=1)
- led<=4'b0000;
- else if(cnt_2s>=cnt_2ms&&flag==1'b0)
- led<=4'b1111;
- else if(cnt_2s<cnt_2ms&&flag==1'b0)
- led<=4'b0000;
- else if(cnt_2s>=cnt_2ms&&flag==1'b1)
- led<=4'b0000;
- else if(cnt_2s<cnt_2ms&&flag==1'b1)
- led<=4'b1111;
- end
- endmodule
复制代码
|