https://hdlbits.01xz.net/wiki答案/Circuits/Arithmetic Circuits
1.Hadd
module top_module(
input a, b,
output cout, sum );
assign cout = a&b;
assign sum = a^b;
endmodule
2.Fadd
module top_module(
input a, b, cin,
output cout, sum );
assign sum = a^b^cin;
assign cout = (a&b) | (a&cin)|(b&cin);
endmodule
3.Adder3
使用generate是为了回忆generate的使用方法。
module top_module(
input [2:0] a, b,
input cin,
output [2:0] cout,
output [2:0] sum );
generate
genvar i;
for(i = 0; i<3; i++)begin:u1
if(i == 0)
Fadd fadd(a[i],b[i],cin,sum[i],cout[i]);
else
Fadd fadd(a[i],b[i],cout[i-1],sum[i],cout[i]);
end
endgenerate
endmodule
module Fadd(
input a,
input b,
input cin,
output sum,
output cout);
assign sum = a^b^cin;
assign cout = (a&b)|(a&cin)|(b&cin);
endmodule
4.Adder
本例引入了行为级描述,注意关于进位(x+y)是带进位的因而结构比x与y多一位的宽度,而{x+y}是不带进位的,结果与x和y的位宽相同。
module top_module (
input [3:0] x,
input [3:0] y,
output [4:0] sum);
assign sum = x + y;
endmodule
5.signed addition overflow
关于有符号数进位,只需要判断:符号位和符号位往后一位是否一个进位了,一个未进位(异或)。
可以自行推到得到这个结果,只需要一个二输入门,是比较好的。
module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow
); //
// assign s = ...
// assign overflow = ...
wire[7:0] cout;
generate
genvar i;
for(i=0; i<8; i++)begin:u1
if(i == 0)
FA fa(a[i],b[i],0,s[i],cout[i]);
else
FA fa(a[i],b[i],cout[i-1],s[i],cout[i]);
end
assign overflow = cout[7]^cout[6];
endgenerate
endmodule
module FA(
input a,
input b,
input cin,
output sum,
output cout);
assign sum = a^b^cin;
assign cout = (a&b)|(a&cin)|(b&cin);
endmodule
6.Adder100
继续加深行为级描述的印象。
module top_module(
input [99:0] a, b,
input cin,
output cout,
output [99:0] sum );
assign {cout,sum} = a + b + cin;
endmodule
7.BCD_adder4
module top_module(
input [15:0] a, b,
input cin,
output cout,
output [15:0] sum );
wire[3:0] cout1;
generate
genvar i;
for(i=0; i<4; i++)begin:u1
if(i==0)
bcd_fadd Adder(a[4*i+3:4*i], b[4*i+3:4*i], cin, cout1[i], sum[4*i+3:4*i]);
else
bcd_fadd Adder(a[4*i+3:4*i], b[4*i+3:4*i], cout1[i-1], cout1[i], sum[4*i+3:4*i]);
end
assign cout = cout1[3];
endgenerate
endmodule
如有错误欢迎指正讨论。
练习网址

浙公网安备 33010602011771号