Q
안녕하세요 맛비님.
맛비님 코드를 보던 도중에
왜 F/F들은 clock의 posedge edge에만 동기화 되는거지? posedge 와 negedge 둘 다 동기화될 수도 있지 않을까? 속도도 2배 빠를 것이고, double edge F/F이 있는데?
라는 의문이 들었습니다.
그래서 인터넷 서치를 하며 내린 결론은 다음과 같습니다.
- 할 수는 있다. 하지만 하게 된다면 Register와 Register 사이의 연산량이 절반으로 줄어들 것이고, timing violation이 생길 위험이 두배 증가한다.
- 대부분의 FPGA에는 양쪽 edge에 동작하는 F/F이 없다.
라고 생각했습니다.
혹시 이 부분에 있어서 틀린 점과, 맛비님께서 아시는 또 다른 이유 있는지 질문드립니다.
항상 감사합니다 :)
A
안녕하세요 :)
저도 그런 생각을 했던 기억이 있네요.
다음문장은 이렇게 바꿨습니다. 나머지는 동의합니다.
할 수는 있다. 하지만 하게 된다면 Register와 Register 사이의 연산량 -> 시간 이 절반으로 줄어들 것이고, timing violation이 생길 위험이 두배 이상 (duty cycle 이라는 새로운 변수가 추가됨.) 증가한다.
DDR 메모리 동작시 처리량 향상을 위해서 저렇게 Dual clock 으로 동작한다고 알고 있습니다.
비메모리 설계에서는 저런 Case 가 존재할 것 같긴한데, 저도 사용해본 경험은 없습니다.
그럼 왜 안쓸까? 를 생각해보자면,
1 clock 에서 posedge, negedge 둘다를 만족하려면, 50% duty cycle 을 가져야합니다.
Clock 은 오실레이터와 PLL 을 통해서 생성이 되는데요. 이는 아날로그 회로입니다.
http://www.rfdh.com/bas_rf/begin/pll.php3 (PLL 참고)
즉, 이 Clock 은 외부 환경에 의해 변하게 되죠.
Freq 가 변하던지, Phase 가 변하던지, duty cycle 이 변하던지 등등 파형이 변형되겠죠.
가뜩이나.. 변수가 많은 Clock 파형에 duty cycle 50% 를 유지해주면서 Timing met 을 시키는건 쉽지 않습니다.
오히려 처리량을 두배로 늘리고 싶다면, 다음처럼 Freq 를 두배로 늘리는게 나은 선택으로 판단됩니다.
100 MHz (posedge) -> 200 MHz 로 늘리는게 더 쉬워요.
즐공하세요 :)
====================
posedge , negedge 는 어디다 사용하는지 추가 예를 들자면,
실제로 고속 I/O 로 data 를 전송할때, data_p, data_n clk_p, clk_n 으로 같이 전송합니다.
이는 처리량을 두배로 하겠다가 아닌, 외부 환경으로 인한 Data 의 손실을 보호하기 위함입니다.
(HDMI Interface 예)
'개발 편의성을 위한 소소한 Tips > 04 질의 응답 정리' 카테고리의 다른 글
240514 라이브 방송 QnA (0) | 2024.05.17 |
---|---|
[FPGA Q/A. 029] Vivado, Vitis 설계 내용 수정 후 프로그램 실행 (0) | 2023.02.27 |
HW 엔지니어가 알아두면 좋을 소소한 알쓸신잡 (0) | 2022.08.16 |
[Verilog HDL Q/A. 027] DDR, FIXED I/O 질문드립니다. (0) | 2022.08.05 |
[Verilog HDL Q/A. 026] DTU와 testbench에 대해 제가 제대로 이해한건지 궁금하여 여쭤봅니다 (0) | 2022.05.22 |