2016-06-03 7 views
0

자일링스 소프트웨어를 사용하는 VHDL 프로그래밍에서 2 개의 다른 클록 (다른 주파수)의 상승 에지 동기화를 어떻게 감지합니까?2 개의 다른 클록의 상승 에지 동기화 감지

주파수는 31.845MHz이며 주파수는 29.972MHz입니다. 그래서 기본 목표는 2 클럭의 상승 에지 사이에 동기화가있을 때 동작을 트리거하는 것입니다. 우리는 flipflops를 사용하여 구현하려고 시도했지만 에지 동기화가 아닌 레벨 동기화 만 수행 할 수있었습니다.

그리고 vhdl에서 IFWAIT과 같은 문구에서 2 개의 다른 시계의 상승 에지를 비교할 수 없습니다.

우리는 카운터를 사용하여 펄스를 계산하려고합니다. 이를 위해 에지 매칭이 발생할 때마다 카운트를 중지해야합니다. 우리는 'Vernier Interpolation'이라는 메서드를 구현하려고합니다.

  1. 처음에, 우리는 다음과 같은 성명 코드를 사용하지만, 2 개 개의 다른 클럭 (CLK0, CLK1)의 상승 에지가 IF 문에서 비교 될 수 없기 때문에, 우리는 그것을 드롭했다.

    if(rising_edge(clk0)=rising_edge(clk1)) then wait;

  2. 우리는 다음 WAIT 문 (wait until)를 사용하여 시도했지만 실패했습니다.

  3. 그런 다음 플립 플롭과 지연 회로 (D 플립 플롭)를 사용해 보았지만 Edge 동기화가 아닌 레벨 동기화가 발생했습니다.
+1

전체 목표는 무엇이며 클럭의 주파수 범위는 무엇입니까? –

+0

주 클럭 주파수는 31.845MHz이고 또 다른 클럭 주파수는 29.972MHz입니다. 그래서 기본 목표는 2 클럭의 상승 에지 사이에 동기화가있을 때 동작을 트리거하는 것입니다. 우리는 flipflops를 사용하여 구현하려고 시도했지만 에지 동기화가 아닌 레벨 동기화 만 수행 할 수있었습니다. – KVK

+0

그리고 우리는 vhdl의 IF와 WAIT와 같은 명령문에서 2 개의 다른 클럭의 상승 에지를 비교할 수 없으므로 이는 의문의 여지가 있습니다. – KVK

답변

0

왜 이렇게하고 싶은지 잘 모르겠습니다. 두 클럭 사이의 비트 주파수에서 새 클럭이 나옵니다.

이 작업을 수행하는 올바른 방법은 가장 높은 예상 입력 빈도의 두 배 이상의 다른 클럭을 사용하여 두 클럭을 모두 샘플링하는 것입니다. 장치의 PLL 중 하나를 사용하여이 더 높은 클럭을 생성 할 수 있습니다. x2는 최소값입니다. 이상적으로는 두 샘플링 클록보다 훨씬 높은 클럭을 사용하십시오.

VHDL은 언어가 아니라 실제 하드웨어 합성에 대한 설명입니다. 그래서 Rising_Edge (clk1) = Rising_Edge (clk2)라고 말하면 '소프트웨어'가 가장자리를 감지하지 않습니다. Rising_Edge가 실제로하는 모든 기능은 하드웨어에 clk 신호를 flipflop의 클럭 입력에 연결하도록 지시하는 것입니다.

적절한 해결 방법은 샘플 클럭에 의해 클록 된 프로세스에서 '클럭'을 샘플링하고 에지 (두 개의 다른 샘플이 다른 후속)를 찾은 다음 필요한 경우 결과와 래치를 찾는 것입니다.

샘플 코드 (테스트되지 않은, 죄송합니다. 지금 시간이 없습니다).

entity twoclocks is 
port (
    op : out std_logic; 
    clk1 : in std_logic; 
    clk2 : in std_logic; 
    sample_clk : in std_logic); 
end entity; 


architecture RTL of twoclocks is 

begin 

process sample(sample_clock, clk1, clk2): 
begin 
    if rising_edge(sample_clock): 
     clk1_d <= clk1; 
     clk2_d <= clk1; 
     if clk1_d != clk1 and clk2_d != clk2 then 
     op <= '1'; 
     else 
     op <= '0'; 
     end if; 
    end if; 
end process; 

end architecture; 
+0

... 아마 단계적으로 상쇄되어 결정될 필요가 있습니다.) 그렇지 않으면 당신이 옳을 것입니다. : P Lookup 버니어 보간 기. – JHBonarius

0

매우 엄격한 타이밍 제한 조건을 사용하여 빌드해야하는 버니어 보간 자의 종류는 VHDL만으로는 만들 수 없습니다. 자원 위치 및 타이밍에 대한 장치 특정 제한이 필요합니다 (많은).

the work by A.Aloisio et al.을 확인하십시오. Aloisio와 동료들은 특정 자일링스 지연 요소를 사용하여 버니어 보간기를 구현했다.

표준 VHDL 합성은 레지스터 전송 레벨 설명에 가장 적합합니다. 나는. 클럭/동기 로직.그러나이 두 입력을 비교하려면 두 주파수의 최소 공배수 주파수에서 샘플링해야합니다. 31.845 MHz 및 29.972 MHz의 경우 무려 954.458340 MHz로 많습니다. FPGA 로직에서 이러한 종류의 속도를 보았습니다. ...하지만 Nyquist 때문에 두 배로 늘릴 필요가 있다고 생각합니다. 아마 FPGA 로직이 2GHz 스 위칭 속도를 처리 할 수 ​​있습니다. 그러나 나는 확실하지 않다.

GT 트랜시버를 사용할 수는 있지만, 그러한 트랜시버를 비표준으로 사용하기 때문에 실현하기 어려울 수 있습니다.