在VHDL中比较整数和二进制

时间:2013-11-14 07:35:19

标签: vhdl

我们可以比较if语句中的整数和二进制值,即 我有一个比较声明

 if(o_remainder=remainder and o_quotient=quotient)

其中o_remaindero_quotient的类型为std_logic_vector,而remainderquotient的类型为integer

3 个答案:

答案 0 :(得分: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与整数进行比较。

答案 1 :(得分:1)

从你提到std_logic_vector,我假设你实际上是用VHDL工作,而不是Verilog。

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

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

 if unsigned(some_vector) < some_integer then

答案 2 :(得分:0)

你可以比较。 integer和reg之间的区别在于reg默认为unsigned类型的单个位值;而integersigned类型32位值。 确保o_reminderreminder属于同一类型,即signedunsigned。 与o_quotientquotient相同的情况。

如果你声明如下,我没有看到任何问题。

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

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