lesson2分频计数器设计

lesson2:分频计数器设计

1:分频时钟工程应用

**概念:**对FPGA频率较高的系统时钟进行分频可以产生频率较低的分频时钟。

应用:分频时钟可以作为FPGA低速外设的同步时钟,比如

IIC总线时钟(<= 400KHz)

低速SPI总线时钟(<=1MHz)

**注:**对于频率较高的分频时钟,不能直接作为外设时钟或者FPGA内部时钟使用,这类时钟应该由FPGA内部的PLL等时钟管理单元产生。不过PLL输出时钟范围为5.65MHz-800MHz,所以对于kHz的时钟频率一般分频产生。

2:分频计数器功能需求

需求:输入100MHz,产生1MHz低频时钟

分析:

1:计数范围确定:100MHz/1MHz = 100

2:即需要对100MHz做100分频

3:计数器循环计数周期为0-99。

3:实例设计与仿真

3.1:接口说明

接口位宽方向描述
clk1I系统时钟27MHz
rst_n1I系统复位
clk_out1O输出时钟1MHz

3.2:主要时序

在这里插入图片描述

3.3:实现

reg [6:0] cnt;
reg clk_out_reg;
`define CNT_MAX 100            //使用define定义,使用时加`
`define CNT_MAX_DIV2 50            //使用define定义,使用时加`
//localparam CNT_MAX = 7'd99;
//localparam CNT_MAX_DIV2 = 7'd50;
//cnt计数
always @(posedge clk)begin
    if(!rst_n)begin
      cnt <= 7'b0;
    end
    else if(cnt == `CNT_MAX)begin
      cnt <= 7'b0;
    end
    else begin
      cnt <= cnt + 1'b1;
    end
end

//输出	clk_out
always @(posedge clk)begin
    if(!rst_n)begin
      clk_out_reg <= 1'b0;
    end
    else if(cnt <  `CNT_MAX_DIV2)begin
      clk_out_reg <= 1'b0;
    end
    else begin
      clk_out_reg <= 1'b1;
    end
end	
assign clk_out = clk_out_reg;

3.4:仿真分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4DuhN5A-1633965457910)(file:///C:\Users\Lenovo\AppData\Local\Temp\msohtmlclip1\01\clip_image003.jpg)]

assign clk_out = clk_out_reg;


3.4:仿真分析

![在这里插入图片描述](https://img-blog.csdnimg.cn/26036c09039440968a518b786c74a560.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/87c5370817914fbba291f157e87c867c.png#pic_center)


 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值