2013-12-19 2 views
0

신호가 감도 목록에 포함되면 신호가 변경 될 때마다 해당 프로세스가 실행됩니다. 예 :프로세스의 비동기 신호에서 설정 시간이 중요합니까?

-- State Memory 
-- Synchronous Reset 
process (clk) 
begin 
    if (rst = '1') then 
     p_state <= initialization; 
    elsif (rising_edge(clk)) then 
     p_state <= n_state; 
    end if; 
end process; 

그러나 민감도 목록에 rst가 포함되면 비동기 재설정이됩니다. 내 질문은 이제 첫 번째 주장 일 것입니다. 프로세스가 실행됩니다. 그러나 첫 번째 신호의 값이 '1'이되도록 안정한 첫 번째 신호가 있습니까?

+0

질문을 검토하고 명확히 할 수 있습니까? 네가 묻고있는 것을 정확하게 파악할 수는 없다. Bts. 위의 코드는 감도 목록에'rst'와'initialization' 신호가 없다는 합성 경고를줍니다. –

답변

0

일반적으로 VHDL은 register transfer level에서 디자인을 설명하는 데 사용됩니다. 이 추상화 수준에서는 설정 및 보류 시간이 무시됩니다. 회의 및 설정 시간은 종종 로직보다는 디자인의 실제 레이아웃에 더 가깝기 때문에 설계 논리를 검증 할 때 일반적으로이 가정이 합리적입니다.

불완전한 민감도 목록이있는 VHDL process 블록을 쓰면 합성 도구가 일반적으로 민감도 목록을 무시하기 때문에 시뮬레이션과 합성의 위험이 있습니다. 당신은 비동기 리셋 패턴을 사용하고 감도 목록에서 rst를 생략하여 동기 리셋을 실행하지 않아야

-- Asynchronous Reset 
process (clk, rst) 
begin 
    if (rst = '1') then 
     p_state <= (others => '0'); 
    elsif (rising_edge(clk)) then 
     p_state <= n_state; 
    end if; 
end process; 

-- Synchronous Reset 
process (clk) 
begin 
    if (rising_edge(clk)) then 
     if (rst = '1') then 
      p_state <= (others => '0'); 
     else 
      p_state <= n_state; 
     end if; 
    end if; 
end process; 

: 결과적으로, 당신은 정말 두 가지 선택이있다.

+0

위의 "비동기 재설정"예제는 민감도 목록에'initialization'이 없습니다. 또한 외부 신호에 의존하는 비동기식 리셋 값은 일부 FPGA 기술에서 문제를 일으킬 수 있습니다. –

+0

@MortenZdk 좋은 캐치 ... 리셋이 상수 값을 사용하지 않고 있음을 알지 못했습니다. – godel9

+1

@MortenZdk '초기화'는 신호가 아니라 리셋 후에 시작하는 상태라고 가정합니다. – zennehoy

2

귀하의 예는 동기식 재설정이 아닙니다.

rst이 프로세스 감도 목록에 없기 때문에 비동기식 재설정이 잘못 구현되었습니다. 시뮬레이션에서는 동기 리셋처럼 보일 수 있지만 합성은 감도 목록을 무시하고 비동기 리셋을 합성합니다.

initialization은 정의 된 상태이며 신호가 아니라고 가정합니다. 그렇지 않은 경우 재설정 값은 항상 일정해야하며 다른 신호에 의존하지 않아야합니다. 내가 제대로 질문을 이해하면

0

, 당신은 플립 플롭의 설정 시간 (그리고, 결과적으로, 또한 유지 시간)에 대해 우려하고있다. 이러한 시간은 메타 입력을 방지하고 올바른 데이터 저장을 위해 필요한 재설정 입력이 아닌 데이터 입력을 나타냅니다.

비동기 리셋은 플립 플롭의 트랜지스터 레벨에서 데이터 또는 클럭 관련 정보를 무시하고 다른 신호와 관계없이 출력을 0으로 강제 설정합니다.