我正在尝试在 Verilog 中编写加法和减法程序。问题是在 Verilog 中执行和测试执行加法或减法的模块,然后多路复用器在让一个或另一个结果之间进行选择,然后将所选结果从二进制解码为 7 段显示格式。Verilog 模块将有 3 个输入:两个名为 A 和 B 的 4 位输入,以及一个选择输入 S。您的电路应将这两个数字相加,还应从 A 中减去 B(就像在代码中包含 AB 一样简单)。根据 S 的值(即它是 1 还是 0),您应该让加法的结果或减法的结果通过。
这是我拥有的代码: module AddOrSubtractThenSelectAndDecodeInto7SegmentsDisplay(A,B,S,Result,Overflow,Display);
input [3:0] A;
input [3:0] B;
input [1:0] S;
output reg [3:0] Result;
output reg Overflow;
output reg [6:0] Display;
wire [3:0] A;
wire [3:0] B;
wire [1:0] S;
always @(A,B) begin
if (S == 0'b0)
{Overflow, Result} = A - B;
else if (S == 1'b1)
{Overflow, Result} = A + B;
end
always @(Overflow,Result) begin
case (Result)
4'b0000: Display = 7'b1111110;//0
4'b0001: Display = 7'b0110000;//1
4'b0010: Display = 7'b1101101;//2
4'b0011: Display = 7'b1111001;//3
4'b0100: Display = 7'b0110011;//4
4'b0101: Display = 7'b1011011;//5
4'b0110: Display = 7'b1011111;//6
4'b0111: Display = 7'b1110000;//7
4'b1000: Display = 7'b1111111;//8
4'b1001: Display = 7'b1111011;//9
4'b1010: Display = 7'b1110111;//A
4'b1011: Display = 7'b0011111;//B
4'b1100: Display = 7'b1001110;//C
4'b1101: Display = 7'b0111101;//D
4'b1110: Display = 7'b1001111;//E
4'b1111: Display = 7'b1000111;//F
default: Display = 7'bx;
endcase
if (Overflow == 1)begin
Result = 4'bx;
Display = 7'b0011101;
end
end
endmodule
当我运行教练测试台时,除了显示之外,所有的线都是绿色的。它显示 Display[6:0] xxxxxxx,后面是红线。我花了 2 天的时间研究这个问题,试图修复它。请问有什么帮助吗?