합성 툴로 VHDL 변수를 합성하는 방법


9

VHDL 변수가 합성 도구로 합성되는 두 가지 방법을 알고 있습니다.

  • 조합 논리로 합성 된 변수
  • 실수로 래치로 합성 된 변수 (초기화되지 않은 변수가 신호 또는 다른 변수에 지정된 경우)

VHDL 변수를 합성 할 수있는 다른 방법은 무엇입니까? (예 : FF?로 해석 될 수 있습니까?)

답변:


8

나는 세 가지 가능성을 구별 할 것이다.

  1. VHDL 변수에는 하드웨어 표현이 전혀 없습니다. 다음 예제를 가정하십시오

    signal a,b,c : integer;  
    ...  
    process ( clk ) is  
    variable var : integer := 0;  
    begin  
    if ( rising_edge(clk) ) then  
    var := a + b;  
    c <= var;  
    end if;  
    end process;

    변수 var는 실제로 조합 논리로 합성되지 않습니다 (이것이 문제의 의미라고 가정). a + b하드웨어로 합성되는 것은 과제의 오른쪽 입니다. 엄밀히 말하면 변수는 조합 논리로 합성되지 않습니다.

  2. 변수는 단지 중간 클럭을 유지하는데, 이는 동일한 클럭 사이클에서 평가되고 (> 다시 하드웨어 합성되지 않음 (이것은 1 임)) 다음 클럭 사이클에서 평가됩니다-> 플립 플롭이 합성됩니다.

  3. 변수에 새로운 값 (일부 신호에 따라 다름)이나 기본값이 할당되지 않은 조건 분기가 존재하는 경우 이러한 두려운 래치 중 하나가 유추됩니다. 보통이 경우는 의도하지 않은 일이 발생합니다 :-)


"두려운 걸쇠"는 클럭킹 프로세스 밖에서 만 발생할 수 있으며 요즘 대부분의 사람들은 클럭되지 않은 프로세스를 사용하지 않습니다. 따라서 래치 드레드는 더 이상 문제가되지 않습니다 (IMHO). 이것은 당신 플립 플롭에 별도의 프로세스로 조합 논리를 작성해야 했던 옛날부터 시작됩니다
Martin Thompson

4

변수를 저장하기 전에 변수에 값을 사용하면 프로세스가 마지막으로 저장했을 때 저장된 값 (클럭 된 프로세스에서 이전 클럭 사이클의 값)을 얻습니다. 이는 레지스터 또는 FF로 합성됩니다.

물론, 첫 번째 클럭 사이클에서 reset 절에서 변수를 초기화하지 않으면 가비지가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.