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

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 //指示系统时钟分频后的脉冲标志信号

);

function integer clogb2 (input integer bit_depth);              
begin                                                           
	 for(clogb2=0; bit_depth>0; clogb2=clogb2+1)                   
	 bit_depth = bit_depth >> 1;                                 
end                                                           
endfunction

localparam  CNT_MAX = clogb2(DIV_VALUE -1);

 reg [CNT_MAX: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.kler.cn/a/579826.html

相关文章:

  • 《 C++ 点滴漫谈: 三十 》函数参数
  • PyTorch基础语法万字解析
  • 开源将图像和 PDF 文件高精度地转换为 Markdown 和 JSON 格式的文本软件
  • 【一文学会 HTML5】
  • 系统架构设计师—系统架构设计篇—软件架构风格
  • Docker—Docker环境安装部署
  • 第N5周:Pytorch文本分类入门
  • 题解:AT_arc093_b [ABC092D] Grid Components
  • 从HashMap到ConcurrentHashMap源码详解
  • Python Flask 和数据库系统交互
  • 蓝耘携手通义万相2.1:引领AI创作革新,重塑视觉体验
  • 非软件开发项目快速上手:14款管理软件精选
  • REST API前端请求和后端接收
  • Floyd求解最短路径问题
  • 洛谷 P3884 [JLOI2009] 二叉树问题
  • 力扣热题 100:图论专题经典题解析
  • 刷题统计 | 第十三届蓝桥杯省赛C++B组
  • 2019年蓝桥杯第十届CC++大学B组真题及代码
  • Golang学习笔记_48——中介者模式
  • LabVIEW基于双通道FFT共轭相乘的噪声抑制