06 分频器设计
分频器简介
实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,无法得到频率很低的时钟信号,比如输入 100Mhz 时钟,很多PLL 都无法得到 1Mhz 以下的时钟信号。另外一种方法是直接使用 Verilog 代码来实现分频。
注意:
使用 Verilog 代码分频得到的时钟信号尽量不要当做其他模块的输入时钟信号,因为通过 Verilog 代码分频得到的时钟信号默认不会连接到 FPGA 的时钟网络上,这样会导致时钟出现偏移和抖动,在高频电路中会影响电路稳定性,这种分频方式一般用于产生外部低速总线的参考时钟,如SPI、I2C的参考时钟。
偶数分频器和奇数分频器
根据分频器的分频比例是偶数还是奇数,可以将其分为偶数分频器和奇数分频器。
- 偶数分频:就是分频前的频率和分频后的频率比值是偶数,比如一个 50Mhz 的晶振时钟,进行二分频后,就是 50Mhz/2=25Mhz
- 奇数分频:就是分配前的频率和分频后的频率比值是奇数。比如一个 50Mhz 的晶振时钟,进行三分频后,就是 50Mhz/3=16.667Mhz
偶数分频实现
假设 N(N为偶数)分频,只需计数到 N/2-1,然后时钟翻转、计数器清零,如此循环就可以得到 N 分频。举个例子,比如晶振时钟是 100Mhz 时钟,想得到一个 25Mhz 的时钟,那么这个是一个 100/25=4 的四分频设计,按照我们刚说的计数到 4/2-1=1,然后时钟翻转、计数器清零,就可以得到一个 25Mhz 的时钟。

