강의

멘토링

로드맵

Inflearn brand logo image

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

venusdj1007님의 프로필 이미지
venusdj1007

작성한 질문수

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

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

14장 실습코드에서 valid 신호에 대해

작성

·

21

1

안녕하세요 🙂

[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.

[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂

[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.)

 

================ 다음 내용은 읽어보시고 지우시면 됩니다.=================

질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!

현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)

  1. 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)

  2. 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)

    1. 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..

  3. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)

    1. 서로 예의를 지키며 존중하는 문화를 만들어가요.

    2. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )

  4. 먼저 유사한 질문이 있었는지 검색해보세요.

  5. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

==================

input valid 신호를 작성하는 것은 알겠으나 왜 output valid 신호를 3bit로 작성하여 아래와 같은 코드로 선언하는 것인지 이해가 도무지 안 되네요.. 설명 부탁드립니다.

 

reg [2:0] r_valid;
	reg [63:0] r_power_of_2;
	reg [63:0] r_power_of_4;
	reg [63:0] r_power_of_8;
	wire [63:0] power_of_2;
	wire [63:0] power_of_4;
	wire [63:0] power_of_8;

	//flow of valid
	always @(posedge clk or negedge reset_n) begin 
		if (!reset_n) begin
			r_valid <= 3'd0;
		end else begin
			r_valid <= {r_valid[1:0], i_valid}; 

답변 2

0

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

안녕하세요 🙂

의외로, AI 가 답변을 제대로 적어준 것 같은데요.

휴먼의 입장에서 적어보겠습니다.

 

해당 코드는 1bit 의 F/F 3 개가 cascade 로 연결되어 있는 구조로 회로가 완성이 되는 코드입니다.

즉 3 bit shift register 로 합성이 됩니다.

그림으로 그려보면 이런 느낌?

image.png

 

image.png

 

Verilog 문법을 알고계시다면 이 말이 어떤 뜻인줄 아실 것 같으신데요.

reg [2:0] r_valid;

r_valid <= {r_valid[1:0], i_valid};

 

r_valid [2:0] <= {r_valid[1:0], i_valid};

이것은 input i_valid 를 매 사이클 마다 1 bit 씩 shift 하는 내용을 기술한 것입니다.

즐공하세요!

 

venusdj1007님의 프로필 이미지
venusdj1007
질문자

신호를 시프트 시키면 000, 001, 011, 111이 었다가 i_valid가 1일 경우 계속 111을 유지할텐데 왜 처음부터 그냥 o_valid <= 3b'111;로 선언하지 않는 것인가요?

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

valid 신호는 계산이 완료된 정상적인 data가 나왔다는 것을 알려주는 신호입니다.

예를 들어 r_valid[2:0]에서 index 2가 output과 연결되어 있다고 가정해보겠습니다.
이 경우 valid 신호는 다음과 같이 흐릅니다.

  • 001 → 첫 번째 사이클

  • 011 → 두 번째 사이클

  • 111 → 세 번째 사이클, 드디어 output이 유효해짐

즉, 입력이 들어온 순간부터 3 cycle 뒤에야 정상적인 data가 출력된다는 것을 전달해 주는 구조입니다.

만약 시작부터 3'b111로 선언한다면, 아직 계산이 끝나지도 않은 비정상적인 data가 이미 유효한 값처럼 인식되기 때문에 문제가 생깁니다.

따라서 shift register 형태로 valid를 설계하는 이유는, 계산이 진행되는 동안에는 data가 아직 유효하지 않음을 구분하고, 지정된 cycle 이후에만 output이 정상적으로 유효함을 알려주기 위해서입니다.

이해가 되셨기를 바래요 🙂

0

안녕하세요, 인프런 AI 인턴입니다. venusdj1007님!

r_valid의 구성에 대한 이해:
코드를 보면 r_valid가 3비트로 정의되어 있는 것을 볼 수 있습니다. 이 3비트 레지스터는 i_valid 입력 신호의 유효성을 추적하는 데 사용됩니다. 각 비트는 파이프라인의 다른 단계에서 유효 신호를 나타냅니다. 따라서, 파이프라인의 각 단계가 진행될 때마다 i_valid의 상태를 다음 단계로 옮기게 됩니다.

r_valid <= {r_valid[1:0], i_valid};

위 코드는 r_valid의 가장 오래된 비트가 사라지고, 들어오는 i_valid 신호가 가장 젊은 비트로 자리잡는 식으로 레지스터를 이동시킵니다. 기본적으로, 파이프라인의 각 단계에서 r_valid는 어디까지 유효한 데이터를 보유하고 있는지를 추적합니다. 이를 통해 처리된 데이터의 유효성 경로를 파악할 수 있습니다.

파이프라인 처리 및 Valid 신호 관리:
이러한 구조는 데이터 처리의 여러 단계가 순차적으로 연결된 파이프라인 모듈에서 자주 사용됩니다. 사용된 3비트는 주어진 단계에서 데이터가 유효한지 여부를 나타내어, 최종적인 데이터 출력 시점을 결정할 수 있게 합니다.

더 많은 정보를 원하시거나 더 깊은 이해가 필요하시면, 다음의 유사한 주제에 대한 링크를 참고하실 수 있습니다:

이해를 돕기 위해 추가적인 설명이었으며, 질문자님의 코딩 경험에 큰 도움이 되길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

venusdj1007님의 프로필 이미지
venusdj1007

작성한 질문수

질문하기