从计数器到分频电路
来源:互联网 发布:姚明奥尼尔对决数据 编辑:程序博客网 时间:2024/05/01 19:14
一、计数器
(1)计数器代码
计数器,顾名思义就是在时钟的节拍下进行计数,一个简单的N位计数器的代码如下所示,这个计数器从0计数到2^N - 1(共计数了2^N个数,也就是N位计数器):
1 module count#(parameter N=8)( 2 input clk, 3 input clear, 4 output[N-1:0] cnt_Q 5 ); 6 reg[N-1:0] cnt; 7 assign cnt_Q = cnt; 8 9 always@(posedge clk)10 if(clear)11 cnt <= 'h0; //同步清 0,高电平有效12 else13 cnt <= cnt+1'b1; //加法计数14 15 endmodule
上述描述的计数器通过 clear 信号清除计数值,然后下一周期开始加 1 计数;当计数器计到能够存储的最大数值时, 例如本例为 8 个 1,即 8'hff 就会自动回到 0,然后开始下一轮计数。
综合得带的电路如下所示:
(2)计数器改进
如果想要实现 0~k 范围内计数,其中k ≠ 2^N ,可以将 always 语句修改为:
always@(posedge clk) if(clear) cnt <= 'h0; //同步清 0,高电平有效 else if(cnt==K) cnt <= 'h0; else cnt <= cnt+1'b1; //减法计数
前面是累加计数,下面是一个既可以递增也能递减,且具备初始值装载和复位的计数器,代码如下所示:
1 module updown_count#(parameter N=8)( 2 input clk, 3 input clear, 4 input load, 5 input up_down, 6 input [N-1:0] preset_D, 7 output[N-1:0] cnt_Q 8 ); 9 reg[N-1:0] cnt;10 assign cnt_Q = cnt;11 12 always@(posedge clk)13 if(clear)14 cnt <= 'h0; //同步清 0,高电平有效15 else if(load)16 cnt <= preset_D; //同步预置17 else if(up_down)18 cnt <= cnt+1; //加法计数19 else20 cnt <= cnt-1; //减法计数21 22 endmodule
二、计数器的用途
(1)基本的计数功能与分频
计数器的基本功能顾名思义就是计数了,用来计数,产生某个信号等等。利用这个功能,可以实现信号的分频,具体会在后面的分频电路中进行描述。
(2)看门狗
计数器其实就可以设计成看门狗。在初始状态时,看门狗电路首先装载一个大数;当状态机或者程序开始运行后,看门狗开始倒计数。如果状态机或程序运行正常,每隔一段时间应发出指令或信号让看门狗重新装载一个大 初始值,并再次开始倒计数。如果看门狗减到 0 就认为程序或状态机没有正常工作,就需要强制整个系统复位。
上面的第二处改进的计数器电路描述就是一个看门狗电路,只要加上 cnt==0 作为看门复位状态即可;而 load 信号则是状态机或软件给出的喂狗动作。
(3)特殊的有限状态机
当状态机要求没有那么严格的时候,这个时候就可以用计数器的计数值当做状态机的状态,计数增加或者减少就是改变状态。
三、分频电路
计数器实质是对输入的驱动时钟进行计数,所以计数器在某种意义上讲,等同于对时钟进行分频。例如一个最大计数长度为 N 的计数器,将其最高位作为时钟输出(占空比不一定为 1:1),则工作频率为输入时钟的 1/(2N)。通常 ASIC 和 FPGA 中,时钟都是全局信号,都需要通过 PLL 处理才能使用,但某些简易场合,采用计数器输出时钟也是能够使用的,只是需要注意时序约束。
- 从计数器到分频电路
- 分频电路
- 分频电路(偶分频、奇分频)
- 分频电路(转)
- 分频电路(转)
- [matlab]余弦分频电路
- 分频电路-verilog
- STM32 TIM预分频计数器
- 用Verilog实现电路分频
- D触发器二分频电路
- Verilog任意整数分频电路
- 欧姆龙PLC分频电路
- 用Verilog语言实现奇数倍分频电路3分频、5分频、7分频
- 关于3分频电路的讨论
- D触发器的二分频电路
- 计数器的电路的描述
- 计数器 FPGA 电路实验 作业
- 计数器 FPGA 电路实验 作业
- ajax中responseText与responseXML区别
- HTML 实现伪类之input输入框鼠标点击边框变色效果
- ie浮动问题总结
- Java 中 StringBuilder 在高性能用法总结
- 访问者模式讨论篇:java的动态绑定与双分派
- 从计数器到分频电路
- 设置域名解析的各种记录值的用法
- cvpr常用资源整理
- ueditor不显示视频,表单批量上传图片
- 17_7_20:计算一个整数二进制位中1的个数。
- 病毒 CSU
- 查找Windows端口被占用的程序、进程
- 几款表单验证插件
- 解决JSP ApplicationResource.Properties不支持中文的方法