【IC设计】奇数分频与偶数分频 电路设计(含讲解、RTL代码、Testbench代码)

news2024/10/6 16:23:32

文章目录

  • 原理分析
  • 实现和仿真
    • 偶数分频的电路RTL代码
    • 偶数分频的电路Testbench代码
    • 偶数分频的电路仿真波形
    • 占空比为50%的三分频电路RTL代码
    • 占空比为50%的三分频电路Testbench代码
    • 占空比为50%的三分频电路仿真波形
  • 参考资料

原理分析

分频电路是将给定clk时钟信号频率降低为div_clk的电路,假设原时钟的频率为M Hz,分频后的时钟为N Hz,那么就称该分频电路为M/N分频。

如果M/N是奇数,实现该功能的电路就是奇数分频电路;
如果M/N是偶数,实现该功能的电路就是偶数分频电路。

频率和周期的对应关系:
由于频率f=1/T,因此二分频电路即M/N=(1/T1)/(1/T2) = T2/T1 = 2 ,即一个二分频后的时钟周期是原时钟周期的两倍。
同理,一个N分频后的时钟周期是原时钟的M/N倍。

偶数分频举例:
以两分频电路为例,由于周期为原先的两倍,那么只需要在clk每个上升沿到来时,div_clk翻转,就可以了。
以四分频电路为例,由于周期为原先的四倍,那么需要在clk每两个周期div_clk翻转一次。需要使用计数器来数clk过了几个周期。
同理,一个K分频电路,K为偶数,那么由于周期为原先的K倍,那么需要在clk每K/2个周期div_clk翻转一次

奇数分频举例:
以三分频电路为例,周期为原先的三倍。
如果对占空比(高电平占整个周期的比例)没有要求,我们可以令out_clk在clk的一个周期为高,两个周期为低,如此反复。

如果占空比为一半,那么就是每1.5个周期翻转一次,无法通过检测上升和下降沿来翻转,那么应该怎么做?
如图所示,我们的目标是每1.5个周期翻转一次,那么可以这样做,得到一个占空比为50%的奇数分频。

  1. 构造out_clk1和out_clk2信号,高电平都是1个周期,低电平都是2个周期,两个信号的区别是相差半个周期的相位。
  2. assign out_clk = out_clk1 | out_clk2
  3. out_clk就是分频的结果
    在这里插入图片描述
    同理,任意奇数分频都可以用类似的思路实现。因为3 5 7 9 11…总是可以分解成3=1+2,5=2+3,7=3+4,9=4+5…

实现和仿真

偶数分频的电路RTL代码

`timescale 1ns / 1ps

module divide_even
(
    rst_n,
    clk,
    div_clk,
);
    input rst_n;
    input clk;
    output reg div_clk;
    
    //位宽一般用系统函数来确定
    reg [5:0] cnt;
    
    parameter DIVIDE_NUM = 4;
    always@(posedge clk or negedge rst_n) begin
        if( ~rst_n ) begin
            cnt <= 0;
            div_clk <= 0;
        end else if( cnt == DIVIDE_NUM / 2 - 1 ) begin
            div_clk <= ~div_clk;
            cnt <= 0;
        end else begin
            cnt <= cnt + 1;
        end
    end
endmodule

偶数分频的电路Testbench代码

`timescale 1ns / 1ps

module tb_divide_even();
    reg clk;
    reg rst_n;
    wire div_clk;
    initial begin
        clk = 0;
        rst_n = 0;
        #48;
        rst_n = 1;
        #203;        
        $stop;
    end    
    divide_even divide_even_u0
    (
        .clk(clk),
        .rst_n(rst_n),
        .div_clk(div_clk)    
    );
    always #5 clk = ~clk;
endmodule

偶数分频的电路仿真波形

在这里插入图片描述

占空比为50%的三分频电路RTL代码

