Xilinx FPGA 零基础系列(3)vivado实现反向流水灯 zynq7000

一、设计代码

//采用计数器方法写反向流水灯

`timescale 1ns / 1ps
module water_led_2(
input                 sys_clk   ,   //系统时钟
input                 rst_n     ,   //系统复位
output    reg[3:0]    led           //4位流水灯
  
 
    );
parameter      TIME_1s_max=26'd50_000_000;     //规定计时器最大值,1s内有50000000个20ns,所以计数50000000次
parameter      count_max=3'd6;                 //6=2^2+2^1   ,因此需要3个位宽
reg[25:0]        TIME_1s  ;
reg[2:0]          count   ;                    //  给3个位宽的存储

//计时器
always@(posedge sys_clk)
      if(!rst_n)
        TIME_1s <= 0;
        else if(TIME_1s==TIME_1s_max-1)      
        TIME_1s <= 0;
        else
        TIME_1s <=TIME_1s+1;
        
//计数器
always@(posedge sys_clk)
      if(!rst_n)      //if else 是顺序执行,所以千万不能把以下两个else if语句写反
      count<=1'd0;
         else if(TIME_1s==TIME_1s_max-1 && count==count_max)
                 count<=1'd0;
         else if(TIME_1s==TIME_1s_max-1)
                 count<=count+1;
         else
                 count<=count;
 
 
 //利用计数器实现间隔1s的反向流水灯               
always@(posedge sys_clk)
      if(!rst_n)
         led<=4'b1111;
      else
         case(count)
         1'd0    :    led<=4'b0001   ;
         1'd1    :    led<=4'b0010   ;           
         2'd2    :    led<=4'b0100   ;
         2'd3    :    led<=4'b1000   ;
         3'd4    :    led<=4'b0100   ;
         3'd5    :    led<=4'b0010   ;
         3'd6    :    led<=4'b0001   ;
         endcase
endmodule

二、仿真代码

`timescale 1ns / 1ps

module water_led_2_tb();

   reg            sys_clk    ;   //系统时钟
   reg            rst_n      ;   //系统复位
   wire[3:0]       led        ;   //4位流水灯

initial begin
          sys_clk = 0 ;
          rst_n = 0   ;
  #5000   rst_n=1    ;      
       
       
       end
     
always #10  sys_clk = ~sys_clk ;


water_led_2   u1(
              .  sys_clk (sys_clk)  ,   //系统时钟
              .  rst_n   (rst_n  )  ,   //系统复位
              .  led     (led    )      //4位流水灯

 
    );
endmodule

仿真波形:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值