FPGA系统性学习笔记连载_Day12【呼吸灯实验】之【另外一种verilog实现】篇

2021-04-07 11:49:22 浏览数 (1)

FPGA系统性学习笔记连载_Day12【呼吸灯实验】之【另外一种verilog实现】篇

本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主。

连载《叁芯智能fpga设计与研发-第12天》 【呼吸灯实验】之【另外一种verilog实现】

原创作者:紫枫术河 转载请联系群主授权,否则追究责任

这篇文章,记录的呼吸灯的另外一种verilog代码实现,看起来比较直观

一、breath_led.v

代码语言:javascript复制
module breath_led_v1(clk, rst_n, led);
 
  input       clk;
  input       rst_n;
   
  output      led;
 
  reg [6:0] cnt_2us;
  reg [9:0] cnt_2ms;
  reg [9:0] cnt_2s;
   
  always @ (posedge clk, negedge rst_n)
  begin
    if(rst_n == 1'b0)
      cnt_2us <= 7'd0;
    else if(cnt_2us == 7'd99)
      cnt_2us <= 7'd0;
    else
      cnt_2us <= cnt_2us   1'b1;
  end
 
  always @ (posedge clk, negedge rst_n)
  begin
    if(rst_n == 1'b0)
      cnt_2ms <= 10'd0;
    else if(cnt_2us == 99)
      begin
        if(cnt_2ms == 999)
          cnt_2ms <= 10'd0;
        else
          cnt_2ms <= cnt_2ms   1'b1;
      end
    else
      cnt_2ms <= cnt_2ms;
  end
 
  reg change;
   
  always @ (posedge clk, negedge rst_n)
  begin
    if(rst_n == 1'b0)
      begin
        cnt_2s <= 10'd0;
        change <= 1'b0;
      end
    else if(cnt_2us == 99 && cnt_2ms == 999)
      begin
        if(cnt_2s == 999)
          begin
            cnt_2s <= 10'd0;
            change <= 1'b1;
          end
        else
          begin
            cnt_2s <= cnt_2s   1'b1;
            change <= 1'b0;
          end
      end
    else
      begin
        cnt_2s <= cnt_2s;
        change <= 1'b0;
      end
  end
   
  wire led_n;
  reg flag;
   
  assign led_n = (cnt_2ms <= cnt_2s) ? 1'b1 : 1'b0;
   
  always @ (posedge clk, negedge rst_n)
  begin
    if(rst_n == 1'b0)
      flag <= 0;
    else if(change)
      flag <= ~flag;
    else
      flag <= flag;
  end
   
  assign led = (flag) ? led_n : ~led_n;
 
endmodule

二、breath_led_tb.v

代码语言:javascript复制
`timescale 1ns/1ps
 
module breath_led_v1_tb;
 
  reg         clk;
  reg         rst_n;
   
  wire        led;
 
  initial begin
    rst_n = 0;
    clk = 0;
    #105;
    rst_n = 1;
    #1000;
    $stop;
  end
 
  always #10 clk = ~clk;
   
  breath_led_v1 breath_led_v1_inst(
    .clk      (clk),
    .rst_n    (rst_n),
    .led      (led)
  );
 
endmodule

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有。

【微信交流群】

现微信交流群已建立09群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

0 人点赞