实现以下电路:
(“FA”是一个完整的加法器)
模块声明
module top_module ( input [3:0] x, input [3:0] y, output [4:0] sum);
分析:图中所示的FA是一个1位加法器,图中所给的电路由四个这样的1位加法器组成,sum和输入输出分别连接着对应的位。由模块声明可知:该电路没有画出进位cin和cout,但实际上要有的,否则将会导致结果不正确。要实现上述电路只需要写出FA的描述电路并对其进行模块调用即可。
代码编写如下:
module top_module (
input [3:0] x,
input [3:0] y,
output [4:0] sum);
wire [2:0]cout;
wire cin;
add1 u1(.x(x[0]),.cin(cin),.y(y[0]),.sum(sum[0]),.cout(cout[0]));
add1 u2(.x(x[1]),.cin(cout[0]),.y(y[1]),.sum(sum[1]),.cout(cout[1]));
add1 u3(.x(x[2]),.cin(cout[1]),.y(y[2]),.sum(sum[2]),.cout(cout[2]));
add1 u4(.x(x[3]),.cin(cout[2]),.y(y[3]),.sum(sum[3]),.cout(sum[4]));
assign sum = {sum[4],sum[3],sum[2],sum[1],sum[0]};
endmodule
//1位加法器
module add1( x,y,cin, sum,cout);
input x,y,cin;
output sum,cout;
assign sum =x^y^cin;
assign cout = x&y | (cin&(x^y));
endmodule
使用quartus ii画出逻辑图:
add1的内部逻辑如下图所示: