1.Modules(Connecting Signals to Module Ports)
module top_module ( input a, input b, output out );
mod_a instance1 ( .in1(a), .in2(b), .out(out) );
endmodule
2.Connecting ports by position
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a instance1 ( out1, out2, a, b, c, d );
endmodule
3.Connecting ports by name
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a instance1 (.in1(a),.in2(b),.in3(c),.in4(d),.out1(out1),.out2(out2));
endmodule
4.Three modules
![](https://i-blog.csdnimg.cn/blog_migrate/1b299949a6ac2bfc4b67dccc76eef383.png)
5.Modules and Vectors
![](https://i-blog.csdnimg.cn/blog_migrate/92d156ef93c2f0c08ffe04c49c29ee11.png)
module top_module (
input clk,
input [7:0] d,
input [1:0] sel,
output [7:0] q
);
wire [7:0] q1,q2,q3;
my_dff8 instance1 ( .clk(clk), .d(d), .q(q1) );
my_dff8 instance2 ( .clk(clk), .d(q1), .q(q2) );
my_dff8 instance3 ( .clk(clk), .d(q2), .q(q3) );
always @ ( * )
case (sel)
2'b00 : q <= d;
2'b01 : q <= q1;
2'b10 : q <= q2;
2'b11 : q <= q3;
endcase
endmodule
6.Adder1
![](https://i-blog.csdnimg.cn/blog_migrate/4d36b067caba65d83ba4aa7ed32a8407.png)
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire [15:0] sum1,sum2,cout1,cout2;
add16 instance1 ( .a(a[15:0]), .b(b[15:0]), .cin(1'b0), .sum(sum1), .cout(cout1) );
add16 instance2 ( .a(a[31:16]), .b(b[31:16]), .cin(cout1), .sum(sum2), .cout(cout2) );
assign sum[31:0] = {sum2[15:0],sum1[15:0]};
endmodule
7.Adder2
![](https://i-blog.csdnimg.cn/blog_migrate/15127903bfb0fde64db9bb790eeb8f6c.png)
module top_module (
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire cout1,cout;
add16 instance1 ( .a(a[15:0]), .b(b[15:0]), .cin(1'b0), .sum(sum[15:0]), .cout(cout1) );
add16 instance2 ( .a(a[31:16]), .b(b[31:16]), .cin(cout1), .sum(sum[31:16]), .cout(cout) );
assign sum[31:0] = { sum[31:16],sum[15:0] };
endmodule
module add1 ( input a, input b, input cin, output sum, output cout );
// 全加器表达式 sum=a^b^cin(^异或) cout=(a&b)|(a&cin)|(b&cin)
assign sum = a^b^cin;
assign cout = (a&b)|(a&cin)|(b&cin);
endmodule
8.Carry-select adder
![](https://i-blog.csdnimg.cn/blog_migrate/701112a8f88aaab6cbb5a686e90303d0.png)
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire [15:0] cout1,cout2,cout3;
wire [15:0] sum2,sum3;
add16 instance1 ( .a(a[15:0]), .b(b[15:0]), .cin(1'b0), .sum(sum[15:0]), .cout(cout1) );
add16 instance2 ( .a(a[31:16]), .b(b[31:16]), .cin(1'b0), .sum(sum2), .cout(cout2) );
add16 instance3 ( .a(a[31:16]), .b(b[31:16]), .cin(1'b1), .sum(sum3), .cout(cout3) );
assign sum[31:16] = ( cout1 == 1'b0 ) ? sum2 : sum3;
assign sum[31:0] = { sum[31:16],sum[15:0] };
endmodule
9.Adder-subtractor
![](https://i-blog.csdnimg.cn/blog_migrate/99a6cee47d320852b514774a95fb7584.png)
module top_module(
input [31:0] a,
input [31:0] b,
input sub,
output [31:0] sum
);
wire [31:0] b1;
wire [15:0] cout1,cout;
assign b1 = b ^ {32{sub}};
add16 instance1 ( .a(a[15:0]), .b(b1[15:0]), .cin(sub), .sum(sum[15:0]), .cout(cout1) );
add16 instance2 ( .a(a[31:16]), .b(b1[31:16]), .cin(cout1), .sum(sum[31:16]), .cout(cout) );
assign sum[31:0] = { sum[31:16],sum[15:0] };
endmodule