inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Làm chủ Verilog của 설계독학 Season 2 (Trùm cuối Test Code thực tế: Hoàn thiện tấm vé nhảy việc với các bài toán khó)

[L2-P10] CDC (Clock Domain Crossing) : 👑 Ưu tiên số 1 khi phỏng vấn! Xử lý hoàn hảo miền xung nhịp bất đồng bộ

CDC 예제 및 메타스테빌리티 관련 질문 드립니다.

17

ksh79533954

68 câu hỏi đã được viết

1

안녕하세요. 에타님.

강의 잘 보고 있습니다.


[1. 질문 챕터] : [LP2-10] CDC

[2. 질문 내용] :

  1. src_r_edge를 사용하는 이유가 궁금합니다. 목적은 src_valid_toggle의 edge만 검출해서 사용하려는 것 같은데, 이유가 따로 있을까요?

  2. 바보같은 질문일 수도 있습니다.
    메타안정성을 높이기 위해서 F/F을 직렬로 연결하는 것으로 이해했습니다.

    image.png


    두 클럭 도메인이 다른 시스템에서 데이터를 수신받는 F/F의 Setup time 혹은 Hold time을 만족하지 못하는 경우 플립플롭의 출력이 이상해지는 것으로 이해하고 있습니다.


    그런데 F/F을 여러개 직렬로 달면 이 문제를 줄일 수 있다는게 잘 이해가되지 않습니다.
    저 이상한 출력 값이 뒷 단의 F/F으로 넘어가지 않는건가요?

verilog-hdl fpga system-verilog rtl

Câu trả lời 2

1

ksh79533954

안녕하세요. src_r_edge는 이해했습니다.

메타안정성에 대해 한 가지 더 궁금한데요.


불안정한 신호가 스스로 정상적인 값(0 또는 1)로 돌아올 때까지 기다려주는 대기 역할을 한다고 되어있는데, Setup, Hold time을 만족하지 못하여도 0이 되어야할 신호가 시간이 지나면 0으로 1이 되어야할 신호가 시간이 지나면 1로 되는건가요?


아니면 1로 되어야할 신호가 시간이 지나면 0으로 되거나 그 반대의 상황도 될 수 있는건가요?

1

ETA

안녕하세요 김상현님,


저도 이전에 가지고있던 의문인데 그래서 레벨신호를 전달해주는건데요.

아래 AI 의 추가 설명을 참고바랍니다.

원래 되어야 할 정상적인 값으로 돌아간다는 보장이 없습니다. 완전히 랜덤하게 0 또는 1로 떨어지게 됩니다.

1이 되어야 할 신호가 시간이 지나서 0으로 굳어질 수도 있고, 그 반대의 상황도 얼마든지 발생할 수 있습니다.

1. 왜 랜덤하게 결정될까요? (산꼭대기의 공 비유) 메타안정성 상태는 산꼭대기(중간 전압)에 공(신호)을 아슬아슬하게 올려둔 것과 같습니다. 시간이 지나면 회로 내부의 미세한 열 노이즈나 바람에 의해 공이 굴러떨어지게 되는데, 이때 왼쪽 계곡(0)으로 떨어질지 오른쪽 계곡(1)으로 떨어질지는 그 순간의 노이즈 방향에 따라 무작위로 결정됩니다.

2. 값이 틀리게 나오면 회로에 치명적인 오류가 생기는 것 아닌가요? 이 질문이 뒤따라올 확률이 매우 높습니다. 값이 랜덤하게 결정되는데도 2-Stage Synchronizer를 사용하는 이유는 신호의 성격 때문입니다.

예를 들어 0에서 1로 변하는 1비트 Enable 신호가 메타안정성에 빠져 이번 클럭에서 운 나쁘게 다시 0으로 떨어졌다고 가정해 보겠습니다. 입력 신호는 계속 1을 유지(레벨)하고 있기 때문에, 그다음 클럭 에지에서는 결국 1을 안정적으로 샘플링하게 됩니다. 즉, 타이밍이 1 Clock Cycle 늦어질 뿐 시스템이 알 수 없는 상태로 뻗어버리는 것은 막아줍니다.

결국 직렬 F/F은 '무조건 정답을 찾아주는 마법'이 아니라, "틀린 값이 나오더라도 1클럭 늦게 정상화될 수 있도록 시스템이 뻗는(Metastable 전파) 최악의 상황만 막아주는 방어막"이라고 설명해주시면 가장 정확합니다.

혹시 궁금한 점이 있다면 또 질문 주셔요! 화이팅!

1

ETA

안녕하세요 김상현님!

