인프런 커뮤니티 질문&답변
22장 vaild/ready
작성
·
12
1
22장 4m쯤 Module 부분입니다.
s_ready를 보면
m_valid =0이거나
m_ready = 1이면
s_ready가 1이 되도록 되어있습니다.
m_ready가 1일때만을 가지고 s_ready의 값을 결정할 수 있다고 생각했는데
m_ready = 0 & m_valid = 0 인 경우때문인건가요?
이 경우도 유효한 data 값을 가지고 있지 않지만 master가 준비가 되어있지 않기 때문에
s_ready 값을 1로 올리면 안되지않나요?
답변 1
0
안녕하세요 🙂
먼저 해당 조건에 대해 반대로 생각해보면, 이해에 도움이 될 거 같아요.
이 수식을 뒤집어 생각해보면 더 명확합니다. (not 을 취해보죠)
assign s_ready = ~m_valid | m_ready; // s_ready 가 0 이 되는 경우를 생각해봅시다.
s_ready가 0이 되는 시점은 m_valid = 1 && m_ready = 0 일 때뿐입니다.
즉, "내가 내보낼 데이터가 꽉 차 있는데(m_valid=1), 다음 녀석이 못 받겠다고 버티는 경우(m_ready=0)" 에만 비로소 앞단에 "나도 더 이상 못 받아!"라고 s_ready = 0을 치는 것이죠.
이것이 바로 Back-pressure의 핵심입니다.
따라서, 원래의 의미로 생각을 해보면,
~m_valid: "내 마지막 칸이 비어있으니, 일단 밀어 넣어라." 또는 ( "|" or 기호 가 있으니까)
m_ready: "내 마지막 칸이 차 있어도, 다음 녀석이 가져갈 거니까 한 칸씩 전진 가능하다. 그러니 밀어 넣어라."
의 의미로 s_ready 가 1 이 됩니다.
이해에 도움이 되셨기를 바래요.
즐공하세요 🙂





