FPGA开发——偶数分频器的设计

news2024/9/24 7:22:07

一、概述

1、我们在日常进行FPGA的开发之中,会根据需求的不同设计不同的功能实现,这就需要不同的分频信号,而分频的思想在我们的日常开发中显得尤为重要。用通俗易懂的说法表示分频就是对计数器进行一个进一步设计从而达到不同的分频器的思想。在这篇文章中我们实现的是偶数分频器,在下一篇文中我们会对于奇数分频器进行一个讲解。

2、工作原理

偶数分频器的实现简单,用计数器在上升沿或者下降沿计数,当计数器的值等于分频系数的一半或等于分频系数时,信号翻转。 偶数分频器分频原理如下图所示:

wKgaomRHdtSAYmJAAAAFuwM7e5I760.jpg

上图的的分频系数是4,就是4分频。 电路原理是用一个上升沿计数的计数器,每次计数到2时输出信号clkout翻转一次,每次计数到4时clkout再翻转一次,一直周期重复下去。 其他的偶数分频器原理也是一样。 从波形中可以看出cnt
从00->01->10->11->00......一直循环记数,如果你够仔细,就可以看出cnt的最高位其实也是一个4分频的时钟。 

二、测试文件的编写

新建divider.v文件(这里的divider就是分频器的英文,见文思意),如下:

module divider(
  input  clk,
  input  rst_n,
  output reg clk_out
);
 //偶数分频
parameter TIME = 4;//分频系数
reg [31:0] cnt;//定义计数器


//分频计数器的实现
always@(posedge clk or negedge rst_n)begin 
  if(!rst_n)
    cnt<=0;
  else if(cnt==(TIME-1))
    cnt<=0;
  else 
    cnt<=cnt+1;
end 


//时钟频率占空比的设计
always@(posedge clk or negedge rst_n)begin
  if(!rst_n)
    clk_out<=0;
  else if(cnt<=1)
    clk_out<=0;
  else
    clk_out<=1;
end  

endmodule

在上面的代码中对于偶数分频器进行了简单的设计,在进行代码实现的过程中就是通过从0到n-1重复计数完成n分频的设计,代码中n=4。在占空比设计时根据用户要求进行设计就行。

在上述分频器的设计中分频系数采用参数的形式进行传递,这样就可以形成一个模板,在需要其他分频的时候通过对于参数的值进行修改就可以实现任意分频。(如果不考虑占空比的情况下,在这里我们就已经可以实现不同的分频器了,无论是奇数分频还是偶数分频)。

三、仿真文件的编写

新建一个divider_tb.v文件,如下:

