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

制御信号の状態変化イベントを開始点として反応できます。例:

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*t=78ns の n カウンターが必要です。

于 2013-04-01T18:20:02.840 に答える