赞
踩
两种方法可以实现:
①PLL(后面再说)
②verilog代码实现,这里演示
用代码编写时又分两种情况:
①仅仅实现分频功能;
②更加实用的降频方法(将输出以脉冲标志信号表示)
由于分频器一般是FPGA内部使用,所以应尽量时钟信号还是使用其内部的sys_clk信号。
当将脉冲标志信号作为输出信号时,
这里两种方法都会展示。
一、六分频(偶分频)
这里实现六分频功能。
学会画波形图分析时序逻辑电路!!!将自己的逻辑波形图可以与仿真结果相比较。
1、用方法1实现(verilog代码和仿真文件不作展示)
仿真结果为:
clk_out输出信号能够很好的实现六分频。
2、用方法2实现
脉冲标志信号在RTL视图中表示为一个寄存器,时序逻辑电路中会延迟一拍,6分频即0-5计数,需要在计数到4时上升沿。
仿真结果为:
二、五分频(奇分频)
同样是两种方法:
①仅实现分频功能;
②利用脉冲标志信号clk_flag实现。
方法一:
要实现五分频,这种奇数次分频与偶数次分频有所区别,需要将上升沿和下降沿结合起来考虑,通过波形图分析可知,将clk上升沿和clk下降沿相与可以实现占空比50%的五分频功能。
编码中提示这种错误,就是忘记加分号了!
仿真结果:
输出信号一个周期显示频率为10MHz,为20ns,50MHz的五分之一,实现了五分频。
其中波形图中频率显示的设置如图:
方法二:
利用脉冲标志信号实现五分频和实现六分频是类似的, 只需要将脉冲信号上升沿的计数个数改变即可。
由于寄存器延迟一拍,所以需要在3‘d3处就触发上升沿。
一个是数值判断(按实际),一个是电平沿(延迟一拍)。
仿真结果:
10MHz,同样实现了FPGA内部电路时钟分频的效果。
主要是为了消除机械按键在被按下和被释放过程中产生的抖动问题。
方法:对按键抖动的部分进行延时,当信号稳定在低电平后输出,否则按键自身的抖动可能会被系统误判为按键多次按下。
需要计算过滤掉按键抖动的时间,用到计数器,时序电路实现,因此sys_clk和sys_rst_n信号必不可少,输入为含抖动的key_in按键信号,输出为稳定的key_flag信号。
解决几个问题:
①什么时候开始计数?
按键抖动时间一般为5ms-10ms
当检测到第一个低电平时开始计数,直接设置延时30ms是一定能找到稳定状态的,但是这样直接延时含有不确定性,会多出很多考虑时间;我们设置为低电平开始计数,高电平则将计数器清零。
②计数器计数个数是多少?最大值是多少?
这里我们设置20ms的延时
故20ms计数1,000,000,由于计数器从0开始计数,故计数的最大值为999,999。
③计数器计满后如何处理?以及滤除抖动信号后的脉冲输出信号何时拉高?
问题1、当计数器计满后清零,计数到最大数999,999时拉高,不保持最大数999,999,则保持状态的低电平内会有多次脉冲信号出现,不可;
问题2、当计数器计满后不清零,计数到最大数999,999时拉高,保持最大数999,999,脉冲信号为高电平,能够保证脉冲高电平只有一个,但是这一高电平就会拖很久(因为最大数一直保持),不是我们要的脉冲信号,不可;
解决方案:当计数器计满后不清零,计数到 最大数-1 = 999,998时拉高,保持最大数,而且不选择最大数为脉冲信号高电平触发,选择最接近最大数的 最大数-1 的那一瞬间触发高电平,刚好得到我们需要的脉冲信号。
仿真结果:
这个仿真文件的编写还不是很熟练
包括前后扰动的随机实现和按键输入的随机情况。
未记录,有需要再上传
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。