14장 Pipeline 실습 질문있습니다.
40번째 ~ 46번째 라인인 시프트 레지스터 구현을 Concat syntax 사용해서 구현하셨는데 매 cycle 마다 shift left 된다고 하셨습니다.
그런데 구현하신 시프트 레지스터는 Right shift register로 보이는것 같아서요.
벡터값이 3 2 1 0 이런식으로 가서 shift left 된다고 표현하신건가요 ??
물리적인 배치와 시뮬레이션 값이랑 잘 매칭이 안되고 있습니다 ㅠㅠ

해당 사진의 출처는 HDLBits Exams/m2014 q4k 이고 문제의 솔루션도 맛비님이 제공해주신 14강 실습 파일과 동일한 로직을 가지고 있습니다.
즉 질문하고 싶은것은 Shift left가 아니라 Shift right가 맞지 않나요 ??레지스터를 어떻게 배치하냐에 따라서 Right left 다르게 할 수 있나요?? 라고 조심스럽게 질문드려봅니다..
답변 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
질문 하나만 더해도 되겠습니까..
맛비님 설명은 이제 이해가 가는데
해당 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
저렇게 맛비님의 14장 pipeline 코드 솔루션과 똑같은 베릴로그 코드 로직을 가지고 있구요.
처음 질문의 HDLBits Logic 그림은 Right Shift Register가 맞는거죠??
HDLBits그림으로 인해 자꾸 헷갈려서 질문 드립니다 ㅠㅠㅠ
1
해당 그림에서는 ff 의 indexing 숫자가 기재되어 있지 않아서, shift right 인지 left 인지 명확해보이지 않아요. 숫자를 기입해줘야 답변이 가능해보이네요 ㅋ
지식은 동등해졌으니, 판단은 각자의 영역 같아요. (제 답변은 적어드린 것과 같아서 해당 원칙내에서 저라면! 판단하겠습니다 ㅋ)
즐공하세요 :)
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





