惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

M
MIT News - Artificial intelligence
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
J
Java Code Geeks
G
Google Developers Blog
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
月光博客
月光博客
B
Blog
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
博客园_首页
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
Jina AI
Jina AI
S
SegmentFault 最新的问题
H
Help Net Security
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
Google DeepMind News
Google DeepMind News

博客园 - yf.x

超声波测距#倒车雷达#DE10-Lite 按键计数器#DE10-Lite 按键消抖#DE10-Lite 流水呼吸灯v2#DE10-Lite 呼吸灯-#DE10-Lite 流水灯#DE10-Lite#Verilog HDLBits_review 2015fsm 补码FSM-HDLbits 串行数据流输出其中的数据位-HDLbits 串行数据接收判断-HDLbits 输出PS2数据流-HDLbits PS2数据流检测状态机-HDLbits 独热码状态机-HDLbits 旅鼠4-HDLbits 旅鼠游戏3-HDLbits 旅鼠游戏2-HDLbits 旅鼠游戏--HDLbits 水库水位控制问题-HDLbits 康威生命游戏-hdlbits
流水呼吸灯-v1#DE10-Lite
yf.x · 2026-03-28 · via 博客园 - yf.x
  1. 现象:4个led间隔2s依次点亮并呼吸。
  2. 算法:结合之前设计的流水灯和呼吸灯设计,有2种方式实现流水呼吸灯,一是添加一个使能信号,控制每个led的计数模块;而是控制复位信号,不添加新的信号。第1个led默认计数点亮,第二个2s后开始点亮,第3个4s后开始点亮,第4个6s后点亮。
  1. 仿真结果:

image

  1. 引脚分配

image

  1. 核心代码:
  2. module led_breath_v3(
        input clk,rst_n,
        output [3:0] led
    );
    
        wire [3:0] ctrl_en;
        
        time_ctrl u0(
        .clk(clk),
        .rst_n(rst_n),
        .ctrl_en(ctrl_en)
        );
        
        led_breath_v2 L0(
        .clk(clk),
        .rst_n(ctrl_en[0]),
        .led(led[0])
        );
        led_breath_v2 L1(
        .clk(clk),
        .rst_n(ctrl_en[1]),
        .led(led[1])
        );
        led_breath_v2 L2(
        .clk(clk),
        .rst_n(ctrl_en[2]),
        .led(led[2])
        );
        led_breath_v2 L3(
        .clk(clk),
        .rst_n(ctrl_en[3]),
        .led(led[3])
        );
        
    endmodule

    led计数复位控制

  3. module time_ctrl(
        input clk,
        input rst_n,
        output reg [3:0] ctrl_en
        );
        
        parameter T1 = 100_000_000;    //2s
        parameter T2 = 200_000_000;    //4s
        parameter T3 = 300_000_000;    //6s
        
        reg [28:0] cnt;
        
        
        //counter
        always @(posedge clk,negedge rst_n)
            begin
                if(!rst_n)
                    cnt <= 0;
                else
                    if(cnt < T3 - 1)
                        cnt <= cnt + 1;
                    else
                        cnt <= cnt;
            end
            
        
        //turn on led 1 by 1
        always @(posedge clk,negedge rst_n)
            begin
                if(!rst_n)
                    ctrl_en <= 0;
                else
                    if(cnt == T3 - 1)
                        ctrl_en <= 4'b1111; //4 led all on
                    else
                        if(cnt >= T2 - 1)
                            ctrl_en <= 4'b0111; //3 led all on
                        else
                            if(cnt >= T1 - 1)
                                ctrl_en <= 4'b0011; //2 led both on
                            else
                                ctrl_en <= 4'b0001; //1 led  on
            end
        
    endmodule