열심히 달리고 계시군요! 질문에 답변 드리겠습니다.

  1. 아마 src_valid_toggle_r_edge 을 말씀하신거겠죠? 아니시면 말씀부탁드립니다.


    이 신호는 src_stall 을 만들기도합니다. 즉 이 CDC는 하나의 벨리드 값이 데스티네이션에 안전하게 도착할때까지 다음 입력 src_valid 신호는 stall이 되는거죠. 그래서 src_valid_toggle_r_edge 는 입력 valid가 1인것 뿐만아니라 src_stall이 0이라는 조건도 보고있습니다.

  2. 저도 학부생 시절에 처음에 잘 이해 되지 않았던 부분입니다.
    아래는 AI가 답을 깔끔하게 정리해주어서 전달드립니다.


    Setup/Hold time을 만족하지 못하면 첫 번째 플립플롭(F/F)의 출력은 0도 아니고 1도 아닌 중간 전압에서 요동치는 불안정한 상태(메타안정성)에 빠지게 됩니다.

    직렬로 F/F을 연결했을 때 이 문제가 해결되는 이유는 뒷단의 F/F이 이상한 값을 걸러내기 때문이 아니라, 첫 번째 F/F이 제정신을 차릴 '시간'을 벌어주기 때문입니다.


    가장 흔하게 쓰이는 2단 동기화 회로(2-Stage Synchronizer)를 기준으로 그 원리를 단계별로 설명해 드리겠습니다.

    • 1단계: 첫 번째 F/F의 메타안정성 돌입 비동기 신호가 들어와 Setup/Hold time을 어기면 첫 번째 F/F은 메타안정성 상태가 됩니다. 이는 마치 뾰족한 산꼭대기에 공을 올려둔 것과 같습니다.

    • 2단계: 해소 시간(Resolution Time) 확보 핵심은 이 불안정한 상태가 영원히 지속되지 않는다는 점입니다. 회로 내부의 미세한 열 노이즈나 피드백 회로로 인해 산꼭대기에 있던 공은 결국 양옆(0 또는 1) 중 한 곳으로 굴러떨어져 안정화됩니다. 두 번째 F/F이 다음 클럭에서 샘플링을 하기 전까지 한 클럭 주기(1 Clock Cycle)라는 여유 대기 시간이 주어집니다.

    • 3단계: 두 번째 F/F의 정상 값 샘플링 다음 클럭 에지가 뛸 때쯤이면, 첫 번째 F/F의 출력은 이미 0이나 1로 굳어져 완전히 안정화된 상태입니다. 따라서 두 번째 F/F은 불안정한 값이 아닌, '깨끗하게 정돈된 0 또는 1'을 받아 시스템 내부로 안전하게 전달합니다.

    정리하자면, 직렬로 연결된 F/F은 이상한 신호가 전파되는 것을 막는 물리적인 벽이 아니라, 불안정한 신호가 스스로 정상적인 값(0 또는 1)으로 돌아올 때까지 기다려주는 '대기실' 역할을 하는 것입니다. 클럭 주파수가 너무 빠르거나 시스템 신뢰성이 극도로 높아야 하는 경우에는 대기 시간을 더 늘리기 위해 F/F을 3개 이상 직렬로 달기도 합니다.
    (비틀거리며 도는 팽이(불안정한 신호)를 억지로 잡으려 하지 않고, 팽이가 바닥에 완전히 쓰러질 때(0 또는 1)까지 한 박자 기다렸다가 그 결과를 줍는 원리입니다.)

혹시 더 궁금한 점 있으시면 언제든지 질문주셔요

VCS 환경 테스트 문의

0

23

0

Vivado 설치 / download 불가

1

50

2

L2_P12_priority_data_controller 코드 리뷰 부탁드립니다.

1

60

2

메모리 리셋 관련 질문 드립니다.

1

56

2

RTL_ROM이 무엇인지 알고 싶습니다.

1

66

2

인터럽트 컨트롤러 요청 처리와 처리 완료 구문 중 이해가 안되는 내용이 있습니다.

1

74

2

enable_latch가 F/F이 아니라 래치인 이유가 궁금합니다.

1

69

2

카페 등업신청

0

60

1

fpga

1

81

2

test class의 constructor 부분을 보다가 궁금한 점이 있어 질문드립니다.

0

51

1

FPGA 연결 확인 방법

0

78

1

Arty z7 -20 보드의 경우

1

80

2

RVALID/RREADY 핸드셰이크 발생 시 RDATA 전이가 발생해도 문제가 없는 이유?

1

105

4

강의노트는 어디서 받을 수 있나요?

0

90

2

lwip 실험중 오류 상황

0

76

2

uvm config db에 대해 궁금한 점이 있습니다.

0

72

1

이 강의 zboz7보드에서도 실행 가능한가요?

1

78

1

강의자료 기한 연장 + 로드맵 문의

0

78

2

Chapter 16 FSM 관련 질문

1

103

2

강의 환경(linux) 관련 질문

1

119

2

L2_P08 SRAM 코드 리뷰 부탁드립니다.

1

95

2

L2_P4 data_average 코드 리뷰 및 waveform 질문 드립니다.

1

109

2

LV2-2 Patter Detector code review 부탁드립니다.

1

80

1

환경 설정하는 guide 최신화 부탁드립니다.

1

123

2