`timescale 1ns / 1ps

module divide_3(
    clk,
    rst_n,
    div_clk
);
    input clk;
    input rst_n;
    output div_clk;
    
    reg out_clk1;
    reg out_clk2;
    
    reg [1:0] cnt1;
    reg [1:0] cnt2;
    
    //第一个always负责out_clk1的值
    always@(posedge clk or negedge rst_n) begin
        if(~rst_n) begin
            cnt1     <= 2'b0;
            out_clk1 <= 0;
        end
        else if(out_clk1 == 1) begin             
            cnt1 <= 2'b0;
            out_clk1 <= ~out_clk1;      
        end else if(out_clk1 == 0) begin
            if(cnt1 == 1) begin
                cnt1 <= 2'b0;
                out_clk1 <= ~out_clk1;
            end else begin
                cnt1 <= cnt1 + 1;
            end
        end
    end
    
    //第二个always负责out_clk2的值
    always@(negedge clk or negedge rst_n) begin
        if(~rst_n) begin
            cnt2     <= 2'b0;
            out_clk2 <= 0;
        end
        else if(out_clk2 == 1) begin 
            cnt2 <= 2'b0;
            out_clk2 <= ~out_clk2;
        end else if(out_clk2 == 0) begin
            if(cnt2 == 1) begin
                cnt2 <= 2'b0;
                out_clk2 <= ~out_clk2;
            end else begin
                cnt2 <= cnt2 + 1;
            end
        end
    end
    
    assign div_clk = out_clk1 | out_clk2;

endmodule

占空比为50%的三分频电路Testbench代码

`timescale 1ns / 1ps

module tb_divide_3();
    reg clk,rst_n;
    wire div_clk;
    
    initial begin
        rst_n = 0;
        clk = 0;
        #48;
        rst_n = 1;
        #202;
        $stop;
    end
    
    divide_3 divide_3_u0
    (
        .clk(clk),
        .rst_n(rst_n),
        .div_clk(div_clk)
    );
    
    //10ns一个周期,100MHz
    always #5 clk = ~clk;
    
endmodule

占空比为50%的三分频电路仿真波形

在这里插入图片描述

参考资料

  1. 正点原子逻辑设计指南
  2. B站 FPGA探索者 牛客Verilog刷题 奇数分频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1620546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北斗卫星助力农业生产精准播种

北斗卫星助力农业生产精准播种 随着现代化农业的不断进步&#xff0c;高科技技术的融合已成为推动农业生产向前发展的重要动力。其中&#xff0c;北斗卫星导航系统&#xff08;BDS&#xff09;的应用&#xff0c;特别是在农业播种领域的利用&#xff0c;标志着农作物种植方式的…

私域运营的基础是什么?

私域运营是指在自有平台上进行的一系列运营活动&#xff0c;旨在建立和维护与用户的深度互动关系&#xff0c;提升用户忠诚度和品牌影响力。相比于传统的广告投放和推广方式&#xff0c;私域运营更加注重与用户的沟通和互动&#xff0c;通过提供有价值的内容和个性化的服务&…

业务复习知识点Oracle查询

业务数据查询-1 单表查询 数据准备 自来水收费系统建表语句.sql 简单条件查询 精确查询 需求 &#xff1a;查询水表编号为 30408 的业主记录 查询语句 &#xff1a; select * from t_owners where watermeter 30408; 查询结果 &#xff1a; 模糊查询 需求 &#xff1a;查询业…

mysql添加普通索引(简单使用)

前言&#xff1a;以订单表&#xff08;oms_order&#xff09;为例&#xff0c;添加用户id&#xff08;user_id&#xff09;为普通索引 mysql添加普通索引&#xff08;简单使用&#xff09; 1.查看表已经存在的索引情况a.语法b.使用c.结果&#xff08;这里还没有添加所以&#…

MT3029 战神小码哥

注意点&#xff1a;不能先按时间排序&#xff0c;在每个时间点选最大的。如果第一秒有p11&#xff0c;第二秒有p210和p311&#xff0c;则如果按时间来&#xff0c;则先选第一秒的1&#xff0c;再选第二秒的 11&#xff1b;但是有更优的策略&#xff1a;第一秒选p3,第二秒选p2。…

【1431】java学习网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 学习网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

ARP 攻击神器:ARP Spoof 保姆级教程

一、介绍 arpspoof是一种网络工具&#xff0c;用于进行ARP欺骗攻击。它允许攻击者伪造网络设备的MAC地址&#xff0c;以欺骗其他设备&#xff0c;并截获其通信。arpspoof工具通常用于网络渗透测试和安全评估&#xff0c;以测试网络的安全性和漏洞。 以下是arpspoof工具的一些…

【考研高数】学习笔记分享

派大星说数学&#xff08;导学部分&#xff09; 关于做题 测试 答疑阶段 直播 群内 高中基础知识导学 一、数与式 述了课程学习和因式分解、分式拆解等知识点。学生应了解课程内容&#xff0c;带着疑问听课&#xff0c;不要抄笔记&#xff0c;导学课和基础课都有测验&…

【Linux】LInux下的进程状态

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

