分频时钟、使能时钟、门控时钟的概念和使用

这篇具有很好参考价值的文章主要介绍了分频时钟、使能时钟、门控时钟的概念和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.概述

        FPGA的时钟和时序以及功能息息相关,下面将介绍分频时钟,使能时钟以及门控时钟。

二.时钟设计介绍

1.分频时钟

        有些时候设计需要将主时钟进行分频以降低频率使用,对于有足够PLL和MMCM资源的FPGA,可以使用PLL或MMCM进行分频,但是没有这些资源的FPGA要想降低时钟频率就得靠逻辑来完成。以下是一个将主时钟4分频的代码。

module clock_div(
    input clk_in,
    input rst,
    output clk_div_out
    );

reg [1:0] cnt;
always @(posedge clk_in or posedge rst) begin
    if (rst) begin
        // reset
        cnt <= 2'b0;
    end
    else if (cnt == 1) begin
        cnt <= 0;
    end
    else cnt <= cnt+1;
end

reg clk_div;
always @(posedge clk_in or posedge rst)begin
    if(rst)begin
        clk_div <= 1'b0;
    end
    else if(cnt == 1)begin
        clk_div <= ~clk_div;
    end
    else clk_div <= clk_div;
end

assign clk_div_out = clk_div;
endmodule

         该代码块会产生一个4分频的时钟,但是不介意产生这样一个时钟给其他模块用。原因有以下两点。

(1)clk_div由逻辑门(反相器)产生,会有毛刺。

(2)clk_div这个触发器在clk_in时钟有效到输出clk_div信号是有着Tco的时间延迟,这样会让clk_div和clk_in产生较大的相移,然后让clk_div去驱动其他模块,这种做法在设计中会产生较大的问题。

(3)引入多时钟域问题。

2.使能时钟

        使能时钟以分频时钟为基础,只不过不产生反相器,生成的信号en不作为时钟去驱动其他模块,而是作为使能信号。如下图:

门控时钟,fpga开发,硬件工程

 

项目中也用到了使能时钟,比如288位的寄存器,由cpu通过localbus总线32位写下来,那么可以通过cnt计数,cnt为9时(288位被写完)产生一个使能信号,将此288位寄存器给到RAM的输入。网上找了个类似的代码如下:

        这是在某系统中,前级数据输入位宽为8位,而后级的数据输出位宽为32,我们需要将8bit数据转换为32bit,由于后级的处理位宽为前级的4倍,因此后级处理的时钟频率也将下降为前级的1/4,若不使用时钟使能,则要将前级的时钟进行4分频来作后级处理的时钟。这种设计方法会引入新的时钟域,处理上需要采取多时钟域处理的方式,因而在设计复杂度提高的同时系统的可靠性也将降低。为了避免以上问题,我们采用了时钟使能以减少设计复杂度。

module clk_en(clk, rst_n, data_in, data_out);  
input clk;  
input rst_n;  
input [7:0] data_in;  
output [31:0] data_out;  
 
reg [31:0] data_out;  
reg [31:0] data_shift;  
reg [1:0] cnt;  
reg clken;  
 
always @(posedge clk or negedge rst_n)  
begin  
 if (!rst_n)  
      cnt <= 0;  
 else 
      cnt <= cnt + 1;  
end  
 
