VHDL位旋转函数语法错误?

时间:2013-02-18 01:08:13

标签: function vhdl hdl

我正在为我的学校工作做这个,我正在制作自己的滚动/移位功能。 下面是我写的代码,但是当我尝试编译它时,我在rownum上得到语法错误< = rol(rowcount,1);

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

architecture main of proj is

function "rol" (a: std_logic_vector; n : natural)
                return std_logic_vector is
begin
return std_logic_vector(unsigned(a) rol n);
end function;

signal rownum : std_logic_vector(2 downto 0);
signal rowcount : std_logic_vector(2 downto 0);

begin

process begin
wait until rising_edge(i_clock);
**rownum<=rol(rowcount,1);**

end process;

end architecture main;

2 个答案:

答案 0 :(得分:1)

这里有几件事需要解决。

首先,您需要一个实体声明:

entity  proj is
    port(
    i_clock : in std_logic
    );
end  proj;

这声明了您的实体的输入和输出信号。在这种情况下,它只是一个时钟。您也可以根据需要添加rownum和rowcount输入和输出。

您的函数名称不应使用引号,并且重载现有运算符也不是一个好主意。

function rol_custom (a: std_logic_vector; n : natural)
            return std_logic_vector is
begin
return std_logic_vector(unsigned(a) rol n);
end function;

这是可综合的代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity  proj is
    port(
    i_clock : in std_logic
    );
end  proj;

architecture main of proj is

function rol_custom (a: std_logic_vector; n : natural)
                return std_logic_vector is
begin
return std_logic_vector(unsigned(a) rol n);
end function;

signal rownum : std_logic_vector(2 downto 0);
signal rowcount : std_logic_vector(2 downto 0);

begin

process begin
wait until rising_edge(i_clock);
rownum<=rol_custom(rowcount,1);

end process;

end architecture main;

然而,即使现在应该合成,结果也没有任何意义,因为rowcount没有给出值。为了定义它,您可能希望添加一个根据特定条件(计数器?)驱动信号的过程,或者将其添加为实体定义中的输入。

答案 1 :(得分:0)

如果矢量代表数字,则应使用数字类型。根据需要使用ieee.numeric_std库和unsignedsigned类型。然后rol才能正常工作。您不必创建自己的。