0

我们可以在 if 语句中比较整数和二进制值吗,即我有一个比较语句作为

 if(o_remainder=remainder and o_quotient=quotient)

其中o_remaindero_quotient属于 类型std_logic_vectorremainder并且quotient属于 类型integer

4

3 回答 3

1

根据您提到的 std_logic_vector,我假设您实际上是在使用 VHDL,而不是 Verilog。

如果您的向量表示数字,请使用ieee.numeric_std 中的unsignedor类型,而不是向量。signed然后您可以直接与整数进行比较。

如果你坚持使用 std_logic 向量,那么之前转换它:

 if unsigned(some_vector) < some_integer then
于 2013-11-14T17:23:03.660 回答
1

这是一个比较 regs 和整数的简单测试:

module test;

reg        [9:0]   val;
reg signed [9:0]   sval;


initial begin
  #1ns;

  val = 10'd1;
  #1 $display("is it equal %b", val == 1);
  val = 10'd2;
  #1 $display("is it equal %b", val == 2);
  val = 10'd3;
  #1 $display("is it equal %b", val == 3);

  //Signed
  val = -10'd1;
  #1 $display("is it equal %b", val == -1);
  val = -10'd2;
  #1 $display("is it equal %b", val == -2);
  val = -10'd3;
  #1 $display("is it equal %b", val == -3);

  // Using Signed register
  sval = -10'd1;
  #1 $display("is it equal %b", sval == -1);
  sval = -10'd2;
  #1 $display("is it equal %b", sval == -2);
  sval = -10'd3;
  #1 $display("is it equal %b", sval == -3);
end
endmodule

给我:

is it equal 1
is it equal 1
is it equal 1
is it equal 0
is it equal 0
is it equal 0
is it equal 1
is it equal 1
is it equal 1

对我来说,正数工作正常,但负值失败。您必须将 reg 声明为已签名。为了比较工作。考虑到这一点,您应该能够将 reg 与整数进行比较。

于 2013-11-14T10:29:27.063 回答
0

你可以比较一下。integer 和 reg 的区别在于reg默认情况下是一个unsigned类型的单个位值;而是integer类型signed32 位值。确保o_reminderreminder属于同一类型,即两者都是signedunsignedo_quotient和的情况相同quotient

如果您声明如下,我看不到任何问题。

integer o_reminder, o_quotient;
reg signed [31:0] reminder,quotient;

或者

integer unsigned o_reminder, o_quotient;
reg [31:0] reminder,quotient;
于 2013-11-14T10:37:15.917 回答