1

实际上我是 VHDL 的新手,我正在尝试将函数的变量分配给在函数范围内声明的变量。但是我在合成时遇到错误。我正在使用 ISE 项目导航器。这是我的代码。

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;

我希望你能帮助我!这是我作业的一部分

4

3 回答 3

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;

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

于 2013-09-09T02:29:33.650 回答
1

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

于 2016-01-28T00:44:58.027 回答
0

我找到了为什么我的所有功能都不起作用。

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

library work;
use work.my_package.all;

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

于 2013-09-09T04:02:16.747 回答