创建于VHDL实时延迟(Creating a real-time delay in Vhdl)

2019-10-22 21:42发布

我想写其中,一个进程得到1分钟后恰好激活的设计。

我已创建一个多个过程来创建使用计数器递增,并且切换的信号,并给予在具有要被延迟的方法的灵敏度列表信号的延迟。

signal delay_over : std_logic;

process ( delay_over )
begin 
     if clk'event and clk '1' then
         --design
     end if;
end process;

delay:process ( clk )
variable counter : integer := 0;
begin 
--design to create delay
end process;

什么是价值或和式配重,我应该使用它来创建精确的1分钟的延迟。

Answer 1:

等同在同步设计一个真正的时间延迟 (与时钟的任何设计) 是作为计数时钟一样简单 ,或计数能够通过计数时钟产生的时基。

例如,假设你需要处理实时的最小单位是1秒(也就是,你将永远不会需要处理的十分之一,毫秒,等等)。 然后,您的时基可以秒。 所以,你需要弄清楚如何从一个时钟周期(持续时间)到第二转换。

让我们假设你有一个25MHz的时钟。 这意味着有在第二25e6时钟。 这意味着你需要数到25e6(或(25e6)-1,这取决于你如何设置它),计数器复位回零,并开始重新计数。 每次你的计数器为0时(或25e6,或在计数其他任何一个值),可以脉冲一个时钟周期使能。 这使你“秒”时基。

您所有的其他逻辑可以被引用到了“秒”时基启用。 要创建10秒的实时延迟,你只需要算秒时基启用的10个脉冲。

下面是一个例子的一个片段,给你的想法:

   timebase : process (I_CLK) is
   begin
      if (rising_edge(I_CLK)) then
         counter_1sec_en <= '0';
         if (counter < COUNTS_IN_1_SEC-1) then
            counter <= counter + 1;
         else
            counter_1sec_en <= '1';
            counter         <= (others => '0');
         end if;
      end if;
   end process timebase;

   delay : process (I_CLK) is
   begin
      if (rising_edge(I_CLK)) then
         seconds_delay_done <= '0';
         if (counter_1sec_en = '1') then
            if (seconds_delay < NUM_SECONDS_TO_DELAY-1) then
               seconds_delay <= seconds_delay + 1;
            else
               seconds_delay_done <= '1';
               seconds_delay <= (others => '0');
            end if;
         end if;
      end if;
   end process delay;

一些注意事项要使用该片段:

  • 一切都同步到你的时钟, I_CLK
  • COUNTS_IN_1_SEC是一个常量,它是在你的赫兹时钟频率
  • counter_1sec_en脉冲每秒一次,对于单个I_CLK周期
  • NUM_SECONDS_TO_DELAY是一定的秒数要延迟。 例如,60秒。
  • seconds_delay_done一个脉冲I_CLK周期时的延迟已完成。
  • 您可能需要对何时布防/启用延迟,并可能在多少秒延时控制更多的控制权(即NUM_SECONDS_TO_DELAY可能不是一个常数)。

在你的情况,如果你想在1分钟的东西被“激活”,您可以使用seconds_delay_done使以“揭开序幕,”不管它是什么,你要开始。

此外,看到一个不同的问题,这几乎相同的答案: https://stackoverflow.com/a/29948250/561560



文章来源: Creating a real-time delay in Vhdl
标签: vhdl