开发者

convert integer to std_logic

Suppose you have a loop

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

But I need to convert the integer (which is natural) to std_logic. tS0 is declared as std_logic. I am only doing it one bit (0 or 1). That is, my i and j can only represent the value {0,1}.

I think I am heading to the wrong approach here. Can someone please tell me what should I do instead?

I don't think std_logic has to_unsigned method. i tried letting tS0 to be a vector (1 down to 0), an开发者_运维知识库d assigned like tS0(0) <= i, and etc. But it still didn't work out.

Thank you very much!


There is no need to convert from integers. You can just iterate over the std_logic datatype:

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


I'd write a function:

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

then use:

ts0 <= to_std_logic(i);


You will need to use a vector, either unsigned or std_logic, but it can be one bit long. ie:

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

...or...

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


You can do it like this. It looks a little simplier.

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

You will build a unsigned vector by using the to_unsigned function. Then you grap the lowest bit and convert it to std_logic and then you assign it to the signal.

This is how it works fine :-).


Improving on a previous answer, you could write:

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

Provided you include the "numeric_std" library, in which that function is defined:

library IEEE;
use IEEE.numeric_std.all;

You can skip the explicit cast to "std_logic" type because the return type of "to_unsigned()" is an array of "std_logic" itself:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