HDLBits刷题记录
Modules:Hierarchy
Module
电路图:
代码:
module top_module ( input a, input b, output out );
mod_a mod_a(
.in1(a),
.in2(b),
.out(out)
);
endmodule
--第二种写法
module top_module ( input a, input b, output out );
mod_a mod_a(
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(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
(
.out1(out1),
.out2(out2),
.in1(a),
.in2(b),
.in3(c),
.in4(d)
);
endmodule
Module shift
电路图:
代码:
module top_module ( input clk, input d, output q );
wire q1,q2;
my_dff my_dff0
(
.clk(clk),
.d(d),
.q(q1)
);
my_dff my_dff1
(
.clk(clk),
.d(q1),
.q(q2)
);
my_dff my_df2
(
.clk(clk),
.d(q2),
.q(q)
);
endmodule
Module shift8
电路图:
代码:
module top_module (
input clk,
input [7:0] d,
input [1:0] sel,
output [7:0] q
);
wire [7:0]q0;
wire [7:0]q1;
wire [7:0]q2;
always@(*)
begin
case(sel)
2'b00:q<=d;
2'b01:q<=q0;
2'b10:q<=q1;
2'b11:q<=q2;
endcase
end
my_dff8 my_dff0
(
.clk(clk),
.d(d),
.q(q0)
);
my_dff8 my_dff1
(
.clk(clk),
.d(q0),
.q(q1)
);
my_dff8 my_df2
(
.clk(clk),
.d(q1),
.q(q2)
);
endmodule
Module add
电路图:
代码:
module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);
wire [15:0]sum1;
wire [15:0]sum2;
wire count1;
add16 add16_1(
.a(a[15:0]),
.b(b[15:0]),
.cin(1'b0),
.sum(sum1),
.cout(count1)
);
add16 add16_2(
.a(a[31:16]),
.b(b[31:16]),
.cin(count1),
.sum(sum2),
.cout()
);
assign sum={sum2,sum1};
endmodule
Module fadd
电路图:
代码:
module top_module (
input [31:0] a,
input [31:0] b,
output [31:0] sum
);//
wire cout;
add16 add16_0(
.a(a[15:0]),
.b(b[15:0]),
.cin(1'b0),
.sum(sum[15:0]),
.cout(cout)
);
add16 add16_1(
.a(a[31:16]),
.b(b[31:16]),
.cin(cout),
.sum(sum[31:16]),
.cout()
);
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 cout;
wire [15:0]sum1;
wire [15:0]sum2;
add16 add16_0(
.a(a[15:0]),
.b(b[15:0]),
.cin(1'b0),
.sum(sum[15:0]),
.cout(cout)
);
add16 add16_1(
.a(a[31:16]),
.b(b[31:16]),
.cin(1'b0),
.sum(sum1),
.cout()
);
add16 add16_2(
.a(a[31:16]),
.b(b[31:16]),
.cin(1'b1),
.sum(sum2),
.cout()
);
always@(*)
begin
if(cout==1'b0)
sum[31:16]=sum1;
else if(cout==1'b1)
sum[31:16]=sum2;
end
endmodule
Module addsub
电路图:
代码:
module top_module(
input [31:0] a,
input [31:0] b,
input sub,
output [31:0] sum
);
wire [31:0]b_sub;
wire cout;
assign b_sub = b ^ {32{sub}};
add16 add16_1(
.a(a[15:0]),
.b(b_sub[15:0]),
.cin(sub),
.sum(sum[15:0]),
.cout(cout)
);
add16 add16_2(
.a(a[31:16]),
.b(b_sub[31:16]),
.cin(cout),
.sum(sum[31:16]),
.cout()
);
endmodule