假设你有一个循环
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 等等。但它仍然没有锻炼。
非常感谢!
答案 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;