【Verilog】big_small_cnt

通用大小计数器

`timescale 1ns / 1ps
//
// Company: 
// Engineer:    wengf
// Create Date: 
// Design Name: 
// Module Name: big_small_cnt
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// Dependencies: 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 通用的大小计数器,输入想要开始的条件,直到条件终止
//
module big_small_cnt(
clk       ,
rst       ,
clk_p     ,
start     ,

//BIG_LENGTH,// 添加

big_cnts  ,
small_cnts
    );
//    
parameter BIG_LENGTH=16'd8;
parameter SMALL_LENGTH=8'd11;
//
input clk,rst,clk_p,start;
//input [15:0] BIG_LENGTH;//添加

output [15:0] big_cnts;
output [7:0] small_cnts;
//
reg [7:0] small_cnts;
always @ (posedge clk or posedge rst)//小计数器
begin
	if(rst)
	begin
	small_cnts<=8'hff;
	end
	
	else if(clk_p)
	begin
		if(start)//起始位置
		begin
		small_cnts<=8'd0;	
		end
		
		else if((small_cnts==SMALL_LENGTH-1)&&(big_cnts<BIG_LENGTH-1))//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止
		begin
		small_cnts<=8'd0;		
		end
		
		else if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值
		begin
		small_cnts<=small_cnts +1'b1;			
		end
		
		else
		begin
		small_cnts<=small_cnts;		
		end
	end
	
	else
	begin
	small_cnts<=small_cnts;			
	end
end
//
reg [15:0] big_cnts;
always @ (posedge clk or posedge rst)
begin
	if(rst)
	begin
	big_cnts<=16'hffff;
	end
	
	else if((start)&&(clk_p))//起始位置 
	begin
	big_cnts<=16'd0;	
	end
	
	else if((small_cnts==SMALL_LENGTH-1)&&(clk_p))所需长度减1,最大值受最小值控制,按照最小值走几个周期即可。
	begin
	big_cnts<=big_cnts + 1'b1;		
	end
	
	else
	begin
	big_cnts<=big_cnts;			
	end
end
//


endmodule

通用大小计数器,去除 clk_p

`timescale 1ns / 1ps
//
// Company: 
// Engineer:    wengf
// Create Date: 
// Design Name: 
// Module Name: big_small_cnt
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// Dependencies: 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 通用的大小计数器,输入想要开始的条件,直到条件终止
//
module big_small_cnt(
    clk             ,
    rst             ,
    start           ,
    
    forward_cnts    ,
    backward_cnts   , 
    big_cnts        ,
    small_cnts      ,
    small_pulse_start,
    small_pulse_end,
    pulse_end
);
  
parameter BIG_LENGTH=16'd8;
parameter SMALL_LENGTH=8'd8;
parameter COUNT = BIG_LENGTH * SMALL_LENGTH;

input clk,rst,start;
output [15:0] forward_cnts,backward_cnts;
output [15:0] big_cnts;
output [7 :0] small_cnts;
output small_pulse_start;
output small_pulse_end;
output pulse_end;

reg [15:0] forward_cnts,backward_cnts;
reg [15:0] big_cnts;
reg [7:0] small_cnts;
reg small_pulse_start,small_pulse_end,pulse_end;

always @ (posedge clk or posedge rst)//小计数器
begin
	if(rst)
	begin
	forward_cnts<=16'hffff;
	end
	else if(start)//起始位置
	begin
	forward_cnts<=16'd0;	
	end
	
	else if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值
	begin
	forward_cnts<=forward_cnts +1'b1;			
	end
	
	else
	begin
	forward_cnts<=forward_cnts;		
	end
end

always @ (posedge clk or posedge rst)//小计数器
begin
	if(rst)
	begin
	backward_cnts <= 16'hffff;
	end
	else if(start)//起始位置
	begin
	backward_cnts <= COUNT-1'b1;	
	end
	
	else if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值
	begin
	backward_cnts<=backward_cnts-1'b1;			
	end
	
	else
	begin
	backward_cnts<=backward_cnts;		
	end
end


always @ (posedge clk or posedge rst)//小计数器
begin
	if(rst)
	begin
	small_cnts<=8'hff;
	end
	else if(start)//起始位置
	begin
	small_cnts<=8'd0;	
	end
	
	else if((small_cnts==SMALL_LENGTH-1)&&(big_cnts<BIG_LENGTH-1))//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止
	begin
	small_cnts<=8'd0;		
	end
	
	else if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值
	begin
	small_cnts<=small_cnts +1'b1;			
	end
	
	else
	begin
	small_cnts<=small_cnts;		
	end
end

always @ (posedge clk or posedge rst)//小计数器
begin
	if(rst)
	begin
	small_pulse_start<=1'b0;
	end
	else if(start)//起始位置
	begin
	small_pulse_start<=1'b1;
	end
	
	else if((small_cnts==SMALL_LENGTH-1)&&(big_cnts<BIG_LENGTH-1))//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止
	begin
	small_pulse_start<=1'b1;	
	end
	
	else
	begin
	small_pulse_start<=1'b0;	
	end
