FPGA点灯程序

代码如下:

module led (
    input clk,           
    input rst_n,        
    output reg [3:0] led 
);

// 状态定义
parameter BLINK   = 2'b00;
parameter FLOW    = 2'b01;
parameter FILL_UP = 2'b10;

// 状态变量
reg [1:0] state, next_state;

// 计时器
reg [27:0] state_timer;   
reg [25:0] display_timer; 

// 显示相关寄存器
reg toggle;               
reg [3:0] flow_led;       
reg [3:0] fill_led;        

// 状态切换控制
always @(posedge clk or negedge rst_n) begin
    if (!rst_n)
        state <= BLINK;
    else if (state_timer >= 28'd200_000_000)
        state <= next_state;
end

// 下一个状态逻辑
always @(*) begin
    case (state)
        BLINK:   next_state = FLOW;
        FLOW:    next_state = FILL_UP;
        FILL_UP: next_state = BLINK;
        default: next_state = BLINK;
    endcase
end

// 计时器逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        state_timer   <= 28'd0;
        display_timer <= 26'd0;
    end else begin
        if (state_timer >= 28'd200_000_000)
            state_timer <= 28'd0;
        else
            state_timer <= state_timer + 1;

        if (display_timer >= 26'd25_000_000)
            display_timer <= 26'd0;
        else
            display_timer <= display_timer + 1;
    end
end

// LED 模式逻辑
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        led      <= 4'b0000;
        toggle   <= 1'b0;
        flow_led <= 4'b0001;
        fill_led <= 4'b0001;
    end else if (display_timer == 26'd25_000_000) begin
        case (state)
          
            BLINK: begin
                toggle <= ~toggle;
                led <= toggle ? 4'b1111 : 4'b0000;
            end
            FLOW: begin
                led <= flow_led;
                if (flow_led == 4'b1000)
                    flow_led <= 4'b0001;
                else
                    flow_led <= flow_led << 1;
            end
            FILL_UP: begin
                led <= fill_led;
                if (fill_led != 4'b1111)
                    fill_led <=fill_led+1;
                end
            endcase
end
end
endmodule

代码功能说明:

3个状态对应led的三种点亮模式,以此循环往复。

核心要点:

状态位实现led灯的模式变化。

总结:

并行执行,关键在于对于目标的把握。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值