답변:
나는 세 가지 가능성을 구별 할 것이다.
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
하드웨어로 합성되는 것은 과제의 오른쪽 입니다. 엄밀히 말하면 변수는 조합 논리로 합성되지 않습니다.
변수는 단지 중간 클럭을 유지하는데, 이는 동일한 클럭 사이클에서 평가되고 (> 다시 하드웨어 합성되지 않음 (이것은 1 임)) 다음 클럭 사이클에서 평가됩니다-> 플립 플롭이 합성됩니다.
변수에 새로운 값 (일부 신호에 따라 다름)이나 기본값이 할당되지 않은 조건 분기가 존재하는 경우 이러한 두려운 래치 중 하나가 유추됩니다. 보통이 경우는 의도하지 않은 일이 발생합니다 :-)
변수를 저장하기 전에 변수에 값을 사용하면 프로세스가 마지막으로 저장했을 때 저장된 값 (클럭 된 프로세스에서 이전 클럭 사이클의 값)을 얻습니다. 이는 레지스터 또는 FF로 합성됩니다.
물론, 첫 번째 클럭 사이클에서 reset 절에서 변수를 초기화하지 않으면 가비지가 발생합니다.