(资料图片仅供参考)
1.计数器
FPGA中一切与时间有关的电路都会使用到计数器计数是一种最简单的基本运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量\计数和控制的功能,同时兼有分频功能.计数器在数字系统中应用广泛,如电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中做乘法,除法运算时记下加法\减法次数;有如在数字仪器中对脉冲的计数等计数器在FPGA最常用的时序逻辑电路,通过计数器可以知道各个信号之间的关系计数器一般从0开始计数,计满清0或者是计到一定次数清0
2. FPGA实现
- 前0.5s处于点亮状态,后0.5s处于熄灭状态
2.1 计数器设计关键
计数器关键:什么时候开始计数,什么时候清零
- 计数器在复位信号撤销之后,时钟沿到来就可以立即进行计数
- 计数器清0:计满或者计到需要的值,哪一个值是需要计到的值?比如需要计数1s,就需要知道计数器计多少个数(50M时钟)
- f = 50MHz = 50000KHz = 50000_000(十进制)Hz,单位时间内信号进行周期性变化的次数,50000_000Hz表示单位时间内进行了50000_000次周期性变化,每次变化所用的时间为t
- t = 1/f = (1/50000_000) = 20ns -- 时钟周期,计数器每一次计数经过的时间为20ns
- 计数器需要计数的个数M:M = 1s/20ns = 5*10^7
- 计数器的最大值是:M-1(从0开始计数)
2.2 模块框图和波形图
- 计数器是对时钟信号进行计数,所以要有时钟信号,复位信号
- 引出一路输出信号到LED灯波形图绘制非常重要,按照时钟,复位信号,输入,输出的顺序画波形图
- 设置一个中间变量进行计数,复位信号下赋予初值,复位信号撤销且在上升沿开始计数优化
- 计数到M/2-1之后进行清零,再计数到M/2-1之后再次清0,也可以实现上述前0.5s灯亮,后0.5s灯灭,且每次计数都是M/2
- 第一种条件下计数到M-1(4999999),转化为二进制需要26bit,优化之后计数到M/2-1(2499999)需要使用25bit,节省资源量
2.3 RTL
module counter#( parameter CNT_MAX = 25"d24_999_999 // 例化模块的参数传递接口,参数之间加,)( input wire sys_clk, input wire sys_rst_n, output reg led_out); // 声明计数器变量,位宽25bit reg [24:0] cnt; // 参数定义 // 计数器的计数最大值 // parameter可以用与模块内部,也可以用于参数例化模块的参数传递 parameter CNT_MAX = 25"d24_999_999; // 普通模块参数定义 // localparam CNT_MAX = 25"d24_999_999; // 只用于模块内部 counter #( .CNT_MAX (100); // 实例化的时候参数也写在这个位置,并且可以修改参数 ) counter_inst1 // 带有参数的模块实例化的模块名称写在参数列表之后 ( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .led_out (led_out) ); counter #( .CNT_MAX (100); // 实例化的时候参数也写在这个位置,并且可以修改参数 ) // 多个模块实例化可以传递不同的参数 counter_inst1 ( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .led_out (led_out) );endmodule
module counter#( parameter CNT_MAX = 25"d24_999_999; // 例化模块的参数传递接口)( input wire sys_clk, input wire sys_rst_n, output reg led_out); // 声明计数器变量,位宽25bit reg [24:0] cnt; // 计数器变量赋值 always @ (posedge sys_clk or negedge sys_rst_n) begin if(sys_rst_n == 1"b0) begin cnt <= 25"d0; end else if(cnt = CNT_MAX) begin cnt <= 25"b0; end else cnt <= cnt + 25"d1; end // 输出信号赋值 always@(posedge sys_clk pr negedge sys_clk_n) begin if(sys_rst_n == 1"b0) led_out <= 1"b0; else if(cnt == CNT_MAX) led_out <= ~led_out; else led_out <= led_out; endendmodule
- 编译代码
2.4 Testbench
`timescale 1ns/1nsmodule tb_counter(); reg sys_clk; reg sys_rst_n; wire led_out; initial begin sys_clk = 1"b1; sys_rst_n <= 1"b0; #20; sys_rst_n <= 1"b1; end always #10 sys_clk = ~sys_clk; counter #( .CNT_MAX (25"d24) ) counter_inst ( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .led_out (led_out) );endmodule
2.5 上板验证
2.6 其他方式实现
- 当计数器计满之后,添加一个cnt_reg变量,给这个变量的信号产生一个周期的脉冲(拉高一个周期),然后拉低
- cnt信号正常
- led_out信号在检测到cnt_flag信号为高电平的时候,会进行一次翻转
- 使用脉冲标志信号cnt_flag,当计数器计数到M/2-2的时候,在下一个周期(M/2-1)周期上升沿产生一个脉冲,同样在cnt_flag信号拉高的时候led_out进行翻转,这样就能实现led_out和计数信号同步,没有延迟周期引入脉冲标志信号cnt_flag,可以简化if中的条件语句,在进行复杂设计的时候可以节省资源
module counter#( parameter CNT_MAX = 25"d24_999_999; // 例化模块的参数传递接口)( input wire sys_clk, input wire sys_rst_n, output reg led_out); // 声明计数器变量,位宽25bit reg [24:0] cnt; reg cnt_flag; // 计数器变量赋值 always @ (posedge sys_clk or negedge sys_rst_n) begin if(sys_rst_n == 1"b0) begin cnt <= 25"d0; end else if(cnt = CNT_MAX) begin cnt <= 25"b0; end else cnt <= cnt + 25"d1; end // 计数器标志位赋值 always @ (posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) cnt_flag <= 1"b0; else if(cnt ==(CNT_MAX - 25"d1)) cnt_flag <= 1"b1; else cnt_flag <= 1"b0; // 输出信号赋值 always@(posedge sys_clk pr negedge sys_clk_n) begin if(sys_rst_n == 1"b0) led_out <= 1"b0; else if(cnt_flag == 1"b1) led_out <= ~led_out; else led_out <= led_out; endendmodule
标签:
-
11-计数器
1 计数器**FPGA中一切与时间有关的电路都会使用到计数器**计数是一种最简单的基本运算,计数器就是实现这种
-
全球热点!河北工程大学研究生部赴鸿力轴承调研考察
【机床商务网栏目机床人才】5月16日,河北工程大学研究生部主任赵继军带队赴校级研究生培养实践基地——邯
-
埃隆马斯克透露有多少完美的特斯拉司机将获得下一个FSDBeta-天天时快讯
特斯拉计划在本周末向司机发布最新的“全自动驾驶”测试版,埃隆马斯克今天证实,尽管只有那些被认为最安全
-
安徽华邦机械有限公司_安徽华邦
1、安徽华邦建设工程有限公司是2018-03-29在安徽省六安市注册成立的有限责任公司(自然人投资或控股),注册
-
天天微头条丨沪指跌逾1% 下跌个股近4100只
南方财经5月25日电,指数走弱,沪指下挫跌逾1%,深成指跌0 91%,创业板指跌0 54%。游戏、传媒、人工智能、
-
冒充消防员“送大订单”?被原阳警方成功抓获!
后对方想让舒先生再帮其购买数箱罐头,并将“罐头厂家”的微信推送给舒先生,示意舒先生添加其微信购买,且
-
最后的汉族(对于最后的汉族简单介绍)
聊聊一篇后的汉族,对于最后的汉族简单介绍的文章,网友们对这件事情都比较关注,那么现在就为大家来简
-
用光影展现魔都魅力!上海新地标城市之美摄影大赛,等你来参加
即日起,新民晚报社将发起主办“爱我中华砥砺奋进”上海新地标城市之美摄影大赛,征集以上海范围内的城市地
-
天天通讯!中央气象台:较强降雨过程开启 内蒙古东部及东北等地风力较大
今天起至28日,中东部地区将出现一次大范围较强降雨过程,预计西南地区东部、江南西北部、江汉、江淮、西北
-
焦点热门:鲅鱼圈高铁站是北站吗
不是,鲅鱼圈高铁站不是北站。鲅鱼圈高铁站位于辽宁省大连市西南部,距离市区中心约50公里,属于沈阳铁路局
-
今年上海高考、中考禁止建筑施工作业时段公布
央视网消息:据“上海环境”公众号消息,为给广大考生创造一个良好的复习迎考和考试环境,2023年5月31日晚2
-
我国持续深入推进垃圾分类工作 2025年底前基本实现垃圾分类全覆盖
原标题:我国持续深入推进垃圾分类工作(主题)2025年底前基本实现垃圾分类全覆盖(副题)中工网北京5月24
-
全球时讯:2023吉祥文化金银币价格表(2023年05月25日)
金投网提供2023吉祥文化金银币价格表(2023年05月25日)相关信息!
-
pbe下载、lol美测服下载 教你一键下载pbe教程
pbe作为lol的测试服,我们上线游玩就可以将自己的等级升到30级,并且还可以产生体验到很多的赛季内容,许多
-
顺丰特快拓宽“次晨达”覆盖范围,试点超时主动退费服务-天天热议
随着618大战的临近,快递企业相继卷起了服务。时效与服务处于行业领先的顺丰也没有停下脚步,通过资源整合
-
拍大师使用教程手机_拍大师使用教程
你们好,最近小活发现有诸多的小伙伴们对于拍大师使用教程手机,拍大师使用教程这个问题都颇为感兴趣的,今
-
帝奥微(688381)5月24日主力资金净卖出345.61万元
截至2023年5月24日收盘帝奥微688381报收于3665元上涨133换手率167成交量99730手成交额367301万元5月24日的
-
增加应变能力 转换理财思路
继多家银行宣布下调协定存款与通知存款利率后,近日部分城商行在本市又下调了定期存款利率。面对又一轮“降
-
2月25日是什么星座女(2月25日是什么星座)
1、阳历2月25日是双鱼座,下面为你介绍十二星座,供你对照。2、星座名,星座属性,幸运数字。3、辛运颜色,
-
焦点短讯!鼎泰高科(301377):5月24日北向资金减持9.88万股
5月24日北向资金减持9 88万股鼎泰高科。近5个交易日中,获北向资金减持的有4天,累计净减持4 21万股。近20
-
我最闪亮歌词_完整版歌词|天天日报
我最闪亮歌词,完整版歌词很多人还不知道,现在让我们一起来看看吧!1、灯光和烟火一起闪耀。2、没有我的梦
-
银行查征信可以查到哪些内容 主要查这些内容具体情况详细内容介绍
想必大家现在对于银行查征信可以查到哪些内容主要查这些内容方面的消息都是比较想了解的吧,那么针对于银行
-
发现常用工具在预测年轻绝经后妇女的骨质疏松骨折风险方面效果不佳_热点在线
常用的骨折风险评估工具(FRAX)包括自我识别的种族和信息,而骨质疏松症自我评估工具(OST)则没有,在确定跨种
-
当前速读:葡萄酒干煸鸡(关于葡萄酒干煸鸡的简介)
大家好,葡萄酒干煸鸡,关于葡萄酒干煸鸡的简介很多人还不知道,现在让我们一起来看看吧!1、葡萄酒干煸鸡
-
上市公司国有股权监督管理办法-艺博股涨停
低市盈率股与价值生长股怎么剖析?低市盈率股与价值生长股哪个更重要?榜首,画家画出来的画朴素的农人看不
-
防水材料sbs
大家都知道不管家庭装修还是做一些工程是少不做防水的,防水卷材主要是用于建筑墙体、屋面、以及隧道、公路
-
【全球速看料】燕京啤酒:接受国新证券等机构调研
燕京啤酒(SZ000729,收盘价:11 99元)发布公告称,2023年5月24日,燕京啤酒接受国新证券等机构调研,公司
-
微头条丨吐温的吸光系数_吐温的分类
想必现在有很多小伙伴对于吐温的分类方面的知识都比较想要了解,那么今天小好小编就为大家收集了一些关于吐
-
深圳机场:拟投资设立深圳机场免税合资公司 世界即时
证券时报e公司讯,深圳机场5月24日晚间公告,为进一步提升深圳机场商业资源价值,打造世界一流的机场免税品
-
天天热推荐:近期新冠感染者上升情况如何?记者走访上海医院发热门诊发现……
近期我国新冠病毒主要变异株为XBB,二阳感染人数有所增加,多家医疗机构显示:发热门诊人数明显上升,医院