偶数分频器电路设计

news2024/11/26 5:47:48

目录

偶数分频器电路设计

1、偶数分频器电路简介

2、实验任务

3、程序设计

方法1:

3.1、8分频电路代码如下:

3.2、仿真验证

3.2.1、编写 TB 文件

3.2.2、仿真验证

方法2:

4、计数器进行分频

4.1、仿真测试


偶数分频器电路设计

       分频器在逻辑设计中一直都担任着很重要的角色,分频器一般包括计数分频和偶数分频。实现偶数分频可通过一个简单计数器实现,而如果需要三分频,五分频,七分频等奇数分频,一个计数器是不够的。我们先来看下偶数分频。

1、偶数分频器电路简介

       实现分频一般有两个方法,一个方法是直接使用 PLL 进行分频,比如 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频,但是这种分频倍数有时候受限于 PLL 本身的特性,比如输入 100Mhz 时钟,很多 PLL 都实现不了分频到 1Mhz 的时钟,这个就是 PLL 本身特性限制的。还有一种实现方法就是直接使用逻辑实现,即使用代码实现分频设计。我们本节介绍的是使用代码进行设计分频器。本节我们先看下偶数分频设计。

        偶数分频,顾名思义,是说分频后的频率和分频前的频率比例是偶数,比如 100Mhz 时钟,进行二分频后,就是 50Mhz

       实现偶数分频可通过一个简单计数器实现,而如果需要三分频,五分频,七分频等奇数分频,一个计数器是不够的。

       偶数分频实现比较简单,假设为 N(偶数)分频,只需计数到 N/2-1,然后时钟翻转、计数器清零,如此循环就可以得到 N(偶)分频。举个例子,比如晶振时钟是 100Mhz 时钟,想得到一个 25Mhz 的时钟, 那么这个是一个 100/25=4 的四分频设计,那么按照我们刚说的计数到 4/2-1=1,然后时钟翻转、计数器清零,就可以得到一个 24Mhz 的时钟。

2、实验任务

使用 Verilog 语言设计一个任意偶数分频电路,默认进行 8 分频。

3、程序设计

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

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

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

        由此可以推导出偶数分频设计的一般方法:假设为N分频,只需设计一个计数器从0计数到 N/2-1(一共N/2个基准时钟),然后将输出分频时钟翻转、计数器清零,如此循环就可以得到 N分频。

       根据简介介绍的分频电路设计思路,假设为 N(偶数)分频,只需计数到 N/2-1,然后时钟翻转、计数清零,如此循环就可以得到 N(偶)分频,可以通过改变参量 N 的值和计数变量 cnt 的位宽实现任意偶分频,由于默认为 8 分频,因此 N 初始值为 8。由此可以写出如下代码。

方法1:

3.1、8分频电路代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/13 14:45:37
// Design Name: 
// Module Name: divider_8
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//
//


//8分频电路设计
module divider_8(
//     input          sys_clk,    //50MHz系统时钟(一个周期是20ns:1/50MHz=0.02us=20ns)
    //differential system clocks //200MHz系统时钟(一个周期是5ns:1/200MHz=0.005us=5ns)
    input               sys_clk_p,       //system clock positive
    input               sys_clk_n,       //system clock negative
     input          sys_rst_n,  //复位信号,低电平有效
     
     output reg     clk_8       //输出8分频信号(50MHz/8=6.25MHz,周期160ns)(200MHz/8=25MHz,周期40ns)
    );
    
//reg define  //define the time counter
reg [1:0]   cnt;

wire        sys_clk;

//差分输入时钟缓冲器(黑金FPGA)
IBUFDS sys_clk_ibufgds //generate single end clock
(
	.O                          (sys_clk                  ),
	.I                          (sys_clk_p                ),
	.IB                         (sys_clk_n                )
);

