[HDL 22장] F/F CE 관련 질문
40
8 câu hỏi đã được viết
안녕하세요 🙂
[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.
[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂
[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.)
안녕하세요, 맛비님.
[HDL 22장] : Basic Module 설명 부분 (2:55) 관련하여 질문 드립니다.
해당 module에서는 data를 저장하는 F/F의 CE에 s_ready만 연결되어 있는데, s_ready & s_valid로 연결되어야 하는 것이 아닌지 궁금합니다.
handshake는 valid, ready가 모두 1일 때 data transfer가 발생하는 것으로 이해했는데, s_ready만 CE에 연결된 경우, s_valid == 0이어도 s_ready == 1이 되어서 data가 전달되는 상황이 발생되는 것이라고 생각했습니다.
좋은 강의 제공해주셔서 감사합니다.
Câu trả lời 2
1
안녕하세요 🙂

결론부터 말씀드리면, 질문자님께서 분석하신 대로 s_valid == 0이고 s_ready == 1일 때 현재의 s_data 값이 F/F을 통과해서 m_data로 전달되는 현상이 발생하는 것이 맞습니다.
그럼에도 불구하고 s_ready & s_valid를 CE에 연결하여 데이터를 완벽하게 차단하지 않고 s_ready만 연결한 설계 의도는 다음과 같습니다.
Valid 신호에 의한 수신단 제어 (Don't Care의 활용)
블록도를 잘 보시면, 데이터를 저장하는 아래쪽 F/F뿐만 아니라 Valid 신호를 전달하는 위쪽 F/F의 CE에도 동일하게 s_ready가 연결되어 있습니다. 만약 s_valid == 0인 상태에서 s_ready == 1이 되어 아래쪽 데이터 F/F이 무의미한 값을 캡처하더라도, 동시에 위쪽 F/F도 동작하여 m_valid 출력으로 0을 내보내게 됩니다. 데이터를 받는 다음 단(Master)의 입장에서는 m_valid == 1일 때만 m_data를 유의미한 값으로 취급합니다. 즉, m_valid == 0인 상태라면 m_data 선에 어떤 쓰레기 값(Garbage Data)이 흘러가고 있든 전혀 신경 쓰지 않고 무시하게 됩니다. 결과적으로 시스템 오동작을 유발하는 잘못된 Data Transfer는 발생하지 않습니다.하드웨어 최적화 (Area 및 Timing 이점)
기능적으로 다음 단에서 무시될 데이터라면, 굳이 F/F의 CE 단에 s_valid와 s_ready를 묶는 AND 게이트 로직을 추가해서 입구를 꽉 막을 필요가 없습니다. 하드웨어 설계에서는 불필요한 조합 회로(AND 게이트 등)를 하나라도 줄이는 것이 칩의 면적(Area)을 아끼고 Timing Delay를 줄이는 데 유리합니다. Data Path는 'Valid'라는 확실한 제어 신호가 지켜주고 있기 때문에, Data F/F 자체의 조건은 유연하게 열어두어 최적화를 챙긴 설계 방식입니다.
질문자님께서 Handshake의 기본 대전제(Valid와 Ready가 모두 1일 때만 의미 있는 Transfer가 일어난다)를 아주 정확하게 이해하고 계셨기 때문에 가질 수 있었던 훌륭한 의문이라 생각이 드네요.
좋은 질문이었습니다.
감사합니다 🙂
0
안녕하세요, 인프런 AI 인턴입니다. xo님, 질문 주셔서 감사합니다.
Valid/Ready Handshake 프로토콜 설명:
Valid/Ready Handshake 프로토콜은 데이터 전송 시 데이터를 수신하기 위해 송신자와 수신자가 서로 확인하는 과정입니다. 일반적으로 valid (s_valid) 신호는 송신하는 데이터가 유효하다는 것을, ready (s_ready) 신호는 수신자가 데이터를 받을 준비가 되어 있음을 나타냅니다. 데이터를 전송하기 위해서는 두 신호가 동시에 ‘1’이어야 합니다.
기존 설계 의도 이해:
질문 주신 부분에서는 data를 저장하는 F/F(Flip-Flop)의 CE(Clock Enable) 신호로 s_ready만 연결되어 있다는 점이죠. 흔히 handshake를 구현할 때, s_valid와 s_ready가 모두 ‘1’일 때 데이터를 저장하도록 구현합니다. 그러나 s_ready 신호만을 CE에 연결하면, s_valid가 ‘0’일 때에도 s_ready가 ‘1’이라면 CE가 활성화될 수 있습니다. 이렇게 설정된 이유는 특정 설계 의도에 따라 데이터를 받는 시점에서 항상 s_ready 상태가 유지되고, 유효한 데이터 상태에 대한 결정은 다른 부분에서 처리하고 있을 수 있기 때문입니다.
권장하는 해결책 및 분석:
s_valid와 s_ready를 모두 CE에 연결하여 둘의 AND 연산 결과가 CE를 활성화하도록 구현할 때 데이터의 일관성을 더 보장할 수 있습니다. 이 설정을 통해 데이터가 실제로 유효할 때만 전송되도록 합니다. 즉, 데이터가 유효함을 나타내는 s_valid가 ‘1’인 경우에만 데이터가 전송 및 저장되도록 설정할 수 있습니다.
관련 질문 및 유사한 답변을 확인해 보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[HDL 32장-2부] 참고 링크 관련
0
27
2
13강에 언급된 강의 내용 질문
1
58
2
22장 vaild/ready
1
96
1
output, reg 선언
1
78
3
gvim
1
61
1
fifo의 stall과 퍼포먼스 드랍
1
57
2
Design Valid I/F
1
73
2
valid/ready 스트림 구조 관련 질문이 있습니다!
1
86
2
IDLE state의 시점관련
1
63
2
skid buffer의 handshake 방향이 반대로 되어 있는 이유
1
108
3
[wdma] AWLEN_w의 값이 1일 경우 r_burst_cnt_w와 AWLEN_w의 async 인한 bready 발행X 이슈?
1
69
2
system verilog 사용이유.
1
130
2
AXI_VIP 사용 시 glitch 발생
1
96
1
왜 배속이 안되요?
1
112
2
다이어그램 이해
1
69
2
27.[프로젝트-1] Mem copy IP를 FPGA에 올려보기
1
73
2
27.[프로젝트-1] Mem copy IP를 FPGA에 올려보기
1
88
3
[HDL 38장: RDMA 코드 실습편] MOR fifo에서 "ARLEN_r" 존재의 이유가 궁금합니다
1
110
2
[HDL 35장 AXI-Stream I/F 실습편] sync_fifo 사용 이유
1
128
1
예외처리 관련 질문
1
75
2
AXI의 ID의 역할은?
1
186
2
28장 강의 AXI 이론편관련질문
0
109
1
37장 Data bit width 질문
1
56
2
SPI, I2C, UART, Ethernet 인터페이스 사용법
1
235
2

