N位分频器的实现

news/2024/11/15 4:15:51/

N位分频器的实现

一、 目的

使用verilog实现n位的分频器,可以是偶数,也可以是奇数

二、 原理

FPGA中n位分频器的工作原理可以简要概括为:

  1. 分频器的作用是将输入时钟频率分频,输出低于输入时钟频率的时钟信号。
  2. n位分频器可以将输入时钟频率分频2^n倍。
  3. n位分频器主要由n个触发器级联组成。
  4. 第一个触发器时钟输入接入输入时钟,数据端接D=0。
  5. 后级触发器的时钟依次接前一级触发器的反相Q信号。
  6. 通过这种级联,将输入时钟周期分成2^n个阶段。

7.最后一个触发器Q输出即为分频之后的时钟信号。

  1. 更改计数器位数n,可以灵活改变分频比例。
  2. 分频器广泛应用于计数器、时序逻辑的时钟分频等场景。

所以n位分频器通过n个触发器的级联,利用反相Q输出产生2^n分频效果,是FPGA时钟管理中的重要组成部分。

三、 系统架构设计

工程模块划分及说明

image-20230722151641299

四、 代码实现

1. 模块端口信号列表

module divider #(parameter N = 9)(input wire clk,input wire rst_n,output wire out
);
reg[N:0] cnt1;//上升沿计数器
reg[N:0] cnt2;//下降沿计数器
wire add_cnt1;//上升沿开始条件
wire end_cnt1;//上升沿结束条件
wire add_cnt2;//下降沿开始条件
wire end_cnt2;//下降沿结束条件
always @(posedge clk or negedge rst_n) beginif(~rst_n) begincnt1<='d0;endelse if(add_cnt1)beginif(end_cnt1)begincnt1 <='d0;endelse begincnt1 <= cnt1 + 1'b1;endendelse begincnt1<=cnt1;end
endalways @(negedge clk or negedge rst_n) beginif(~rst_n) begincnt2<='d0;endelse if(add_cnt2)beginif(end_cnt2)begincnt2 <='d0;endelse begincnt2 <= cnt2 + 1'b1;endendelse begincnt2<=cnt2;end
endassign add_cnt1 = 1'b1;
assign end_cnt1 = add_cnt1 && cnt1 == N;
assign add_cnt2 = 1'b1;
assign end_cnt2 = add_cnt2 && cnt2 == N;assign out = (N%2==0)?((cnt2<=(N>>1))&&(cnt1<=(N>>1))?1'b0:1'b1):((cnt1<=(N>>1)?1'b0:1'b1);endmodule

测试文件:

module driver_n_tb();
reg clk;
reg rst_n;
wire out;
parameter SYS_CLK = 20;
parameter N = 8;
always #(SYS_CLK/2) clk = ~clk;initial beginclk=1'b0;rst_n=1'b0;#(2*SYS_CLK+10);rst_n=1'b1;#(100*SYS_CLK);$stop;
end
divider #(.N(N)) inst_divider_n (.clk(clk), .rst_n(rst_n), .out(out));endmodule

五. 时序及仿真结果

偶数:image-20230722152707689

奇数:

image-20230722152731878

五、 仿真波形图

偶数:image-20230722153104983

奇数:image-20230722153124078


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

相关文章

asp.net MVC markdown编辑器

在 ASP.NET MVC 中&#xff0c;你可以使用一些第三方 Markdown 编辑器来让用户在网页上方便地编辑和预览 Markdown 内容。这些编辑器通常提供实时预览功能&#xff0c;将 Markdown 文本转换为实时渲染的 HTML&#xff0c;并支持编辑器工具栏来辅助用户编辑。 以下是一些流行的…

python读取json文件

import json# 文件路径(同目录文件名即可,不同目录需要绝对路径) path 1.json# 读取JSON文件 with open(path, r, encodingutf-8) as file:data json.load(file)#data为字典 print(data) print(type(data))

【C语言】位段枚举联合

鹅&#xff0c;鹅&#xff0c;鹅&#xff0c;曲项向天歌。白毛浮绿水&#xff0c;红掌拨清波。 — 唐代骆宾王《咏鹅》 这篇博客我们会详细介绍位段&#xff0c;以及枚举类型和联合类型 位段是什么&#xff1f;&#x1f340; 位段的声明和结构是类似的&#xff0c;有两个不同…

数据结构:顺序表

静态查找表既可以使用顺序表表示&#xff0c;也可以使用链表结构表示。虽然一个是数组、一个链表&#xff0c;但两者在做查找操作时&#xff0c;基本上大同小异。 顺序查找的实现 静态查找表用顺序存储结构表示时&#xff0c;顺序查找的查找过程为&#xff1a;从表中的最后一…

【C++进阶】:多态

多态 一.概念二.多态的定义和实现1.简单使用2.虚函数重写的两个例外1.协变2.析构函数的重写 3. C11 override 和 final4.重载&#xff0c;重定义&#xff0c;重写对比 三.多态的原理1.虚函数表2.总结3.静态绑定和动态绑定 四.单继承和多继承1.单继承2.多继承1.多继承的虚表2.多…

数据结构---手撕图解七大排序(含动图演示)

文章目录 插入排序直接插入排序希尔排序 选择排序选择排序堆排序 交换排序冒泡排序快速排序hoare版挖坑法前后指针法快速排序的递归展开图快速排序的优化三数取中法 快速排序的非递归实现 归并排序 插入排序 插入排序分为直接插入排序和希尔排序&#xff0c;其中希尔排序是很值…

合宙Air724UG LuatOS-Air script lib API--http

Table of Contents http http.request(method, url, cert, head, body, timeout, cbFnc, rcvFileName, tCoreExtPara) http 模块功能&#xff1a;HTTP客户端 http.request(method, url, cert, head, body, timeout, cbFnc, rcvFileName, tCoreExtPara) 发送HTTP请求 参数 名称…

SDWAN组网的九大应用场景

SD-WAN&#xff08;软件定义广域网&#xff09;是一种新兴的网络技术&#xff0c;它可以优化和管理企业广域网&#xff08;WAN&#xff09;的数据传输&#xff0c;提供更加高效、灵活和安全的网络连接。SD-WAN的出现极大地改变了传统WAN的组网方式&#xff0c;为企业提供了更多…