呼吸灯FPGA

公众号:FPGA技术小开发
呼吸灯FPGA_第1张图片
呼吸灯FPGA_第2张图片

源代码

module breathing_lamp(
input clk,//50kHz
input rst,
output reg lamp
    );
 reg [15:0] count;//计数器
 reg [15:0] inc_dec_duty;//从5%到95%每次10%叠加
 reg flag;//递增递减的标志位
 //计数器
 always @(posedge clk or negedge rst)
  begin
  if(!rst)//复位
      count<=0;
  else if(count==16'd5000)//可以根据需要更改
      count<=0;
  else
      count<=count+1;
  end
  //标志位与占空比
  always @(posedge clk or negedge rst)
    begin
    if(!rst)
      begin
      flag<=1;
      inc_dec_duty<=16'd250;
      end
      else if(count==16'd5000&&flag==1)
         inc_dec_duty<= inc_dec_duty+16'd500;  
       else if(count==16'd5000&&flag==0)
           inc_dec_duty<= inc_dec_duty-16'd500;  
        else if(inc_dec_duty==16'd250)
              flag<=1;
          else if(inc_dec_duty==16'd5250)
                flag<=0;
    end
    //输出灯模块
   always @(posedge clk or negedge rst)
    begin
    if(!rst)
    lamp<=1;
    else if(inc_dec_duty

测试激励文件
测试激励文件//可以适当缩小count的数值方便仿真结果的出现,小编用了50,占空比的比例和之前比例一致

module breathing_lamb_test();
reg clk;
reg  rst;
wire lamp;
initial
clk=1'b0;
initial
begin
rst=1'b0;
#400
rst=1'b1;
end
always #100
clk=~clk;
breathing_lamp lamp_test
(
.clk(clk),
.rst(rst),
.lamp(lamp)
);
endmodule

呼吸灯FPGA_第3张图片

你可能感兴趣的:(fpga)