【【萌新的FPGA学习之分频器的介绍】】

news2024/11/15 21:06:31

萌新的FPGA学习之分频器的介绍

分频器的介绍
分频就是生成一个新时钟,该新时钟的频率是原有时钟频率的整数分之一倍,新周期是原有周期的整数倍。再简单来说,让你手撕一个四分频电路,就是写代码生成一个周期是原来四倍的时钟,如果手撕一个三分频电路,就是写代码生成一个周期是原来三倍的时钟。但是奇数分频会比偶数分频复杂一些。
实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都
可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,比如输入 100Mhz 时钟,很多
PLL 都实现不了 1Mhz 的时钟分频,这个就是 PLL 本身特性限制的。另外一种方法是直接使用代码来实现
分频,本节就是带领大家使用 Verilog 代码进行分频器电路的设计。
根据分频器的分频比例(分频前的频率和分频后的频率比值)是偶数还是奇数,将分频器分为偶数分
频器和奇数分频器。接下来,我们先看下偶数分频设计。
偶数分频,顾名思义就是分频前的频率和分频后的频率比值是偶数,比如一个 50Mhz 的晶振时钟,进
行二分频后,就是 50Mhz/2=25Mhz。
下面我们先来看一下偶数分频实现原理,假设为 N(偶数)分频,只需计数到 N/2-1,然后时钟翻
转、计数器清零,如此循环就可以得到 N(偶)分频。举个例子,比如晶振时钟是 100Mhz 时钟,想得到
一个 25Mhz 的时钟,那么这个是一个 100/25=4 的四分频设计,按照我们刚说的计数到 4/2-1=1,然后时钟
翻转、计数器清零,就可以得到一个 25Mhz 的时钟。根据偶数分频的原理,可以绘制出偶数分频的波形
图:

在这里插入图片描述

下面我们再来看下奇数分频,奇数分频顾名思义就是分配前的频率和分频后的频率比值是奇数。比如一个 50Mhz 的晶振时钟,进行三分频后,就是 50Mhz/3=16.667Mhz。实现偶数分频可通过一个简单计数器实现,而如果需要进行三分频、五分频以及七分频等奇数分频而言,一个寄存器肯定时不够的,接下来我们再来看一下奇数分频的原理。同样假设我们需要分频的倍数为 N(奇数)分频,就需要定义一个个数为 N 的 cnt。当 cnt=0 时out_clk1 在 sys_clk 的上升沿拉低,当 cnt 计数到 N/2-1 时 out_clk1 在 sys_clk 的上升沿进行翻转;而out_clk2 则在 cnt=0 时的 sys_clk 下降沿进行拉低,当 cnt 计数到 N/2-1 时,out_clk2 在 sys_clk 下降沿进行翻转。最后将 out_clk1 和 out_clk2 的波形相与,就得到了我们分频后输出的 out_clk。这样我们只需要通过修改 N 的值和计数器的位宽就可以实现其他奇数分频,根据这一原理同样可以绘制出奇数分频器的波形图:
在这里插入图片描述

这个是5分频 除一下 每个各占原来的2.5
我们交错一下 取上升沿 下降沿 就能完成如此实验

偶数分频 相对于 奇数分频较为简单
下面先介绍 4分频

