시계의 양쪽 가장자리 사용


10

Verilog와 Quartus II를 사용하여 Altera Cyclone IV를 프로그래밍하고 있습니다. 내 디자인에서는 클럭의 양쪽 가장자리를 사용하여 듀티 사이클이 50 % 인 홀수 인자로 클럭을 나눌 수 있습니다. 다음은 내 코드 스 니펫입니다.

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

이제 이것을 컴파일하면 Quartus II에 다음 오류가 발생합니다.

Verilog HDL adc_clocking.v (83)에서 항상 오류 생성 : 이벤트 제어는 변수 "low_jitter_clock_i"의 양과 음의 에지를 모두 테스트 할 수 없습니다.

디자인에서 주어진 시계의 양수와 음수를 모두 사용하려면 어떻게해야합니까?

답변:


7

에지 감지 항상 블록의 레지스터에 할당하면 플립 플롭을 정의하게됩니다. FPGA에는 클록의 양쪽 에지에서 트리거 할 수있는 플립 플롭이 없습니다.

원하는 것을 수행하려면 시계의 각 가장자리마다 하나씩 두 개의 별도의 항상 블록이 있어야하며, 글리치를 생성하지 않고 두 블록의 출력을 결합하는 방법을 찾아야합니다.

예를 들어, 항상 하나의 블록에는 프로그램 가능 분배기가 포함될 수 있습니다. 홀수로 출력 듀티 사이클이 50 % 미만이되도록 설계하십시오. 첫 번째 블록의 출력을 1/2 클럭만큼 지연시킨 다음 두 출력을 함께 지연 시키려면 두 번째 항상 블록 (다른 클럭 에지에서)을 사용하십시오. 짝수 분배기 값에 대해 두 번째 블록의 출력을 비활성화하십시오.


클럭의 포지티브 및 네거티브 에지를 모두 사용하려는 이유는 듀티 사이클이 50 %이기 때문입니다.
Randomblue

그래, 알았어 내 대답은 직접 해결합니다. 디바이더 값이 짝수 일 때 50 % 듀티 사이클을 얻는 방법을 이미 알고 있다고 가정했습니다. 명확하지 않은 것은 무엇입니까?
Dave Tweed

듀얼 에지 플립 플롭이 없습니까? 그럴 이유가 없습니다. 아무도 그들을 만들지 않는 것으로 밝혀졌습니다 (또는 적어도 우리가 아는 사람은 없습니다). Martin이 지적한 것처럼 이중 에지 플립 플롭을 지원하는 CPLD가 있습니다 : xilinx.com/products/silicon-devices/cpld/coolrunner-ii/…
Philippe

3

이것이 내부 논리를위한 것이라면 사용 가능한 플립 플롭에 훨씬 더 가깝게 써야 할 것입니다. Coolrunner-II를 제외하고 본질적으로 이중 에지 레지스터가있는 프로그래밍 가능한 로직을 인식하지 못합니다.

따라서 네게 지 always블록과 포지션 블록 을 생성 하고 출력을 조합 논리와 결합하는 두 개의 블록 을 만들어야 합니다.

또는 PLL을 사용하여 클럭을 두 배로 늘리면 일반적인 단일 에지 로직을 사용할 수 있습니다.



1

데이브 트위드 (Dave Tweed)는 FPGA가 클럭의 양쪽 가장자리에서 작동 할 수있는 플립 플롭 하드웨어를 포함하지 않는 한, 기존의 단일 에지 플립 플롭을 사용하여 원하는 동작을 구현하기 위해 자체 로직을 작성해야합니다. 이중 에지 플립 플롭과 매우 유사하게 동작하는 회로를 구현할 수있는 여러 가지 방법이 있지만, 이러한 회로는 일반적으로 플립 플롭과 관련된 타이밍 제약과 다른 타이밍 제약을 추가한다.

예를 들어, 간단한 접근 방식은 2 개의 2 입력 xor와 한 쌍의 "T"플립 플롭 (클럭 펄스가 도달 할 때 입력 상태가 클럭 에지가 출력을 전환해야하는지 여부를 나타내는)을 결합하는 모듈을 갖는 것입니다. 상승 에지에 의해 트리거되고 하강 에지에 의해 트리거됩니다. 모듈의 출력은 플립 플롭 출력의 xor가되고 두 ​​플립 플롭의 입력은 모듈의 출력과 입력의 xor가됩니다.

이 방식으로 설계된 회로는 설정 및 전파 시간이 길지만 타이밍 제약이 추가되어 기본적으로 이중 에지 플립 플롭과 같이 작동합니다. 피드백 경로에 있지 않은 일반적인 플립 플롭은 클럭 에지의 시작에 런트 펄스가 많으면 클럭이 유효한 레벨로 안정화되고 설정 시간 제약 조건이 클록 펄스가 안정적으로 활성화 된 시간으로부터 측정 된 제 1 런트 펄스 및 홀드 시간 및 클록 활성 시간 제약이 충족된다. 플립 플롭 출력의 동작은 클럭이 불안정한 시간 동안 정의되지 않지만 클럭이 안정화 된 후에 정의됩니다. double-xor-double-flop 모듈은 출력을 변경하는 모든 클럭 에지가 다른 클럭 에지와 안전 거리를 유지해야한다는 추가적인 타이밍 제약 조건을 추가합니다. 입력이 출력과 맞지 않는 동안 매우 근접한 연속으로 3 개의 클럭 에지를 가짐으로써 이러한 제약 조건을 충족하지 못하면 출력이 불확실하거나 준 안정 상태로 남을 수 있습니다 (짝수의 에지를 포함하는 시나리오는 문제가되지 않습니다. 이러한 시나리오에는 런트 펄스 만 포함되므로 런트 펄스 다음에 유효한 펄스가 있기 때문에 3- 에지 케이스 (또는 1보다 큰 홀수의 경우)가 문제가됩니다.

다른 회로 설계는 위와 같이 두 개의 플립 플롭을 갖지만 출력을 멀티플렉서에 공급하는 것입니다. 이 회로는 런트 펄스에 의해 불량 상태로 전환되지 않으며 클럭 제한은 기본 래치와 동일하지만 출력이 높고 유지해야하는 (또는 낮고 낮게 유지되어야한다는 단점이 있습니다. ) 시계 가장자리에서 잠깐 동안 글리치가 발생할 수 있습니다. 중요하지 않은 회로도 있지만 다른 회로에서는 중요합니다.

로직 합성 툴이 어떤 타이밍 제약 조건이 중요한 것으로 분석되어 자동으로 이중 에지 플립 플롭을 구현하는 것이 가능할 수 있지만 그렇게하는 것은 다소 어려울 것입니다. 또한 디자인을 조금만 변경하면 구현에 큰 변화가 생겨 예상치 못한 동작 변화가 발생할 위험이 높아집니다.

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