【FPGA/verilog -入门学习6】verilog频率计数器

news2024/11/23 8:04:58

需求

在使能信号控制下,计算输入脉冲的每两个上升沿之间的时钟周期数并输出,即输出脉冲频率的计数值

输入信号

周期性脉冲信号:需要做检测的脉冲频率信号

使能信号:高电平进行频率计数,低电平清零计数器

输出信号

计数值:输出脉冲频率的计数值

有效信号:该信号拉高时,输出计数值有效

需求分析

1,输出产生计数完成状态《=EN 且有上升沿脉冲

2,输出计数值《=上升沿来临时候从0开始计数,直至下一个上升沿脉冲到来结束,把计数值传出去

框图分析

vlg_design

/
/*
@需求
    在使能信号控制下,计算输入脉冲的每两个上升沿之间的时钟周期数并输出,即输出脉冲频率的计数值
@输入信号
    周期性脉冲信号:需要做检测的脉冲频率信号
    使能信号:高电平进行频率计数,低电平清零计数器
@输出信号
    计数值:输出脉冲频率的计数值
    有效信号:该信号拉高时,输出计数值有效
 */
/
`timescale 1ns/1ps
module vlg_design(
    input clk,//100M
    input pulse,// 
    input reset_n,
    input  i_en,  
    output [31:0] o_cnt,  //输出计数值
    output  o_state
    );
    
//
//产生pluse 上升沿一个时钟脉冲
reg [1:0]r_pluse;
wire w_pluse_pos;
 
always @(posedge clk) begin
    if(!reset_n) r_pluse <= 'b00;
    else r_pluse <= {r_pluse[0],pulse};
end
assign w_pluse_pos = r_pluse[0] & ~r_pluse[1];
assign o_state = w_pluse_pos;

//
//en 时,如果    w_pluse_pos = 1 清零,否则计数
reg [31:0]r_cnt;
always @(posedge clk) begin
    if(!reset_n)r_cnt <= 'b0;
    else if(!i_en ) r_cnt <= 'b0;
    else if(w_pluse_pos) r_cnt <= 'b0;
        else r_cnt <= r_cnt + 1'b1;
end
assign o_cnt  = w_pluse_pos?r_cnt:'b0;

endmodule

testbench_top

`timescale 1ns/1ps
module testbench_top();
    

//参数定义
`define CLK_PERIORD        10        //时钟周期设置为10ns(100MHz)    


//接口申明
reg clk;
reg pulse;
reg reset_n;
reg i_en;
wire [31:0] o_cnt;
wire  o_state;
    
vlg_design        uut_vlg_design(
    .clk(clk),
    .pulse(pulse),
    .reset_n(reset_n),
    .i_en(i_en),
    .o_cnt(o_cnt),
    .o_state(o_state)
    );    
    
//时钟和复位初始化、复位产生 
initial begin
clk <= 0;
reset_n <= 0;
#10;
reset_n <= 1;
clk <= 1;
pulse <= 'b0;   //初始化都为0
#10;
i_en <= 0;
end

//时钟产生
always #(`CLK_PERIORD/2) clk = ~clk;    
integer i;
 
//测试激励产生
initial begin
@(posedge reset_n);    //等待复位完成
@(posedge clk);

i_en <= 1;
#2;
//5次循环, 
for(i = 0;i < 5;i = i+1) begin
    pulse <= 'b1;
    #({$random}%30*10); 
    pulse <= 'b0;
    #20;
end

pulse <= 'b0; 
i_en <= 0;
#2_000_000;
$stop;
end
endmodule

仿真输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1307446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微软自带浏览器Edge,无法关闭“保存历史记录网站的屏幕截图”解决方案

微软自带浏览器Edge&#xff0c;无法关闭“保存历史记录网站的屏幕截图”解决方案 吐槽1&#xff1a;Windows自带的Chrome内核版本的浏览器Microsofg Edge刚发布时可谓一股清流&#xff0c;启动速度快&#xff0c;占用内存较小&#xff0c;相信很多人也开始抛弃正代Chrome&…

