算术运算电路(Arithmetic Circuits)
半加器(Half adder)
半加器是实现两个一位二进制数加法运算的器件。它具有两个输入端(被加数A和加数B)及输出端。是数据输入被加数A、加数B,数据输出S和数(半加和)、进位C。A和B是相加的两个数,S是半加和数,C是进位数。所谓半加就是不考虑进位的加法。
真值表如下:
题目:创建一个半加器。半加器将两位相加(不带进位),并产生一个求和和进位。
答案:
module top_module(
input a, b,
output cout, sum );
assign {cout,sum} = a + b;
endmodule
全加器(Full adder)
全加器英语名称为full-adder,用门电路实现两个二进数相加并求出和的组合线路,称为一个全加器。全加器区别于半加器是全加器带有进位。
真值表如下:
题目:创建一个全加器。全加器将三位(包括进位)相加,并产生一个求和和进位。
答案:
module top_module(
input a, b, cin,
output cout, sum );
assign {cout,sum} = a + b + cin;
endmodule
3bit binary adder
N-bit加法器可以根据1-bit全加器组合而成。每个全加器的输出进位cout作为下一个全加器的输入进位cin,这种加法器称为行波进位加法器(Ripple-carry adder,简称RCA)。
题目:知道了如何构建一个全加器,那么就制作3个实例来创建一个3位二进制行波进位加法器。行波进位加法器将两个3位数字和一个进位相加以产生一个3位结果和一个进位输出。
答案:
module top_module(
input [2:0] a, b,
input cin,
output [2:0] cout,
output [2:0] sum );
assign {cout[0],sum[0]} = a[0] + b[0] +cin;
assign {cout[1],sum[1]} = a[1] + b[1] +cout[0];
assign {cout[2],sum[2]} = a[2] + b[2] +cout[1];
endmodule
Adder
执行以下电路:
答案:由电路图分析可知,对输入进行全加器操作,从右至左进行相加进位。
module top_module (
input [3:0] x,
input [3:0] y,
output [4:0] sum);
wire [2:0] cout;
assign {cout[0],sum[0]} = x[0] + y[0];
assign {cout[1],sum[1]} = x[1] + y[1] + cout[0];
assign {cout[2],sum[2]} = x[2] + y[2] + cout[1];
assign {sum[4],sum[3]} = x[3] + y[3] + cout[2];
endmodule
Signed addition overflow
上溢必定是两个正数相加,下溢必定是两个负数相加,会产生符号溢出现象。
题目:假设您有两个8bit的补码,a[7:0]和b[7:0]。将这些数字相加生成s[7:0]。还要计算是否发生(有符号的)溢出。
答案:可以通过比较输入和输出数字的符号来计算溢出。
module top_module (
input [7:0] a,
input [7:0] b,
output [7:0] s,
output overflow
); //
assign s = a + b;
assign overflow = (a[7]&b[7]&~s[7]) | ((~a[7])&(~b[7])&s[7]);
endmodule
100bit binary adder
题目:创建一个100位二进制加法器。加法器将两个100位数字和一个进位相加,生成100位结果和一个进位。
答案:
module top_module(
input [99:0] a, b,
input cin,
output cout,
output [99:0] sum );
assign {cout,sum[99:0]} = a + b + cin;
endmodule
4-digit BCD adder
我们为您提供了一个名为bcd_fadd的BCD(二进制编码十进制)一位加法器,它将两个BCD数字相加并进行进位,然后生成一个求和并进行进位。
module bcd_fadd {
input [3:0] a,
input [3:0] b,
input cin,
output cout,
output [3:0] sum );
题目:实例化4个bcd_fadd副本以创建4位BCD行波进位加法器。加法器应将两个4位BCD数字(压缩为16位向量)和一个进位相加,以生成4位和并执行。
答案:利用给定的bcd_fadd加法器进行行波进位,4个模块中需要一个3位的媒介进行连接。
module top_module(
input [15:0] a, b,
input cin,
output cout,
output [15:0] sum );
wire [2:0] cout_temp;
bcd_fadd bcd_1(a[3:0],b[3:0],cin,cout_temp[0],sum[3:0]);
bcd_fadd bcd_2(a[7:4],b[7:4],cout_temp[0],cout_temp[1],sum[7:4]);
bcd_fadd bcd_3(a[11:8],b[11:8],cout_temp[1],cout_temp[2],sum[11:8]);
bcd_fadd bcd_4(a[15:12],b[15:12],cout_temp[2],cout,sum[15:12]);
endmodule
以上是HDLBits Verilog语言刷题网站中的Circuits-Arithmetic Circuits部分,后续部分会继续更新。对一些基础性知识点进行归纳总结,有错误请指正。仅供学习参考,谢谢!!!