Vhdl 在测试值的过程中将标准逻辑向量转换为整数?

Vhdl 在测试值的过程中将标准逻辑向量转换为整数?,vhdl,xilinx,xilinx-ise,Vhdl,Xilinx,Xilinx Ise,我想做的很简单,只是从一个基本计数器产生一个脉冲。我的代码如下所示。我的问题是,是否有一种比较标准逻辑向量和整数的有效方法?我只需要在这个过程中的一个实例中比较它们。另外,你能对我的代码中显示的4位信号进行算术运算吗?你需要一个特定的图书馆吗 signal Top16: std_logic; -- 1 clk spike at 16x baud rate signal Div16: std_logic_vector(3 downto 0); DIVISOR: natural := 12

我想做的很简单,只是从一个基本计数器产生一个脉冲。我的代码如下所示。我的问题是,是否有一种比较标准逻辑向量和整数的有效方法?我只需要在这个过程中的一个实例中比较它们。另外,你能对我的代码中显示的4位信号进行算术运算吗?你需要一个特定的图书馆吗

signal Top16: std_logic; -- 1 clk spike at 16x baud rate    
signal Div16: std_logic_vector(3 downto 0);

DIVISOR: natural := 120 -- Can be 120 or 60, depending on user preference.    
------------------------------------------------------------------------

    process (RST, LCLK_MULT_BUFG)
    begin
        if RST='1' then
            Top16 <= '0';  --1 bit signal
            Div16 <= x"0";  -- 4 bit signal
        elsif rising_edge(LCLK_MULT_BUFG) then
            Top16 <= '0';
                if Div16 = Divisor then  -----> signal to integer comparison?
                    Div16 <= 0;
                    Top16 <= '1';  
                else
                    Div16 <= Div16 + 1;   -----arithmetic on std_logic_vector??
                end if;
        end if;

对于算术,您可以使用
std\u logic\u unsigned
。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
对于比较,如果使用的是
std\u logic\u unsigned
,则可以将其保留为这样。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
您还可以将Div16定义为
无符号
,然后使用
数值\u std
。此库包含以下用于比较的函数:

function "=" ( L: NATURAL; R: UNSIGNED) return BOOLEAN;
function "=" ( L: UNSIGNED; R: NATURAL) return BOOLEAN;
此外:

function "+" ( L: UNSIGNED; R: NATURAL) return UNSIGNED;
function "+" ( L: NATURAL; R: UNSIGNED) return UNSIGNED;

对于算术,您可以使用
std\u logic\u unsigned
。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
对于比较,如果使用的是
std\u logic\u unsigned
,则可以将其保留为这样。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
您还可以将Div16定义为
无符号
,然后使用
数值\u std
。此库包含以下用于比较的函数:

function "=" ( L: NATURAL; R: UNSIGNED) return BOOLEAN;
function "=" ( L: UNSIGNED; R: NATURAL) return BOOLEAN;
此外:

function "+" ( L: UNSIGNED; R: NATURAL) return UNSIGNED;
function "+" ( L: NATURAL; R: UNSIGNED) return UNSIGNED;

对于算术,您可以使用
std\u logic\u unsigned
。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
对于比较,如果使用的是
std\u logic\u unsigned
,则可以将其保留为这样。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
您还可以将Div16定义为
无符号
,然后使用
数值\u std
。此库包含以下用于比较的函数:

function "=" ( L: NATURAL; R: UNSIGNED) return BOOLEAN;
function "=" ( L: UNSIGNED; R: NATURAL) return BOOLEAN;
此外:

function "+" ( L: UNSIGNED; R: NATURAL) return UNSIGNED;
function "+" ( L: NATURAL; R: UNSIGNED) return UNSIGNED;

对于算术,您可以使用
std\u logic\u unsigned
。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
对于比较,如果使用的是
std\u logic\u unsigned
,则可以将其保留为这样。此库包含以下功能:

