Connect the modules together as shown in the diagram below. The provided module add16
has the following declaration:
module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
1.用if-else语句写:
注意:
- assign(连续赋值与语句)与always过程块中的assign(过程连续赋值语句)不同,前者对wire型变量赋值,后者对reg型变量赋值;
- assign(过程连续赋值语句)不能对寄存器变量进行位操作;
- if-else语句只在过程语句(initial、always)中使用。
因此,在if-else语句中只能使用过程赋值语句(=、<=)。
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire sel;
wire [31:16]sum0, sum1;
add16 add1 (.a(a[15:0]), .b(b[15:0]), .cin(1'b0), .sum(sum[15:0]), .cout(sel));
add16 add21 (.a(a[31:16]), .b(b[31:16]), .cin(1'b0), .sum(sum0), .cout());
add16 add22 (.a(a[31:16]), .b(b[31:16]), .cin(1'b1), .sum(sum1), .cout());
always@(sel,sum0,sum1)
begin
if(sel) sum[31:16] = sum1;
else sum[31:16] = sum0;
end
endmodule
2.用case语句写:
注意:
- case语句只在过程语句(initial、always)中使用。
代码略
3.用?:运算符写:
代码略