2013-04-01 1 views
0

다음 합성 대기 시간을 기다리는 다중 지연 카운터를 구현해야합니다.VHDL에서 동일한 프로세스에서 둘 이상의 지연 카운터를 사용하는 방법

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 

답변

0

제어 신호의 상태 변경 이벤트를 시작점으로 사용할 수 있습니다. 예 : 78ns위한

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; 
     .... 

는이 기간 t와 n 형 카운터 클럭이 필요 지연 여기서 n * t = 78ns

+0

두 번째 if 문에서 starttx = 1이면 X 클럭주기를 기다립니다. 위 예제에서 일어나는 StattxM = 1 –

+0

에 대한 1 클럭 사이클을 기다리십시오. StartTx = 1 일 때 DelayCounter가 X로 초기화됩니다. DelayCounter가 1 씩 감소되고 StartTxM이 1 클럭으로 설정되는 즉시. 다음 StartTx = 1 때까지 DelayCounter는 0으로 유지됩니다. – baldyHDL

0

3 개의 별도 상태 시스템으로 다시 작성하십시오. 필요한 경우 하나의 프로세스로 결합 할 수 있지만 각각에 대한 프로세스가 더 간단하고 명확합니다.

"wait X cycles"에 카운터를 사용하십시오 : StartTX가 표시되면 유휴 상태에서 X로로드하십시오. 대기 상태에있을 때 감소시키고 0에 도달하면 유휴 상태로 다시 천이한다.

78ns를 제 3 상태 기계에 대해 적절한 수의 사이클로 변환하고 두 번째와 동일한 방식으로 구현한다.

+0

확인 각 하나 개의 프로세스를 말할 때마다 상태 머신에 대한 의미 바로 처리할까요? 또한 모든 상태 머신 프로세스를 함께 결합하는 방법은 무엇입니까? –

관련 문제