2013-03-24 3 views
2

VHDL에서 process의 모든 단계가 순차적으로 실행되지만 FPGA가 순차적으로 단계를 실행할 수있는 방법이 궁금합니다. 순차적 인 할당, 함수 및 유사 항목이 FPGA에서 어떻게 생성되는지 매우 혼란 스럽습니다.FPGA의 순차 코드 정보

process(d, clk) 
begin  
    if(rising_edge(clk)) then 
    q <= d; 
    else 
    q <= q; 
    end if;  
end process; 

이것은 간단한 D- 래치의 코드 일 뿐이지 만 이것이 FPGA에서 어떻게 구현 될까요?

답변

5

순차적으로 "실행"되지는 않지만 신시사이저는 코드를 순차적으로 해석하고 이러한 해석에 맞도록 하드웨어 디자인을 만듭니다. 당신이 클럭 과정에서 두 번 signal에 값을 할당하면 두 번째 효과를 (하는 signal는 단지 process 문장의 끝 부분에 할당되어 있지 기억한다 동안 예를 들어

는 첫 번째 과제는 단순히 무시된다 즉시) :

signal a : UNSIGNED(3 downto 0) := (others => '0'); 

(...) 

process(clk) 
begin 
    if(rising_edge(clk)) then 
    a <= a - 1; 
    a <= a + 1; 
    end if; 
end process; 

위의 과정은 항상 당신이 if 문 내부의 두 번째 할당이있는 경우, 신디사이저는 단순히 a 두 가지 경로를 만들 것이다, 마찬가지로 1로 a을 증가합니다 - 때 if 문의 감소를 풀필이 아니다 d와 증가 할 때를 나타냅니다.

변수를 사용하는 경우 중간 값이 사용되지만 변수가 즉시 새 값을 사용하므로 아이디어가 동일합니다.

그러나 신디사이저가 process을 순차적으로 해석하는 모든 "마법"을 수행 한 다음 설명 된대로 하드웨어를 생성합니다.

이 예제는 기본적으로 D 플립 플롭 (자일링스 FPGA 툴 iirc는 래치와 플립 플롭을 구별하고 플립 플롭은 에지 감지 형이며 래치는 레벨 감지 형)을 설명합니다. 일반적으로 권장됩니다. 그것은 자동으로 다른 경우에는 그 값을 유지합니다

process(clk) 
begin 
    if(rising_edge(clk)) then 
    q <= d; 
    end if; 
end process; 

:

당신은 기본적으로 같은 코드를 작성할 수 있습니다. 이것은 FPGA 내부의 플립 플롭 (flip-flop)으로 구현 될 것이다. 대부분의 FPGA는 많은 다른 하드웨어를 매핑 할 수있는 룩업 테이블과 플립 플롭 (flip-flops) 블록으로 구성됩니다. 위의 코드는 룩업 테이블을 우회하여 블록 중 하나의 플립 플롭을 사용합니다.

특정 FPGA에 대한 데이터 시트를 살펴봄으로써 내부 동작에 대해 자세히 배울 수 있습니다. 예를 들어 Spartan3 시리즈 FPGA의 경우 24 페이지를 살펴보십시오 Xilinx Spartan3 FPGA Family Data Sheet

+0

고맙습니다.하지만 신호는 다른 출력 또는 입력을 연결하는 선과 같고 변수는 메모리 요소와 같습니다 ...... .......이 내 개념은 사실입니까? 아닙니다 ??????? –

+0

신호는 전선에 비유 될 수 있습니다, 예. 그러나 클록 된 프로세스에서 신호에 값을 할당하면 신시사이저는 입력 신호와 출력 신호 사이의 플립 플롭을 유추합니다. 대부분의 툴에는 생성 된 RTL 다이어그램을 볼 수있는 기능이 있어야합니다. 코드를 조금 실험 해보고 실제로 합성 된 코드가 어떻게 보이는지 살펴보십시오. – sonicwave

+0

고마워 .... .... :) –