我需要帮助我的if else语句不起作用。无论我输入什么,它都无法正常工作。它只将1分配给操作数2.我在if / else语句中做错了什么?我觉得这是一个非常简单的修复,但我无法弄明白。
module TestMod; // the "main" thing
parameter STDIN = 32'h8000_0000; // I/O address of keyboard input channel
reg [7:0] str [1:3]; // typing in 2 chars at a time (decimal # and Enter key)
reg [4:0] X, Y; // 5-bit X, Y to sum
wire [4:0] S; // 5-bit Sum to see as result
wire C5; // like to know this as well from result of Adder
reg operand, operand2; //operand
wire E; //exception overflow inidicator
AddSub addOrSub(X, Y, S, C5, E, operand2);
initial begin
$display("Enter X (two digit 00~15 (since max is 01111)):");
...
$display("Enter Y (two digit 00~15 (since max is 01111)):");
...
$display("Enter + or -");
operand = $fgetc(STDIN);
if (operand == "+") begin
operand2 = 0;
end
else begin
operand2 = 1;
end
#1; // wait until Adder getsthem processed
$display("operand", operand);
$display("X =",X, " (%b",X, ") Y =",Y, " (%b",Y,")", "C0=",operand2);
$display("Result =", S," (%b",S, ") C5 = ",C5);
end
endmodule
答案 0 :(得分:1)
摘自IEEE Std 1800-2017,第21.3.4.1节,一次读取一个字符,$fgetc
:
从文件读取字节
一个字节是8位。如果用户在STDIN上输入+
,则$fgetc
返回字符串+
,该字符串在数字上下文中由ASCII值43表示。
您声明operand
为reg
,这是一个1位值。因此,operand
只能取0或1的值。在$fgetc
返回字符串+
的情况下,该字符串为43(或'b0010_1011),operand
仅得到最低有效位,即1。
(operand == "+")
比较1到43,这是错误的,并且执行了else
代码。
正如您在Comment中指出的那样,您需要将操作数声明为8位宽:
reg [7:0] operand;