inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

14장 Pipeline 실습 질문있습니다.

해결된 질문

407

eunsekkang

작성한 질문수 5

2

40번째 ~ 46번째 라인인 시프트 레지스터 구현을 Concat syntax 사용해서 구현하셨는데 매 cycle 마다 shift left 된다고 하셨습니다.

그런데 구현하신 시프트 레지스터는 Right shift register로 보이는것 같아서요.

벡터값이 3 2 1 0 이런식으로 가서 shift left 된다고 표현하신건가요 ??

물리적인 배치와 시뮬레이션 값이랑 잘 매칭이 안되고 있습니다 ㅠㅠ

스크린샷 2023-12-14 오후 2.12.00.png

해당 사진의 출처는 HDLBits Exams/m2014 q4k 이고 문제의 솔루션도 맛비님이 제공해주신 14강 실습 파일과 동일한 로직을 가지고 있습니다.
즉 질문하고 싶은것은 Shift left가 아니라 Shift right가 맞지 않나요 ??레지스터를 어떻게 배치하냐에 따라서 Right left 다르게 할 수 있나요?? 라고 조심스럽게 질문드려봅니다..

verilog-hdl fpga 임베디드

답변 2

1

설계독학맛비

안녕하세요 🙂

 

reg 	[2:0] 	r_valid;  
	// 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};
	    end
	end

 

먼저 현재 코드를 보시면, 하위 index 에서 상위 index 로 shifting 이 되고 있고요.

[2:0] 을 갖는 bit indexing 선언에서,

<< (shift left) 를 사용해야 하위 index 에서 상위 index 로 shifting 이 되는 것이기 때문에 shift left 라는 워딩을 사용했습니다.

 

[2:0] 을 갖는 bit indexing 선언에서,

만약에 >> (shift right) 를 했다면, 상위 index 에서 하위 index 로 shifting 이 될 것 같아요. 이는 코드와 반대되는 거라고 생각합니다.

 

올려주신 HDL bits 는

상위 index 에 input 이 들어가죠. (Q[2] <= in;)

즉, 해당 코드는 shift right 가 맞습니다. 헷갈리실 법 한대요. shifting 되는 방향을 index 를 기준으로 생각해보시면 이해가 되실꺼에요.

//四级移位寄存器
module top_module (
    input clk,
    input resetn,   // synchronous reset
    input in,
    output reg out);
    reg [2:0] Q;
    always @(posedge clk)begin
        if(~resetn)begin
            {Q,out} <= 4'b0;
        end
        else begin
            Q[2] <= in;
            Q[1] <= Q[2];
            Q[0] <= Q[1];
            out <= Q[0];
        end
    end

endmodule

 

정리하면 제가 예제로 드린 코드는 Shift left, HDL Bits 코드는 Shift Right

 

즐공하세요 🙂

0

eunsekkang

아하 이해했습니다 감사합니다~!

0

eunsekkang

질문 하나만 더해도 되겠습니까..
맛비님 설명은 이제 이해가 가는데
해당 HDLBits 문제를

);module top_module (
    input               clk,
    input               resetn,
    input               in,
    output              out
);
    
    
    reg [3:0] 	r_out;


    always @(posedge clk)begin	
        if(!resetn)begin
            r_out <= 4'b0;
        end else begin
            r_out[0] <= in;
            r_out[1] <= r_out[0];
            r_out[2] <= r_out[1];
            r_out[3] <= r_out[2];
        end
    end 
    
    assign out = r_out[3];
endmodule



이렇게 하위 Index -> 상위 Index로 가는 left shift register로 표현해도 정답이 되더라구요 문제의 솔루션도

module top_module (
	input clk,
	input resetn,
	input in,
	output out
);

	reg [3:0] sr;
	
	// Create a shift register named sr. It shifts in "in".
	always @(posedge clk) begin
		if (~resetn)		// Synchronous active-low reset
			sr <= 0;
		else 
			sr <= {sr[2:0], in};
	end
	
	assign out = sr[3];		// Output the final bit (sr[3])

endmodule

0

eunsekkang

저렇게 맛비님의 14장 pipeline 코드 솔루션과 똑같은 베릴로그 코드 로직을 가지고 있구요.

처음 질문의 HDLBits Logic 그림은 Right Shift Register가 맞는거죠??

HDLBits그림으로 인해 자꾸 헷갈려서 질문 드립니다 ㅠㅠㅠ

1

설계독학맛비

해당 그림에서는 ff 의 indexing 숫자가 기재되어 있지 않아서, shift right 인지 left 인지 명확해보이지 않아요. 숫자를 기입해줘야 답변이 가능해보이네요 ㅋ

지식은 동등해졌으니, 판단은 각자의 영역 같아요. (제 답변은 적어드린 것과 같아서 해당 원칙내에서 저라면! 판단하겠습니다 ㅋ)

즐공하세요 :)

0

eunsekkang

아 그러네요. 인덱싱 표현이 위 그림엔 없군요 ! 감사합니다 ! 이제 좀 명확해진 것 같습니다

latency 개념 구현

1

84

3

비바도 all os버전

1

67

2

초기화를 reset_n 이 '1'일 때가 아닌 '0' 일 때 실행시키는 이유 질문

1

68

2

다운로드용량

1

68

2

비바도리눅스설치

1

79

2

전체path복사넣기

1

60

2

Vivado 2025.2 리눅스 설치 후 실행 에러와 솔루션 (libxv_commontasks.so)

1

142

2

explorer.exe오류

1

99

3

mobaxterm설치오류

1

84

2

./build시, waveform 'divide color' 사용

1

52

2

Latch와 관련하여 (Time borrowing, Latch-based design)

1

122

2

clean 명령어가 안되는데, 따로 저장해줘야 하는지 궁금합니다.

0

57

1

안녕하세요 설치 관련 질문 드립니다.

1

60

3

16장 mealy 설계.

1

71

2

14장 Cycle 관련, Testbench 코드.

1

63

2

21강(16장) 초기값 설정이 적용되는 시점 질문

1

59

1

20강(15장) - 밀리 머신 관련하여 질문 드립니다.

1

63

2

build에러 질문

0

54

2

1장 ./build에서 에러가 나요

1

70

2

FPGA 강의 보드 문의 드립니다.

1

104

2

5장 DFF특성에 대한 질문

1

74

3

vivado linux 사용 이유.

1

135

2

메모리의 형태가 전체설계에 미치는 영향이 궁금합니다.

1

102

2

디스코드 멤버쉽 등업 관련 문제

1

92

2