module divider_4(
input sys_clk ,
 input sys_rst_n ,
 
 output reg out_clk
 );
 
 
 reg [1:0] cnt;

 always@(posedge sys_clk or negedge sys_rst_n) begin
 if(!sys_rst_n)
 cnt <= 2'd0;
 else if(cnt == 2'd1)
 cnt <= 2'd0;
 else
 cnt <= cnt + 2'd1;
 end
 
 always@(posedge sys_clk or negedge sys_rst_n) begin 
 if(!sys_rst_n)
 out_clk <= 1'b0;
 else if(cnt == 2'd1)
 out_clk <= ~out_clk;
 end

下面编写 tb文件

 `timescale 1ns / 1ns

 module tb_divider_4();
 
 reg sys_clk ;
 reg sys_rst_n ;
 
 wire out_clk ;
 
 initial begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #201
 sys_rst_n <= 1'b1;
 end

 always #10 sys_clk <= ~sys_clk;

 divider_4 divider_4_inst(
 .sys_clk (sys_clk ),
 .sys_rst_n (sys_rst_n ),

 .out_clk (out_clk )
);

 endmodule

我觉得计数应该技术到 (n-1)/2 -1
但是他们写的都是 N/2-1
算了照着写吧
我知道了 奇数除2会向下取整

下面介绍 七分频

module divider_7(
input sys_clk , //系统时钟
 input sys_rst_n , //系统复位
 
 output out_clk //输出时钟
 );
 
 parameter N = 7; //分频系数
 parameter EDGE = N/2-1; //取沿数

 reg [2:0] cnt ; //3 位计数器
 reg out_clk1; 
 reg out_clk2; 

 //计数器模块
 always@(posedge sys_clk or negedge sys_rst_n) begin
 if(!sys_rst_n)
 cnt <= 3'd0;
 else if(cnt == N - 1'b1)
 cnt <= 3'd0;
 else
 cnt <= cnt + 'd1;
 end

 //out_clk1 在上升沿进行翻转
 always@(posedge sys_clk or negedge sys_rst_n) begin
 if(!sys_rst_n)
 out_clk1 <= 1'b0;
 else if(cnt <= EDGE)
out_clk1 <= 1'b0;
 else
 out_clk1 <= 1'b1;
 end 

 //out_clk2 在下降沿进行翻转
 always@(negedge sys_clk or negedge sys_rst_n) begin
 if(!sys_rst_n)
 out_clk2 <= 1'b0;
 else if(cnt <= EDGE)
 out_clk2 <= 1'b0;
 else
out_clk2 <= 1'b1;
 end
 
assign out_clk = out_clk1 & out_clk2;

endmodule

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

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

相关文章

PMP的智慧(2) - 系统性思考及复杂性

PMP的智慧(2) - 系统性思考及复杂性 在2021年推出的第七版《管理专业知识体系指南》中&#xff0c;PMI在传统的过程和ITTO的基础上&#xff0c;重新增加了12大项目管理原则。 管家式管理 stewardship团队 team干系人 stakeholders价值 value系统思考 system thinking领导力 l…

Excel函数中单元格的引用方式

如下图在D列第一行输入sum(A1:C1)&#xff1b; 回车之后结果如下&#xff1b;先要输入等号&#xff0c;然后输入sum&#xff0c;以及左括号&#xff0c;这是调用了sum求和函数&#xff1b; A1表示A列第一行&#xff0c;C1表示C列第一行&#xff1b; A1:C1&#xff0c;中间是冒号…

实践DDD模拟电商系统总结

目录 一、事件风暴 二、系统用例 三、领域上下文 四、架构设计 &#xff08;一&#xff09;六边形架构 &#xff08;二&#xff09;系统分层 五、系统实现 &#xff08;一&#xff09;项目结构 &#xff08;二&#xff09;提交订单功能实现 &#xff08;三&#xff0…

【Objective-C】浅析Block及其捕获机制

目录 Block的基本使用Block的声明Block的实现Block的调用 Block作为形参使用Block作为属性使用给Block起别名Block的copy Block的捕获机制auto类型的局部变量__block浅析static类型的局部变量全局变量 其他问题 Block的基本使用 什么是Block&#xff1f; Block &#xff08;块…

【深度学习实验】循环神经网络(五):基于GRU的语言模型训练(包括自定义门控循环单元GRU)

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容&#xff08;一&#xff09;自定义门控循环单元&#xff08;GRU&#xff0c;Gated Recurrent Unit&#xff09;1. get_params2. init_gru_state3. gru &#xff08;二&#xff09;创建模型0. 超参数…

[AUTOSAR][诊断管理][$11] 复位服务

文章目录 一、简介(1) 应用场景&#xff08;2&#xff09; 请求格式&#xff08;3&#xff09; 重启类型 二、示例代码(1) 11_ecu_reset.c 一、简介 ECU复位服务就是可以此诊断指令来命令ECU执行自复位&#xff0c;复位有多种形式&#xff0c;依据子功能参数来区分&#xff08…

【Javascript】构造函数之new的作用

目录 new的作用 把对象返回了回来 无new 有new 把构造函数的this指向了要返回的对象 无new​编辑 有new new的执行流程 new的作用 创建了新空对象将构造函数的作用域赋值给新对象(this指向新对象)执行构造函数代码 &#xff08;为这个新对象添加属性&#xff09;返回新对…

网络协议--Ping程序

7.1 引言 “ping”这个名字源于声纳定位操作。Ping程序由Mike Muuss编写&#xff0c;目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机&#xff0c;并等待返回ICMP回显应答&#xff08;图6-3列出了所有的ICMP报文类型&#xff09;。 一般来说&#x…

HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器

&#x1f9ee;前后端分离计算器 &#x1f4da;git仓库链接和代码规范链接&#x1f4bc;PSP表格&#x1f387;成品展示&#x1f3c6;&#x1f3c6;科学计算器&#xff1a;1. 默认界面与页面切换2. 四则运算、取余、括号3. 清零Clear 回退Back4. 错误提示 Error5. 读取历史记录Hi…

​CUDA学习笔记(三)CUDA简介

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/&#xff0c;仅用于学习。 前言 线程的组织形式对程序的性能影响是至关重要的&#xff0c;本篇博文主要以下面一种情况来介绍线程组织形式&#xff1a; 2D grid 2D block 线程索引 矩阵在memory中是row-major线性…

Cannot load from short array because “sun.awt.FontConfiguration.head“ is null

错误描述 在使用Easyexcel时发生了报错&#xff0c;请求返回空白 但是只在Linux上出现了该报错&#xff0c;在本地windows环境没有出现 JDK都使用的是17版本 错误原因 由于在linux上缺失Easyexcel使用的字体导致 解决办法 下载一个jdk1.8 在其jre/lib目录里复制fontconfi…

聊聊昨日ChatGPT全球宕机事件,带给我们的警示

作者 | 卖萌酱&#xff0c;王二狗 昨日&#xff0c;ChatGPT崩了&#xff01; 大模型研究测试传送门 GPT-4传送门&#xff08;免墙&#xff0c;可直接测试&#xff0c;遇浏览器警告点高级/继续访问即可&#xff09;&#xff1a;https://gpt4test.com 许多人发现无论是 ChatGPT…

腾讯云创建了jenkins容器,但无法访问

1、首先&#xff0c;查看本机能不能ping通你的腾讯云服务器 如果ping的通那就下一步 2、查看腾讯云服务器的防火墙关了没&#xff0c;没关关掉、 firewall-cmd --state not running 3、那就在云服务器的控制台开放端口

自然语言处理---注意力机制

注意力概念 观察事物时&#xff0c;之所以能够快速判断一种事物(当然允许判断是错误的)&#xff0c;是因为大脑能够很快把注意力放在事物最具有辨识度的部分从而作出判断&#xff0c;而并非是从头到尾的观察一遍事物后&#xff0c;才能有判断结果。正是基于这样的理论&#xf…

【数据结构】线性表(九)队列:链式队列及其基本操作(初始化、判空、入队、出队、存取队首元素)

文章目录 一、队列1. 定义2. 基本操作 二、顺序队列三、链式队列0. 链表1. 头文件2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 入队6. 出队7. 存取队首元素8. 主函数9. 代码整合 堆栈Stack 和 队列Queue是两种非常重要的数据结构&#xff0c;两者都是特殊的线性表&…

面试二总结

bean的生命周期&#xff1a; 数据库采用行级锁索引&#xff08;使用排他锁&#xff09;&#xff1a; mysql事务隔离级别 未提交读(Read uncommitted)是最低的隔离级别。通过名字我们就可以知道&#xff0c;在这种事务隔离级别下&#xff0c;一个事务可以读到另外一个事务未提交…

微信小程序自定义组件及会议管理与个人中心界面搭建

一、自定义tabs组件 1.1 创建自定义组件 新建一个components文件夹 --> tabs文件夹 --> tabs文件 创建好之后win7 以上的系统会报个错误&#xff1a;提示代码分析错误&#xff0c;已经被其他模块引用&#xff0c;只需要在 在project.config.json文件里添加两行配置 &…

gltf和glb格式模型用什么软件处理

.gltf格式本质上是一个JSON文件。它能描述一整个3D场景&#xff0c;比如一个模型使用多少个网格&#xff0c;网格的旋转、位移等信息。 .glb 文件是gltf 资源格式的二进制格式&#xff0c;一般情况它将所有依赖的资源打包在一起形成一个 xxx.glb 的资源文件&#xff0c;但是如…

Leetcode刷题解析——串联所有单词的子串

1. 题目链接&#xff1a;30. 串联所有单词的子串 2. 题目描述&#xff1a; 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["…

【软考】11.4 处理流程设计/系统设计/人机界面设计

《处理流程设计&#xff1a;物理模型》 业务流程建模 流程表示工具 N-S图&#xff08;盒图&#xff09;&#xff1a;表示嵌套和层次关系&#xff1b;不适合于复杂程序的设计问题分析图&#xff08;PAD&#xff09;&#xff1a;结构化程序设计 业务流程重组&#xff08;BPR&am…