VHDL中整数与二进制的比较
我们可以比较if语句中的整数值和二进制数值吗 我有一个比较陈述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(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