본문 바로가기

Verilog/HDLbits

[HDLBits] Shift18

1. 문제 및 설명

  • 64바트 산술 시프트 레지스터를 설계하시오.
    • load: 시프트 동작 대신 data[63:0] 값을 시프트 레지스터에 로드한다.
    • ena: 시프트 여부를 선택한다.
    • amount: 시프트 방향과 양을 선택한다.
      • 2'b00: 왼쪽으로 1비트 시프트
      • 2'b01: 왼쪽으로 8비트 시프트
      • 2'b10: 오른쪽으로 1비트 시프트
      • 2'b11: 오른쪽으로 8비트 시프트
    • q: 시프트 레지스터의 현재 내용

 

2. 모듈 정의

module top_module(
    input clk,
    input load,
    input ena,
    input [1:0] amount,
    input [63:0] data,
    output reg [63:0] q);

 

 

3. 답

module top_module(
    input clk,
    input load,
    input ena,
    input [1:0] amount,
    input [63:0] data,
    output reg [63:0] q); 
    
   always@(posedge clk)
        begin
            if(load)
                q <= data;
            else if(ena)
                begin
                    if(amount == 2'b00)
                        q <= {q[62:0], 1'b0};
                    else if(amount == 2'b01)
                        q <= {q[55:0], 8'b0};
                    else if(amount == 2'b10)
                        q <= {q[63], q[63:1]};
                    else
                        q <= {{8{q[63]}}, q[63:8]};
                end
            else 
                q <= q;
        end

endmodule
 

'Verilog > HDLbits' 카테고리의 다른 글

[HDLBits] Mt2015 lfsr  (0) 2026.01.22
[HDLBits] Lfsr5  (0) 2026.01.22
[HDLBits] Rotate100  (0) 2026.01.19
[HDLBits] Shift4  (0) 2026.01.14
[HDLBits] Count clock  (0) 2026.01.14