verilog 中关于实现定时器的问题,用于控制延时

对于主程序中会要求有时钟延迟,我希望实现调用任务task来实现时间的判断,时钟频率通过参数可以改变,大约是30M~50M的样子,我开始已经实现了计数器以及控制计数到第几个产生一个脉冲的程序,觉得剩下的就是加一个公式,把时钟脉冲计算成时间,对时间进行判断就行了,可是实现不了了。
总之就是这样,是这样的一个计时器:外部给一个时间预置,开始进行计时,时间到,产生一个标志位返回,主程序状态机继续执行接下来的程序,求高人点拨一下,不胜感激,也希望结交此类高手,谢谢谢谢谢谢啦~

你把这个工作想的太复杂了,其实你不论用那种方法做这个事情,计数器进行时间的计量,比较器确定到达预定的时间没,语言到硬件的编译结果的基本元件都是不会变化的,verilog中的function 也好,task也好只是为了简化设计语言的,学好verilog的前提条件是明白自己编写的程序编译器给出了怎样的编译结果,语言与硬件怎样的对应关系,就像你的这个问题,只要一个计数器加一个比较器就可以实现事情在状态机中:
staten_1:
t_cnt <= 0;
staten_2: //延时控制
t_cnt <= t_cnt +1;
if (t_cnt < NEED_TIME)
state <= staten_2;
else
stete <= staten_3;
staten_3: //延迟时间到

其他的解决方法很多,但都脱不开计数器加比较器的硬件实现追问

你说的很对,我也确实是依赖计数器和比较器进行实现的,关键是我想编一个移植性能强的定时器,你给的代码对我很有启发,可是,怎么将时钟频率自动转化实现时间比较?我是利用公式“t=(1/clk_sys)*n*1_000_000_000;”转化为纳秒级的数字,再与预设时间进行比较,其中,clk_sys为设定的时钟频率的参数,n为计数器记得的时钟数,可是仿真仿不出来,求点拨

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-28
同意如下观点
你把这个工作想的太复杂了,其实你不论用那种方法做这个事情,计数器进行时间的计量,比较器确定到达预定的时间没,语言到硬件的编译结果的基本元件都是不会变化的,verilog中的function 也好,task也好只是为了简化设计语言的,学好verilog的前提条件是明白自己编写的程序编译器给出了怎样的编译结果,语言与硬件怎样的对应关系,就像你的这个问题,只要一个计数器加一个比较器就可以实现事情在状态机中:
staten_1:
t_cnt <= 0;
staten_2: //延时控制
t_cnt <= t_cnt +1;
if (t_cnt < NEED_TIME)
state <= staten_2;
else
stete <= staten_3;
staten_3: //延迟时间到
相似回答