• 카테고리

    질문 & 답변
  • 세부 분야

    반도체

  • 해결 여부

    해결됨

fully connected layer waveform 질문

23.12.05 15:08 작성 23.12.05 15:10 수정 조회수 239

1

안녕하세요 21장 의 testbench를 돌려서 waveform을 살펴보는 중에 질문이 생겼습니다.

// Step 4. Registering (Capture) number of Count reg [CNT_BIT-1:0] num_cnt; always @(posedge clk or negedge reset_n) begin if(!reset_n) begin num_cnt <= 0; end else if (i_run) begin num_cnt <= i_num_cnt; end else if (o_done) begin num_cnt <= 0; end end

위는 제공해주신 data_mover_bram.v 코드 의 일부분입니다.

위 waveform을 보면 i_run이 1이 되는 순간 바로 num_cnt 값이 i_num_cnt로 바뀌지만

o_done 이 1이 되는 순간에는 num_cnt 값이 0이 되지 않고 1cycle 뒤에 반영이 되나요?

 

보통은 o_done과 같이 한 cycle 뒤에 값이 stable 할때 값이바뀌는것이 맞이 않나요?

그것이 맞다면 i_run에서 125ns 일때 이미 i_run 하고 i_num_cnt 가 stable 상태라는 것인데 i_num_cnt 는 이미 그전에 stable한것을 볼 수 있지만 i_run은 그 전에 stable 하다고 볼 수 있는 이유를 못찾겠습니다.

답변 1

답변을 작성해보세요.

0

안녕하세요 🙂

코드를 보니 o_done 이면, 다음 cycle 에 num_cnt 가 0 으로 돌아가도록 설계가 되어 있네요.

image

o_done 이 1이 되는 순간에는 num_cnt 값이 0이 되지 않고 1cycle 뒤에 반영이 되나요?

F/F 이기 때문에 다음 cycle 에 반영됩니다. 지극히 정상이에요.

 

그것이 맞다면 i_run에서 125ns 일때 이미 i_run 하고 i_num_cnt 가 stable 상태라는 것인데 i_num_cnt 는 이미 그전에 stable한것을 볼 수 있지만 i_run은 그 전에 stable 하다고 볼 수 있는 이유를 못찾겠습니다.

질문이 잘 이해가 안되는데요.

생각하고 계시는 stable 의 정의에 대해서 적어주시겠어요? 해당 답변을 봐야 제가 답을 드릴 수 있을 것 같아요.

 

 

이중경님의 프로필

이중경

질문자

2023.12.06

제가 질문을 너무 헷갈리게 말한것 같네요 죄송합니다

저의질문은 간단히 말해서 o_done이 1로 바뀔때 다음 cycle에 num_cnt <= 0 이 반영되는것이 일반적으로 맞는것 같은데 i_run이 1로 바뀌는 순간 바로 그 cycle에 num_cnt <= i_num_cnt 이 반영되는 이유가 궁금합니다

안녕하세요 🙂 설명해주신 부분 이해했습니다.

현 실습코드의 Testbench 의 문제이고요. (Verilog HDL Season1 에서 만 반영이 되었네요. 금일중으로 전부 반영해 놓겠습니다.) 현상에 대해서는 다음 링크를 참고하시면 될 것 같습니다.

https://www.inflearn.com/news/996958

TB main 부분 내부의 assign 을 non-blocking 으로 수정하시면 됩니다.

image

수정하면 다음과 같이 나오네요. DUT 부분은 문제가 없으니, Testbench 만 수정하시면 되겠습니다.

image 

실습코드 업데이트 하고, 공지로 남겨드릴께요!

리포팅 감사합니다 :)

현재 나와있는 강의들 전부 반영을 해놓았어야하는데;;

게으름에 이제서야 했네요 ㅠ

공지 확인 부탁드립니다.

채널톡 아이콘