VHDL在Generate中使用库函数

时间:2012-12-20 20:34:27

标签: function package vhdl

所以我使用算法来创建类似链接(http://ars.els-cdn.com/content/image/1-s2.0-S0140366499000031-gr1.gif)中的结构。所以我创建了一个函数,它将确定跳转到下一个的位置。 在我的VHDL交换机架构中,我试图使用generate语句来定义节点并适当地映射它们的端口但是当我合成它时说 " "榕树"不能用在这个表达式中#34; (榕树是图书馆的一个功能)。下面是一些示例代码:

INPUT: IF ( l = 1 ) GENERATE 
            NODE_Element : BN PORT MAP( 
                                                clk, reset, 
                                                Input((2*n)-1), 
                                                Input((2*n)), 
                                                SyncIn, 
                                                con(l+1,Banyan(l,n),BanyanPort(l,n)), 
                                                con(l+1,Banyan(l,n),BanyanPort(l,n)), 
                                                sync(l+1,n)
                                            ); --GENERIC MAP(...)
        END GENERATE INPUT;

有没有人知道如何解决这个问题......这似乎是根本性的,但我可以找到解决方案。

1 个答案:

答案 0 :(得分:2)

看起来问题不是生成,而是端口映射。您在端口映射中可以执行的操作有一些限制,许多工具(您没有说这是哪个合成工具!)会对自己施加严格的限制。

我建议将功能结果分配给临时信号,并在端口映射中使用该信号。

INPUT: IF l = 1 GENERATE 
Banyan1     <= Banyan(l,n);
BanyanPort1 <= BanyanPort(l,n);
Con1        <= con(l+1,Banyan(l,n),BanyanPort(l,n)); 

 NODE_Element : BN PORT MAP( 
                              clk, reset, 
                              Con1, 
                           );
END GENERATE INPUT; 

您可能会发现并非所有这些变化都是必要的;可能从端口映射中移出con(...)就足够了。