2012-12-20 63 views
2

因此,我使用一種算法來創建一個結構,如鏈接中的結構(http://ars.els-cdn.com/content/image/1-s2.0-S0140366499000031-gr1.gif)。所以我創建了一個函數,它將決定跳到下一步的位置。 在我的VHDL交換體系結構中,我嘗試使用生成語句來定義節點並適當地映射它們的端口,但是當我綜合它時說 「」banyan「不能在此表達式中使用」(banyan是庫中的函數) 。下面是一些示例代碼:VHDL在生成中使用庫函數

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; 

有沒有人有一個想法如何解決這個問題...似乎根本,但我能找到一個解決方案。

回答

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(...)移出端口映射就足夠了。

+0

乾杯布賴恩......我愚蠢地有另一個實體名稱Banyan。猜猜這是在屏幕上連續10小時主演的結果。順便說一句,我使用Xilinx ISE抱歉沒有提到這一點。 –