实际上我是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。
的一部分答案 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