GW1NSR-LV4CQN48GC6/I5 FPGA呼吸灯

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

环境

 

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
 

原理图

 

 

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6