【Verilog】big_small_cnt

devtools/2024/9/24 3:27:51/

通用大小计数器

`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)//小计数器
beginif(rst)beginsmall_cnts<=8'hff;endelse if(clk_p)beginif(start)//起始位置beginsmall_cnts<=8'd0;	endelse if((small_cnts==SMALL_LENGTH-1)&&(big_cnts<BIG_LENGTH-1))//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止beginsmall_cnts<=8'd0;		endelse if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值beginsmall_cnts<=small_cnts +1'b1;			endelsebeginsmall_cnts<=small_cnts;		endendelsebeginsmall_cnts<=small_cnts;			end
end
//
reg [15:0] big_cnts;
always @ (posedge clk or posedge rst)
beginif(rst)beginbig_cnts<=16'hffff;endelse if((start)&&(clk_p))//起始位置 beginbig_cnts<=16'd0;	endelse if((small_cnts==SMALL_LENGTH-1)&&(clk_p))所需长度减1,最大值受最小值控制,按照最小值走几个周期即可。beginbig_cnts<=big_cnts + 1'b1;		endelsebeginbig_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)//小计数器
beginif(rst)beginforward_cnts<=16'hffff;endelse if(start)//起始位置beginforward_cnts<=16'd0;	endelse if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值beginforward_cnts<=forward_cnts +1'b1;			endelsebeginforward_cnts<=forward_cnts;		end
endalways @ (posedge clk or posedge rst)//小计数器
beginif(rst)beginbackward_cnts <= 16'hffff;endelse if(start)//起始位置beginbackward_cnts <= COUNT-1'b1;	endelse if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值beginbackward_cnts<=backward_cnts-1'b1;			endelsebeginbackward_cnts<=backward_cnts;		end
endalways @ (posedge clk or posedge rst)//小计数器
beginif(rst)beginsmall_cnts<=8'hff;endelse if(start)//起始位置beginsmall_cnts<=8'd0;	endelse if((small_cnts==SMALL_LENGTH-1)&&(big_cnts<BIG_LENGTH-1))//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止beginsmall_cnts<=8'd0;		endelse if(big_cnts<=BIG_LENGTH-1)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,结束循环,保持循环达不到的最大值beginsmall_cnts<=small_cnts +1'b1;			endelsebeginsmall_cnts<=small_cnts;		end
endalways @ (posedge clk or posedge rst)//小计数器
beginif(rst)beginsmall_pulse_start<=1'b0;endelse if(start)//起始位置beginsmall_pulse_start<=1'b1;endelse if((small_cnts==SMALL_LENGTH-1)&&(big_cnts<BIG_LENGTH-1))//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止beginsmall_pulse_start<=1'b1;	endelsebeginsmall_pulse_start<=1'b0;	end
endalways @ (posedge clk or posedge rst)//小计数器
beginif(rst)beginsmall_pulse_end <= 1'b0;endelse if(start)//起始位置beginsmall_pulse_end <= 1'b0;endelse if(small_cnts==SMALL_LENGTH-2)//所需长度减1,在这里面进行循环,当big_cnt大于该长度后,自动停止beginsmall_pulse_end <=8'd1;		endelsebeginsmall_pulse_end <= 1'b0;end
endalways @ (posedge clk or posedge rst)
beginif(rst)beginbig_cnts<=16'hffff;endelse if(start)//起始位置 beginbig_cnts<=16'd0;	endelse if(small_cnts==SMALL_LENGTH-1) beginbig_cnts<=big_cnts + 1'b1;		endelsebeginbig_cnts<=big_cnts;			end
end// pulse_end
always @ (posedge clk or posedge rst)
beginif(rst)beginpulse_end<=1'b0;endelse if(start)//起始位置 beginpulse_end <= 1'b0;endelse if((small_cnts==SMALL_LENGTH-1) && (big_cnts==BIG_LENGTH-1)) beginpulse_end <= 1'b1;endelsebeginpulse_end <= 1'b0;end
endendmodule

在这里插入图片描述

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.ppmy.cn/devtools/39496.html

相关文章

融知财经:期权期货及其他衍生产品

期权、期货及其他衍生产品是金融市场中用于管理风险和进行投机的金融工具。这些衍生产品的价值依赖于一个或多个基础资产&#xff0c;如股票、商品、利率、汇率等。以下是关于这些衍生产品的一些基本介绍&#xff1a; 1、期货&#xff08;Futures&#xff09;&#xff1a;期货是…

DHCP原理

什么是DHCP DHCP (Dynamic Host Configuration Protocol,动态主机配置协议&#xff09;是由Internet工作任务小组设计开发的&#xff0c;专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议&#xff0c;是一个应用层协议&#xff0c;使用UDP的67和68端口。 DHCP的前身是B…

语言基础 /CC++ 可变参函数设计与实践,va_ 系列实战详解(强制参数和变参数的参数类型陷阱)

文章目录 概述va_ 系列定义va_list 类型va_start 宏从变参函数的强制参数谈起宏 va_start 对 char 和 short 类型编译告警宏 va_start 源码分析猜测 __va_start 函数实现 va_arg 宏宏 va_arg 无法接受 char 和 short为啥va_arg可解析int却不能解析float类型&#xff1f;宏 va_a…

奥特曼“剧透“OpenAI发布会:不是GPT-5,也不是搜索引擎 媒体爆料:是语音助手 | 最新快讯

【图注】 萨姆奥特曼&#xff1a;不是 GPT-5&#xff0c;也不是搜索引擎&#xff0c;但我们一直在努力开发一些我们认为人们会喜欢的新东西&#xff01;对我来说&#xff0c;感觉就像魔法一样。 太平洋时间周一上午 10 点&#xff08;注&#xff1a;北京时间周二凌晨 1 点&…

AJAX概述和基本使用

01 【AJAX概述和基本使用】 1.AJAX简介 AJAX 全称为Asynchronous JavaScript And XML&#xff0c;就是异步的JS 和XML 通过AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据 AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准…

web前端学习笔记9

9. HTML5新增元素及属性 9.1 HTML5新增结构元素 HTML5引入了几个新的结构元素,极大地改善了网页的组织和结构方式。以下是HTML5中的一些关键新结构元素: 标签说明<header>页面或页面中某一个区块的页眉,通常是一些引导和导航信息<nav>可以作为页面导航的链接组&…

ICode国际青少年编程竞赛- Python-1级训练场-变量练习

ICode国际青少年编程竞赛- Python-1级训练场-变量练习 1、 a 8 for i in range(8):Dev.step(a)Dev.turnRight()a - 12、 a 3 for i in range(4):Dev.step(a)Dev.turnRight()a a 1 Dev.step(5)3、 a 4 for i in range(4):Dev.step(2)Dev.step(-5)Dev.step(3)Spaceship.…

网络编程套接字和传输层tcp,udp协议

认识端口号 我们知道在网络数据传输的时候&#xff0c;在IP数据包头部有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。IP地址是帮助我们在网络中确定最终发送的主机&#xff0c;但是实际上数据应该发送到主机上指定的进程上的&#xff0c;所以我们不仅要确定主机&…