module Four_bit_adder_subtractor(S,C4,A,B,M);
input [3:0] A,B;
input M;
output [3:0] S;
output C4;
reg [3:0]S;
reg C4;
input [3:0] A,B;
input M;
output [3:0] S;
output C4;
reg [3:0]S;
reg C4;
always @ (A or B or M)
begin
if(M)
begin
S = A – B;
if( A < B)
C4 = 1’b0;
else
C4 = 1’b1;
end
begin
if(M)
begin
S = A – B;
if( A < B)
C4 = 1’b0;
else
C4 = 1’b1;
end
else
begin
S = A + B;
if( A+B > 5’b01111 )
C4 = 1’b1;
else
C4 = 1’b0;
end
end
endmodule
begin
S = A + B;
if( A+B > 5’b01111 )
C4 = 1’b1;
else
C4 = 1’b0;
end
end
endmodule
위 코드는 4비트의 뺄셈과 덧셈이 동시에 가능한 모듈을 Verilog HDL코드로 작성한것으로
Behavior Model(동작수준모델)로 작성한것.
A와 B가 피 연산자 이고 결과는 4비트 S에 저장된다.
모드인 M에 따라서 덧셈 또는 뺼셈이 수행되는데, M이 1이면 뺄셈, M이 0이면 덧셈을 수행한다.
Always구문 안을 보자면
A 또는 B 또는 M이 변화할때 Always안의 블럭을 항상 수행하는데
M이 1이면 S = A – B를수행한다.
이때 A가 B보다 작으면 음수 결과가 나므로 Carry Out은 0 A가 B보다 크면 양수이므로 Carry Out 은 1로 나온다.
M이 0이면 S = A + B를 수행하는데, A와 B의 합이 4bit 1111를 넘어가면 Carry Out은 1
A와 B의 합이 4bit 1111보다 같거나 작으면 Carry Out은 0이다.