设为首页 加入收藏

TOP

数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)(一)
2023-07-23 13:25:05 】 浏览:152
Tags:数分 verilog 代码 Testbench

请在此添加图片描述



数字IC经典电路设计

经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。

快速导航链接如下:

个人主页链接

1.数字分频器设计

2.序列检测器设计

3.序列发生器设计

4.序列模三检测器设计

5.奇偶校验器设计

6.自然二进制数与格雷码转换



一、前言

作为IC设计中经典电路之一,数字分频器在IC(集成电路)设计中有广泛的应用。以下是数字分频器在IC设计中的一些应用:

时钟发生器:时钟发生器的原理是时钟分频,数字分频器可以用来将时钟信号分频为所需的频率。例如,如果需要一个1Hz的时钟信号,可以使用数字分频器将10Hz的时钟信号分频为1Hz,满足模块时序要求外还可以达到降低功耗的作用。时钟发生器是数字系统中非常重要的组件,你就说重不重要!

数字锁相环(DLL):数字分频器可以用于数字锁相环的设计中,以实现时钟的相位同步。在 IC 设计中,时钟同步是非常重要的一部分,因为时钟信号的稳定性和精度直接影响到整个系统的性能和可靠性。数字锁相环是数字系统中的一种重要的时钟同步技术之一。你就说重不重要!

数字频率合成器(DDS):数字分频器可以用于数字频率合成器的设计中,以产生所需的频率。在频率合成器中,数字分频器可以用于将高频信号分频为多个低频信号,然后通过DSP进行数字信号处理和合成,最终生成一个高频信号。虽然分频只能将高频分解成低频信号,但是与DSP结合可以合成高频信号。可分解高频信号亦可合成高频信号,你就说重不重要!

总之,数字分频器在IC设计中有广泛的应用。它是数字系统中重要的组件之一,可以实现各种复杂的数字信号处理和时钟同步技术。它是现代电子技术中不可或缺的一部分。所以掌握数字分频器的设计是十分重要的!

二、偶数分频

2.1 触发器级联法

采用触发器反向输出端连接到输入端的方式,寄存器级联法能实现2^N的偶数分频,具体是采用寄存器结构的电路,每当时钟上升沿到来的时候输出结果进行翻转,以此来实现偶数分频。

根据以上原理,可实现简单的 2 分频电路,以此为基础进行串联,可构成 4 分频和8 分频电路。电路结构如下图所示,用 Verilog 描述时只需使用简单的取反逻辑即可。

请在此添加图片描述

在此基础上可画出2分频、4分频、8分频电路的波形图(图由TimeGen绘制,该软件功能实用,推荐使用),如下图所示。

请在此添加图片描述

2分频设计:只需要使用基准时钟在第1个时钟周期输出高电平(或低电平),在第2个时钟周期输出相反电平。

同理,4分频设计:使用基准时钟在第1、2个时钟周期输出高电平(或低电平),在第3、4个时钟周期输出相反电平。

同理,8分频设计:使用基准时钟在第1、2、3、4个时钟周期输出高电平(或低电平),在第5、6、7、8个时钟周期输出相反电平。

2.2 计数器法

如果偶数分频系数过大或者寄存器级联法无法实现对应的分频,可以采用计数器法进行分频,计数器法可以实现任意偶数分频。在计数周期达到分频系数中间数值 (N/2-1) 时进行时钟翻转,可保证分频后时钟的占空比为 50%。
Tips:中间数值(N/2-1) 需要减1是因为从0开始计数

以六分频为例,电路需要实现的是:计数器从0开始计数至2,计数器到0时信号翻转,具体的时序图如下(图由TimeGen绘制,该软件功能实用,推荐使用)。

请在此添加图片描述

因为是偶数分频,只要对分频系数中间数值进行循环计数,在对应的地方让信号进行反转即可得到任意分频的分频器。

2.3 verilog代码

//偶数分频电路设计(2分频、4分频、8分频、6分频)
//触发器法实现2分频、4分频、8分频
//计数器法实现6分频
module clk_div_even(
    input 		rst_n,			//复位信号
    input 		clk,			//源时钟信号
    output 		clk_div2,		//输出2分频
    output 		clk_div4,		//输出4分频
    output 		clk_div6,		//输出6分频
    output 		clk_div8		//输出8分频
    );

//定义4个中间寄存器和1个计数器    
reg         clk_div2_r;
reg 		clk_div4_r;
reg 		clk_div6_r;
reg 		clk_div8_r;
reg [3:0] cnt;

//2分频时钟输出模块
//源时钟上升沿触发,低电平异步复位
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin		//低电平复位
        clk_div2_r <= 1'b0;
    end
    else begin
        clk_div2_r <= ~clk_div2_r;		//源时钟上升沿信号翻转得到2分频时钟
    end
end

assign clk_div2 = clk_div2_r;		//延时输出,消除亚稳态

//4分频时钟输出模块
//2分频时钟上升沿触发 低电平异步复位
always @(posedge clk_div2 or negedge rst_n) begin
    if (!rst_n) begin
        clk_div4_r <= 1'b0;
    end
    else begin
        clk_div4_r <= ~clk_div4_r;		//2分频时钟上升沿信号翻转得到4分频时钟
    end
end

assign clk_div4 = clk_div4_r;		//延时输出,消除亚稳态

//8分频时钟输出模块
//4分频时钟上升沿触发 低电平异步复位
always @(posedge clk_div4 or negedge rst_n) begin
    if (!rst_n) begin
        clk_div8_r <= 'b0;
    end
    else begin
        clk_div8_r <= ~clk_div8_r;		//4分频时钟上升沿信号翻转得到8分频时钟
    end
end
    
assign clk_div8 = clk_div8_r;		//延时输出,消除亚稳态

//计数器模块
//源时钟上升沿触发,低电平异步复位
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin		//低电平复位
        cnt    <= 4'b0 ;
    en
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇「FPGA项目」—— 基于AMBA总线的.. 下一篇基于ZYNQ的OV5640摄像头的sobel算..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目