FPGA 디자인이 대부분 (또는 완전히) 비동기식 일 수 있습니까?


39

우리는 대학에서 (5 년 전) 매우 짧은 FPGA / Verilog 코스를 가졌으며 항상 모든 곳에서 시계를 사용했습니다.

나는 이제 취미로 FPGA를 다시 시작하고 있으며, 그 시계에 대해 궁금해 할 수는 없습니다. 그것들이 절대적으로 필요합니까, 아니면 FPGA 기반 디자인이 완전히 비동기식 일 수 있습니까? 복잡한 로직을 구축하고 최대한 빨리 리플을 만들 수 있습니까?

신호가 회로의 모든 부분을 통해 전파되고 출력이 안정화되는 시점을 아는 것과 같이 이것에 많은 어려움이 있다는 것을 알고 있습니다. 그것은 요점 옆에 있습니다. 실제로 완전히 비동기적인 디자인을 만들고 싶지는 않지만 기능에 대한 이해를 향상시키기 위해서입니다.

초보자에게는 시계가 절대적으로 필요한 유일한 구성은이며 reg, 일반적인 FPGA (예 : Cyclone II)는 특정 클럭 신호에 플립 플롭이 사전 배선되어 있다는 것을 알고 있습니다. 이 올바른지? 이와 같은 다른 암시 적 시계가 있으며 일반적으로 디자인에 의해 수동으로 구동 될 수 있습니까?


3
케임브리지 대학의 사이먼 무어 (Simon Moore)는 테스트 칩 제작을 포함하여 비동기 설계에 대해 많은 연구를했다는 것을 알고 있습니다. 완전히 새로운 디자인 도구 세트가 필요하고 이상한 부작용이 있습니다. 예를 들어 온도에 반비례하는 실행 속도.
pjc50

답변:


27

짧은 대답은 다음과 같습니다. 예; 더 긴 대답은 : 당신의 시간 가치가 없습니다.

FPGA 자체는 문제없이 완전히 비동기식으로 설계 할 수 있습니다. FPGA를 통한 타이밍을 예측할 수 없기 때문에 결과는 문제입니다. 더 큰 문제는 타이밍과 결과 디자인이 장소와 경로 세션마다 거의 다를 수 있다는 사실입니다. 개별 비동기 경로에 제한을 두어 시간이 오래 걸리지 않도록 할 수 있지만 최소 지연을 지정할 수 있는지 확실하지 않습니다.

결국 그것은 약간의 디자인 변경으로도 디자인이 예측할 수없고 잠재적으로 완전히 변할 수 있음을 의미합니다. 여전히 작동하는지 확인하기 위해 모든 것을 변경할 때마다 전체 타이밍 보고서를 살펴 봐야합니다. 반면, 설계가 동기식 인 경우, 장소 및 경로 끝에서 패스를 찾거나 실패합니다 (제약 조건이 올바르게 설정되었다고 가정하면 전혀 시간이 걸리지 않음).

실제로 사람들은 완전한 동기식 설계를 목표로하지만 단순히 신호를 버퍼링하거나 반전해야하는 경우, 신호를 제대로 제한하지 않는 한 플립 플롭을 거치지 않아도됩니다.

희망이 조금 정리되기를 바랍니다.


3
비동기식 FPGA 디자인을 가진 일부 디바이스를 사용해야했습니다. 그들은 함께 일하기가 어려웠습니다. 최소한 타이밍 제한을 사용하십시오
Tim Williscroft

1
FPGA로 비동기 설계를 구현할 수는 있지만 대부분의 FPGA는 동기 설계를 지원하도록 설계되었습니다. 비동기 설계에 낭비되는 리소스 (PLL, 클럭 분배 회로 및 막대한 양의 플립 플롭)가 많이 있습니다.
Dmitry Grigoryev

2
이 답변은 특히 좋은 조언을 제공하지 않습니다. 클록없는 FPGA를 생성 할 수 있으며 실제로 위치 및 경로를 단순화하고 타이밍 요구 사항과 관련된 수많은 문제를 제거하며 미세한 파이프 라인으로 인해 처리량이 상당히 높아질 수 있습니다. 실제 문제는 클럭 특성이 타이밍 특성이 매우 다르기 때문에 클럭 회로를 클럭없는 FPGA에 매핑하려고 할 때 발생합니다. 이 작업을 수행 할 수 있으며 변환을 수행하는 데 약간의 프런트 엔드 처리가 필요합니다. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Ned Bingham

19

"복잡한 논리를 구축하고 최대한 빨리 파급 할 수 있는가?" 예. 완전히 비동기식 인 전체 CPU가 구축되었습니다.이 중 적어도 하나는 세계에서 가장 빠른 CPU였습니다. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