//定义时间尺度
`timescale 1ns/1ns
module divider_tb ;

//输入信号定义
reg  clk;
reg rst_n;

wire  clk_out;
//模块例化
divider div (
    /*input */  .clk       (clk    ),
    /*input */  .rst_n     (rst_n  ),
    /*output*/  .clk_out   (clk_out      )
);
//激励信号产生
parameter CLK_CYC = 20;
//时钟
initial clk=1;
always #(CLK_CYC/2)clk=~clk;

//复位
initial begin
    rst_n= 1'b0;
    #(CLK_CYC*3);
    #5;//复位结束避开时钟上升沿
    rst_n= 1'b1;
end
endmodule

在仿真文件中就是对于模块进行一个简单的实例化,其次就是对于时钟信号和复位信号进行一个简单的设计就是最终的仿真文件。

四、仿真波形图

 

 在仿真波形图中我们可以看到分频之后输出的计数器就是我们代码中所设置的4分频,但存在着一个奇怪的问题,我们在代码中设置的是0和1为低电平,2和3为高电平,然而在波形图中是1和2为低电平,3和0是高电平。其实这里的现象是正确的实际波形输出和代码设计的有相位偏差时因为时序电路慢一拍输出的特性,也就是慢一个周期进行输出。

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

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

相关文章

探索PyMuPDF:Python中的强大PDF处理库

探索PyMuPDF&#xff1a;Python中的强大PDF处理库 背景&#xff1a;为何选择PyMuPDF 在数字化时代&#xff0c;PDF文件因其跨平台的兼容性和对格式的严格保持而成为文档交换的通用格式。然而&#xff0c;处理PDF文件往往需要专门的工具或库。这就是PyMuPDF库的用武之地。PyMuP…

【JAVA开发笔记】Reids下载、安装、配置-Windows篇(超详细,含Redis可视化管理工具!!!)

目录 1. Redis 简介 2. 下载 Redis 安装包 3. 开启 Redis 服务 4. 配置环境变量 5. Redis 服务注册为系统服务 6. Redis 服务测试和简单使用 7. 下载安装 Redis 管理工具 8. 管理工具连接 Redis 服务器 1. Redis 简介 Redis&#xff08;Remote Dictionary Server&…

【elementui】记录el-table设置左、右列固定时,加大滚动条宽度至使滚动条部分被固定列遮挡的解决方法

当前elementui版本&#xff1a;2.8.2 现象&#xff1a;此处el-table__body-wrapper默认的滚动条宽度为8px&#xff0c;我加大到10px&#xff0c;如果不设置fixed一切正常&#xff0c;设置fixed后会被遮挡一点 el-table__fixed-right::before, .el-table__fixed::before 设置…

【BUG】已解决:SyntaxError:positional argument follows keyword argument

SyntaxError:positional argument follows keyword argument 目录 SyntaxError:positional argument follows keyword argument 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c…

前端性能优化:浏览器的2种缓存方式要弄清

在前端性能优化中&#xff0c;最重要的就是缓存&#xff0c;使用缓存可以极大的提升浏览器的响应速率。 什么是缓存呢&#xff1f; 当我们第一次访问某个网站时&#xff0c;浏览器会把网站中的图片等资源存储在电脑中&#xff0c;以备后续使用&#xff0c;第二次访问该网站时…

构建智能运维系统:创新架构与效率优化

随着信息技术的迅猛发展&#xff0c;企业对于运维效率和服务质量的要求越来越高。智能运维系统的设计和实施&#xff0c;不仅能够提升系统可靠性和响应速度&#xff0c;还能有效降低成本和人力投入。本文将深入探讨智能运维系统的架构设计原则和关键技术&#xff0c;为企业在运…

观成科技:活跃窃密木马TriStealer加密通信分析

1.概述 观成安全研究团队近期在现网监测到多起TriStealer窃密木马攻击事件&#xff0c;TriStealer窃密木马从2024年4月开始活跃&#xff0c;通过Bunny CDN进行载荷下发。TriStealer会收集系统信息、屏幕截图、浏览器中存储的账号密码以及设备中所有的“txt”后缀文件、桌面文件…

华清数据结构day7 24-7-24

1> 二叉树的创建、遍历自己实现一遍 bitree.h #ifndef BITREE_H #define BITREE_H #include<myhead.h> typedef char datatype;typedef struct Node {datatype data;struct Node *L;struct Node *R; }Node,*Bitree; //创建 Bitree tree_create(); //先序遍历 void p…

el-table合计行更新问题

说明&#xff1a;在使用el-table自带的底部合计功能时&#xff0c;初始界面不会显示合计内容 解决方案&#xff1a;使用 doLayout()方法 updated() {this.$nextTick(() > {this.$refs[inventorySumTable].doLayout();});},完整代码&#xff1a; // show-summary&#xff1a…

【PyTorch】图像多分类项目部署

【PyTorch】图像多分类项目 【PyTorch】图像多分类项目部署 如果需要在独立于训练脚本的新脚本中部署模型&#xff0c;这种情况模型和权重在内存中不存在&#xff0c;因此需要构造一个模型类的对象&#xff0c;然后将存储的权重加载到模型中。 加载模型参数&#xff0c;验证模型…

人工智能与机器学习原理精解【6】

文章目录 数值优化基础理论凹凸性定义在国外与国内存在不同国内定义国外定义总结示例与说明注意事项 国内凹凸性二阶定义的例子凹函数例子凸函数例子 凸函数&#xff08;convex function&#xff09;的开口方向凸函数的二阶导数凸函数的二阶定义单变量函数的二阶定义多变量函数…

设计模式第三天|设计模式结构型:适配器模式、装饰器模式、代理模式

文章目录 设计模式的分类适配器模式概念俗话说角色具体应用(Spring MVC)图解具体步骤 装饰器模式定义核心俗话说类名表现图解具体构造代码实现简化优点缺点 代理模式(Spring AOP 面向切面)定义俗话说角色代理模式分类静态代理角色代码好处缺点实用 动态代理 AOP什么是AOP具体信…

BFF:优化前后端协作设计模式

BFF&#xff1a;优化前后端协作设计模式 BFF是什么 BFF即 Backends For Frontends (服务于前端的后端)。是一种介于前端和后端之间一种重要的通信设计模式。它旨在解决前端与后端协作中的复杂性问题。 背景 行业背景&#xff1a;传统前端应用&#xff08;如Web应用、移动应…

《深入探秘Java中的枚举:掌握Enum的魔力》

目录 &#x1f4dd; 枚举枚举的定义枚举的使用1、表示一组固定常量2、实现接口3、枚举与策略模式4、EnumSet5、EnumMap &#x1f4ce; 参考文章 &#x1f600; 准备好了吗&#xff1f;让我们一起步入这座Java神奇的城堡&#xff0c;探寻枚举&#xff08;Enum&#xff09;这个强…

Ubuntu 修改源地址

注意事项&#xff1a;版本说明&#xff01;&#xff01;&#xff01; Ubuntu24.04的源地址配置文件发生改变。 不再使用以前的 sources.list 文件&#xff0c;该文件内容变成了一行注释&#xff1a; # Ubuntu sources have moved to /etc/apt/sources.list.d/ubuntu.sources…

STM32-FreeRTOS快速学习

定义 FreeRTOS 满足实施系统对任务响应时间的要求。 实时操作系统、轻量级&#xff08;内核小&#xff0c;只需要几KB的ROM和RAM&#xff09;、 提供了一些内核功能&#xff0c;如任务管理、时间管理、内存管理和通信机制等。 和裸机的区别 裸机&#xff1a;无操作系统&…

产品系统的UI暗色系和浅色系模式切换是符合人体视觉工程学的设计

视觉革命&#xff1a;UI设计中的暗夜与黎明 UI设计如同夜空中最亮的星辰&#xff0c;引领着用户穿梭于信息的海洋。而今&#xff0c;一场视觉革命正在悄然上演&#xff0c;它关乎于我们的眼睛&#xff0c;关乎于我们的体验——那就是产品系统的UI暗色系和浅色系模式的切换。如…

【机器学习】Jupyter Notebook如何使用之基本步骤和进阶操作

引言 Jupyter Notebook 是一个交互式计算环境&#xff0c;它允许创建包含代码、文本和可视化内容的文档 文章目录 引言一、基本步骤1.1 启动 Jupyter Notebook1.2 使用 Jupyter Notebook 仪表板1.3 在笔记本中工作1.4 常用快捷键1.5 导出和分享笔记本 二、进阶用法2.1 组织笔…

Excel超级处理器,工作簿文件.xls/.xlsx/.csv相互批量转换

如何将.xlsx文件转成.csv文件&#xff0c;.xls转换成.xlsx文件&#xff0c;以及.xls文件转成.csv文件或.csv转换成.xlsx文件&#xff0c;如果是单个文件转换&#xff0c;那么将当前文件另存为&#xff0c;保存类型&#xff0c;选择即可。如下图所示&#xff1a; 如果是多个文件…

【AutoDL】AutoDL+Xftp+Xshell+VSCode配合使用教程

身边没有显卡资源或不足以训练模型时&#xff0c;可以租赁服务器的显卡。 1、AutoDL Step :注册账号->选择显卡->选择环境->开机启动 1.1 首先打开AutoDL官网&#xff0c;注册账号 1.2 租赁自己想要的显卡资源 1.3 选择基础环境。 此处&#xff0c;我们让其自动配置…