将整数转换为std_logic

时间:2011-09-03 00:06:31

标签: vhdl

假设你有一个循环

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

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

我想我在这里采取了错误的做法。有人可以告诉我该怎么办?

我认为std_logic没有to_unsigned方法。我试着让 tS0 成为一个向量(1下降到0),并指定像 tS0(0)&lt; = i 等等。但它仍然没有锻炼。

非常感谢!

5 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:6)

我写了一个函数:

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);

答案 2 :(得分:5)

您需要使用无符号或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);

答案 3 :(得分:2)

你可以这样做。它看起来有点简单。

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

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

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

答案 4 :(得分:0)

要改善先前的答案,您可以编写:

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;