이론적으로 비동기 설계가 사용 가능한 도구에 의해 잘 지원되지 않기 때문에 사람들이 이론적으로 동기 설계 기법에 비해 몇 가지 장점이 있지만 비동기 설계 기법을 거부한다는 사실이 나에게 영향을 미친다.

나에게 이것은 철교 공구보다 목공 공구를 가진 사람이 더 많기 때문에 모든 교량을 목재로 만들 것을 권장하는 것과 같습니다.

다행히도 비동기 설계의 장점 중 일부는 GALS (global asynchronous local synchronous) 설계를 사용하여 대부분 동기 설계 기법을 사용하면서 얻을 수 있습니다 .


마이그레이션의 이점은 그다지 중요하지 않지만 현대는 PCB를 정사각형 그리드에 라우팅 하는 경향에 대해 똑같은 방식으로 생각 합니다 .
로마 Starkov

@romkyns-비직 사형 그리드를 사용하는 PCB 소프트웨어를 작성하는 것이 어렵다는 사실에 더 가깝 습니다 .
코너 울프

1
@ supercat : 네 단계 논리를 암시한다고 생각합니다 . 잊혀진 것 같은 다상 클럭 신호 중 하나입니다 .
davidcary

1
@davidcary : 하나의 와이어에있는 "위상"(상승 에지에 의해 하나의 위상이, 하강 에지에 의해 하나의 위상)을 제외한 종류. 기본적으로, 나는 래치 클럭을 클린 상승, 클린 하강, 늦게 상승, 늦게 하락의 네 가지 범주로 나누었습니다. (L / CB)에 의해 클락 된 클록은 깨끗한 상승 또는 하강 에지에서 모든 상승 또는 하강 에지에서 데이터를 가져올 수 있습니다. L / CB 늦은 상승 에지는 L / CB 클린 상승 에지에서 하강 에지로 데이터를 가져올 수 있습니다. 하강 에지에 의한 L / CB는 L / CB 클린 하강 또는 상승에서 데이터를 가져올 수 있습니다.
supercat

1
@davidcary : 모든 래치에 대해 가장 빠른 전파 시간이 가장 긴 유지 시간을 초과하고 클록 게이팅 로직 및 해당 에지에 의해 트리거 된 "late"래치를 통해 클록 에지에서 가장 긴 신호 경로가 다음 에지, 클록 에지 사이의 최소 시간을 초과하지 않는 경우, 그러한 설계는 전파 지연의 조합 하에서 완전히 신뢰할 수 있고 내부적으로 생성 된 전이성이 없어야한다고 생각합니다.
supercat

5

아직 언급되지 않은 한 가지 요소는 전이성입니다. 결과적인 상태가 전파 지연 또는 기타 예측할 수없는 요소에 의존하도록 래칭 회로가 일련의 입력 / 전환으로 히트되면 결과 상태가 깨끗한 "높음"또는 "낮음"일 것이라는 보장은 없습니다. 예를 들어, 현재 "로우"를 출력하고 클록 에지가 도착할 때 거의 동시에 입력 입력이 로우에서 하이로 변경되는 에지 트리거 플립 플롭을 고려하십시오. 입력 변경 전에 클럭 에지가 충분히 길어지면 출력은 다음 클럭 에지까지 낮게 유지됩니다. 입력 변경 후 클럭 에지가 충분히 오래 걸리면 출력이 로우에서 하이로 빠르게 한 번 전환되어 다음 클럭 에지까지 유지됩니다. 이러한 조건 중 어느 것도 해당되지 않으면. 낮은 상태를 유지하거나 빠르게 한 번 전환하여 높은 상태를 유지할 수 있지만 잠시 동안 낮은 상태를 유지 한 다음 전환하거나 나중에 전환 한 다음 다시 전환하거나 몇 번 앞뒤로 전환 할 수 있습니다.

디자인이 완전히 동기화되어 있고 모든 입력이 이중 동기화 된 경우 타이밍 펄스가 동기화 시간의 첫 번째 래치에 충돌하여 두 번째를 혼동시키기 위해 완벽한 시간에 전환하게 될 가능성은 거의 없습니다. 걸쇠. 일반적으로 이러한 상황을 "발생하지 않을 것"으로 간주하는 것이 안전합니다. 그러나 비동기식 디자인에서는 그러한 것들에 대해 추론하기가 훨씬 더 어렵다. 래치 회로 (플립 플롭뿐만 아니라 래치 역할을하는 로직 조합)의 타이밍 제약 조건을 위반하는 경우 다음에 래치를 강제하는 유효한 입력 조건이있을 때까지 출력이 어떻게되는지 알 수 없습니다. 알려진 상태로. 지연된 출력으로 인해 다운 스트림 입력의 타이밍 제약 조건이 위반되어 예기치 않은 상황이 발생할 수 있습니다.

