首页 文章

在Process中将std_logic_vector转换为整数以测试值?

提问于
浏览
0

我想要做的很简单,只需从基本计数器生成一个脉冲 . 我的代码如下所示 . 我的问题是,是否有一种比较std_logic_vector和整数的有效方法?我只需要在过程中的那个实例上比较它们 . 另外,您可以对我的代码中显示的4位信号进行aritmetic吗?你需要一个特定的图书馆吗?

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;

编辑:

Div16 std_logic_vector中的位数将根据所选Divisor的大小而变化(如下所示) . 如何正确格式化?需要哪些库?

DIVISOR: natural := 120 -- Can be 120 or 60, depending on user preference.
constant COUNTER_BITS : natural := integer(ceil(log2(real(DIVISOR))));
signal Div16: std_logic_vector(COUNTER_BITS);

2 回答

  • 3

    如果可能的话,避免使用非标准的 std_logic_unsigned 库 . 最好使用 numeric_std 并将Div16声明为 unsigned .

    signal Div16: unsigned(3 downto 0);
    

    然后你的比较和算术应该工作 . 当然它是可以合成的 .

    你的奖金问题也应该是合成的,虽然DIVISOR应该是一个CONSTANT,以便它可以在编译时进行评估,我认为你的意思

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

    对于算术,您可以使用 std_logic_unsigned . 该库包含以下功能:

    function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
    function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
    

    对于比较,如果您使用的是 std_logic_unsigned ,则可以将其保留为这样 . 该库包含以下功能:

    function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
    function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
    

    您也可以将Div16定义为 unsigned ,然后使用 numeric_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;
    

相关问题