RVALID/RREADY 핸드셰이크 발생 시 RDATA 전이가 발생해도 문제가 없는 이유?
34
63 asked
안녕하세요 🙂
[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.
[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂
[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.)
================ 다음 내용은 읽어보시고 지우시면 됩니다.=================
질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!
현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)
강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)
이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)
개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..
글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)
서로 예의를 지키며 존중하는 문화를 만들어가요.
질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )
먼저 유사한 질문이 있었는지 검색해보세요.
잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
==================
안녕하세요. 맛비님.
강의 잘 보고 있습니다.
RVALID/RREADY 핸드셰이크 발생 시 RDATA 전이가 발생해도 왜 문제가 없는건가요?

캡쳐한 이미지의 노란색 커서부분을 보시면 RVALID와 RREADY가 Rising 되는 시점에 RDATA가 변하는 것을 확인할 수 있는데요.
RDATA는 핸드셰이크가 발생할 때 Transition이 되는게 아니라 핸드셰이크가 발생하기 전에 Transition이 되어야하는거 아닌가요?
RDATA는 슬레이브에서 준비?되어야하는 거고 마스터에게 VALID를 띄우기 전에 먼저 데이터를 준비해야하는거 아닌가? 라는 의문이 들었습니다.
확인 부탁드립니다.
Answer 3
0
안녕하세요. 맛비님.
제가 틀린 것일 수도 있지만 제 생각에는
myip_v1_0_S00_AXI.v 내 137번째 line
assign S_AXI_RDATA = axi_rdata;
가 아니라
assign S_AXI_RDATA = reg_data_out;
위가 맞는 것 같습니다.
그래야 RVALID와 RREADY 핸드셰이크가 발생하기 전에 RDATA가 메모리에서 읽어온 값으로 세팅될 것 같아요.
현재 코드는 핸드셰이크가 발생함과 동시에 메모리에서 읽어온 값으로 RDATA를 업데이트하고 있는 것으로 이해됩니다. 시뮬레이션으로는 문제 없는 것처럼 보이는데, 실제 구현했을 때는 문제가 발생할 수 있을거라 생각됩니다...
코드 변경 후 시뮬레이션 했을 때 문제 없음을 확인했습니다.

