강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

sam716님의 프로필 이미지
sam716

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

[HDL 15장] HW 의 동작을 제어하는 FSM 을 이해해보자. (이론편) - (원리만 깨달으면 자판기, 시계는 금방 설계합니다.)

Code 질문입니다.

작성

·

564

1

안녕하세요 맛비님.

맛비님 코드를 보던 도중에

왜 F/F들은 clock의 posedge edge에만 동기화 되는거지? posedge 와 negedge 둘 다 동기화될 수도 있지 않을까? 속도도 2배 빠를 것이고, double edge F/F이 있는데?

라는 의문이 들었습니다.

 

그래서 인터넷 서치를 하며 내린 결론은 다음과 같습니다.

  1. 할 수는 있다. 하지만 하게 된다면 Register와 Register 사이의 연산량이 절반으로 줄어들 것이고, timing violation이 생길 위험이 두배 증가한다.

     

  2. 대부분의 FPGA에는 양쪽 edge에 동작하는 F/F이 없다.

라고 생각했습니다.

혹시 이 부분에 있어서 틀린 점과, 맛비님께서 아시는 또 다른 이유 있는지 질문드립니다.

항상 감사합니다 :)

답변 1

1

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 :)

저도 그런 생각을 했던 기억이 있네요.

다음문장은 이렇게 바꿨습니다. 나머지는 동의합니다.

할 수는 있다. 하지만 하게 된다면 Register와 Register 사이의 연산량 -> 시간 이 절반으로 줄어들 것이고, timing violation이 생길 위험이 두배 이상 (duty cycle 이라는 새로운 변수가 추가됨.) 증가한다.

 

DDR 메모리 동작시 처리량 향상을 위해서 저렇게 Dual clock 으로 동작한다고 알고 있습니다.

비메모리 설계에서는 저런 Case 가 존재할 것 같긴한데, 저도 사용해본 경험은 없습니다.

그럼 왜 안쓸까? 를 생각해보자면,

1 clock 에서 posedge, negedge 둘다를 만족하려면, 50% duty cycle 을 가져야합니다.

image

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 예)

image

sam716님의 프로필 이미지
sam716
질문자

안녕하세요 맛비님 답변 감사합니다.

맛비님께서 설명해주신 Duty cycle에 대해 어느 정도 이해했습니다.

하지만 그러면 의문이 하나 생깁니다.

" 왜 메모리에서는 DDR을 쓰는가? 비메모리는 DDR을 쓰지 않는 이유 중 Duty cycle 때문이 있다면, 메모리에서는 Duty cycle이 정확히 50%인것을 두 개를 사용해서 timing met을 어떻게 시키는가? "

라는 궁금증이 생겼습니다.

이에 대해 인터넷을 서치한 결과 아무것도 나오지 않았구요..ㅜ

제가 감히 상상해보자면 메모리는 DDR이 가능하게끔 소자를 잘 구성했나? 라는 생각밖에 안듭니다.

혹시 저 질문에 대한 답을 알 수 있을까요?

 

++) DRAM과 같은 DDR로 작동하는 것들은 단순히 data를 burst로 보내고, 받기만 하기 때문에 timing이 중요하지 않다는 생각도 들었습니다

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 :)

왜 메모리에서는 DDR을 쓰는가?

이는 Verilog HDL 18 장을 보시면 답이 될 것 같아요. 제 생각에는 Area 입니다.

메모리에서는 Duty cycle이 정확히 50%인것을 두 개를 사용해서 timing met을 어떻게 시키는가?

메모리 내부를 설계해본 경험은 없어서 확답을 드릴 순 없습니다.

예상하기로는 아날로그로 설계하지 않을까 생각이 듭니다. (비메모리 설계처럼 Verilog 의 영역이 아님)

====

제 경험상 순수 디지털 로직으로 FPGA를 이용한 제품설계 내에서는 Duty cycle 50% 로 pos,neg edge 로 timing 을 맞추는 회로는 본 적이 없습니다. ASIC 에서는 본적이 있긴한데, 극히 드물었어요. 검증을 위해서 FPGA 에 올렸었고요. Timing 은 잡혔습니다. (pixel data 를 전송하는 작은 로직이었습니다.) 현업가셔서 보게 된다면 알려주세요. 그때쯤 되시면 더 잘아시게 될꺼에요 :)

 

++) DRAM과 같은 DDR로 작동하는 것들은 단순히 data를 burst로 보내고, 받기만 하기 때문에 timing이 중요하지 않다는 생각도 들었습니다

음.. 위 내용에는 동의가 잘 안되네요. 정확한 시점에 Data 를 손실없이 주고 받아야 함으로 Timing 은 중요합니다.

 

내용을 주고받으니 산으로? 가는 것 같은데요.

다음부터는 강의에서 다루는 내용의 질문 부탁드립니다.

강의 외 질문은 정확도도 떨어지고, 시간소요가 있네요. 양해부탁드립니다.

즐공하세요 :)

sam716님의 프로필 이미지
sam716
질문자

넵 답변해주셔서 감사합니다!

sam716님의 프로필 이미지
sam716

작성한 질문수

질문하기