2012-06-26 32 views
0

我有一個生成語句的問題。我生成一個流水線結構,基本的問題是,我需要除了索引另一個櫃檯或變量:生成語句中的信號或變量計數器

architecture behav of blockPipelineCordic is 
    constant total: integer := stepNumber + stepNumber/pipeStep; 
    signal signVector: std_logic_vector((stepNumber - 1) downto 0); 
    signal lx: std_logic_vector(((total + 1)*dataSize - 1) downto 0); 
    signal ly: std_logic_vector(((total + 1)*dataSize - 1) downto 0); 
    signal signCounter: integer := stepNumber - 1; 
begin 

stepGen: 
for i in (total - 1) downto 0 generate 
    begin 

     signCounter <= signCounter - 1 when ((total - i) mod (pipeStep + 1) /= 0) else signCounter; 

     stepGen0: if((total - i) mod (pipeStep + 1) /= 0) generate 
     begin U1: entity work.cordicStep(behav) 
     generic map ((totalStepNumber - 1) - i,dataSize) 
     port map(signVector(signCounter),lx(((i+2)*dataSize-1) downto (i+1)*dataSize),ly(((i+2)*dataSize-1) downto (i+1)*dataSize),lx(((i+1)*dataSize-1) downto i*dataSize),ly(((i+1)*dataSize-1) downto i*dataSize)); 
     end generate stepGen0; 

     stepGen1: if((total - i) mod (pipeStep + 1) = 0) generate 
     begin U2: entity work.registerModule(behav) 
     generic map (dataSize) 
     port map(clk,lx(((i+2)*dataSize-1) downto (i+1)*dataSize),lx(((i+1)*dataSize-1) downto i*dataSize)); 
     end generate stepGen1; 

     stepGen2: if((total - i) mod (pipeStep + 1) = 0) generate 
     begin U3: entity work.registerModule(behav) 
     generic map (dataSize) 
     port map(clk,ly(((i+2)*dataSize-1) downto (i+1)*dataSize),ly(((i+1)*dataSize-1) downto i*dataSize)); 
     end generate stepGen2; 

end generate stepGen; 
. . . 

在第一個結構,我需要使用不同的指標來signVector的一代,我創建一個用作計數器的信號(端口映射(signVector(signCounter),lx(((i + 2)* dataSize-1)downto),但不能用作索引,錯誤是:「Actual(索引名稱)正式的「亞健康」是不是一個靜態的信號名字。」

任何幫助,將不勝感激:),TY

+0

你'signCounter'分配'total'倍!記住所有'<='是**併發**分配。 – wap26

回答

1

對不起,您不能使用這樣的中頻信號。

您可以編寫一個函數,該函數的值爲i將返回正確的signCounter,而不需要存儲中間值。

你可以嘗試在生成中聲明信號,但我不認爲它會得到你想要的(信號將以total的數量結束,而不是在循環)。生成是爲了「製造靜態的東西」,而不是動態的東西。

+0

對。在你的代碼中,'signCounter'被分配了'total'次!加上初始化。 @Martin:是的,生成聲明部分的信號是可以的。 – wap26

+0

@ wap26:是的,我不清楚 - 這是允許的,但它是否提供該功能... –

+0

太棒了,我沒有考慮使用函數,非常感謝你,非常有用的答案。問候 – nexobios

0

儘管我的代碼出現了一些問題,但似乎signCounter可從i得出。如果運行從0到總數爲1的生成,涉及的數學會更容易遵循。

或者嘗試分成兩個生成報表,即gerates你cordicSteps第一from 0 to stepNumber - 1,第二from 0 to total - 1產生的registerModules

另外,你可以結合stepGen1stepGen2

+0

對不起,亂碼仍然以VHDL開始;謝謝我會試着從我這裏得到它,我沒有嘗試,因爲它應該是對架構的一個小修補,並且不想對代碼做大的修改,而且我會隨着總線大小。問候 – nexobios