2

所以我使用一种算法来创建一个类似于链接中的结构(http://ars.els-cdn.com/content/image/1-s2.0-S0140366499000031-gr1.gif)。所以我创建了一个函数来决定下一步跳转到哪里。在我的 VHDL 交换机架构中,我尝试使用生成语句来定义节点并适当地映射它们的端口,但是当我合成它时说““banyan”不能在这个表达式中使用”(banyan 是库中的一个函数)。下面是一些示例代码:

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;

有没有人知道如何解决这个问题......这似乎很重要,但我可以找到解决方案。

4

1 回答 1

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(...) 移出端口图就足够了。

于 2012-12-20T20:58:28.623 回答