작성
·
19
1
안녕하세요 🙂
[1. 질문 챕터] : [HDL 22장] 모듈간의 정확한 Data 전달을 위한 Valid / Ready Handshake I/F - 실습편 1~5분 basic module에서
[2. 질문 내용] : Valid / Ready Handshake I/F란 valid신호와 ready신호가 동시에 1일때만 데이터가 전달이 되게 하는 인터페이스인테
어떤 부분이 ready신호와 valid신호가 handshake일어나는 부분을 의미하는지 이해가 안갑니다. m_ready가 1이기만 하면 아래 플립플롭에서 S_data가 무조건 출력되서 valid신호와 관계없이 데이터가 전달되지 않나 싶습니다.
[3. 시도했던 내용, 그렇게 생각하는 이유] : 동시에 1 이여야만 된다라는 내용이 있으려면 적어도 and gate가 하나는 있어야하지 않나요?
답변 2
0
안녕하세요 🙂
Valid / Ready Handshake I/F 는 Valid 와 Ready 가 1이 될때, 유효한 data (valid_data) 를 전달하겠다 라는 Rule 입니다.
즉, 이 rule 을 지키면서 설계하는건 설계자의 몫이에요.
rule 은 정해졌고 어떻게 설계할꺼냐, 의 이슈는 설계자의 몫입니다.
따라서 "동시에 1 이여야만 된다라는 내용이 있으려면 적어도 and gate가 하나는 있어야하지 않나요?"
원하시는 방법인 and gate 를 쓰셔서 구현하셔도 되고요. 제가 드린 실습코드 처럼 구현하셔도 됩니다.
rule 은 정답이 있지만 구현 방법에는 정답이 없다고 말씀드리고 싶어요.
즐공하세요 🙂
0
안녕하세요, 인프런 AI 인턴입니다. t24395님, 질문 주셔서 감사합니다.
Valid/Ready Handshake I/F 개념 설명:
Valid/Ready Handshake 프로토콜은 데이터 전송 시 유효성을 보장하는 일반적인 방식입니다. 이 인터페이스는 데이터 전송의 시작을 Master와 Slave 둘 다 준비된 상태(신호 값이 1인 상태)로 정의합니다. ‘valid’ 신호는 데이터가 유효하다는 것을 나타내고, ‘ready’ 신호는 수신자가 해당 데이터 수신을 준비되었음을 나타냅니다. 데이터 전송은 두 신호가 모두 1일 때만 이루어지며, 이는 데이터를 수신할 준비가 되어 있는지 확인하기 위한 매우 안전한 메커니즘입니다.
실습 코드 내의 구조:
질문에서 언급하신 실습 부분에서는 m_ready와 m_valid에 대한 궁금증을 가지셨는데요, 실제 코드는 AND 게이트를 사용하지 않고도 프로토콜을 설계할 수 있습니다. m_ready가 1인 경우 데이터를 받을 준비가 된 상태라는 것만으로 충분하지만, 데이터 전송이 성공적으로 완료되었다고 간주하려면 m_valid가 동시에 1이어야 합니다. 따라서 두 신호가 모두 ‘1’인 경우 데이터가 유효한 것으로 인식됩니다.
기본 모듈의 기능 이해:
기본 모듈에서는 데이터가 유효한 것(Valid)과 데이터를 받을 준비가 된 것(Ready)을 각각의 상태로 처리하고, 두 상태가 모두 맞을 때에만 데이터 전송을 완료합니다. 이는 코드와 설계에서 적절하게 표현될 수 있으며, 꼭 AND 게이트의 물리적 구현이 필요하지는 않습니다.
관련 질문 및 유사 답변 링크를 확인하시기 바랍니다:
- m_valid와 m_ready가 OR 처리되어있는 이유가 궁금합니다.
- Chatper 24 실습편 질문
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.