end

always @ (posedge clk or posedge rst)//小计数器
begin
	if(rst)
	begin
	small_pulse_end <= 1'b0;
	end
	else if(start)//起始位置
	begin
	small_pulse_end <= 1'b0;
	end
	
	else if(small_cnts==SMALL_LENGTH-2)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止
	begin
	small_pulse_end <=8'd1;		
	end
	
	else
	begin
	small_pulse_end <= 1'b0;
	end
end

always @ (posedge clk or posedge rst)
begin
	if(rst)
	begin
	big_cnts<=16'hffff;
	end
	
	else if(start)//起始位置 
	begin
	big_cnts<=16'd0;	
	end
	
	else if(small_cnts==SMALL_LENGTH-1) 
	begin
	big_cnts<=big_cnts + 1'b1;		
	end
	
	else
	begin
	big_cnts<=big_cnts;			
	end
end

// pulse_end
always @ (posedge clk or posedge rst)
begin
	if(rst)
	begin
	pulse_end<=1'b0;
	end
	
	else if(start)//起始位置 
	begin
	pulse_end <= 1'b0;
	end
	
	else if((small_cnts==SMALL_LENGTH-1) && (big_cnts==BIG_LENGTH-1)) 
	begin
	pulse_end <= 1'b1;
	end
	
	else
	begin
	pulse_end <= 1'b0;
	end
end

endmodule


在这里插入图片描述

wire [15:0] forward_cnts,backward_cnts;
wire [15:0] big_cnts;
wire [7:0] small_cnts;
wire small_pulse_start,small_pulse_end;
wire pulse_end;

