GW1NSR-LV4CQN48GC6/I5 FPGA呼吸灯

环境

 

pwm.v

$ cat pwm.v
module Pwm(
    input clk,
    input [31:0] period,
    input [31:0] duty,
    output pwmout
);
    reg [31:0] counter;
    reg r_pwmout;
    always @(posedge clk) begin

        if(counter < duty) begin
            r_pwmout = 1;
        end
        else begin
            r_pwmout = 0;
        end

        case(counter)
            default:
                counter = counter + 1;
            period:
                counter = 0;
        endcase

    end

    assign pwmout = r_pwmout;
 

 top.v

$ cat top.v
module top(
    input sys_clk,
    input key1,
    output led
);
    parameter TIME_1MS = 1000;

    reg [31:0] duty;

    parameter pwm_period = 200 * TIME_1MS;
    Pwm pwm(sys_clk, pwm_period, duty, led);


    reg [31:0] counter;
    reg [31:0] duty_step;
    reg modify_duty;
    reg duty_dir;
    always @(posedge sys_clk) begin

        counter = counter + 1;

        case(counter % (TIME_1MS / 5))
            0:
                modify_duty = 1;
        endcase

        case(duty)
            0:
                duty_dir = 1;
            pwm_period:
                duty_dir = 0;
        endcase

        case(duty)
            0 - pwm_period / 2:
                duty_step = 10;
            default:
                duty_step = 2;
        endcase

        if(modify_duty) begin

            if(duty_dir) begin
                duty = duty + duty_step;
            end
            else begin
                duty = duty - duty_step;
            end
            modify_duty = 0;

        end

    end
 

原理图

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值