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

news/2024/9/22 23:47:59/

一、概述

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)beginif(!rst_n)clk_out<=0;else if(cnt<=1)clk_out<=0;elseclk_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 beginrst_n= 1'b0;#(CLK_CYC*3);#5;//复位结束避开时钟上升沿rst_n= 1'b1;
end
endmodule

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

四、仿真波形图

 

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


http://www.ppmy.cn/news/1501225.html

相关文章

景区AR导航营销系统:技术解决方案与实施效益分析

随着旅游市场的竞争日益激烈&#xff0c;景区需要不断创新以吸引游客。景区 AR 导航将虚拟画面与现实场景相结合&#xff0c;为游客提供了更加直观、生动的导航服务。对于景区而言&#xff0c;这一创新技术无疑是吸引游客目光、提升景区知名度的有力武器。通过独特的 AR 导航体…

【前端 11】初探DOM

JavaScript 对象 - DOM 初探 在Web开发中&#xff0c;DOM&#xff08;Document Object Model&#xff0c;文档对象模型&#xff09;是一个至关重要的概念。它不仅仅是一个API&#xff0c;更是Web页面与JavaScript代码之间的桥梁&#xff0c;允许开发者通过编程的方式动态地访问…

谷粒商城实战笔记-72-商品服务-API-属性分组-获取分类属性分组

文章目录 一&#xff0c;后端接口开发Controller层修改接口接口测试 二&#xff0c;前端开发 这一节的内容是开发获取分类属性分组的接口。 一&#xff0c;后端接口开发 Controller层修改接口 修改AttrGroupController接口。 RequestMapping("/list/{catelogId}")p…

HarmonyOS Next 省市区级联(三级联动)筛选框

效果图 完整代码 实例对象 export class ProvinceBean {id?: stringpid?: stringisSelect?: booleandeep?: objectextName?: stringchildren?: ProvinceBean[] }级联代码 import { MMKV } from tencent/mmkv/src/main/ets/utils/MMKV import { ProvinceBean } from ..…

20.rabbitmq插件实现延迟队列

问题 前面谈到基于死信的延迟队列&#xff0c;存在的问题&#xff1a;如果第一个消息延时时间很长&#xff0c;而第二个消息延时时间很短&#xff0c;第二个消息并不会优先得到执行。 下载插件 地址&#xff1a;https://github.com/rabbitmq/rabbitmq-delayed-message-excha…

【ffmpeg命令基础】视频选项讲解

文章目录 前言设置输出文件的帧数设置每秒播放的帧数设置输出视频的帧率示例1&#xff1a;更改输出视频的帧率示例2&#xff1a;将图像序列转换为视频 设置输入视频的帧率示例3&#xff1a;处理高帧率视频示例4&#xff1a;处理低帧率视频 同时设置输入和输出帧率示例5&#xf…

【C++】set的使用

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 &#x1f308;前言&#x1f308;关于set&#x1f525;容量函数emptysize &#x1f525;Modifiersinserteraseclear &#x1f525;Operationsfindcountlower_bound和upper_…

笔记分类的烦恼

前言 你是否为笔记的分类而苦恼&#xff0c;是否迷失在市面上纷繁复杂的笔记分类法&#xff1f; 不用再烦恼了&#xff0c;本文将介绍一个适用于个人笔记的终极分类办法&#xff0c;只需三刀&#xff0c;尘埃落定。 &#x1f52a; 第一刀 笔记场景 &#x1f370; 也就是笔记…