VHDL函数无法编译

时间:2012-04-18 12:35:13

标签: vhdl

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

  

错误:tst.vhd(4):靠近“subtype”:语法错误

这是代码

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编码,我无法弄清楚错误是什么。

有什么想法吗?

3 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:1)

问题是,您必须在de definition和SUBTYPE之间定义函数内的begin

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

答案 2 :(得分:1)

subtype s和function通常在packagepackage body s内声明 - 如果您尝试按原样编译该代码,那么,是的,它会失败。

尝试(只是键入我的头顶,所以可能存在语法错别字,但它应该给你正确的想法):

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构建块,其中过程用于捕获块内的行为 - 函数和过程通常在实体和过程中用于捕获已使用的功能,如在软件世界中。