검토 부탁드립니다.
0
안녕하세요 :)
보내주신 파형 보니까 전혀 문제없는 정상 동작입니다.
질문자님이 "VALID를 띄우기 전에 데이터를 먼저 준비해 둬야 하는 거 아닌가?"라고 생각하신 건 AXI 프로토콜의 기본 개념을 아주 잘 파악하고 계신 겁니다. 다만, 지금 보시는 파형이 지연 정보가 없는 RTL 기능 시뮬레이션(Zero-delay)이라서 오해가 생기신 거예요.
노란 커서 바로 전 사이클을 보면 이미 RVALID=1, RREADY=1로 핸드셰이크 조건이 들어맞아 있었고, 이때 슬레이브가 준비해서 띄워두고 있던 데이터는 00000000이었습니다.
그러다가 노란 커서가 찍히는 그 클럭 에지(Rising Edge) 순간에, 마스터는 미리 준비되어 있던 00000000을 정확하게 샘플링해서 읽어갑니다. 즉, 핸드셰이크(데이터 전송)는 이 클럭 에지 순간에 완벽히 완료된 거죠.
그리고 마스터가 데이터를 성공적으로 가져갔기 때문에, 슬레이브는 바로 다음 사이클 전송을 위해서 데이터를 00000001로 갱신한 겁니다.
RTL 시뮬레이션에서는 Gate나 Wire의 딜레이가 전부 0으로 처리되기 때문에, 시뮬레이터 파형 상에서는 "이전 데이터 수신"과 "다음 데이터로의 전이"가 같은 클럭 에지에서 동시에 일어나는 것처럼 보일 뿐입니다.
실제 하드웨어나 P&R 후 타이밍 시뮬레이션에서는 Flip-Flop의 (Clock-to-Q Delay) 때문에 클럭이 뛰고 아주 미세하게 몇 ps~몇 ns 뒤에 데이터가 바뀌게 됩니다.
즉, 클럭이 뛰는 그 순간에는 변하기 전 데이터(00000000)가 Setup/Hold 타임을 만족하면서 안전하게 넘어가는 게 맞으니 안심하셔도 됩니다.
즐공하세요!
0
안녕하세요, 인프런 AI 인턴입니다. 김상현님, 질문 주셔서 감사합니다.
RVALID/RREADY 핸드셰이크 시점에 RDATA가 함께 전이되어 보이는 것은 파형상으로는 가능하지만, RVALID=1이고 RREADY=0인 동안에는 RDATA가 안정적으로 유지되어야 합니다. 또한 실제 데이터 전송은 두 신호가 모두 1인 클럭 엣지에서 발생합니다.
RVALID이 0인 동안의 RDATA 값은 유효하지 않으므로 변해도 문제가 없습니다. 따라서 RVALID이 1로 올라가는 시점에 RDATA가 함께 변경되어 보이더라도, 해당 클럭 엣지에서 수신 가능한 setup/hold 조건을 만족하고 이후 값이 유지된다면 정상적인 동작일 수 있습니다. 다만 이미 RVALID=1인 상태에서 RREADY를 기다리는 동안 RDATA가 계속 변경된다면 AXI 규칙에 어긋날 수 있습니다.
관련하여 Valid/Ready 핸드셰이크와 데이터 유효성에 대해 설명한 기존 답변을 참고해 주세요.
F/F CE 관련 질문
valid=0일 때 데이터 경로의 값이 변하더라도, 수신 측은valid=1인 경우에만 해당 데이터를 유효한 값으로 취급한다는 설명이 있습니다. 또한valid=1이고ready=0인 동안에는 데이터와 valid를 유지해야 합니다.ready신호와 valid신호가 handshake일어나는 부분
Valid와 Ready가 모두 1일 때 데이터 전송이 성립하며, 반드시 별도의 AND 게이트를 물리적으로 구현해야 하는 것은 아니라는 내용입니다.
질문에 첨부하신 이미지처럼 RVALID과 RREADY가 모두 1인 순간에 RDATA가 바뀌어 보이는 경우에는, RVALID이 올라가기 전에는 RDATA가 유효하지 않았거나, 시뮬레이터의 파형 표시 해상도 때문에 같은 클럭 구간에서 변화한 것처럼 보일 가능성이 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Arty z7 -20 보드의 경우
0
12
1
수강 순서 질문 있습니다
1
85
2
UART의 역할이 PC와 PS를 연결해 주는 역할로 알고 있습니다.
1
92
2
HW가속기 설계에서 더 보완할 수 있는 방법이 있을까요?
1
99
2
UART0, 1 중 선택
1
138
2
datamoverbram모듈질문
1
111
2
vitis 설치엣 alveo kria versal 등 옵션을 끄고 설치를 했습니다.
1
163
2
vitis 설치 관련 질문 있습니다!
1
173
2
FPGA 공식문서 읽는법
1
166
2
보드 추가의 클릭창이 없습니다.
1
140
2
Edit in IP Packager에서 코드 수정 후 IP 수정하면 simulation에서 수정된 코드로 작동이 안됩니다
1
180
2
BRAM의 Read / Write를 다 수행했는지 확인할 때 사용되는 num_cnt / i_num_cnt 관련 질문
1
149
1
Vitis 코드 작성
1
181
2
vivado 및 vitis 리눅스 환경 설치 관련 질문드립니다.
1
379
3
[9장 led 점등 시간 제어 불가]
1
151
2
Platform Invalid 오류
1
262
3
WSL 설치 관련 문의드립니다!!
1
145
2
Vivado 툴, 파일 질문드립니다!
1
252
2
9장 LED 점등 안됨
1
180
3
Edit in IP Packager 이후에
1
131
1
Fpga 로직
1
148
2
pmu-fw is not running
1
234
2
Create Project에 대해서 궁금해요
1
134
2
장치관리자 USB 포트
1
168
2