偶数分频 Verilog 代码
`timescale 1ns / 1psmodule divider4(input sys_clk,input sys_rst_n,output reg out_clk
);//分频计数器
reg [2:0] count;//分频计数器,按分频比/2-1进行计数
always @(posedge sys_clk) beginif(!sys_rst_n)count <= 2'd0;else if(count < 2'd1)count <= count + 2'd1;elsecount <= 2'd0;
end//翻转输出时钟
always @(posedge sys_clk) beginif(!sys_rst_n)out_clk<= 1'b0;else if(count == 2'd1)out_clk <= ~out_clk;
endendmodule
奇数分频器实现
同样假设 N(N为奇数)分频,计数器需要计数到 N-1,当计数器为0时输出时钟1在输入时钟的上升沿拉低,当计数器计数到 N/2 取整时输出时钟1在输入时钟的上升沿进行拉高,同时当计数器为0时输出时钟2在输入时钟的下降沿拉低,当计数器计数到 N/2 取整时输出时钟2在输入时钟的下降沿进行拉高,将输出时钟1和输出时钟2相与即可得到真正的输出时钟。

奇数分频 Verilog 代码
`timescale 1ns / 1psmodule divider5(input sys_clk,input sys_rst_n,output out_clk
);//分频计数器
reg [2:0] count;
//上升沿跳变的中间时钟
reg out_clk1;
//下降沿跳变的中间时钟
reg out_clk2;//分频计数器,按分频比-1进行计数
always @(posedge sys_clk) beginif(!sys_rst_n)count <= 3'd0;else if(count < 3'd4)count <= count + 3'd1;elsecount <= 3'd0;
end//输出时钟1
always @(posedge sys_clk) beginif(!sys_rst_n)out_clk1 <= 1'b0;else if(count == 3'd0)out_clk1 <= 1'b0;else if(count == 3'd2)out_clk1 <= 1'b1;
end//输出时钟2
always @(negedge sys_clk) beginif(!sys_rst_n)out_clk2 <= 1'b0;else if(count == 3'd0)out_clk2 <= 1'b0;else if(count == 3'd2)out_clk2 <= 1'b1;
end//输出分频后的时钟
assign out_clk = out_clk1 & out_clk2;endmodule
任意分频器实现
在实现任意分频器时可以利用条件生成语句,当模块例化时传入的参数为偶数则生成偶数分频的代码,否则生成奇数分频的代码,有关生成语句相关的内容参考03 Verilog HDL 语法。
任意分频 Verilog 代码
`timescale 1ns / 1psmodule divider #(//参数列表parameter COUNT_WIDTH = 3, //内部分频计数器宽度parameter DIV = 5 //分频系数
)
(input sys_clk,input sys_rst_n,output reg out_clk
);//分频计数器
reg [COUNT_WIDTH-1:0] count;generateif((DIV % 2) == 0) begin//偶数分频//按分频比/2-1进行计数always @(posedge sys_clk) beginif(!sys_rst_n)count <= 0;else if(count < (DIV / 2 -1))count <= count + 1;elsecount <= 0;end//翻转输出时钟always @(posedge sys_clk) beginif(!sys_rst_n)out_clk <= 1'b0;else if(count == (DIV / 2 -1))out_clk <= ~out_clk;endendelse begin//奇数分频//上升沿跳变的中间时钟reg out_clk1;//下降沿跳变的中间时钟reg out_clk2;//按分频比-1进行计数always @(posedge sys_clk) beginif(!sys_rst_n)count <= 0;else if(count < (DIV -1))count <= count + 1;elsecount <= 0;end//输出时钟1always @(posedge sys_clk) beginif(!sys_rst_n)out_clk1 <= 1'b0;else if(count == 0)out_clk1 <= 1'b0;else if(count == (DIV / 2))out_clk1 <= 1'b1;end//输出时钟2always @(negedge sys_clk) beginif(!sys_rst_n)out_clk2 <= 1'b0;else if(count == 0)out_clk2 <= 1'b0;else if(count == (DIV / 2))out_clk2 <= 1'b1;end//输出分频后的时钟always @(*) beginout_clk = out_clk1 & out_clk2;endend
endgenerateendmodule
相关文章:
06 分频器设计
分频器简介 实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,无法得到频率很低的时钟信号,比如输入 …...
力扣hot100题解(python版7-9题)
7、接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,…...
ECMAScript 6+ 新特性 ( 四 ) 迭代器 与 生成器
2.14.迭代器 2.14.1.for…of for...of 是 JavaScript ES6 引入的一种新的循环结构,,用于遍历可迭代对象(Iterable objects)的每个元素。 它可以自动调用目标对象的迭代器接口,并按顺序逐个访问集合中的每个值。 它…...
【MySQL】事务的一致性究竟怎么理解?
众所周知,事务有四大特性:原子性、一致性、隔离性、持久性,除了一致性,其他三类特性都很好理解。而关于一致性的解释有点让人头疼,我查了很多文章,大多类似:事务的执行必须使数据库处于一致状态…...
证件照(兼容H5,APP,小程序)
证件照由uniappuyui开发完成,并同时兼容H5、App、微信小程序、支付宝小程序,其他端暂未测试。 先看部分效果图吧具体可以下方复制链接体验demo 首页代码 <template><view class""><view class"uy-m-x-30 uy-m-b-20"…...
pytorch-textregression,中文文本回归实践,支持多值输出
pytorch-textregression,中文文本回归实践,支持多值输出 pytorch-textregression是一个以pytorch和transformers为基础,专注于中文文本回归的轻量级自然语言处理工具,支持多值回归等。 目录 数据使用方式paper参考 项目地址 py…...
go语言学而思【持续更新】
问题:在Go语言中nil是什么意思? 答:在Go语言中,nil是一个预声明的标识符,用于表示某些类型的零值。它可以被用作以下类型的零值: 指针(Pointer)切片(Slice)…...
LVS-NAT之VMNET环境搭建
目录 搭建拓扑图 搭建规划 VMNET0 搭建 VMNET2 搭建 LVS端增加网卡 搭建拓扑图: 搭建规划: CLIENT(servera): VMNET0 LVS(serverb): VMNET0 VMNET2 WEB1(serverd): VMNET2 WEB2(servere): VMNET2 VMNE…...
[TCP] TCP/IP 基础知识词典(2)
我想统计一下,TCP/IP 尤其是TCP协议,能搜到的常见的问题,整理起来,关键词添加在目录中,便于以后查阅。 目前预计整理共3篇: [TCP] TCP/IP 基础知识问答 :基础知识 [TCP] TCP/IP 基础知识问答&…...
【牛牛送书 | 第四期】《高效使用Redis:一书学透数据存储与高可用集群》带你快速学习使用Redis
前言: 当今互联网技术日新月异,随着数据量的爆炸式增长,如何高效地存储和管理数据成为了每个公司都必须面对的挑战。与此同时,用户对于应用程序的响应速度和稳定性要求也越来越高。在这个背景下,Redis 作为一个…...
Threejs 实现3D影像地图,Json地图,地图下钻
1.使用threejs实现3D影像地图效果,整体效果看起来还可以,底层抽象了基类,实现了通用,对任意省份,城市都可以只替换数据,即可轻松实现效果。 效果如下: 链接https://www.bilibili.com/video/BV1…...
根据Excel创建管道系统及材质
之前看过程鑫老师的文章,介绍过根据Excel数据创建管道系统,但是有小伙伴问过我,照着他这个做,没成功,于是呢,我就想试下,结果发现也没成功。 然后我逐个节点过了一遍,发现可能是因为…...
第八篇【传奇开心果系列】python的文本和语音相互转换库技术点案例示例:Google Text-to-Speech虚拟现实(VR)沉浸式体验经典案例
传奇开心果博文系列 系列博文目录python的文本和语音相互转换库技术点案例示例系列 博文目录前言一、雏形示例代码二、扩展思路介绍三、虚拟导游示例代码四、交互式学习示例代码五、虚拟角色对话示例代码六、辅助用户界面示例代码七、实时语音交互示例代码八、多语言支持示例代…...
ubuntu使用LLVM官方发布的tar.xz来安装Clang编译器
ubuntu系统上的软件相比CentOS更新还是比较快的,但是还是难免有一些软件更新得不那么快,比如LLVM Clang编译器,目前ubuntu 22.04版本最高还只能安装LLVM 15,而LLVM 18 rc版本都出来了。参见https://github.com/llvm/llvm-project/…...
Windows 远程控制 Mac 电脑怎么操作
要从 Windows 远程控制 Mac 电脑,您可以使用内置 macOS 功能或第三方软件解决方案。以下是一些方法: 一、使用内置 macOS 功能(屏幕共享) 1、在 macOS 上启用屏幕共享 转至系统偏好设置 > 共享;选中“屏幕共享”…...
c# HttpCookie操作,建立cookie工具类
HttpCookie 是一个在.NET Framework中用于管理和操作HTTP Cookie的类。它提供了一种方便的方式来创建、设置、读取和删除Cookie。 Cookie是一种在客户端和服务器之间传递数据的机制,用于跟踪用户的会话状态和存储用户相关的信息。它通常由服务器发送给客户端&#…...
【这个词(Sequence-to-Sequence)在深度学习中怎么解释,有什么作用?】
🚀 作者 :“码上有前” 🚀 文章简介 :深度学习笔记 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Sequence-to-Sequence(Seq2Seq) Sequence-to-Sequence(Seq2Seq…...
挑战30天学完Python:Day16 日期时间
📘 Day 16 🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点…...
Web3之光:揭秘数字创新的未来
随着数字化时代的深入发展,Web3正以其独特的技术和理念,为我们打开数字创新的崭新视角。作为数字化时代的新兴力量,Web3将深刻影响着我们的生活、工作和社会。本文将揭秘Web3的奥秘,探讨其在数字创新领域的前景和潜力。 1. 重新定…...
Stable Diffusio——采样方法使用与原理详解
简介 当使用稳定扩散(Stable Diffusion)技术生成图像时,首先会生成一张带有噪声的图像。然后,通过一系列步骤逐渐去除图像中的噪声,这个过程类似于从一块毛坯的白色大理石开始,经过多日的精细雕刻…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
