首页 > 其他分享 >【《硬件架构的艺术》读书笔记】04 时钟分频器

【《硬件架构的艺术》读书笔记】04 时钟分频器

时间:2022-12-11 18:15:01浏览次数:81  
标签:分频 分频器 04 clk 读书笔记 rst 占空比 out 时钟

4.1 介绍

偶数时钟分频很好实现,使用一个计数器累加到一定值再清零,同时翻转电平就可以了。本章主要讲的是奇数分频和小数分频。

4.2 同步整数分频器

使用Moore状态机可以轻松的实现同步整数分频,需要几分频就有几种状态,但是如果是奇数分频,那么输出就不可能为50%占空比。

 

 如图使用了一个七个状态的Moore状态机实现了7分频,其中4个状态输出为0,3个状态输出为1,显然占空比不为50%

4.3 具有50%占空比的奇数整数分频

1、以期望输出频率的一半产生两个正交相位时钟(90°相位差)。

2、将两个波形异或得到输出频率。

对于整奇数N分频:

1、创建一个计数到N-1的计数器。

2、使用两个T触发器,并且第一个触发器当计数到0使能,第二个触发器计数到(N+1)/2使能。

3、TFF1由上升沿触发,TFF2由下降沿触发,两个触发器的输出都是2N分频的时钟。

4、异或得到最终输出。

 

 

 

`timescale 1ns / 1ps


module div3(
    input clk_in,
    input rst_n,
    output clk_out
    );

    reg [3:0]count;
    reg div1,div2;

    always @(posedge clk_in or negedge rst_n) begin
        if(~rst_n)
            count <= 'd0;
        else begin
            count <= (count<2)?(count + 1'b1):'d0;
        end
    end

    always @(posedge clk_in or negedge rst_n) begin
        if(~rst_n)
            div1 <= 1'b0;
        else if(count == 0)
            div1 <= ~div1;
    end

    always @(negedge clk_in or negedge rst_n) begin
        if(~rst_n)
            div2 <= 1'b0;
        else if(count == 2)
            div2 <= ~div2;
    end

    assign clk_out = div1 ^ div2;

endmodule

testbench

`timescale 1ns / 1ps


module tb_div3();
reg clk_in;
reg rst_n;
wire clk_out;

initial begin
    clk_in = 0;
    rst_n = 0;
    #100
    rst_n = 1;
end

always #10 clk_in = ~clk_in;

 div3 u0(
    .clk_in(clk_in),
    .rst_n(rst_n),
    .clk_out(clk_out)
    );

endmodule

仿真波形

 

4.4 非整数分频(非50%占空比)

4.4.1 具有非50%占空比的1.5倍分频

 

 

`timescale 1ns / 1ps
module div1_5(
    input clk_in,
    input rst_n,
    output reg clk_out
);
wire clk_div3;
wire clk_mux;
assign clk_mux = clk_div3 ? clk_in : ~clk_in;

always @(posedge clk_mux or negedge rst_n) begin
    if(~rst_n)
        clk_out <= 1'b0;
    else
        clk_out <= ~clk_out;
end

div3 u0(
    .clk_in(clk_in),
    .rst_n(rst_n),
    .clk_out(clk_div3)
    );

endmodule

仿真波形

 该电路综合可能出现问题,因为多路器的两个输入端延时并不相等,可能输出产生毛刺。参考时钟频率越高,出错的可能性也越大。

4.4.2 4.5倍分频计数器的实现(非50%占空比)

 本方法可以使输出时钟不含毛刺。概括的讲,这种方法是在9个原始时钟内等间隔产生两个脉冲。

1、使用复位值为0_0000_0001的9位移位寄存器,在每个时钟上升沿循环左移一位。

2、产生第一个脉冲,下降沿移动第一位,并将移动后的结果和第一位、第二位进行或操作。

3、产生第二个脉冲,第五位和第六位半周期时移动,并与第六位进行或操作。

注意这里每一个脉冲都是三个信号相或得到的,这样做的目的是防止两个信号同时变化出现竞争冒险现象。

`timescale 1ns / 1ps
module div4_5(
    input clk_in,
    input rst_n,
    output clk_out
);
reg [8:0]count;
reg count1_shift,count5_shift,count6_shift;

