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

推荐订阅源

人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
S
SegmentFault 最新的问题
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
U
Unit 42
GbyAI
GbyAI
B
Blog RSS Feed
博客园 - Franky
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 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