2

我正在尝试在 VHDL 中定义一个函数,但我得到了

错误:tst.vhd(4):靠近“子类型”:语法错误

这是代码

subtype word10 is bit_vector(9 downto 0);
subtype word8 is bit_vector(7 downto 0);

function tst (input : in word10) return word10 is
    variable tmp : word10;
    -- code here
    begin

    return tmp;
end tst;

entity tester is
end;

architecture tst of tester is
begin
end;

这是我第一次用 VHDL 编码,我不知道是什么错误。

有任何想法吗?

4

3 回答 3

4

问题是您试图定义的东西(子类型和函数)需要在库单元(包或实体)或其他一些主体内声明,而不仅仅是自己挂出。尝试将声明移动到测试器实体(即:在“实体测试器是”行之后):

entity tester is
    subtype word10 is bit_vector(9 downto 0);
    subtype word8 is bit_vector(7 downto 0);

    function tst (input : in word10) return word10 is
        variable tmp : word10;
        -- code here
        begin

        return tmp;
    end tst;
end tester;

您声明子类型和函数的确切位置将取决于您需要它们可见的范围。如果您需要在整个设计中访问它们,通常会将它们收集在一起并在一个包中声明。

于 2012-04-18T13:44:58.083 回答
1

subtypes 和functions 通常在packages 和package bodys 中声明 - 如果您尝试按原样编译该代码,那么,是的,它将失败。

尝试(只是在我的脑海中输入,所以可能有语法错误,但它应该给你正确的想法):

package mypkg is
    subtype word10 is bit_vector(9 downto 0);
    subtype word8 is bit_vector(7 downto 0);
    function tst (input : in word10) return word10;
end package;
package body mypkg is      
    function tst (input : in word10) return word10 is
        variable tmp : word10;
    begin
        -- code here
        return tmp;
    end function;
end package body;

为了“运行”任何代码(这对于旨在描述硬件的代码有点用词不当),您还需要entity在模拟器中“详细说明”,然后才能调用您的tst函数。实体更多地用作 VHDL 构建块,过程用于捕获块内的行为 - 功能和过程通常在实体和过程中用于捕获经常使用的功能,如在软件世界中。

于 2012-04-19T08:30:08.653 回答
1

问题是,您必须SUBTYPE de 定义和begin.

但是,我不确定您是否意识到 VHDL 不是一种编程语言,而是一种设计语言。如果你想合成你的代码,那么你应该小心你的情况是否可以合成函数。

于 2012-04-18T13:06:33.490 回答