always @(posedge clk or negedge rst_n)  
begin  
 if (!rst_n)  
      clken <= 0;  
 else if (cnt == 2'b01)  
      clken <= 1;  
 else 
      clken <= 0;  
end  
 
always @(posedge clk or negedge rst_n)  
begin  
 if (!rst_n)  
      data_shift <= 0;  
 else 
      data_shift <= {data_shift[23:0],data_in};  
end  
 
always @(posedge clk or negedge rst_n)  
begin  
 if (!rst_n)  
      data_out <= 0;  
 else if (clken == 1'b1)  
      data_out <= data_shift;  
end  
 
endmodule 

        可以看到,在上面代码中,也使用到了计数器,但是仅仅是用于产生一个时钟使能脉冲信号,只持续一个clk。而clk_en也没有直接用于驱动其他电路,在整个系统中,所有的时钟都是clk,这样就不会有相移过大以及多时钟域的问题存在了,而且也不会出现由于毛刺带来的影响。

3.门控时钟

        门控时钟是通过一个控制信号来控制时钟的开和关。

        如果单纯从功能实现来看,使用使能时钟替代门控时钟是一个不错的选择;但是使能时钟在使能信号关闭时,时钟信号仍在工作,它无法像门控时钟那样降低系统功耗。

门控时钟,fpga开发,硬件工程

        这样的门控时钟有两个问题:

        (1)由于门控信号是一个异步信号,会产生亚稳态的问题。具体见亚稳态的跨时钟处理(一)的什么情况下会产生亚稳态。

        (2)一般情况下,门控时钟只需要一个与门,但是如果有附加的组合逻辑,输出信号将会有毛刺。门控时钟,fpga开发,硬件工程

        用打拍的方式有效的抑制了亚稳态可能产生的危害。而且如果门控信号gating signal有附加的组合逻辑,也会因为D触发器的D输入端对毛刺信号不敏感的特点,将毛刺有效滤除掉。

Note:

        对于输出的时钟信号或复位信号,最好让它走全局时钟网络,从而减小时钟网络延时,提升系统时序性能。文章来源地址https://www.toymoban.com/news/detail-525931.html

到了这里,关于分频时钟、使能时钟、门控时钟的概念和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA时钟分频倍频之PLL锁相环

    1、使用vivado创建一个工程 2、点击IP Catalog,搜索Clock Wizard,然后双击,本次实验使用PLL进行分频倍频,不动态改变相位,故选择PLL选项,并将时钟频率改变为50MHz,此处我们使用50MHz晶振作为时钟源 3、点击Output Clocks,配置产生的时钟频率,其他选项保持默认,点击ok,生pll ip核

    2024年02月12日
    浏览(28)
  • 4种FPGA时钟分频 【附源码】:1.偶数分频;2.奇数分频(占空比50%);3.奇数分频(任意无占空比);4.小数分频;

    题目来源于牛客网,完整工程源码:https://github.com/ningbo99128/verilog 目录 VL37 偶数分频 VL40 奇数分频(占空比50%) VL42 奇数分频(任意无占空比) VL41 任意小数分频(较难) 题目介绍 请使用D触发器设计一个同时输出2/4/8分频的50%占空比的时钟分频器;注意rst为低电平复位。

    2024年01月17日
    浏览(29)
  • ASIC设计学习笔记——使用DC工具自动添加门控时钟

    门控时钟是降低数字电路功耗的一个重要手段,在ASIC设计中,设计工具都可以根据使用者的设置自动的完成门控时钟的添加。本文简单描述了门控时钟的概念,并给出了使用DC进行门控时钟添加的操作说明,是初学ASIC设计的学习笔记分享。 数字电路的工作动态功耗主要是由

    2024年02月11日
    浏览(54)
  • FPGA设计开发(基础课题):分频器设计

    一、设计目的 1、掌握分频器的设计原理; 2、用HDL语言设计分频器。 二、设计原理 分频器与计数器类似,也是要对时钟脉冲进行计数,但其输出的不是对时钟脉冲个数的计数值,而是其频率与时钟的频率成固定比例关系的脉冲信号。整数分频是所有分频器中最简单,最容易

    2024年02月13日
    浏览(38)
  • Verilog基础:时序调度中的竞争(二)(创建分频时钟时,使用阻塞赋值)

    相关阅读 Verilog基础 https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482         作为一个硬件描述语言,Verilog HDL常常需要使用语句描述并行执行的电路,但其实在仿真器的底层,这些并行执行的语句是有先后顺序的,然而Verilog标准并没有将这些事件调度的

    2024年02月05日
    浏览(31)
  • Verilog时钟分频(偶数分频、奇数分频、小数分频、半整数分频)

    偶数分频最容易实现,可以用计数器实现。计数值小的时候也可以使用DFF直接完成。这里使用计数器实现,计数达到分频系数一半的时候进行翻转(占空比为50%)。对应: 牛客 VL37 时钟分频(偶数) 仿真结果如下 不要求占空比为50%,可以与偶数分频一样,根据计数值进行波形

    2024年01月23日
    浏览(34)
  • 时钟分频电路设计--verilog(2分频、3分频、4分频)

    module divider( input clk, input resetn, output reg clk_d2, output reg clk_d3_pos, output reg clk_d3_neg, output clk_d3, //reg型不能assign赋值? output reg clk_d4 ); reg [1:0]counter; reg [1:0]counter_3; always@(posedge clk or negedge resetn)begin //4分频计数器模块 if(~resetn) counter = 2’b0; else if(counter = 2’b11) counter = counter + 1’

    2024年02月06日
    浏览(28)
  • Vivado自写分频模块的分频时钟的约束条件编写

    由于项目需要,整个工程需要在100kHz的时钟下运行,FPGA的clk:50MHz clocking wizard 问题:MMCM和PLL都不能实现分频到100KHz这么低的频率 MMCM最小频率4.687MHz PLL最小频率6.25MHz 分频模块如下: 问题:自己写的分频模块直接使用是不可以的,需要在约束文件中进行时序约束 (1)打开

    2024年02月07日
    浏览(49)
  • 带有时钟使能和同步清零的D触发器

    每个 Slice 有 8 个 FF 。四个可以配置为 D 型触发器或电平敏感锁存器,另外四个只能配置为 D 型触发器,但是需要记得是:当原来的四个 FF 配置为锁存器时,不能使用这四个 FF 。 (1)FDCE 简介 带有时钟使能和异步清零的 D 触发器 当时钟使能(CE)为高并且异步清零信号 C

    2024年02月11日
    浏览(28)
  • Verilog 时钟分频设计

    将触发器的反向输出端接到触发器的输入,可以构成简单二分频电路。 在此基础上,将二分频电路进行级联可以构成四分频,八分频电路。电路如下图所示:   对于任意偶数分频,或者系数较大的偶数分频,可以使用计数器循环计数来实现分频。当计数周期达到N/2(N为分频

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包