Vhdl 我可以调用端口映射中的函数吗?

Vhdl 我可以调用端口映射中的函数吗?,vhdl,Vhdl,我可以调用如下函数: label1:组件名称端口映射(x和y,b SSL 3,输出) 用VHDL 我搜索了很多,直到我决定在这里发布,也阅读了VHDL手册,但它并没有说你不能。虽然这也没有表明这是可能的 我现在在macOS上,所以我不能测试它 编辑:我正在使用Altera Quartus 16.0 提前谢谢 不幸的是,这在很大程度上取决于编译器 撇开关系不谈,例如 x and y 与函数调用的处理方式不同 and_fn(x,y) 我已经成功地将代码与完全限定关联、函数调用而不是表达式一起使用

我可以调用如下函数:

label1:组件名称端口映射(x和y,b SSL 3,输出)

用VHDL

我搜索了很多,直到我决定在这里发布,也阅读了VHDL手册,但它并没有说你不能。虽然这也没有表明这是可能的

我现在在macOS上,所以我不能测试它

编辑:我正在使用Altera Quartus 16.0


提前谢谢

不幸的是,这在很大程度上取决于编译器

撇开关系不谈,例如

x and y
与函数调用的处理方式不同

and_fn(x,y)
我已经成功地将代码与完全限定关联、函数调用而不是表达式一起使用,例如:

label1: component_name 
port map(
   a => and_fn(x,y),
   b => myfunc(),
   c => output
);

最终的文档是语言参考手册,但这一点没有实际意义——请在您的工具集中尝试,支持和法规遵从性各不相同

不幸的是,这在很大程度上取决于编译器

撇开关系不谈,例如

x and y
与函数调用的处理方式不同

and_fn(x,y)
我已经成功地将代码与完全限定关联、函数调用而不是表达式一起使用,例如:

label1: component_name 
port map(
   a => and_fn(x,y),
   b => myfunc(),
   c => output
);

最终的文档是语言参考手册,但这一点没有实际意义——请在您的工具集中尝试,支持和法规遵从性各不相同

IEEE标准1076-2008 6.5.6.3端口条款第6段。在-2008中,您可以使用表达式作为实际值,该表达式将生成一个匿名并发信号,该信号分配给外部块(组件)被细化到的同一块中的表达式,从而导致增量周期延迟。这相当于添加一个中间信号。@user1155120很好地说明了一点——您也指的是哪个vhdl版本?在启用2008模式的Xilinx的Vivado的更高版本中支持端口映射表达式。参见UG901,支持的-2008功能,杂项,端口图中的表达式。IEEE Std 1076-2008 6.5.6.3端口条款第6段。在-2008中,您可以使用表达式作为实际值,该表达式将生成一个匿名并发信号,该信号分配给外部块(组件)被细化到的同一块中的表达式,从而导致增量周期延迟。这相当于添加一个中间信号。@user1155120很好地说明了一点——您也指的是哪个vhdl版本?在启用2008模式的Xilinx的Vivado的更高版本中支持端口映射表达式。请参阅UG901,受支持的-2008功能,杂项,端口映射中的表达式。正如OllieB所指出的,对该-2008功能的支持因供应商而异。它可能需要大量的工作来实现,如果没有综合供应商的支持,它通常不会有用。鸡还是蛋的难题。OllieB的
myfunc()
不是有效的VHDL表达式,不允许有空括号。您使用了什么编译器?我使用的是Altera Quartus 16.0,但我以后只能在编译器中测试它。你的答案已经非常有用了:)我使用modelsim+quartus 12->16和ise+vivado,各种版本。我记不清哪一个有效。OllieB指出,对这个-2008特性的支持因供应商而异。它可能需要大量的工作来实现,如果没有综合供应商的支持,它通常不会有用。鸡还是蛋的难题。OllieB的
myfunc()
不是有效的VHDL表达式,不允许有空括号。您使用了什么编译器?我使用的是Altera Quartus 16.0,但我以后只能在编译器中测试它。你的答案已经非常有用了:)我使用modelsim+quartus 12->16和ise+vivado,各种版本。我记不起哪一个起作用了。