비동기 회로를 모델링하는 가장 안전한 방법은 거의 모든 출력 회로가 "0"과 "1"사이에서 전환 될 때마다 잠시 동안 "X"출력을 생성하는 것입니다. 불행하게도,이 접근 방식은 종종 거의 모든 노드가 "X"를 표시합니다. 실제로는 거의 확실하게 안정적인 동작을 초래 한 경우에도 마찬가지입니다. 입력 변경 후 즉시 모든 출력이 "X"가되고 입력이 안정 될 때까지 "X"를 유지하는 것으로 시뮬레이트 될 때 시스템이 작동 할 수 있다면, 회로가 작동하지만 비동기 회로가 이러한 제약 조건에서 작동한다는 신호입니다. 종종 어렵다.


4

물론 설계 요구 사항이 느려서 많은 내부 지연이 여전히 관심있는 시간보다 몇 배 더 길어도 문제가되지 않으며이를 고려하기 위해 타이밍 보고서를 볼 수 있지만 내부 상태 정보없이 유용하게 수행 할 수있는 작업에는 제한이 있습니다. 100 입력 멀티플렉서와 ​​같은 것을 만들고 싶다면 각 입력마다 다른 전파 지연이 있음을 기억하십시오. 실제로 예측할 수없는 지연 발진 피드백 루프를 통해 흥미롭고 혼란스러운 효과를 얻을 수 있습니다. 아마도 완전히 비동기식 FPGA 기반 신시사이저가 차세대 '아날로그'가 될 수 있습니다.


4

그래 넌 할수있어. 플립 플롭을 완전히 무시하고 LUT에서 모두 빌드 할 수 있습니다. 그리고 / 또는 대부분의 Xilinx FPGA의 상태 요소를 (에지 트리거) 플립 플롭 대신 (레벨 트리거) 래치로 사용할 수 있습니다.


3
이것의 위험은 로직 컴파일러를 제한하지 않으면 일부 게이트에 대해 음의 전파 시간을 갖는 로직을 생성 할 수 있다는 것 입니다. 예를 들어, X=(someComplexFormula)및을 지정 하고 Y=X & D컴파일러가 해당 수식을 X 대신 사용하고이를 X & D동등한 것으로 판단하는 A & D경우 컴파일러는 X가 아닌 A와 D로 계산 Y를 대체하여 Y를 계산할 수 있습니다. 이러한 대체는 조합 논리에는 유효하지만 비동기 순차 논리에는 혼란을 초래합니다.
supercat

@supercat-자일링스 툴을 사용해 본 적이 없지만 Altera FPGA를 사용했을 때 RTL이 아닌 연결된 게이트 모듈로 중요한 경로를 지정할 수있는 옵션이 항상 있었다. 비활성화 됨.
Jules

@Jules : 프로그래밍 가능한 모든 논리 설계는 다소 언어 인 Abel을 사용했지만 일부 CPLD가 구현할 수있는 방식으로 항목을 지정할 수는 있지만 VHDL 또는 Verilog 합성 도구에는 어려움이있을 수 있습니다. 예를 들어, 내 프로젝트 중 하나에서 Xilinx 부품에 클록, 비동기 세트 및 비동기 리셋이 있다는 점을 이용하여 비동기로드 가능 시프트 레지스터를 구현했습니다. Verilog 또는 VHDL을 사용한 적이없는 FPGA에서 이러한 작업을 수행해야하는 경우 어떻게해야하는지 어떻게 알 수 있습니까? BTW, 만약 메모리가 제공된다면, 시프터에 T 플롭을 사용했고 ...
supercat

... 타이밍 기록이 시작 펄스 근처에서 nop-clock이 발생하면 비동기 쓰기는 다음과 같이 충분히 멀리 확장된다고 가정 할 때 타이밍이 T 입력이 낮을 때만 비동기 쓰기가 발생할 수있는 타이밍이었습니다. 안정된 값을 보장하기 위해, 그리고 끝 부분에서 nop-clock이 발생하면 단순히 안정된 값을 잠그는 것입니다. VHDL 또는 Verilog에서 이러한 사례를 어떻게 효율적으로 처리 할 수 ​​있는지 잘 모르겠습니다.
supercat

@supercat-Cyclone IV Device Handbook을 보면서 비슷한 문제를 겪고 있습니다. 같은 문제에 대한 최선의 접근 방식은 "LAB-wide synchronous load"옵션을 사용하는 것입니다 ( "LAB"는 16 개의 논리 요소 그룹입니다) 따라서 이러한 레지스터의 크기가 16 비트의 배수로 끝나지 않으면 일부 비트가 낭비되지만 어쨌든 가장 유용한 옵션 인 것 같습니다). 이제 두 가지 옵션이 있습니다. 필요한 레지스터를 구현하는 방법 (일반적으로 가장 적합한 옵션)을 선택하는 데 필요한 합성 verilog를 작성할 수 있습니다. 또는 엄격한 타이밍이있는 경우 ...
Jules

