0

需要实现多个延迟计数器用于跟随等待时钟周期,可综合。

    if(clk'event and clk='1')then           
           if (StartTX = 1)then
                    TxBusy <= '1';
                    StartTxp <= '1';
                    Wait for 1 clock cycles;
                    StartTxp <= '0';
           End IF;

           IF (StartTX = 1)then
                    Wait x clock cycles  ;
                    StartTxM <= '1';
                    Wait 1 clock cycles;
                    StartTxM<= '0';
           End IF ;  

           IF (StartCal = 1) AND (StartInut =1 ) AND (IValid = 1)then
                    Wait 78 ns   ;
                   Interrupt <= '1'   ;  
                    Wait 1 clock cycle
                    Interrupt = 0
           End IF
4

2 回答 2

0

重写为三个独立的状态机。如果必须,这些可以组合成一个过程,但每个过程一个过程可能更简单、更清晰。

使用计数器“等待 X 个周期”:当您看到 StartTX 时,将其加载为处于空闲状态的 X;在等待状态时递减它,当它达到 0 时转换回空闲状态。

将 78ns 转换为第三个状态机的适当周期数,并以与第二个相同的方式实现。

于 2013-04-01T17:25:33.880 回答
0

您可以对控制信号的状态变化事件做出反应作为起点。例子:

if(clk'event and clk='1')then 
      StartTx_Last<=StartTx; -- 1 clock cycle delayed copy of control signal
      StartTxp <= '0'; -- default value

       if (StartTX = 1 AND StartTx_Last=0) then -- activate signals only for one clock
                TxBusy <= '1';
                StartTxp <= '1';
                DelayCounter <= X; -- start delay counter
       End IF;

       -- set StartTxM after X clocks for 1 cycle
       case DelayCounter is
       when 1 => -- activity state
          StartTxM <= '1';
          DelayCounter<=0;
       when 0 => -- idle state
           StartTxM <='0';
       when others => -- delay states
          DelayCounter<=DelayCounter - 1;
       end case;
       ....

对于 78ns 延迟,您需要一个周期为 t 的时钟和一个 n 计数器,其中 n*t=78ns

于 2013-04-01T18:20:02.840 回答