yosys/tests/silimate/wide_op.v

40 lines
915 B
Verilog
Raw Normal View History

module wide_op(
a, b, y, c
);
parameter width = 1024;
// ADD/SUB: 0/4 + (0 unsigned+unsigned, 1 unsigned+signed, 2 signed+unsigned, 3 signed+signed)
// reserved for MUL: 8
parameter op = 0;
localparam ywidth = (op == 8) ? width * 2 : width;
input[width-1:0] a;
input[width-1:0] b;
output [width-1:0] y;
output c;
generate
if (op == 0)
assign {c, y} = a + b;
else if (op == 1)
assign {c, y} = a + $signed(b);
else if (op == 2)
assign {c, y} = $signed(a) + b;
else if (op == 3)
assign {c, y} = $signed(a) + $signed(b);
else if (op == 4)
assign {c, y} = a - b;
else if (op == 5)
assign {c, y} = a - $signed(b);
else if (op == 6)
assign {c, y} = $signed(a) - b;
else if (op == 7)
assign {c, y} = $signed(a) - $signed(b);
else if (op == 8) begin
assign c = 0;
assign y = a * b;
end
endgenerate
endmodule