3

@Andrey가 지적했듯이 그것은 당신의 시간 가치가 없습니다. 특히 도구는이 작업을 수행하지 않으므로 완전히 스스로 할 수 있습니다. 또한 내장 레지스터가 있기 때문에 사용하지 않아도 아무것도 저장되지 않습니다.


3

실제로 세 가지 유형의 디자인이 있습니다.

  1. 조합. 클럭 및 피드백 경로가없고 시스템에 "메모리"가 없습니다. 하나 이상의 입력이 변경되면 변경 사항이 로직을 통해 리플됩니다. 얼마 후 출력은 새로운 상태가되어 입력이 다시 변경 될 때까지 유지됩니다.
  2. 동기 순차. 시스템은 레지스터와 조합 논리 블록으로 구성되며, 레지스터는 소수 (종종 1)의 클럭으로 클럭됩니다. 클럭이 여러 개인 경우 한 클럭 도메인에서 다른 클럭 도메인으로 전달되는 신호에 대해 특별한 준비가 필요할 수 있습니다.
  3. 비동기 순차. 과거 이벤트의 설계 메모리를 제공하고 쉽게 분석 된 클록 라인에 의해 클록되지 않는 피드백 경로, 래치, 레지스터 또는 기타 요소가 있습니다.

일반적으로 조합 논리를 합성 / 최적화 할 때 도구는 중요한 모든 것이 최종 결과이며 그 결과를 해결하는 데 필요한 최대 시간이라고 가정합니다.

순전히 조합적인 디자인을 만들면 올바른 결과를 얻을 수 있습니다. 출력은 임의의 순서로 변경 될 수 있으며 최종 값에 도달하기 전에 여러 번 변경 될 수 있습니다. 이러한 디자인은 논리 리소스가 매우 낭비됩니다. 대부분의 논리 요소는 대부분의 시간을 유휴 상태로 유지하는 반면 순차적 시스템에서는 해당 요소를 재사용하여 여러 데이터 항목을 처리 할 수 ​​있습니다.

순차 동기 시스템에서 중요한 것은 조합 블록의 출력이 다음 플립 플롭에 클럭 될 때 올바른 상태로 설정되었다는 것입니다. 그들이 어떤 순서로 변화하는지 또는 그 과정에서 결함인지 여부는 중요하지 않습니다. 다시 말하지만 시계가 충분히 느리면 도구가 이것을 논리로 쉽게 바꿀 수 있습니다.

비동기식 순차 시스템에서는 이러한 가정이 적용되지 않습니다. 결함은 중요 할 수 있으며 출력 변경 순서는 중요 할 수 있습니다. 툴과 FPGA 자체는 동기식 설계를 위해 설계되었습니다. 표준 FPGA 또는 불완전하게 설계된 시스템에서 비동기 시스템을 구현할 가능성에 대해 많은 논의가 필요합니다 (더 자세한 내용은 Google 비동기 FPGA 디자인).


2

예. 프로세스 타입 구조가 없다면 레지스터를 유추하는 것과 같은 일을해서는 안됩니다. 클럭을 필요로하는 온보드 메모리와 같은 것들이 있지만, 실제로 원한다면 비동기 적으로 생성 할 수도 있습니다.


1
이 답변을 하나의 답변으로 삼으려고 했습니까?
Kevin Vermeer

1

FWIW 비동기 로직 솔루션의 분명한 목표 중 하나는 전 세계적으로 전력 소비를 줄이는 것입니다.

이러한 글로벌 시계 / PLL / 버퍼는 많은 줄을 태 웁니다.

FPGA 솔루션이 배터리 구동 방식 (예 : Lattice Icestick)에 적용됨에 따라이 측면은 훨씬 더 많은 관심을 끌 것입니다.


순차 회로와 동일한 동작을 수행하는 잘못 설계된 조합 회로가 경우에 따라 부분 결과가 계산되고이를 반영하기 위해 최종 출력이 업데이트됨에 따라 많은 과도 전이가 발생할 수 있다는 점을 고려하는 것이 좋습니다. CMOS 회로 (대부분의 FPGA와 마찬가지로)에서 전력 소비는 전이 횟수에 거의 비례합니다. 클럭은 불필요한 전환을 유발할 수 있지만 현재 필요하지 않은 회로 부분에서 클럭을 비활성화하여 전력을 많이 줄일 수 있습니다.
Jules
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.