【发布时间】:2014-10-02 15:36:14
【问题描述】:
作为 VHDL 的新手,我想知道是否有任何特殊原因无法单独使用计数器来降低时钟速度?到目前为止,在我查看的所有示例中,人们似乎已经为新时钟创建了一个实体和单独的进程。 下面的代码是我的尝试。
variable clk_counter : integer range 0 to 30 := 0;
begin
if rising_edge(clk) then
clk_counter:=clk_counter+1;
if clk_counter = 30 then
clk_counter := 0;
...
任何帮助将不胜感激。
【问题讨论】:
-
您问题中的代码是您所指的示例之一,还是您试图简化它们?
-
1.如果您想创建一个全新的实体,这是个人喜好。 2. 意识到你并没有“放慢”时钟。您正在创建一个充当clock_enable 的计数器。当 clk_counter=30 时,可以允许一些代码执行。但是您的所有代码都应该以相同的频率计时,即您的主时钟。
-
代码是我的尝试。 Russel,我遇到的麻烦是我希望计数器每 30 个时钟周期时钟启用一次。但是,它似乎没有在我的其余代码上注册
-
假设您想要发生的事情都发生在
if clk_counter = 30 then语句中,这应该每30个周期成功启用一次时钟。但是,时钟使能和时钟分频之间存在一些重要差异。首先,以这种方式使用时钟启用根本不会影响您的实际时钟信号,它只会影响 if 语句中的寄存器。其次,如果你做复杂的逻辑,你仍然会受到原始时钟的建立和保持时间的限制。使用实际的时钟分频器将放宽您的设置和保持时间。 -
然而,使用实际时钟分频器的问题在于它更复杂。虽然可以使用基于计数器的切换作为时钟,但它的时序性能非常差,因为内部网络没有像专用时钟网络那样针对最小偏差进行优化。因此,分频时钟缓冲器原语或 MMCM/PLL 用于创建新的较慢(或更快)时钟。