使用时钟的两个边沿


10

我正在使用Verilog和Quartus II对Altera Cyclone IV进行编程。在我的设计中,我想同时使用时钟的两个边沿,以便可以用占空比为50%的奇数因子进行时钟分频。这是我的代码片段:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

现在,当我编译它时,Quartus II抛出以下错误:

Verilog HDL始终在adc_clocking.v(83)处构造错误:事件控制无法同时测试变量“ low_jitter_clock_i”的正沿和负沿

如何在设计中同时使用给定时钟的上升沿和下降沿?

Answers:


7

当您在对边沿敏感的始终块中分配寄存器时,您将定义一个触发器。FPGA没有可在时钟的两个边沿触发的触发器。

为了做您想做的事情,您将需要有两个单独的Always块,每个时钟块一个,然后找到一种在不产生毛刺的情况下组合两个块的输出的方法。

例如,一个总是块可能包含您的可编程分频器。设计时,当给定奇数时,输出占空比小于50%。使用第二个Always块(在另一个时钟沿)将第一个块的输出延迟1/2个时钟,然后将两个输出进行或运算。对于偶数除法器值禁用第二个块的输出。


我想同时使用时钟的上升沿和下降沿的原因是占空比为50%。
Randomblue'9

是的,我明白了。我的回答直接解决了这个问题。我假设您已经知道当分频器值为偶数时如何获得50%的占空比。不清楚的是什么?
Dave Tweed

没有双沿触发器?没有内在的原因。事实证明,没有人在制造它们(或者至少我们不认识)。正如Martin所指出的,有一个CPLD支持双沿触发器:xilinx.com/products/silicon-devices/cpld/coolrunner-ii/…–
Philippe

3

如果这是为了内部逻辑,则可能必须写得更接近可用的触发器。除了Coolrunner-II外,我不知道任何带有固有双沿寄存器的可编程逻辑。

因此,您将必须创建两个always块,一个用于忽略,一个用于姿势,然后将它们的输出与一些组合逻辑相结合。

或者使用PLL使时钟加倍,然后可以使用常规的单边逻辑。



1

正如Dave Tweed指出的那样,除非FPGA包括可以在时钟的两个边沿上运行的触发器硬件,否则必须编写自己的逻辑以使用常规的单边触发器来实现所需的行为。虽然有许多不同的方式可以实现一种电路,该电路的行为非常类似于双沿触发器,但是这种电路通常会增加一些时序约束,这些时序约束与与触发器相关的约束不同。

例如,一种简单的方法是使一个模块结合两个2输入xor和一对“ T”触发器(其中,当时钟脉冲到达时输入的状态指示该时钟边沿是否应触发输出),一个由上升沿触发,由下降沿触发。模块的输出将为触发器输出的异或,两个触发器的输入将为模块输出及其输入的异或。

以这种方式设计的电路将基本上像双沿触发器一样工作,尽管建立和传播时间更长,但具有额外的时序约束。如果时钟边沿的开始处有一束欠幅脉冲,只要时钟稳定在一个有效电平,并且设置建立时间限制(从时钟开始之前开始测量),那么不在反馈路径上的普通触发器就不会在意。满足第一个欠幅脉冲以及从时钟脉冲稳定激活的时间开始测量的保持时间和时钟激活的时间限制。在时钟不稳定期间,触发器输出的行为是不确定的,但在时钟稳定后才定义。双异或双触发器模块将增加额外的时序约束,即将改变输出的任何时钟沿必须与可能这样做的任何其他时钟沿保持安全距离。未能满足该约束条件(例如,通过在输入与输出不匹配的情况下非常连续地具有三个时钟沿)可能会使输出处于不确定或亚稳态(请注意,涉及偶数个沿的场景是无关紧要的) ,因为这种情况只涉及欠幅脉冲;三边沿情况(或其他大于1的奇数情况)值得关注,因为在欠幅脉冲之后会有一个有效脉冲。

另一种电路设计是使两个触发器如上所述,但将它们的输出馈送到多路复用器中。该电路不会因欠幅脉冲而进入坏状态,并且其时钟约束与底层锁存器相同,但它的缺点是输出高且应保持(或低而应保持低) ),因此可能会在时钟沿上短暂出现毛刺。在某些电路中,这并不重要,但在其他电路中,则是重要的。

逻辑综合工具可能有可能通过分析指定了哪些时序约束为重要的条件来自动实现双沿触发器,但是这样做有些困难。设计的微小更改可能导致实现方面的重大更改,从而导致行为发生重大且意想不到的更改,这也会增加这种风险。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.