|
- //`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, //輸入時(shí)鐘
- // input i_sys_rst_n,
- // output [3:0] o_led
- // );
-
-
- // /* 計(jì)數(shù)器r_cnt_2us循環(huán)計(jì)數(shù),計(jì)到99為2us */ //計(jì)數(shù)r_cnt_2us 計(jì)數(shù)器
- // 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
-
-
- // /* 計(jì)數(shù)器r_cnt_2ms,每2us加一,計(jì)到999為2ms */ //計(jì)數(shù)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
-
-
- // /* 計(jì)數(shù)器r_cnt_2s,每2ms加一,計(jì)到999為2s */ //計(jì)數(shù)r_cnt_2s 計(jì)數(shù)
- // 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標(biāo)志 */
- // 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
-
- // /* 信號(hào)輸出 */
- // 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計(jì)數(shù)器計(jì)數(shù)計(jì)到99次,2ms計(jì)數(shù)器加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 計(jì)數(shù)器計(jì)數(shù)計(jì)到999次,2s計(jì)數(shù)器加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計(jì)數(shù)器計(jì)計(jì)到999次,清零,重新計(jì)數(shù)
- 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;// 定義標(biāo)志位
- 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
- //利用標(biāo)志位來判斷亮暗的過程
- 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
復(fù)制代碼
|
|