Verilog if语句帮助。不工作

时间:2018-03-12 05:50:31

标签: verilog

我需要帮助我的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

1 个答案:

答案 0 :(得分:1)

摘自IEEE Std 1800-2017,第21.3.4.1节,一次读取一个字符$fgetc

从文件读取字节

一个字节是8位。如果用户在STDIN上输入+,则$fgetc返回字符串+,该字符串在数字上下文中由ASCII值43表示。

您声明operandreg,这是一个1位值。因此,operand只能取0或1的值。在$fgetc返回字符串+的情况下,该字符串为43(或'b0010_1011),operand仅得到最低有效位,即1。

(operand == "+")比较1到43,这是错误的,并且执行了else代码。

正如您在Comment中指出的那样,您需要将操作数声明为8位宽:

reg [7:0] operand;