【问题标题】:VHDL: slowing clock down methodsVHDL:减慢时钟的方法
【发布时间】: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 用于创建新的较慢(或更快)时钟。

标签: vhdl clock divider


【解决方案1】:

有点晚了,但这里有一个实现时钟缩放的简单方法。将缩放矢量的长度更改为您需要的任何值。传递 clockScalers(x) 作为缩放时钟。

signal clockScalers : std_logic_vector(30 downto 0);
-- Clock process 
process (clk100mhz, rst) begin
    if (rst = '1') then
        clockScalers <= (others=>'0');

    elsif (clk100mhz'event and clk100mhz = '1') then
        clockScalers <= clockScalers + '1';
    end if; 
end process;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多