如何在VHDL中使用函数范围内的函数变量?

时间:2013-09-09 02:25:20

标签: vhdl

实际上我是VHDL的新手,我正在尝试将函数的变量赋给函数范围中声明的变量。但是我在合成时遇到了错误。 我正在使用ISE Project Navigator。这是我的代码。

function moverDerecha(datos : std_logic_vector(2 downto 0)) RETURN std_logic_vector(2 downto 0) IS
  variable TMP : datos;
    --TMP := datos;
     begin
        TMP(0)<=TMP(2);
        TMP(1)<=TMP(0);
        TMP(2)<=TMP(1);
     return TMP;
end moverDerecha;

我希望你能帮助我!这是我的作业n.n。

的一部分

3 个答案:

答案 0 :(得分:1)

您必须为变量指定类型(冒号后):

variable TMP : std_logic_vector(2 downto 0) := datos;

您还必须使用:=而不是<=来分配变量:

TMP(0) := TMP(2);
TMP(1) := TMP(0);
TMP(2) := TMP(1);

我不知道编译器是否会对此进行优化,但实质上是将变量TMP设置为两次。首先复制datos然后执行转换。自从我使用VHDL以来已经有一段时间了,但我可能会建议:

function moverDerecha(datos : std_logic_vector(2 downto 0)) RETURN std_logic_vector(2 downto 0) IS
    variable TMP : std_logic_vector(2 downto 0);
begin
    TMP(2 downto 1) := datos(1 downto 0);
    TMP(0) := datos(2);

    return TMP;
end moverDerecha;

也可能只是我,但看起来这个功能正在执行左移

答案 1 :(得分:1)

我遇到了同样的问题。然后,我发现返回类型应该是泛型类型,即如果使用std_logic_vector(1 downto 0)作为返回类型,则应将其声明为return std_logic_vector is,只省略(1 downto 0)部分。 / p>

答案 2 :(得分:0)

我发现为什么我的所有功能都无效。

我决定使用一个包,并在其中声明每个函数。然后添加

library work;
use work.my_package.all;

终于解决了所有问题。我知道我在VHDL中仍然遇到很多麻烦,但我正在研究它! :)感谢lc