function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
您还可以将Div16定义为
无符号
,然后使用
数值\u std
。此库包含以下用于比较的函数:

function "=" ( L: NATURAL; R: UNSIGNED) return BOOLEAN;
function "=" ( L: UNSIGNED; R: NATURAL) return BOOLEAN;
此外:

function "+" ( L: UNSIGNED; R: NATURAL) return UNSIGNED;
function "+" ( L: NATURAL; R: UNSIGNED) return UNSIGNED;

尽可能避免使用非标准的
std\u logic\u unsigned
库。最好使用
numeric\u std
并将Div16声明为
unsigned

signal Div16: unsigned(3 downto 0);
那么,你的比较和算术应该简单有效。当然,它是可合成的

您的奖金问题也应该是可合成的,尽管除数应该是一个常数,以便可以在编译时对其进行计算,我想您的意思是

signal Div16: unsigned(COUNTER_BITS - 1 downto 0);  

尽可能避免使用非标准的
std\u logic\u unsigned
库。最好使用
numeric\u std
并将Div16声明为
unsigned

signal Div16: unsigned(3 downto 0);
那么,你的比较和算术应该简单有效。当然,它是可合成的

您的奖金问题也应该是可合成的,尽管除数应该是一个常数,以便可以在编译时对其进行计算,我想您的意思是

signal Div16: unsigned(COUNTER_BITS - 1 downto 0);  

尽可能避免使用非标准的
std\u logic\u unsigned
库。最好使用
numeric\u std
并将Div16声明为
unsigned

signal Div16: unsigned(3 downto 0);
那么,你的比较和算术应该简单有效。当然,它是可合成的

您的奖金问题也应该是可合成的,尽管除数应该是一个常数,以便可以在编译时对其进行计算,我想您的意思是

signal Div16: unsigned(COUNTER_BITS - 1 downto 0);  

尽可能避免使用非标准的
std\u logic\u unsigned
库。最好使用
numeric\u std
并将Div16声明为
unsigned

signal Div16: unsigned(3 downto 0);
那么,你的比较和算术应该简单有效。当然,它是可合成的

您的奖金问题也应该是可合成的,尽管除数应该是一个常数,以便可以在编译时对其进行计算,我想您的意思是

signal Div16: unsigned(COUNTER_BITS - 1 downto 0);  

那个信号仍然可以完全合成吗?还添加了一个编辑上面的另一个转换问题,如果你能检查出一个非常感谢!当我尝试你说的话时,我仍然收到这两个错误:“ERROR:HDLCompiler:69-第62行:未声明。”“ERROR:HDLCompiler:622-第62行:接近整数;类型转换表达式类型无法唯一确定”,因为ceil()在代码中,我假设您已经找到了它。它在ieee.math_real库中,所以只需使用:
使用ieee.math_real.all
与其他
一起使用
子句。如果您不想使用math_real,那么编写ceil函数是很简单的。第二个错误只是找不到ceil的结果。那个信号仍然可以完全合成吗?还添加了一个编辑上面的另一个转换问题,如果你能检查出一个非常感谢!当我尝试你说的话时,我仍然收到这两个错误:“ERROR:HDLCompiler:69-第62行:未声明。”“ERROR:HDLCompiler:622-第62行:接近整数;类型转换表达式类型无法唯一确定”,因为ceil()在代码中,我假设您已经找到了它。它在ieee.math_real库中,所以只需使用:
使用ieee.math_real.all
与其他
一起使用
子句。如果您不想使用math_real,那么编写ceil函数是很简单的。第二个错误只是找不到ceil的结果。那个信号仍然可以完全合成吗?还添加了一个编辑上面的另一个转换问题,如果你能检查出一个非常感谢!当我尝试你说的话时,我仍然收到这两个错误:“ERROR:HDLCompiler:69-第62行:未声明。”“ERROR:HDLCompiler:622-第62行:接近整数;类型转换表达式类型无法唯一确定”,因为ceil()在代码中,我假设您已经