728x90
산술 논리 장치란?
- 명령어에 따라 산술연산, 논리연산, 시프트연산 등의 기능을 수행할 수 있는 조합논리회로
- ALU(Arithmatic Logic Unit)라고 부른다.
- CPU에서 가장 중요한 요소
회로(4bit ALU)
ALU의 명령어와 연산
명령어 | 연산 | 의미 | |
산술연산 | 0000 | a + b | 덧셈 |
0001 | a - b | 뺄셈 | |
0010 | a x b | 곱셈 | |
0011 | a / b | 나눗셈 | |
0100 | a % b | 나머지 | |
비트 단위 논리연산 | 0101 | ~a | 비트 NOT |
0110 | a & b | 비트 AND | |
0111 | a | b | 비트 OR | |
1000 | a ^ b | 비트 XOR | |
1001 | a ~^ b | 비트 XNOR | |
비트단항 논리연산 | 1010 | & a | 비트단항 AND |
1011 | | a | 비트단항 OR | |
1100 | ~& a | 비트단항 NAND | |
1101 | ^ a | 비트단항 XOR | |
시프트 연산 | 1110 | a >> b | a를 b비트 우측 이동 |
1111 | a << b | a를 b비트 좌측 이동 |
verilog 코드
// ALU 설계
module alu (a, b, inst, result);
input [3:0] a, b, inst;
output reg [7:0] result;
parameter ADD = 4'h0;
parameter SUB = 4'h1;
parameter MUL = 4'h2;
parameter DIV = 4'h3;
parameter MOD = 4'h4;
parameter BitNOT = 4'h5;
parameter BitAND = 4'h6;
parameter BitOR = 4'h7;
parameter BitXOR = 4'h8;
parameter BitNOR = 4'h9;
parameter RedAND = 4'ha;
parameter RedOR = 4'hb;
parameter RedNAND = 4'hc;
parameter RedXOR = 4'hd;
parameter RSHT = 4'he;
parameter LSFT = 4'hf;
always@(a or b or inst) begin
case(inst)
ADD : result = a + b;
SUB : result = a - b;
MUL : result = a * b;
DIV : result = a / b;
MOD : result = a % b;
BitNOT : result = ~ a;
BitAND : result = a & b;
BitOR : result = a | b;
BitXOR : result = a ^ b;
BitNOR : result = a ~^ b;
RedAND : result = & a;
RedOR : result = | a;
RedNAND : result = ~& a;
RedXOR : result = ^ a;
RSHT : result = a >> b;
LSFT : result = a << b;
default : result = 8'hz;
endcase
end
endmodule
테스트벤치
// 4비트 ALU tb
`timescale 1ns/10ps
module tb_alu;
reg [3:0] a, b, inst;
wire [7:0] result;
integer i;
alu U0 (.a(a), .b(b), .inst(inst), .result(result));
initial begin
$dumpfile("dump.vcd");
$dumpvars(0);
a = 4'hb; // 4'b1011
b = 4'h2; // 4'b0010
end
initial begin
inst = 4'h0;
for(i = 0; i <= 15; i = i + 1) begin
#100; inst = inst + 1;
end
end
endmodule
Waveform
- inst의 값이 for문을 돌면서 100ns마다 4'h0부터 4'hf까지의 값을 가지게 됨.
'verilog > 실습' 카테고리의 다른 글
[Verilog] 조합회로(Combinational logic) : 인코더(Encoder)와 디코더(Decoder) (0) | 2025.03.04 |
---|---|
[Verilog] 순차 회로(Sequential logic) : D-플립플롭(Flip-Flop) (0) | 2025.03.04 |
[Verilog] 조합회로(Combinational logic) : 멀티플렉서(Multiplexer) (0) | 2025.03.03 |
[Verilog] 조합회로(Combinational logic) : 전가산기(Full Adder) (0) | 2025.03.03 |