mirror of https://github.com/YosysHQ/yosys.git
40 lines
915 B
Verilog
40 lines
915 B
Verilog
|
|
|
||
|
|
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
|