인프런 커뮤니티 질문&답변

Jeongwung Jeong님의 프로필 이미지

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

[HDL 14장] HW 가속기의 비밀인 Pipeline 을 이해해보자 (실습편)

r_valid 신호의 역활

21.07.23 10:58 작성

·

673

2

항상  FPGA가 어떻게 하드웨어 가속에 도움이 될까 궁금 했는데 정말 피가 되고 살이 되는 귀중한 강의 였습니다.

코드작성에 r_valid  신호는 왜 쓰인 건가요?  그냥 인풋에 같이 동기화 되서 작동하는 그냥 잉여의  FF 체인 처럼 보이는데, 이름이   valid 인것 보면 중요한 검증 로직인 것 같기고 하구요.

현업에서도 이런식으로 많이 쓰이나요?

좋은 강의 항상 감사합니다.

답변 5

1

Jeongwung Jeong님의 프로필 이미지

2021. 07. 23. 13:08

답변 감사합니다.. 아직은 이해가 좀 갈듯 말듯 하네요..공부를 더 많이 해야 되겠네요 ^^

0

정성은님의 프로필 이미지

2022. 02. 04. 15:33

답변감사합니다

계속 추가답변드려 죄송합니다.

첫번째 질문에 추가질문입니다.

value=i 니깐 i에 따라서 value값이 계속 바뀐다는것은 이해하였습니다.

근데 valid라는것이 valid=1 되야지만 value값을 할당받는 건데

clk = neg 일때 valid=1, value=i 를 해버리면 그냥 valid따로 value r개별적으로 따로 나오는것아닌가요?

if(valid)

value=i 

이렇게 해야 맞는건가 싶어서 질문드립니다.(단순 제가 이해한 내용을 바탕으로 작성하였습니다)

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

2022. 02. 04. 15:54

clk = neg 일때 valid=1, value=i 를 해버리면 그냥 valid따로 value r개별적으로 따로 나오는것아닌가요?

네 하지만, 두 신호는 동일한 timing 이죠? 중간에 delay 요소가 없음으로.

 

if(valid)

value=i 

이렇게 해도 동작은 할 것 같아요.

valid = 1 이 이미 위에 존재하니까..

 

편하신대로 하시는걸로......

 

0

정성은님의 프로필 이미지

2022. 02. 04. 14:25

답변감사합니다

추가질문 남깁니다.

설명에서는 타이밍을 잡아주기위해 valid가 1일때만 value값이 나오게 했다고 이해를 했습니다.

코드를 보면 valid와 value가 어디 코드에서 엮여있는지 궁금합니다.

tb 파일 54~55줄을 보면 그냥 따로 valid를 1로 선언해주고 value값은 루프가 돌때마다 바뀌는걸로 해주셧는데  걍 따로 값을 지정해준거 아닌가요?

valid=1일때 value값을 줄려면 if(i_vaild)같은 것이 있어야되는것 아닌가요???

 

2 .reset을 negative로 주시는 이유가 뭐죠? positive에는이미 clk이 할당되있어서그런가요?

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

2022. 02. 04. 15:14

1. i_value = i;

i 값을 value 로 사용했어요. 이거면 답은 충분해 보이는데... 

이 이상 설명을 못하겠어요. (코드에 있는그대로..)

 

2. 좋은 질문입니다.

설계자가 positive edge reset, negative edge reset 사용 여부를 결정할 수 있구요. 저는 negative edge reset 을 사용한 것 뿐입니다. (으잉?)

상황에 맞게 사용하자가 저의 답이구요. 

- positive edge 사용시 유리한 예 (Xilinx FPGA)

Active-high vs Active-low?

  • Active-high recommended

If possible, always use active-high resets (as active-low resets require an inversion adding a LUT in the path) when using Xilinx FPGAs.

https://www.xilinx.com/support/documentation/sw_manuals/xilinx2020_1/ug949-vivado-design-methodology.pdf

 

- negative edge 사용시 유리한 예 (ASIC)

플립플롭을 설계시, 기본적으로 셀 설계자가 negative edge 로 설계를 하게 됩니다. 

 

0

정성은님의 프로필 이미지

2022. 02. 04. 13:27

한가지 추가 질문남깁니다.

1, valid가 없어도 입력이 없으면 어차피 아웃풋이 안나올것이고, 입력이있어야 아웃풋이 나올텐데 딜레이때문에 생길수있는 오차를 방지하고자 valid를 넣어주는건가요??

2. 공부를 하는데 있어 제공해준 파일이 아닌 새롭게 파일을 작성하여 시뮬을 돌려보고싶은데 어떻게 진행하면 될까요?

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

2022. 02. 04. 14:00

안녕하세요. 성은님 :)

1, valid가 없어도 입력이 없으면 어차피 아웃풋이 안나올것이고, 입력이있어야 아웃풋이 나올텐데 딜레이때문에 생길수있는 오차를 방지하고자 valid를 넣어주는건가요??

"입력이 없으면"  이란 뜻을 어떻게 해석하면 좋을까요?

0, 1 , x, z 중 어떤거..?

즉, 입력은 저 4개의 type 중 하나가 들어오게 됩니다.

입력이 없는 상황은 HW 에서 존재하지 않아요.

단지 유효한 입력을 알려주기 위해서 "valid 신호가 1 일때" 라는 약속을 하였습니다.

 

"딜레이때문에 생길수있는 오차를 방지하고자 valid를 넣어주는건가요??"

말씀하신게 맞아요. HW 는 Sync 를 맞추는 일이 굉장히 중요합니다.


2. 공부를 하는데 있어 제공해준 파일이 아닌 새롭게 파일을 작성하여 시뮬을 돌려보고싶은데 어떻게 진행하면 될까요?

다음 링크 참고해보세요.

 

즐공하세요 :)

0

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

2021. 07. 23. 11:13

Valid 는 유효한 Data 임을 밝히기 위해서 사용합니다.

Valid 없이, Data 만 보내면, 이 Data 가 유효한 시점을 모르겠죠?

그럼 오동작을 합니다. Valid I/F 라고 현업에서 부르고 있어요.

현업에서 필요한 부분에 사용합니다.  :)