Xilinx FPGA零基础系列(2):采用block块的方式完成1s流水灯设计

一、计时器设计

`timescale 1ns / 1ps
//1s计数器
module count(
     input                sys_clk      ,  //系统时钟
     input                rst_n        ,  //系统复位
     output   reg[25:0]  cnt             //根据时钟周期20ns算出1s计数50000000次 
    );
 parameter      TIME_1s=26'd50_000_000;  //定义计数器最大值
always@(posedge sys_clk)
     if(rst_n==0)                         //赋初值
         cnt<=0;
     else   begin              rst_n==1
         if(cnt==TIME_1s-1)
         cnt<=0;
     else
         cnt<=cnt+1;
     end



endmodule

二、流水灯设计

`timescale 1ns / 1ps
/*
移位运算符实现流水灯
*/
module led_out(
   input                 sys_clk         ,
   input                 rst_n           ,
   input    wire[25:0]    cnt             ,   //cnt作为led模块输入的时候记得一定要给位宽,不然默认位宽是2的话计数器跑不起来
   output   reg[3:0]     led
  
    );
 
 
 parameter      TIME_1s= 26'd50_000_000;
 
 
 always@(posedge sys_clk)
    if(rst_n==0)
       led<=4'b0010;   //这块因为要使用移位运算符的方式,因此初值不可以是0000,不然怎么移位都是0,左移的话初值不能是1000
    else if(cnt==TIME_1s-1)begin                                                                    //右移的话初值不能是0001
         if(led==4'b1000)                              //使用移位运算符时注意到cnt到最大值时,此时产生两种情况:1、led=1000时,跳变到0001
            led<=4'b0001;                              //                                                       2、led正常左移            
         else
            led<=led<<1;

    end
    else        ///1s没有计到
            led<=led;
    
    
endmodule

三、采用block将流水灯和计数器链接在一起

先创建一个block

直接拖进来

最后绑定管脚,生成比特流,烧录进板子就可以了(后续这些步骤的详细操作可以看我的另一篇博客Xilinx FPGA:vivado用状态机写4位流水灯,含按键消抖 zynq7000-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值