본문 바로가기

Verilog/HDLbits

[HDLBits] Rotate100

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