big_small_cnt
# ( .BIG_LENGTH(16'd8), 
    .SMALL_LENGTH(16'd3))
big_small_cnt(
    .clk                (clk),
    .rst                (rst),
    .start              (cnts == 8'd10),
    
    .forward_cnts       (forward_cnts),
    .backward_cnts      (backward_cnts),
    .big_cnts           (big_cnts),
    .small_cnts         (small_cnts),
    .small_pulse_start  (small_pulse_start),
    .small_pulse_end    (small_pulse_end),
    .pulse_end          (pulse_end)
);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超声波测距传感器--第七天

1.超声波测距 型号:HC-SR04 接线参考:模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板的P1.5和P1.6端 超声波模块是用来测量距离的一种产品,通过发送超声波,利用时间差和声音传播速度,计算模块到前方障碍物的距离。 2. 如何让它发送波: Tri…

Linux入门攻坚——22、通信安全基础知识及openssl、CA证书

Linux系统常用的加解密工具&#xff1a;OpenSSL&#xff0c;gpg&#xff08;是pgp的实现&#xff09; 加密算法和协议&#xff1a; 对称加密&#xff1a;加解密使用同一个秘钥&#xff1b; DES&#xff1a;Data Encryption Standard&#xff0c;数据加密标准&…

【postgreessql 】查询数据库表占用物理空间

查询单个表的磁盘使用量&#xff1a; SELECTrelname,pg_size_pretty ( pg_total_relation_size ( relid ) ) AS total_size FROMpg_catalog.pg_statio_user_tables; 查询所有表的总磁盘使用量&#xff1a; SELECTpg_size_pretty ( SUM ( pg_total_relation_size ( relid ) )…

简洁大气APP下载单页源码

源码介绍 简洁大气APP下载单页源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 效果截图 源码下载 简洁大气APP下载单页源码

[oeasy]python0016_在vim中直接运行python程序

回忆上次内容 上次 置换 esc 和 caps lock 任何操作 都可以在不移动 手腕的状态下完成了 每次都要 退出vim编辑器&#x1f634; 才能 在shell中 运行python程序有点麻烦 想要 不退出vim 直接在 vim应用 中运行 py程序可能吗&#xff1f;&#x1f914; 运行程序 以前都是 先退…

0507华为od二面

只记录自己没回答上的问题 1、ZGC的缺点&#xff1a; 1)只是适用于32位系统 2)最大只是支持4TB内存容量 3)最糟糕的情况下吞吐量会下降15%&#xff0c;这都不是事至于吞吐量&#xff0c;通过扩容分分钟解决 4)分代的原因:不同对象的生命周期不相同&#xff0c;可能会扫描整个堆…

TiDB数据库 使用tiup 缩容遇到的tikv处于下线中状态无法转为tombstone状态

官方的缩容文档 https://docs.pingcap.com/zh/tidb/stable/scale-tidb-using-tiup 论坛地址 https://tidb.net/ 问题&#xff1a;使用tiup 缩容遇到的tikv处于下线中状态无法转为tombstone状态 解决方法 1.缩容 tiup cluster scale-in --node 10.0.1.5:20160 2.查看 tiup…

2024.5.6 关于 SpringCloud 的基本认知

目录 引言 微服务框架所包含的技术栈 微服务架构演变 单体架构 分布式架构 微服务架构 微服务技术对比 认识 SpringCloud SpringBoot 版本兼容关系 服务拆分和远程调用 服务拆分注意事项 远程调用 引言 微服务是一种框架风格&#xff0c;按照业务板块来划分应用代码…

彻底解决python的pip install xxx报错(文末附所有依赖文件)

今天安装pip install django又报错了&#xff1a; C:\Users\Administrator>pip install django WARNING: Ignoring invalid distribution -ip (d:\soft\python\python38\lib\site-pac kages) Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting djan…

构建 WebRTC 一对一信令服务器

构建 WebRTC 一对一信令服务器 构建 WebRTC 一对一信令服务器前言为什么选择 Nodejs&#xff1f;Nodejs 的基本原理浏览器使用 Nodejs安装 Nodejs 和 NPMsocket.io信令服务器搭建信令服务器客户端服务端启动服务器并测试 总结参考 构建 WebRTC 一对一信令服务器 前言 我们在学…

Bookends for Mac v15.0.2 文献书籍下载管理

Bookends Mac版可以轻松地将其导入参考 &#xff0c;并直接搜索和进口从数以百计的线上资料来源。Bookends Mac版使用内置在浏览器中下载参考与PDF格式的文件&#xff0c;或和/或网页的点击。 Bookends for Mac v15.0.2注册激活版下载 本文由 mdnice 多平台发布

信息系统项目管理师0092:项目管理原则(6项目管理概论—6.4价值驱动的项目管理知识体系—6.4.1项目管理原则)

点击查看专栏目录 文章目录 6.4价值驱动的项目管理知识体系6.4.1项目管理原则1.原则一:勤勉、尊重和关心他人2.原则二:营造协作的项目管理团队环境3.原则三:促进干系人有效参与4.原则四:聚焦于价值5.原则五:识别、评估和响应系统交互6.原则六:展现领导力行为7.原则七:根…

python菜鸟级安装教程 -下篇(安装编辑器)

来来~接着上篇的来~ 安装好python.exe之后&#xff0c;我们可以根据cmd命令窗口&#xff0c;码代码。 这算最简单入门了~ 如果我们在安装个编辑器。是什么效果&#xff0c;一起体验一下吧 第一步&#xff0c;下载编辑器&#xff0c;选择官网&#xff0c;下载免费版本入门足…

探索Baidu Comate:编程世界中的新利器

文章目录 Baidu Comate 介绍Baidu Comate的优势Baidu Comate安装过程Baidu Comate实战演练代码调优代码解释代码生成注释生成 总结 Baidu Comate 介绍 随着GPT的大火&#xff0c;衍生了各种AI工具&#xff0c;这些AI工具遍布在各行业各领域中&#xff0c;有AI写作、AI办公、AI…

Linux 认识与学习Bash——3

在Linux bash中&#xff0c;数据流重定向是指将命令的输出从默认的标准输出&#xff08;通常是终端&#xff09;重定向到其他位置&#xff0c;如文件或另一个命令的输入。这是通过使用特定的符号来实现的。例如&#xff0c;>用于将输出重定向到文件&#xff0c;而<用于将…

SEO之高级搜索指令(二)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议 新手上云 &#xff08;接上一篇。。。。&#xff09; 5 、inanchor: inanchor:指令返回的结果是导入链接锚文字中包含搜索词的页面。百度不支持inanchor:。 比如在 Go…

沙盘Sandboxie v5.56.4

菜鸟高手裸奔工具沙盘Sandboxie是一款国外著名的系统安全工具&#xff0c;它可以让选定程序在安全的隔离环境下运行&#xff0c; 只要在此环境中运行的软件&#xff0c;浏览器或注册表信息等都可以完整的进行清空&#xff0c;不留一点痕迹。同时可以防御些 带有木马或者病毒的…

Conda安装opencv后显示找不到指定的模块

Conda安装opencv后显示找不到指定的模块 文章目录 Conda安装opencv后显示找不到指定的模块问题解决总结参考 问题 直接通过conda install opencv安装的opencv&#xff0c;通过Import cv2之后&#xff0c;显示DLL load failed while importing cv2: 找不到指定的模块。 conda …

使用excel合理整理数据

使用excel合理整理数据 Excel函数LOOKUP把两个sheet数据关联起来LOOKUP函数 Excel函数LOOKUP把两个sheet数据关联起来 LOOKUP函数 需求场景 1、sheet1是视频的数据比如 aid、作者、视频信息 2、sheet2是视频的播放数据比如 aid vv uv等 做的就是根据1、2 的aid 将 sheet2中的所…

Android Studio查看xml文件的修改时间和记录

Android Studio查看xml文件的修改时间和记录 Android Studio里面如果是Java/Kotlin编写界面&#xff0c;可以点击函数开头上面的提交在直接&#xff0c;然后在编辑界面的左侧查看历史时间上的修改记录&#xff0c;但是xml文件里面没有直观的这样操作方式。 但xml里面可以通过快…