我们可以比较if语句中的整数和二进制值,即 我有一个比较声明
if(o_remainder=remainder and o_quotient=quotient)
其中o_remainder
和o_quotient
的类型为std_logic_vector
,而remainder
和quotient
的类型为integer
。
答案 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中的unsigned
或signed
类型,而不是向量。然后你可以直接与整数进行比较。
如果你坚持使用std_logic vector,那么在之前转换它:
if unsigned(some_vector) < some_integer then
答案 2 :(得分:0)
你可以比较。
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;