728x90
Clock Implementation and Operation
  • WR/RD 동작에 대해 공통 클럭이나 독립 클럭 domain으로 설정이 가능하다.
Built-in FIFO Support
  • width와 depth 방향으로 내장 FIFO들을 cascade 하여 대형 FIFO를 구현 가능하다.
  • ECC(Error Correction Checking) 기능도 사용 가능하다.
  • UltraScale 디바이스에서는 Low Latency 옵션을 통해 더 깊은 FIFO를 구현할 수 있다.
First-Word Fall-Through
  • FWFT(First-Word Fall-Through) 기능은 읽기 동작을 수행하지 않아도 FIFO 내 다음 데이터를 미리 볼 수 있게 해주는 기능이다. FIFO에 데이터가 존재하면 첫 번째 Word는 자동으로 출력 버스(dout)에 나타난다. 이 기능은 Low Latency가 필요한 애플리케이션이나 출력 데이터 기반으로 throttling을 해야 하는 경우 유용하다.
  • 기능 사용 시, Read, PROG_empty, Data_count 신호의 타이밍과 의미가 달라질 수 있으므로, 검증이 필요해진다.
Non-Symmetric Aspect Ratio Support
  • Write Port와 Read Port의 폭이 서로 다른 FIFO를 생성할 수 있고, 내부적으로 자동으로 폭 변환을 수행한다.
  • 예를 들어, 32-bit 데이터를 입력받고 8-bit로 쪼개서 나가야 하는 상황이면 외부에서 따로 처리할 필요 없이 설정을 해주면 된다. 예시와 같은 상황에서는 1번을 읽고 4번을 쓸 수 있지만, 반대로 4번 읽고 1번을 쓰는 상황에서는 Latency가 길어지는 상황이 발생할 수 있다.
Embedded Register in Block RAM and FIFO Macros
  • Block RAM이나 FIFO Macro에는 성능 향상과 파이프라인 단계 추가를 위한 내장 출력 레지스터(Embedded output register)가 존재한다. 이 기능을 사용시 `dout`과 `VALID` 신호에 대해 1 CLK latency를 추가할 수 있다.
Error Injection and Correction Support
  • Block RAM이나 FIFO Macro에는 오류 주입(Error Injection) 및 오류 검출/정정(Error Correction Checking, ECC) 기능이 내장되어 있다.
Programmable Flag
  • 일정 수준까지 Threshhold를 걸고 그 이상으로 올라올 때 flag를 올리게 만들 수 있다.

설정 가능한 Implementation Options이 있다.

  1. Non-symmetric aspect ratios (different read and write data widths)
  2. First-Word Fall-Through
  3. Uses Built-in FIFO primitive
  4. ECC support
  5. Dynamic Error Injection

Independent Clocks

Synchronization Stages

독립적인 클럭을 사용할 때는 CDC를 고려해야 한다. 그러기 위해서는 내부에서 데이터를 샘플링을 해준 다음 전달해야 한다. 이를 몇 번을 거쳐 전달할 것인지를 정하는 단계이다.

[삽질로그]
신호가 비동기 클럭에 의해 샘필링 될 때, FF는 준안정(metastable)에 빠진다. 0도 1도 아닌 값을 갖는다. 이러한 상황을 해결하기 위해선 확률적으로 시간이 필요하다.
논리적으로 준안정 신호를 사용하는 것은 실패를 야기하기에, 시스템을 보호하기위해 시간을 FF의 형태로 준비하면 된다. 첫 번째 FF을 지났는데도 준안정일지라도, 다음 FF을 지나면 안정적으로 해결될 확률이 올라간다.
클럭의 주파수에 따라, FF의 구조와 다른 신호가 안정적으로 변하는 데에 2개의 FF은 충분하지 않을 수 있다. 만약 충분하지 않다면, FF의 수를 3개나 4개로 늘리면 된다. 그러면 안정적으로 변하는 MTBF(Mean Time Between Failures)를 얻을 수 있다.
준안정 FF을 추가하면 Latency가 증가한다는 결과가 있다. FIFO에서는 이 결과는 `wr_en` 로 발생하는 `emtpy`의 시간이 증가했다는 의미가 된다(`rd_en`과 `full`도 마찬가지).
그래서 FPGA EDA에서는 MTBF를 분석이 최적화 되어있어, IP로 이런 블럭을 생성 시에 선택할 수 있게 한다.

728x90