📜  门| GATE-CS-2016(套装2)|问题 37(1)

📅  最后修改于: 2023-12-03 15:12:43.716000             🧑  作者: Mango

门 | GATE-CS-2016(套装2)|问题 37

这个问题涉及到理解逻辑门和编写相应的程序。

问题描述

给定两个4位二进制数A=(a[3]a[2]a[1]a[0])B=(b[3]b[2]b[1]b[0]),设计一个组合逻辑电路,计算 (A + B)的结果。生成一个4位二进制数 S 表示加法结果,并将其存储在寄存器中。同时,使用一个锁存器实现一个复位按钮,使S的值清零。

设计的电路应包括以下部分:

  • 4个全加器(FA):分别计算a[0]+b[0]a[1]+b[1]a[2]+b[2]a[3]+b[3]的和,以及相应的进制号。
  • 两个解码器(DE):该部分将上述四个全加器的和和进位号解码,以便能够将其存储在相应的输出寄存器中。
  • 两个寄存器(RG):该部分将解码器的输出存储在寄存器中,以便在下一时钟上升沿时被读取。
  • 一个锁存器(LK):用于复位s的值为零。
解决方案

根据上述问题描述,可以轻松地设计出电路。下面是一个实现上述要求的程序:

1. 模块 adder(A,B,R,Clk,Reset);
2.   input [3:0] A,B;
3.   input Clk,Reset;
4.   output reg [3:0] R;
5.   reg [3:0] C;
6.   wire [3:0] S;
7.   // Full Adders
8.   FA x1(A[0], B[0], 1'b0, S[0], C[0]);
9.   FA x2(A[1], B[1], C[0], S[1], C[1]);
10.  FA x3(A[2], B[2], C[1], S[2], C[2]);
11.  FA x4(A[3], B[3], C[2], S[3], C[3]);
12.  // Decoders
13.  DE d1(S[0],C[0], R[0], R[4]);
14.  DE d2(S[1],C[1], R[1], R[5]);
15.  DE d3(S[2],C[2], R[2], R[6]);
16.  DE d4(S[3],C[3], R[3], R[7]);
17.  always @(posedge Clk)
18.    if (Reset) begin
19.      R <= 4'b0;
20.    end
21.    else begin
22.      R <= {R[7], R[6], R[5], R[4]};
23.    end
24. endmodule
 
25. // Full Adder
26. module FA(A, B, Cin, Sum, Cout);
27.   input A, B, Cin;
28.   output Sum, Cout;
29.   assign {Cout, Sum} = A + B + Cin;
30. endmodule
 
31. // Decoder
32. module DE(A,B,Y0,Y1);
33.   input A,B;
34.   output Y0,Y1;
35.   assign Y0 = (~A) & (~B);
36.   assign Y1 = (A & ~B) | (~A & B);
37. endmodule

在上述代码中,我们首先定义了FA电路,它实现了全加器的逻辑功能。然后,我们定义了DE电路,它可以将四个全加器的和和进位号解码为2位输出。最后,我们定义了adder电路,它使用上述两个子电路计算 (A + B),并将结果存储在R中。此外,该电路包括一个锁存器实现的复位按钮,以将s的值清零。

最后值得注意的是,我们将解码器的输出{R[0], R[1], R[2], R[3]}连接到s。在adder模块中,每个时钟周期的末尾,我们将s左移4而不是右移,以便在下一时钟上升沿时能够将其读出。

结论

本问题要求设计一个包含四个全加器、两个解码器、两个寄存器和一个锁存器的电路,以实现二进制加法。实现方案涉及到设计合适的组合逻辑电路,并且需要将结果存储在寄存器中。在设计电路时,需要考虑到电路的可维护性和兼容性,并确保计算正确并且没有逻辑毛病。