如何分析自己的人格优势?

每一个人都有自己的人格&#xff0c;而每一种人格&#xff0c;也都有其优势。同样的事情&#xff0c;但我们每一个人的应对方式却完全不同&#xff0c;为什么会有这些差别&#xff1f;....... 如何扬长避短&#xff0c;找到自信&#xff0c;自我&#xff1f; 想要了解自己的人…

锂电3V升12V1A升压芯片WT3209

锂电3V升12V1A升压芯片WT3209 WT3209是一款高功率密度全集成BOOST升压转换器&#xff0c;具备高效能解决方案。3V升12V1A,5V升12V1A WT3209内部集成的功率MOSFET管导通电阻为上管13mΩ和下管11mΩ&#xff0c;具备2A开关电流能力&#xff0c;并且能够提供高达12.6V的输出电压。…

【IDEA】IntelliJ IDEA创建一个Maven项目

在IDEA中创建Maven项目&#xff0c;前提是已经安装配置好Maven环境 。 本文主要使用的是IntelliJ IDEA 2022.2.1 (Community Edition) 1.创建一个新project:File>Project 2.修改Maven配置&#xff1a;File>Settings>搜索maven 创建好的工程如下&#xff1a; src/main…

基于Spring Boot、Mybatis、Redis和Layui的企业电子招投标系统源码实现与立项流程

招投标管理系统是一款适用于招标代理、政府采购、企业采购和工程交易等领域的企业级应用平台。该平台以项目为主线&#xff0c;从项目立项到项目归档&#xff0c;实现了全流程的高效沟通和协作。通过该平台&#xff0c;用户可以实时共享项目数据信息&#xff0c;实现规范化管理…

滑动窗口经典问题

关卡名 滑动窗口高频问题 我会了✔️ 内容 1.掌握最长子串问题 ✔️ 2.理解长度最小的子数组问题 ✔️ 3.掌握盛水最多的容器问题 ✔️ 4.理解异位词问题如何解决 ✔️ 1 最长子串专题 先来看一道高频算法题&#xff1a;无重复字符的最长子串。具体要求是给定一个字符串…

vue 页面跳转时,浏览器上方显示进度条

vue 页面跳转时&#xff0c;浏览器上方显示进度条 文章目录 vue 页面跳转时&#xff0c;浏览器上方显示进度条先看效果一、安装 nprogress二、main.js 引入nprogress1.引入库 三、在router.js中对路由钩子进行设置四、测试 先看效果 vue 页面跳转时&#xff0c;浏览器上方显示进…

Windows Subsystem for Linux (WSL) 安装与使用笔记

文章目录 Part.I IntroductionPart.II 安装Chap.I 安装流程Chap.II 迁移至其他盘 Part.III 使用Chap.I 一些信息Chap.II 配置下载软件的源Chap.III 安装 pip Reference Part.I Introduction Windows Subsystem for Linux 简写为 WSL&#xff0c;是 Windows 的一个 Linux 子系统…

滑动窗口如人生,回顾往事不复还———力扣刷题

第一题&#xff1a;长度最小的子数组 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路&#xff1a; 第一想法肯定时暴力枚举&#xff0c;枚举数组任何一个元素&#xff0c;把他当起始位置&#xff0c;然后从起始位置找最短区间&#xff0c;使得…

经典综述|88.1分力作!土壤塑料际

柏林-勃兰登堡高级生物多样性研究所在《Nature reviews microbiology》期刊上(IF88.1)发表的“The soil plastisphere”研究论文中&#xff0c;综述了塑料对土壤的潜在影响。对土壤塑料际特性和微生物群落以及这些群落影响过程的阐明仍处于早期阶段&#xff0c;但进展的步伐很快…

linux中堡垒机

堡垒机 堡垒机概念目的 安装Jumpserver使用资产管理资产列表创建需要管理的服务器创建用户权限管理页面进行资产授权操作视频 应用管理应用管理页面创建需要管理的应用&#xff0c;这里用数据库mysql举例进入后点击创建资产管理创建登录应用所需的用户选择创建mysql关系型数据库…

C语言第四十六弹---最快方法找到杨氏矩阵中的数下标

C语言实现最快方法找到杨氏矩阵中数下标。 定义&#xff1a;杨氏矩阵是一种用于描述Young 表和表示论的工具&#xff0c;它在代数几何和组合数学中有广泛的应用。一个杨氏矩阵是一个以若干个正整数构成的矩形表格&#xff0c;且每行和每列的元素单调递增。 从定义中可获得条件…

初级数据结构(四)——队列

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;三&#xff09;——栈 | NULL 下一篇-> 本篇是属于上一篇的补充篇&#xff0c;因为队列和栈的属性特别类似&#xff0c;很多细节部分可以查看上一篇或者初级据结构的第二…

Linux的基本指令和权限的知识

学前的建议&#xff1a;大家不要太关注指令是啥&#xff0c;记不住怎么办&#xff08;没事&#xff0c;想用时去查就好了&#xff09;&#xff0c;这篇文章重点部分是围绕指令的周边知识。毕竟指令是“死肌肉”&#xff0c;而一些关于Linux和操作系统的理论知识才是最重要滴&am…

图片水印怎么去掉?我来教你几招

图片水印怎么去掉&#xff1f;随着自媒体的不断孵化衍生&#xff0c;去水印也成为当下的热门话题之一&#xff0c;每天数以亿计的用户被图片水印所困扰&#xff0c;那么图片水印怎么去掉呢&#xff1f;今天我来教你几招&#xff0c;让你轻松搞定图片水印&#xff0c;一起来学习…

瑞典市场开发攻略,带你走进森林王国

瑞典人口超千万&#xff0c;是一个发达的北欧国家&#xff0c;是欧盟重要的成员国&#xff0c;与我国贸易往来密切&#xff0c;是我国外贸企业非常青睐的市场之一。诺贝尔奖想必大家都知道&#xff0c;诺贝尔就是瑞典人&#xff0c;除了诺贝尔和平奖之外&#xff0c;所有的奖项…

涉密网络的IP查询防护策略

涉密网络的安全性对于维护国家、企业及个人的核心利益至关重要。在当今数字化时代&#xff0c;网络攻击日益猖獗&#xff0c;其中IP查询是攻击者获取目标信息的一种常见手段。本文将探讨涉密网络中防护IP查询的关键策略&#xff0c;以确保网络的机密性和安全性。 1. 专用VPN和…

产品表结构分析

一个项目之中&#xff0c;会有很多数据&#xff0c;众多数据之间也存在这各种关系&#xff0c;如何依据这些关系设计出更符合实际且适合的表及之间的关联关系也是我们所必须学习的 一、常见部门表结构分析 几乎所有框架里面都有一张部门表&#xff0c;我们先来看一下他的结构&…

CanEasy多场景应用,让汽车总线测试更简单

来源&#xff1a;虹科汽车电子 虹科分享 | CanEasy多场景应用&#xff0c;让汽车总线测试更简单 原文链接&#xff1a;https://mp.weixin.qq.com/s/ojic4xfVTLbxXcKlJMGQZw 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 导读 CanEasy是一个基于Windows的总线工具&…

C语言 文件I/O(备查)

所有案列 跳转到其他。 文件打开 FILE* fopen(const char *filename, const char *mode); 参数&#xff1a;filename&#xff1a;指定要打开的文件名&#xff0c;需要加上路径&#xff08;相对、绝对路径&#xff09;mode&#xff1a;指定文件的打开模式 返回值&#xff1a;成…