当前位置: 首页 > news >正文

N位分频器的实现

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.lryc.cn/news/96211.html

相关文章:

  • 华为OD真题--分苹果-带答案
  • 【前端实习评审】对小说详情模块更新的后端接口压力流程进行了人群优化
  • Factorization Machines(论文笔记)
  • Qt开发(5)——使用QTimer定时触发槽函数
  • 2023年JAVA最新面试题
  • (四)RabbitMQ高级特性(消费端限流、利用限流实现不公平分发、消息存活时间、优先级队列
  • Vue如何配置eslint
  • Elasticsearch查询文档
  • 面向对象编程:多态性的理论与实践
  • linux:filezilla root密码登陆
  • 在nginx上部署nuxt项目
  • 嵌入式linux通用spi驱动之spidev使用总结
  • 【Nodejs】Puppeteer\爬虫实践
  • Windows Active Directory密码同步
  • 安科瑞能源物联网以能源供应、能源管理、设备管理、能耗分析的能源流向为主线-安科瑞黄安南
  • FPGA设计时序分析一、时序路径
  • spring复习:(52)注解方式下,ConfigurationClassPostProcessor是怎么被添加到容器的?
  • 全国大学生数据统计与分析竞赛2021年【本科组】-B题:用户消费行为价值分析
  • 力扣1667. 修复表中的名字
  • 【设计模式】详解观察者模式
  • 用html+javascript打造公文一键排版系统8:附件及标题排版
  • 微服务体系<1>
  • M5ATOMS3基础02传感器MPU6886
  • vue 快速自定义分页el-pagination
  • 0-虚拟机补充知识
  • 如何将电机控制器添加到您的 ROS 机器人
  • ChatGPT统计“一到点就下班”的人数
  • Games101学习笔记 - 变换矩阵基础
  • Ubuntu18.04未安装Qt报qt.qpa.plugin could not load the Qt platform plugin xcb问题的解决方法
  • GPT4ALL私有化部署 01 | Python环境