使用Verilog设计分频模块(2Hz)

server/2024/10/22 11:42:36/

       在数字电路设计中,分频器是一种常见的电路,用于将一个高频的时钟信号分频到一个较低频率的时钟信号。本次将通过一个实际的例子,讲解如何使用Verilog语言设计一个分频器,将系统时钟信号分频到2Hz。

        在数字电路系统的设计中, 分频器是一种应用十分广泛的电路, 其功能就是对高频率的信号进行分频。本质上, 分频电路是加法计数器的变种, 其计数值由分频系数N=Fin/Fout决定,其输出不是一般计数器的计数结果, 而是根据分频常数对输出信号的高、低电平进行控制。通常来说, 分频器常用于对数字电路中的时钟信号进行分频, 从而得到较低频率的时钟信号、选通信号、中断信号等。

一、电路符号
二、代码设计
module div_clk( sclk, s_rst_n, clk_2Hz );// 输入信号input wire sclk,          // 系统时钟信号s_rst_n;          // 复位信号,低电平有效// 输出信号output reg clk_2Hz;       // 输出的2Hz时钟信号// 参数定义parameter CNT_END = 50000000; // 分频计数器的结束值,用于生成2Hz时钟// 内部信号定义reg [25:0] div_cnt;       // 分频计数器,26位宽,足以容纳CNT_END值// 分频计数器的时钟上升沿或复位信号下降沿触发always @(posedge sclk or negedge s_rst_n) beginif (s_rst_n == 1'b0) begindiv_cnt <= 25'd0;  // 如果复位信号为低,则计数器清零end else if (div_cnt == CNT_END - 1'b1) begindiv_cnt <= 25'd0;  // 如果计数器达到CNT_END,则计数器清零end else begindiv_cnt <= div_cnt + 1'b1;  // 否则,计数器加一endend// 输出时钟信号的生成always @(posedge sclk or negedge s_rst_n) beginif (s_rst_n == 1'b0) beginclk_2Hz <= 1'b0;  // 如果复位信号为低,则输出时钟信号清零end else if (div_cnt == (CNT_END >> 1'b1) - 1'b1) beginclk_2Hz <= 1'b0;  // 当计数器达到CNT_END的一半时,输出时钟信号为低end else if (div_cnt == CNT_END - 1'b1) beginclk_2Hz <= 1'b1;  // 当计数器达到CNT_END时,输出时钟信号为高endend
endmodule

代码分析

  • 模块定义div_clk模块有三个端口:sclk(系统时钟),s_rst_n(复位信号),和clk_2Hz(输出的2Hz时钟信号)。

  • 参数定义CNT_END定义了分频计数器的结束值,这个值决定了输出时钟的频率。

  • 内部信号div_cnt是一个26位的计数器,用于计数输入时钟周期。

  • 计数器逻辑:第一个always块定义了计数器的行为。当复位信号为低时,计数器清零。否则,如果计数器达到CNT_END,则清零;否则,计数器加一。

  • 输出时钟信号生成:第二个always块定义了输出时钟信号的行为。当计数器达到CNT_END的一半时,输出时钟信号为低;当计数器达到CNT_END时,输出时钟信号为高。

 

三、仿真结果

(1)仿真代码

`timescale 1ns/1nsmodule div_clk_tb;// 输入信号reg sclk;          // 系统时钟信号reg s_rst_n;       // 复位信号,低电平有效// 输出信号wire clk_2Hz;      // 输出的2Hz时钟信号// 实例化被测模块div_clk uut (.sclk(sclk),.s_rst_n(s_rst_n),.clk_2Hz(clk_2Hz));initial beginsclk = 0;forever #10 sclk = ~sclk; end// 测试序列initial begin// 初始化s_rst_n=1;#100s_rst_n = 0; // 复位#100;        // 保持复位100nss_rst_n = 1; // 释放复位#50000000;   // 等待一段时间,观察输出$finish;end// 观察输出波形initial begin$monitor("Time = %t,s_rst_n = %b, clk_2Hz = %b", $time,  s_rst_n, clk_2Hz);endendmodule 

(2)仿真结果


http://www.ppmy.cn/server/133887.html

相关文章

openresty安装

openresty官网&#xff1a;http://openresty.org/cn/ openresty官方安装文档&#xff1a;http://openresty.org/cn/installation.html github地址&#xff1a;https://github.com/openresty 安装前准备&#xff0c;必须安装perl、libpcre、libssl库。 可以用如下命令查看安装情…

用大模型或者向量模型比如huggingface上的模型,处理一批图片,对该图片进行分类,检索

要使用大模型或向量模型对图片进行分类和检索,通常可以采用以下几种方法: 1. **图像分类**:使用预训练的图像分类模型(如ResNet、EfficientNet等)对图片进行分类。 2. **图像特征提取**:使用预训练的模型(如CLIP、ResNet等)提取图像的特征向量,然后进行相似度检索。 …

Android Framework关闭触摸振动

文章目录 手势上滑时振动代码performHapticFeedback作用和意义 触摸振动开关设置Framework关闭触摸时振动 手势上滑时振动代码 安卓手机由底部往上滑时&#xff0c;会有震动&#xff0c;然后进入Recents多任务&#xff0c;其触发震动调用的代码 packages/apps/Launcher3/quick…

lstm和informer和gru模型对比

1 介绍 本文使用数据集&#xff0c;对三个模型进行了对比&#xff0c;代码使用python完成&#xff0c;通过对比&#xff0c;发现lstm>gru>informer. 2 数据读取 使用降水量数据集&#xff0c;第一列表示降水&#xff0c;第二列表示出水量。 输入是两个特征输出是一个…

RabbitMQ系列学习笔记(八)--发布订阅模式

文章目录 一、发布订阅模式原理二、发布订阅模式实战1、消费者代码2、生产者代码3、查看运行结果 本文参考&#xff1a; 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、发布订阅模式原理 在开发过程中&…

Spring Boot技术:图书进销存管理的创新实践

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

《武汉科技大学学报》

《武汉科技大学学报》 本学报国际刊号为ISSN 1674-3644&#xff0c;国内统一刊号为CN 42-1608/N。 本学报主要刊载冶金工程、冶金材料科学、冶金机械工程及自动化、信息科学与控制、化学工程、计算机科学、建筑工程、环境工程以及基础理论研究等学科的学术论文。择优报道国内…

pandas-数据分析-练习题-第1次练习

文章目录 简介开始练习第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题 简介 每次更新大概10个左右的关于pandas的操作知识点&#xff01;做练习要从第一步开始&#xff0c;防止报错&#xff01;本环境是Anaconda创建的虚拟环境中打开的jupyter noteboo…