海内外电商平台架构探究:技术与商业的融合

随着全球化进程的加速和互联网的普及&#xff0c;电子商务在海内外市场都蓬勃发展。海外电商平台在连接全球买家和卖家、拓展国际市场方面发挥着重要作用&#xff0c;而国内电商平台则在满足国内消费需求、促进国内经济增长方面扮演着关键角色。本文将探讨海内外电商平台的架构…

常见大厂面试题(SQL)01

知乎问答最大连续回答问题天数大于等于3天的用户及其对应等级 1.描述 现有某乎问答创作者信息表author_tb如下(其中author_id表示创作者编号、author_level表示创作者级别&#xff0c;共1-6六个级别、sex表示创作者性别)&#xff1a; author_id author_level sex 101 …

基于STM32的DAC简易信号发生器设计(HAL库)

前言&#xff1a;本文为手把手教学制造 DAC 简易信号发生器的教程&#xff0c;本教程的 MCU 使用 STM32F103ZET6 。以 HAL 库的 DAC 函数作为代码基础进行编程&#xff0c;使得信号发生器可以产生各种类型的信号波&#xff0c;包括&#xff1a;方波、三角波、正弦波和噪声波&am…

Oracle解析exp、imp及常见的问题

前言 在工作中经常需要不同数据库的导入和导出。exp和imp可以实现数据的迁移。 exo会转储产生对应的二进制文件,里面包括数据的定义信息、数据内容等,即为dump文件。 下面是使用exp和imp的一些场景 exp和imp主要有4中模式: 1)数据库模式 数据库模式也就是我们说的全备…

Pytorch 计算深度模型的大小

计算模型大小的方法 卷积 时间复杂度 与 空间复杂度 的计算方式&#xff1a; C 通道的个数&#xff0c;K卷积核大小&#xff0c;M特征图大小&#xff0c;C_l-1是输入通道的个数&#xff0c;C_l是输出通道的个数 1 模型大小 MB 计算模型的大小的原理就是计算保存模型所需要…

sprinboot+人大金仓配置

1. .yml 配置 spring:datasource:type: com.alibaba.druid.pool.DruidDataSource#driverClassName: dm.jdbc.driver.DmDriver## todo 人大金仓driverClassName: com.kingbase8.Driverdruid:## todo 人大金仓master:url: jdbc:kingbase8://111.111.111.111:54321/dbname?cu…

区块链钱包开发——专业区块链开发

随着区块链技术的发展&#xff0c;钱包开发成为了一项至关重要的任务。本文将探讨区块链钱包开发的重要性&#xff0c;分析当前面临的挑战&#xff0c;并展望未来的发展趋势。 一、区块链钱包概述 区块链钱包是一种用于存储和管理数字货币的软件工具。它为用户提供了一个安全的…

巧用断点设置查找bug【debug】

默认设置的断点&#xff0c;当代码运行到断点处MCU就会被挂起&#xff0c;从而停在断点处。 但在某些情况下&#xff0c;如调试FCCU时&#xff0c;如果设置断点&#xff0c;MCU停下后将会导致 FCCU 配置WDG超时。或在调试类似电机控制类的应用时&#xff0c;不适当的断点会导 致…

中科院1区TOP ! 影响因子8.5,稳定检索33年口碑老刊,另附同领域SCI,录用快,手慢无!

【SciencePub学术】今天小编给大家带来了一本计算机类的高分优刊解读&#xff0c;隶属于Elsevier出版社&#xff0c;JCR1区&#xff0c;中科院1区TOP&#xff0c;影响因子高达8.5&#xff0c;领域相符的学者可考虑&#xff01; Expert Systems With Applications 1 期刊概况 …

代码随想录算法训练营第四十八天| LeetCode198.打家劫舍、213.打家劫舍II、337.打家劫舍III

一、LeetCode198.打家劫舍&#xff08;线性&#xff09; 题目链接/代码讲解/视频讲解&#xff1a;https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html 状态&#xff1a;已解决 1.思路 这个题的关键就在于想清楚如何抉择某个房间偷不偷的问题。根据题…

Axure RP 9 for Mac/win:打造极致交互体验的原型设计神器

在数字化浪潮席卷全球的今天&#xff0c;原型设计作为产品开发的关键环节&#xff0c;其重要性不言而喻。Axure RP 9&#xff0c;作为一款专为设计师和开发者打造的原型设计软件&#xff0c;以其出色的交互设计能力和高效的协作体验&#xff0c;赢得了广大用户的青睐。 Axure …