VHDL中整数与二进制的比较

VHDL中整数与二进制的比较,vhdl,Vhdl,我们可以比较if语句中的整数值和二进制数值吗 我有一个比较陈述 if(o_remainder=remainder and o_quotient=quotient) 其中,o_余数和o_商为std_逻辑向量类型,余数和商为整型下面是一个比较regs和integer的简单测试: module test; reg [9:0] val; reg signed [9:0] sval; initial begin #1ns; val = 10'd1; #1 $d

我们可以比较if语句中的整数值和二进制数值吗 我有一个比较陈述

 if(o_remainder=remainder and o_quotient=quotient)

其中,
o_余数
o_商
std_逻辑向量
类型,
余数
整型

下面是一个比较regs和integer的简单测试:

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与integer进行比较。

您可以进行比较。 整数和reg之间的区别在于
reg
默认为
无符号
类型的单位值;而
整数
有符号的
类型32位值。 确保
o_提醒
提醒
的类型相同,即都是
有符号的
无符号的
。 与
o_商
的情况相同

我看不出任何问题,如果你已经声明如下

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


从您提到的std_logic_vector,我假设您实际上使用的是VHDL,而不是Verilog

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

如果您坚持使用std_逻辑向量,则在以下情况之前进行转换:

 if unsigned(some_vector) < some_integer then
如果无符号(某个向量)<某个整数,则

什么是类型
标准逻辑向量
?与
整数
相比,它们不应该是
逻辑
reg
wire
。当您尝试它时,它不起作用吗?o_余数是std_logic_vector类型的reg。而且它只对少数价值起作用。因此,我要求确定比较是否有效。是否应将其标记为VHDL而不是Verilog?不需要将宽度设置为32位。
 if unsigned(some_vector) < some_integer then