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 |