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

010---基于Verilog HDL的分频器设计

文章目录

  • 摘要
  • 一、时序图
  • 二、程序设计
    • 2.1 rtl
    • 2.2 tb
  • 三、仿真分析
  • 四、实用性


摘要

文章为学习记录。绘制时序图,编码。通过修改分频值参数,实现一定范围分频值内的任意分频器设计。


一、时序图

在这里插入图片描述

二、程序设计

2.1 rtl

module divider
#(
  parameter    DIV_VALUE = 5
  )
(
input wire sys_clk , //系统时钟 50MHz
input wire sys_rst_n , //全局复位

output reg clk_flag //指示系统时钟分频后的脉冲标志信号

);

 reg [10:0] cnt; //计数
 
 //cnt:
 always@(posedge sys_clk or negedge sys_rst_n)
 begin
     if(sys_rst_n == 1'b0)
         cnt <= 'b0;
     else if(cnt == DIV_VALUE -1)
         cnt <= 3'b0;
     else
         cnt <= cnt + 1'b1;
 end
 
 //clk_flag:脉冲信号指示
 always@(posedge sys_clk or negedge sys_rst_n)
 begin
     if(sys_rst_n == 1'b0)
         clk_flag <= 1'b0;
     else if(cnt == DIV_VALUE -2)
         clk_flag <= 1'b1;
     else
         clk_flag <= 1'b0;
 end

endmodule

2.2 tb

module tb_divider();

reg sys_clk ; //系统时钟 50MHz
reg sys_rst_n ; //全局复位

wire clk_flag ;

//初始化系统时钟、全局复位
 initial begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #20
 sys_rst_n <= 1'b1;
 end
 
 //sys_clk:模拟系统时钟,每 10ns 电平翻转一次,周期为 20ns,频率为 50MHz
 always #10 sys_clk = ~sys_clk;


divider
#(
.    DIV_VALUE(5)
  )
divider_inst1
(
. sys_clk (sys_clk), //系统时钟 50MHz
. sys_rst_n(sys_rst_n) , //全局复位

. clk_flag(clk_flag) //指示系统时钟分频后的脉冲标志信号

);

endmodule

三、仿真分析

5分频:
系统时钟周期20ns,clk_flag周期100ns。
在这里插入图片描述
10分频:
系统时钟周期20ns,clk_flag周期200ns。
在这里插入图片描述

四、实用性

确保系统时钟继续作为工作时钟:
系统时钟是由外部晶振直接通过管脚连接到了 FPGA 的专用时钟管脚上,会连接到全局时钟网络,能够使时钟信号到达每个寄存器的时间都尽可能相同,以保证更低的时钟偏斜(Skew)和抖动(Jitter)。

always@(posedge sys_clk or negedge sys_rst_n)
begin
 if(sys_rst_n == 1'b0)
 A <= 4'b0;
 else if(clk_flag == 1'b1)
 A <= A + 1'b1;
 end
http://www.dtcms.com/a/53722.html

相关文章:

  • 二阶RC+PWM实现DDS
  • 风控模型算法面试题集结
  • Python可视化——地理空间型图表(自用)
  • 2025年Q1起重机指挥证理论考试题库
  • Vue Hooks 深度解析:从原理到实践
  • Tomcat 新手入门指南
  • Java线程池的分析和使用
  • K8s 1.27.1 实战系列(三)安装网络插件
  • hive sql limit offset不起作用
  • 深入解析 Flink 批量插入 MariaDB 不生效问题
  • Linux - 网络基础(网络层,数据链路层)
  • [Python入门学习记录(小甲鱼)]第4章 分支与循环
  • 详细讲解ecovadis奖牌分类
  • 美股表格数据:如何获取和分析历史高频分钟回测数据
  • IDEA与Maven使用-学习记录(持续补充...)
  • EasyBCD,多系统名称或启动顺序的修改,用来配置与调整启动配置数据(BCD)
  • 算法进阶——双指针
  • HarmonyOS Next 属性动画和转场动画
  • 若依前后端分离版使用Electron打包前端Vue为Exe文件
  • GStreamer —— 2.7、Windows下Qt加载GStreamer库后运行 - “教程7:多线程和 Pad 可用性“(附:完整源码)
  • 深入解析Java MDC:日志链路追踪的利器
  • 4.2 使用VNote写作手册页面(CHM助手)
  • Python 第二章:夯实基础,掌握核心
  • 玉米籽粒品质相关性状的GWAS和Meta-QTL分析
  • 【Unity】改变游戏运行时Window的窗口标题
  • DeepSeek + 飞书多维表格搭建你的高效工作流
  • React基础之项目创建
  • 在 CentOS 上,常用几种方法来确保 Python 脚本在断开终端后继续运行
  • Cursor如何调试.Net Core控制台程序
  • (接“使用js去复制网页内容的方法”)js中的execCommand怎么复制富文本内容解析