目录
第65题:256-to-1 4-bit multiplexer
第61题:2-to-1 multiplexer
module top_module
(
input a, b, sel,
output out
);
assign out = (sel == 0) ? a : b;
endmodule
第62题:2-to-1 bus multiplexer
module top_module
(
input [99:0] a, b,
input sel ,
output [99:0] out
);
assign out = (sel == 0) ? a : b;
endmodule
第63题:9-to-1 multiplexer
module top_module
(
input [15:0] a, b, c, d, e, f, g, h, i,
input [3:0] sel,
output [15:0] out
);
always@(*)
case(sel)
0 : out = a;
1 : out = b;
2 : out = c;
3 : out = d;
4 : out = e;
5 : out = f;
6 : out = g;
7 : out = h;
8 : out = i;
default : out = 16'hffff;
endcase
endmodule
第64题:256-to-1 multiplexer
module top_module
(
input [255:0] in ,
input [7:0] sel ,
output out
);
assign out = in[sel];
endmodule
第65题:256-to-1 4-bit multiplexer
module top_module
(
input [1023:0] in,
input [7:0] sel,
output [3:0] out
);
/*-----方法1-----*/
assign out = in[(sel*4)+:4];
/*-----方法2-----*/
// integer i;
// always@(*)
// for(i = 0;i < 4;i = i + 1)
// begin
// out[i] = in[sel*4+i];
// end
endmodule
第66题:Half adder
module top_module
(
input a, b,
output cout, sum
);
assign {cout,sum} = {a&b,a^b};
endmodule
第67题:Full adder
module top_module
(
input a, b, cin,
output cout, sum
);
assign cout = (a&b) + ((a^b)&cin);
assign sum = a^b^cin;
endmodule
第68题:3-bit binary adder
module top_module
(
input [2:0] a, b,
input cin,
output [2:0] cout,
output [2:0] sum
);
full_adder full_adder_inst1
(
.a(a[0]), .b(b[0]), .cin(cin),
.cout(cout[0]), .sum(sum[0])
);
full_adder full_adder_inst2
(
.a(a[1]), .b(b[1]), .cin(cout[0]),
.cout(cout[1]), .sum(sum[1])
);
full_adder full_adder_inst3
(
.a(a[2]), .b(b[2]), .cin(cout[1]),
.cout(cout[2]), .sum(sum[2])
);
endmodule
module full_adder
(
input a, b, cin,
output cout, sum
);
assign cout = (a&b) + ((a^b)&cin);
assign sum = a^b^cin;
endmodule
第69题:Adder
module top_module
(
input [3:0] x ,
input [3:0] y ,
output [4:0] sum
);
wire [3:0] cout;
FA FA_inst0
(
.a(x[0]), .b(y[0]), .cin(0),
.cout(cout[0]), .sum(sum[0])
);
generate
genvar i;
for(i= 1;i < 4;i= i+1)
begin:adder4_inst
FA FA_insti
(
.a(x[i]), .b(y[i]), .cin(cout[i-1]),
.cout(cout[i]), .sum(sum[i])
);
end
endgenerate
assign sum[4] = cout[3];
endmodule
module FA
(
input a, b, cin,
output cout, sum
);
assign cout = (a&b) + ((a^b)&cin);
assign sum = a^b^cin;
endmodule
第70题:Signed addition overflow
module top_module
(
input [7:0] a ,
input [7:0] b ,
output [7:0] s ,
output overflow
);
wire [8:0] a_b;
assign s = a + b;
assign a_b = a + b;
//符号相反不会溢出,则直接输出0,符号相同,如果进位 位 和 和的符号位相反,则溢出,输出1
assign overflow = (a[7] == b[7]) ? (a_b[8] ^ a_b[7]) : 0;
endmodule