我正在尝试用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编码,我无法弄清楚错误是什么。
有什么想法吗?
答案 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
通常在package
和package 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构建块,其中过程用于捕获块内的行为 - 函数和过程通常在实体和过程中用于捕获已使用的功能,如在软件世界中。