Module cseladd
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire sel;
add16 a0(a[15:0], b[15:0], 1'b0, sum[15:0], sel);
wire [15:0] sum0, sum1;
wire cout0, cout1;
add16 a1(a[31:16], b[31:16], 1'b0, sum0, cout0);
add16 a2(a[31:16], b[31:16], 1'b1, sum1, cout1);
assign sum[31:16] = (sel == 0) ? sum0 : sum1;
endmodule
conclusion:
- 实例化的参数必须是wire类型,否则会报错。
- 数据选择器assign实现,用条件语句,用always时必须有缓存器buffer作为reg进行。多路数据选择器用case实现。
assign result =a ?a1 :b?a2 :a3;