我们可以在 if 语句中比较整数和二进制值吗,即我有一个比较语句作为
if(o_remainder=remainder and o_quotient=quotient)
其中o_remainder
和o_quotient
属于 类型std_logic_vector
,remainder
并且quotient
属于 类型integer
。
我们可以在 if 语句中比较整数和二进制值吗,即我有一个比较语句作为
if(o_remainder=remainder and o_quotient=quotient)
其中o_remainder
和o_quotient
属于 类型std_logic_vector
,remainder
并且quotient
属于 类型integer
。
根据您提到的 std_logic_vector,我假设您实际上是在使用 VHDL,而不是 Verilog。
如果您的向量表示数字,请使用ieee.numeric_std 中的unsigned
or类型,而不是向量。signed
然后您可以直接与整数进行比较。
如果你坚持使用 std_logic 向量,那么之前转换它:
if unsigned(some_vector) < some_integer then
这是一个比较 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 与整数进行比较。
你可以比较一下。integer 和 reg 的区别在于reg
默认情况下是一个unsigned
类型的单个位值;而是integer
类型signed
32 位值。确保o_reminder
和reminder
属于同一类型,即两者都是signed
或unsigned
。o_quotient
和的情况相同quotient
。
如果您声明如下,我看不到任何问题。
integer o_reminder, o_quotient;
reg signed [31:0] reminder,quotient;
或者
integer unsigned o_reminder, o_quotient;
reg [31:0] reminder,quotient;