1
0
mirror of https://github.com/aolofsson/oh.git synced 2025-01-17 20:02:53 +08:00
oh/common/hdl/oh_add.v
2015-12-17 13:50:59 -05:00

44 lines
1.3 KiB
Verilog

module oh_add (/*AUTOARG*/
// Outputs
sum, cout, zero, neg, overflow,
// Inputs
a, b, opt_sub, cin
);
//###############################################################
//# Parameters
//###############################################################
parameter DW = 64;
//###############################################################
//# Interface
//###############################################################
//inputs
input [DW-1:0] a; //first operand
input [DW-1:0] b; //second operand
input opt_sub; //subtraction option
input cin; //carry in
//outputs
output [DW-1:0] sum; //sum
output cout; //cary out
output zero; //zero flag
output neg; //negative flag
output overflow; //overflow indication
//###############################################################
//# BODY
//###############################################################
wire [DW-1:0] b_sub;
assign b_sub[DW-1:0] = {(DW){opt_sub}} ^ b[DW-1:0];
assign {cout,sum[DW-1:0]} = a[DW-1:0] +
b_sub[DW-1:0] +
opt_sub +
cin;
endmodule // oh_add