Module
要求:实例化一个模块。
实例化有两种方法,一是将端口按名称连接在一起,另一种方法是按端口顺序连接。
module top_module ( input a, input b, output out );
/* mod_a mod_a_inst
(
.in1(a),
.in2(b),
.out(out)
); */
mod_a mod_a_inst(a,b,out);
endmodule
Module pos
要求:实例化,将端口按顺序连接。
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a mod_a_inst(out1,out2,a,b,c,d);
endmodule
Module name
要求:实例化,按名称连接。
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a mod_a_inst
(
.out1(out1),
.out2(out2),
.in1 (a),
.in2 (b),
.in3 (c),
.in4 (d)
);
endmodule
Module shift
要求:实例化3个d触发器。
注意:实例化多个模块时,实例化的名称不能相同。
module top_module ( input clk, input d, output q );
wire a,b;
my_dff my_diff_inst1 ( clk, d, a );
my_dff my_diff_inst2 ( clk, a, b );
my_dff my_diff_inst3 ( clk, b, q );
endmodule
Module shift8
要求:实例化3个D触发器,加上一个四选一数据选择器
module top_module (
input clk,
input [7:0] d,
input [1:0] sel,
output [7:0] q
);
//定义中间变量
wire [7:0] a,b,c;
my_dff8 my_dff8_inst1(clk,d,a);
my_dff8 my_dff8_inst2(clk,a,b);
my_dff8 my_dff8_inst3(clk,b,c);
//四选一数据选择器
always@(*)
begin
case(sel)
2'b00 : q <= d;
2'b01 : q <= a;
2'b10 : q <= b;
2'b11 : q <= c;
default : q <= d;
endcase
end
endmodule
Module add
注意:没有输出的cout端口可以不进行连接,将第二个实例化中的cout删除即可。
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire cin,cout;
add16 add16_inst1(a[15:0],b[15:0],1'b0,sum[15:0],cin);
add16 add16_inst2(a[31:16],b[31:16],cin,sum[31:16],cout);
endmodule
Module fadd
要求:实例化两个16位加法器,但未给出一位加法器,需要自己编写。
module top_module (
input [31:0] a,
input [31:0] b,
output [31:0] sum
);//
wire c,d;
add16 add16_inst1(a[15:0],b[15:0],1'b0,sum[15:0],c);
add16 add16_inst2(a[31:16],b[31:16],c,sum[31:16],d);
endmodule
//一位全加器
module add1 ( input a, input b, input cin, output sum, output cout );
// Full adder module here
assign {cout,sum} = a + b + cin;
endmodule
Module cseladd
要求:如下图所示实现进位加法器。
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire c,d;
wire [15:0] sum_l,sum_h0,sum_h1;
add16 add16_inst1(a[15:0],b[15:0],1'b0,sum_l,c);
add16 add16_inst2(a[31:16],b[31:16],1'b0,sum_h0,d);
add16 add16_inst3(a[31:16],b[31:16],1'b1,sum_h1,d);
//二选一选择器
always@(*)
begin
case(c)
1'b0 : sum = {sum_h0,sum_l};
1'b1 : sum = {sum_h1,sum_l};
endcase
end
endmodule
Module addsub
要求:实现加减法器。
module top_module(
input [31:0] a,
input [31:0] b,
input sub,
output [31:0] sum
);
wire [31:0] c;
wire d,e;
assign c = (b | {32{sub}}) & (~b | ~{32{sub}});
add16 add16_inst1(a[15:0],c[15:0],sub,sum[15:0],d);
add16 add16_inst2(a[31:16],c[31:16],d,sum[31:16],e);
endmodule