always @(posedge clk_in or negedge rst_n ) begin
    if(~rst_n)
        count <= 'd1;
    else
        count <= {count[7:0],count[8]};    
end

always @(negedge clk_in or negedge rst_n ) begin
    if(~rst_n)begin
        count1_shift <= 1'b0;
        count5_shift <= 1'b0;
        count6_shift <= 1'b0;
    end
    else begin
        count1_shift <= count[1];
        count5_shift <= count[5];
        count6_shift <= count[6];
    end
end

assign clk_out = count[1]|count1_shift|count[2]|count5_shift|count[6]|count6_shift;

endmodule

 仿真波形

 

 4.5 N分频的替换方法

以上电路都假设输入时钟占空比50%,否则小数分频输出会出现抖动,整数分频器也会有不同占空比。

基于查找表的组合反馈电路可以产生不含毛刺的时钟。

4.5.1 1.5分频的查找表实现

 这里不是三分频吗,为啥说实现了一个1.5分频?

Google了一下发现作者电路没给全,完整电路如下。

 

 这样就比较好懂了,电路也比较简单,就懒得写代码了。

标签:分频,分频器,04,clk,读书笔记,rst,占空比,out,时钟
From: https://www.cnblogs.com/magnolia666/p/16972659.html

相关文章

  • Zabbix 6 系列学习 04:容器方式安装
    本文会以两种环境介绍此安装方式,一种是基于Docker的方式,第二种是基于Podman的方式。Docker本文环境系统:Ubuntu22.04容器:Docker安装Dockersudoaptinstalldockerdoc......
  • How to install Tabby(Terminus): A modern age terminal on Ubuntu 22.04
    HowtoinstallTabby(Terminus):AmodernageterminalonUbuntu22.047monthsagoby AdnanShabbirTheTerminalistheprimarytoolofanyLinuxdistribut......
  • ogg启动抓取进程时报错OGG-01044
    问题描述:ogg启动抓取进程时报错OGG-01044,如下所示:源端:oracle10.2.0.464位异常重现:GGSCI(leo-10g-ogg)4>startextaSendingSTARTrequesttoMANAGER...EXTRACTEXTA......
  • 安装Ubuntu18.04并配置ssh服务
    安装Ubuntu18.04并配置ssh服务打开终端界面切换到root用户提示:输入密码是隐藏的,并不会显示,实际是输入了的运行以下代码切换到root:sudosu一.解决Ubuntu终端无法......
  • C++学习---cstdio的源码学习分析04-创建临时文件函数tmpfile
    cstdio中的文件操作函数stdio.h中定义了文件删除函数remove,文件重命名函数rename,创建临时文件函数tmpfile,生成临时文件名函数tmpnam。接下来我们一起来分析一下tmpfile对应......
  • Game 2048
    Thegame2048isapuzzlegameplayedona4x4grid.Thegoalofthegameistoslidethetilesonthegridtocombinethemandcreateatilewiththenumber2......
  • 【04期】分库分表之后,id 主键如何处理?
    问:分库分表之后,id主键如何处理?面试官心理分析其实这是分库分表之后你必然要面对的一个问题,就是id咋生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,......
  • 04 浏览器出现储物提示“Uncaught TypeError: Cannot read properties of undefined (
    错误截图: 解决方法:原因是vue-router安装的版本太高,一般vue2的项目对应的版本是vue-router@3版本,而我的项目对应的版本就是vue2;所以需要修改vue-router的版本1.在控制......
  • Ubuntu2204设置固定IP地址
    前言Ubuntu每次升级都会修改一部分组件.从1804开始Ubuntu开始使用netplan的方式进行网络设置.但是不同版本的配置一直在升级与变化.今天掉进坑里折腾了好久.所以这边总结一......
  • 【软件工具安装】ubuntu20.04安装matlab2017b
    前言 系统环境:ubuntu20.04,安装matlab2017b;问题按照参考博客安装之后,基本功能可以使用,不过复制粘贴等快捷键不能使用,重新设置之后还是不行;出现一些warning问题,特别是VideoRe......