在Vhdl中创建实时延迟

在Vhdl中创建实时延迟,vhdl,Vhdl,我想写一个设计,在这个设计中,一个进程在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

我想写一个设计,在这个设计中,一个进程在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分钟的延迟。

在同步设计(任何带有时钟的设计)中,将实时延迟等同于与计数时钟一样简单,或者计数通过计数时钟生成的时基

例如,假设您需要处理的最小实时单位是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)是
开始
如果(上升沿(I_CLK)),则
柜台