1. 문제 및 설명
- 100비트 좌우 회전 기능을 갖는 로테이터를 설계하시오.
- 로테이터는 시프트 레지스터의 한쪽 끝에서 밀려나간 비트를 반대쪽 끝으로 다시 입력 하는 구조다.
- load: 시프트 동작 대신 data[99:0] 값을 시프트 레지스터에 로드한다.
- ena: 회전 여부 및 회전 방향을 선택
- 2'b01: 오른쪽으로 1비트 회전
- 2'b10: 왼쪽으로 1비트 회전
- 2'b00, 2'b11: 회전하지 않음
- q: 로테이터의 현재 내용
2. 모듈 정의
module top_module(
input clk,
input load,
input [1:0] ena,
input [99:0] data,
output reg [99:0] q);
3. 답
module top_module(
input clk,
input load,
input [1:0] ena,
input [99:0] data,
output reg [99:0] q);
always@(posedge clk)
begin
if(load)
q <= data;
else if(ena == 2'b01)
q <= {q[0], q[99:1]};
else if(ena == 2'b10)
q <= {q[98:0], q[99]};
else
q <= q;
end
endmodule
'Verilog > HDLbits' 카테고리의 다른 글
| [HDLBits] Lfsr5 (0) | 2026.01.22 |
|---|---|
| [HDLBits] Shift18 (0) | 2026.01.19 |
| [HDLBits] Shift4 (0) | 2026.01.14 |
| [HDLBits] Count clock (0) | 2026.01.14 |
| [HDLBits] Countbcd (0) | 2026.01.14 |