先上链接https://hdlbits.01xz.net/wiki/Module
(1)Module
module top_module ( input a, input b, output out );
mod_a mod_a1(.in1(a),.in2(b),.out(out));
endmodule
(2)Module pos
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a (out1,out2,a,b,c,d);
endmodule
(3)Module name
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a mod_at(.in1(a),.in2(b),.in3(c),.in4(d),.out1(out1),.out2(out2));
endmodule
(4)Module shift
module top_module ( input clk, input d, output q );
wire q1,q2;
my_dff dff1(
.clk(clk),
.d(d),
.q(q1));
my_dff dff2(
.clk(clk),
.d(q1),
.q(q2));
my_dff dff3(
.clk(clk),
.d(q2),
.q(q));
endmodule
(5)Module shift8
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 dff81(clk,d,q1);
my_dff8 dff82(clk,q1,q2);
my_dff8 dff83(clk,q2,q3);
always @(*)
case(sel)
2‘b 00 : q = d;
2‘b 01 : q = q1;
2‘b 10 : q = q2;
2‘b 11 : q = q3;
endcase
endmodule
(6)Module add
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire cout;
add16 low16 (a[15:0],b[15:0],1‘b0,sum[15:0],cout);
add16 high16 (a[31:16],b[31:16],cout,sum[31:16],);
endmodule
(7)Module fadd
module top_module (
input [31:0] a,
input [31:0] b,
output [31:0] sum
);//
wire cout;
add16 low16(a[15:0],b[15:0],1‘b0,sum[15:0],cout);
add16 high16(a[31:16],b[31:16],cout,sum[31:16],);
endmodule
module add1 ( input a, input b, input cin, output sum, output cout );
// Full adder module here
assign sum = a^b^cin;
assign cout = (a&b)|(a&cin)|(b&cin);
endmodule
这道题有些误导,系统没有把add16写出来,但题目说已经提供,所以不必写add16的rtl,直接例化add16来用,并表达add1即可。
(8)Module cseladd
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire cout;
wire [15:0]sum_0;
wire [15:0]sum_1;
add16 low16 (a[15:0],b[15:0],1‘b0,sum[15:0],cout);
add16 high16_0 (a[31:16],b[31:16],1‘b0,sum_0,);
add16 high16_1 (a[31:16],b[31:16],1‘b1,sum_1,);
always @(*)
case (cout)
1‘b0 : sum[31:16] = sum_0;
1‘b1 : sum[31:16] = sum_1;
endcase
endmodule
(9)Module addsub
module top_module(
input [31:0] a,
input [31:0] b,
input sub,
output [31:0] sum
);
wire cout;
wire [31:0]sub_b;
assign sub_b = {32{sub}}^b;
add16 low16 (a[15:0],sub_b[15:0],sub,sum[15:0],cout);
add16 high16(a[31:16],sub_b[31:16],cout,sum[31:16],);
endmodule
Answers For HDLbits - Verilog Language_Module_Hierarchy
原文:https://www.cnblogs.com/Bain-M/p/14286641.html