请教时钟拉长
时间:10-02
整理:3721RD
点击:
请教下各位大大,如何将时钟拉长?比如
- 'timescale 1ns/1ps
- always #244 clk = ~clk //这是产生一个488ns的周期时钟 //使用一个帧同步信号syn,对时钟进行强行复位,帧同步信号周期125us,计算后,会有256个clk// 但125us - 256*488ns = 72ns
- //要用syn将最后一个(第255个)clk强行拉长72ns,请问该怎么实现啊?
- always #244 begin if(!frame_synch) begin clk488ns = ~clk488ns; end else begin clk488ns = clk488ns; end end
我用上面的代码跑出来,实现不了功能...
请教各位 应该怎么实现? 谢谢了....
你给的代码连计数到255周期都没有,怎么可能实现,你主时钟是多少也不知道。
其实你都有帧同步信号了,靠帧同步强制复位不就好了,没必要拉长最后一个clk
这里给的代码没给全 大概意思是一帧当中最后如果剩下有多余的时间,要求这段多余的时间内 时钟被拉高(或者保持不变) 在下一帧开始后又恢复正常。
由于只是在testbench里实现,后来我找了个方法 用always #125000 syn=~syn; 来实现帧信号的产生, 用repeat来实现的clk的拉长,最后做出来了。
但这里有个问题,比如我用vhdl写的话 其实一个process就直接搞定了,因为process可以不用跟延时,而verilog中的always必须要跟延时
比如
- process
- begin
- # 244 clk=~clk; end
- always #244
- begin
- clk =~clk;
- end
就这么点区别,如果里面跟点逻辑判断 差别就大了 因为always总是要先等244再执行,而process则是判断了,再看等不等244
说回来 刚入门 语言不熟是大问题...
我写一个你看看
initial begin
clk = 1'b0;
forever begin
#244;
clk = ~clk;
end
end
您写的这个是产生488周期的时钟 并没有涉及到拉长的问题哈 thanks anyway~