//计数模块
//从0计数到3,共计4个时钟周期
always @(posedge sys_clk or negedge sys_rst_n) begin
     if(!sys_rst_n)
          cnt <= 2'd0;     //复位清零
      else if(cnt==2'd3)   //从0开始计数,所以要-1
           cnt <= 2'd0;    //计数满,则清零。
      else
           cnt <= cnt + 2'd1; //没计满,就一直计数
end

//8分频时钟输出模块
//满足计数条件则对8分频时钟进行反转
//8分频时钟每隔4个周期反转一次,所以8分频的周期,即为8个时钟周期
always @(posedge sys_clk or negedge sys_rst_n) begin
     if(!sys_rst_n)
          clk_8 <= 1'b0;     //复位清零
      else if(cnt==2'd3)     //计满4个时钟周期
          clk_8 <=  ~clk_8;  //计满,则输出反转
      else 
          clk_8 <= clk_8;     //没计满,就保持原状态
end
    
endmodule

接下来我们使用 Vivado 的 RTL  ANALYSIS,来看一下我们编写代码的 RTL 视图。

        从上图可以看出,cnt 是一个 2bit 的计数器,在计数器计到 3 的时候,out_clk 进行取反操作,即得到一个八分频时钟。

3.2、仿真验证

3.2.1、编写 TB 文件

      只需要对时钟以及复位信号进行激励,代码编写如下:

`timescale 1ns / 1ps		//时间刻度:单位1ns,精度1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/13 15:04:35
// Design Name: 
// Module Name: tb_divider_8
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb_divider_8();	//仿真测试模块

//parameter T = 20; //50MHz时钟周期为20ns
parameter T = 5; //200MHz时钟周期为5ns

//input define
//reg       sys_clk;   //时钟信号
reg       sys_clk_p;   //时钟信号
wire      sys_clk_n;
reg       sys_rst_n;

//output define
wire       clk_8;

//设置初始化条件
initial begin
//    sys_clk = 1'b0;     //初始时钟为0
    sys_clk_p = 1'b0;     //初始时钟为0
    sys_rst_n <= 1'b0;  //初始复位为0
    #10                 //10个时间单位后
    sys_rst_n <= 1'b1;  //拉高复位
end

//always代表重复进行,#10代表每10个时间单位
//每10个时间单位反转时钟,即时钟周期为20个时间单位(20ns)
//always #10 sys_clk = ~sys_clk;  //每半个周期后,电平取反一次。
always #(T/2) sys_clk_p <= ~sys_clk_p;  //每半个周期后,电平取反一次。
assign sys_clk_n=~sys_clk_p;

//例化被测试模块
divider_8 u_divider_8(
//     .sys_clk            (sys_clk),
     .sys_clk_p          (sys_clk_p),
     .sys_clk_n          (sys_clk_n),
     .sys_rst_n          (sys_rst_n),
     
     .clk_8               (clk_8)
);

endmodule

3.2.2、仿真验证

        测试程序在 Xilinx Vivado 软件 或者其他仿真工具运行后的波形如下显示,可以看出,N 初始为 8,当复位撤销(复位信号低有效)之后,cnt 即开始计数,在计数器计到 3 的时候,out_clk 进行取反操作,即得到一个八分频时钟,大家可以改变 N 参数看下,看下 N 参数不一样,最终分频的时钟是多少。

方法2:

4、计数器进行分频

       此处再给大家介绍一个分频设计方法,就是直接使用计数器即可进行分频。 直接使用计数器分配的代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/20 11:12:13
// Design Name: 
// Module Name: divider_8CNT
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

//8分频电路
//直接使用计数器即可进行分频。
module divider_8CNT(
    input             clk ,  // system clock 50Mhz on board
    input             rst_n, // system rst, low active 
    output reg [2:0]  y      // output signal
   );

//===========================================================================
// ------------------------- MAIN CODE --------------------------------------
//===========================================================================
always @ (posedge clk or negedge rst_n) begin
    if (rst_n == 1'b0)
        y <= 3'b0 ;
    else
        y <= y + 1'b1 ;
end

endmodule

4.1、仿真测试

       testbech 测试电路,这个 testbech 激励只需要提供时钟和复位就好了,通过仿真来看下计数器的波形。

测试代码如下

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/06/20 11:22:19
// Design Name: 
// Module Name: tb_divider_8CNT
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

//testbech 测试电路,这个 testbech 激励只需要提供时钟和复位就好了,
//通过仿真来看下计数器的波形。
//测试代码如下
module tb_divider_8CNT();

reg    sys_clk;
reg    sys_rst_n;

wire [2:0]  y;

initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0; 
    #200 //等待200ns
    sys_rst_n = 1'b1;  
end

always #10 sys_clk = ~sys_clk;

divider_8CNT  u_divider_8CNT(
    .clk   (sys_clk    ),
    .rst_n (sys_rst_n  ),
    .y     (y          )
);

endmodule

       可以看出,当复位撤销(复位信号低有效)之后,计数器 y 就从 0 开始一直累加,每次加 1,直到加到 7 之后,进位溢出为 0,然后再次从 0 开始一直累加,如此反复循环。

        从波形中,我们能看到一个分频的效果,计数器最低 bit y[0]是每 2 个周期在循环跳变,计数器次低 bit y[1] 是每 4 个周期在循环跳变,计数器最高 bit y[2] 是每 8 个周期在循环跳变,这个也是常有的分频方法,比如直接把计数器的各个 bit 赋值给一个时钟信号,那么计数器的 y[0] 实现的是 2 分频,计数器的 y[1] 实现的是 4 分频,计数器的 y[2] 实现的是 8 分频。这个也是最简单和最常用的偶数分频方法。

 

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

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

相关文章

软件设计原则与设计模式

设计中各各原则同时兼有或冲突&#xff0c;不存在包含所有原则的设计 一&#xff1a;单一职责原则又称单一功能原则 核心&#xff1a;解耦和增强内聚性&#xff08;高内聚&#xff0c;低耦合&#xff09; 描述&#xff1a;类被修改的几率很大&#xff0c;因此应该专注于单一的…

YOLOv5 vs YOLOv8

1 概述 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本。 https://github.com/ultralytics/yolov5 https://github.com/ultralytics/ultralytics 2 网络结构 YOLOv5 N/S/M/L/X 骨干网络的通道数设置使用同一套缩放系数&#xff1b; YOLO…

Axure教程——滑动解锁

本文将教大家如何用AXURE中的动态面板制作滑动解锁 一 、效果 预览地址&#xff1a;https://6dnu91.axshare.com 二、功能 滑动滑块从左到右&#xff0c;提示验证成功 三、制作 拖入一个动态面板组件&#xff0c;如图&#xff1a; 点击动态面板进入&#xff0c;拖入一个矩形…

【生态经济学】R语言机器学习方法在生态经济学领域中的实践技术

查看原文>>>基于R语言机器学习方法在生态经济学领域中的实践技术 近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、数据科学和计算机科学的机器学习是人工智能的主流方向之一&#xff0c…

RK3288 Android logo

一、Android 系统开机logo的修改 安卓系统的开机分为u-boot logo 和 kernel logo开机logo图片必须是 bmp 格式&#xff0c;并且分辨率必须为偶数将制作好的BMP格式logo图片放置Android源码kernel目录下&#xff0c;重新编译即可 二、Android logo常见问题分析 1、RK3288 Andr…

基于SSM+jsp的电子商城系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

IT云运维技术分享

1 运维体系 1.1 市场对运维的需求 时代发展到今天&#xff0c;社会的生活方式与生产方式的全面的数字化&#xff0c;无论是传统企业还是互联网企业&#xff0c;都在全面上云&#xff0c;这也意味着企业的关键业务乃至“身家性命”都已经全部放在 IT 系统之上&#xff0c;因此…

UWB自组网定位方案_基于UWB技术的消防应急救援定位解决方案

目前国内应急救援市场都是基于被动定位应用&#xff0c;在特殊情况下救援也大多处于单兵作战的情况&#xff0c;并不能及时知道自己和自己组员的位置信息和状态&#xff0c;且没有场景感知和室内外一体位置信息结合&#xff0c;使相关救援人员处于更加危险境地。本篇就带大家详…

【SWAT水文模型】Tips1:土地利用/土壤类型以全国数据分类

Tips1&#xff1a;土地利用/土壤类型以全国数据分类 1 土壤类型处理Step1 从全国土壤数据库中裁剪得到研究区域内土壤类型Step2 确定研究区域内重分类标准及类型 参考 1 土壤类型处理 直接对全国土壤类型数据进行分类&#xff0c;在SWAT模型中输入全国土壤类型&#xff0c;亦可…

【Linux】文件权限解析

一、Linux用户分类 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xff0c;普通用户的…

近期煤矿事故及电力综合自动化系统的介绍

安科瑞虞佳豪 5月29日&#xff0c;山西灵石红杏鑫鼎泰煤业有限公司发生一起死亡1人的安全事故&#xff1b;5月24日&#xff0c;山西华阳集团新能股份有限公司二矿发生一起死亡1人的安全事故。 ​山西省应急管理厅、山西省地方煤矿安全监督管理局责令山西灵石红杏鑫鼎泰煤业有…

软考高级系统架构设计师(三) 基础知识之操作系统3文件管理

目录 文件管理 索引文件结构 位示图 ​树形目录结构 文件管理 文件管理&#xff0c;主要涉及文件的逻辑组织和物理组织&#xff0c;目录的结构和管理 索引文件结构 索引文件结构&#xff1a;通常是13个节点的结构&#xff0c;分为直接索引&#xff08;0-9&#xff09;&#…

星辰天合与中飞院合作 成立“民航高性能数据分析与存储联合实验室”

近日&#xff0c;星辰天合与中国民航飞行学院&#xff08;以下简称“中飞院”&#xff09;宣布合作成立“民航高性能数据分析与存储联合实验室”&#xff08;以下简称“存储实验室”&#xff09;&#xff0c;并由星辰天合 CTO 王豪迈与现任中飞院总飞行师的“中国民航英雄机长”…

Winfrom多语言切换

“ 实现多语言的切换原理和ResXResourceManager使用。” &#xff0c;时长00:08 实现多语言的切换原理就很简单了&#xff0c;例如默认是中文&#xff0c;from下就会有一个Form1.resx资源文件&#xff0c;所有的资源文件都是.resx。换个思路如果是WPF程序&#xff0c;那么资源文…

String类—javaSE

文章目录 1.常用方法1.1字符串构造1.2String对象的比较1.3字符串查找1.4转化1.5字符串替换1.6字符串拆分1.7字符串的截取1.8去掉字符串中的左右空格&#xff0c;保留中间空格 2.字符串常量池2.1 直接使用字符串常量进行赋值2.2通过new创建String类对象2.3 intern方法2.4String类…

韵达快递,你在玩我吗?请你不要挑战用户的底线!

这个周末真的是被韵达快递给气死了。 面对这样的服务&#xff0c;真的是不吐不快。 搞笑之处在于&#xff0c;表面功夫很到位&#xff0c;看似服务很全面&#xff0c;然后就是落实不到位。 为什么会被韵达快递气到呢&#xff1f;在网上买了 6 箱认养一头牛的儿童牛奶&#xff0…

持 PMP®证书增持 CSPM-2证书,大有用处,靠谱!

2023年起&#xff0c;持有PMP证书的朋友可以直接增持一个同等级证书CSPM-2&#xff0c;不用重新考试&#xff0c;不用重新学习&#xff0c;原PMP证书不影响正常使用&#xff0c;相当于多了一个国标项目管理领域的证书。 第一步准备资料 1、填写能力评价表(简历和业绩不用填&am…

ASP.NET Core Web API入门之三:使用EF Core

ASP.NET Core Web API入门之三&#xff1a;使用EF Core 一、引言二、EF Core 的优缺点2.1 优点&#xff1a;2.2 缺点&#xff1a; 三、使用前安装&#xff1a;NuGet包四、实体类更新到数据库实体表4.1 创建 DBEntity 属性4.2 appsettings.json 配置数据库连接串4.3 修改 DemoCo…

Spring Boot 如何使用 Web 容器

Spring Boot 如何使用 Web 容器 在使用 Spring Boot 进行开发时&#xff0c;我们通常需要使用 Web 容器来处理 HTTP 请求和响应。本文将介绍 Spring Boot 如何使用 Web 容器&#xff0c;包括如何配置 Web 容器、如何处理 HTTP 请求和响应等内容&#xff0c;并提供相应的代码示…

堡垒机免费版在哪里下载?是否安全可靠?

2023年整体大环境都不容乐观&#xff0c;很多企业预算有限。但安全运维又至关重要&#xff0c;因此很多企业都在寻找堡垒机免费版&#xff0c;都在问堡垒机免费版在哪里下载&#xff1f;是否安全可靠&#xff1f;这里我们小编就来简单解答一下。 堡垒机免费版在哪里下载&#…