微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教时钟拉长

请教时钟拉长

时间:10-02 整理:3721RD 点击:

请教下各位大大,如何将时钟拉长?比如

  1. 'timescale 1ns/1ps
  2. always #244 clk = ~clk  //这是产生一个488ns的周期时钟  //使用一个帧同步信号syn,对时钟进行强行复位,帧同步信号周期125us,计算后,会有256个clk// 但125us - 256*488ns = 72ns
  3. //要用syn将最后一个(第255个)clk强行拉长72ns,请问该怎么实现啊?
  4. 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必须要跟延时
比如

  1. process
  2. begin
  3. # 244 clk=~clk;  end

复制代码


  1. always #244
  2. begin
  3. clk =~clk;
  4. end

复制代码



就这么点区别,如果里面跟点逻辑判断  差别就大了  因为always总是要先等244再执行,而process则是判断了,再看等不等244
说回来  刚入门  语言不熟是大问题...

我写一个你看看
initial begin
    clk = 1'b0;
    forever begin
          #244;
          clk = ~clk;
    end
end


您写的这个是产生488周期的时钟 并没有涉及到拉长的问题哈 thanks anyway~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top