【问题标题】:convert integer to std_logic将整数转换为 std_logic
【发布时间】:2011-09-03 00:06:30
【问题描述】:

假设你有一个循环

for i in 1 downto 0 loop
    for j in 1 downto 0 loop
        tS0 <= i;

但我需要将整数(这是自然的)转换为 std_logic。 tS0 被声明为 std_logic。我只做了一点(0或1)。也就是我的ij只能代表值{0,1}。

我想我在这里走错路了。有人可以告诉我应该怎么做吗?

我认为 std_logic 没有 to_unsigned 方法。我尝试让 tS0 成为一个向量(从 1 到 0),并像 tS0(0) 等分配,但它仍然没有用出去。

非常感谢!

【问题讨论】:

标签: vhdl


【解决方案1】:

不需要从整数转换。您可以迭代 std_logic 数据类型:

for i in std_logic range '0' to '1' loop
   ts0 <= i;
end loop;

【讨论】:

  • 不错的一个!谢谢!!
【解决方案2】:

我会写一个函数:

function to_std_logic(i : in integer) return std_logic is
begin
    if i = 0 then
        return '0';
    end if;
    return '1';
end function;

然后使用:

ts0 <= to_std_logic(i);

【讨论】:

  • 对我来说,这是一个比公认的答案更有用、更准确的答案。
【解决方案3】:

您将需要使用无符号或 std_logic 向量,但它可以是一位长。即:

signal tS0 : unsigned (0 downto 0);
...
tS0 <= to_unsigned(i, tS0'length);

...或...

signal tS0: std_logic_vector(0 downto 0);
...
tS0 <= std_logic_vector(to_unsigned(i,tS0'length);

【讨论】:

    【解决方案4】:

    你可以这样做。它看起来更简单一些。

    ts0 <= std_logic(to_unsigned(i, 1)(0));
    

    您将使用 to_unsigned 函数构建一个无符号向量。然后你抓住最低位并将其转换为std_logic,然后将其分配给信号。

    这就是它的工作原理:-)。

    【讨论】:

      【解决方案5】:

      改进之前的答案,你可以写:

      ts0 <= to_unsigned(i, 1)(0);
      

      如果您包含定义该函数的“numeric_std”库:

      library IEEE;
      use IEEE.numeric_std.all;
      

      您可以跳过显式转换为“std_logic”类型,因为“to_unsigned()”的返回类型是“std_logic”本身的数组:

      type UNSIGNED is array (NATURAL range <>) of STD_LOGIC;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 2017-03-15
        • 2013-10-24
        相关资源
        最近更新 更多