2014-11-20 52 views
0

我試圖執行這個模塊,其中輸入「ins15_0」進入,如果某些條件滿足,它將運行其各自的代碼,但是當檢查語法時,我得到if行上的以下錯誤「運營商的結果=不是靜態的。」operator =的結果不是靜態的

lw : if (ins15_0 = "000000000110000") generate 
    step_1 : for i in 0 to 31 generate 
        DFF1 : DFF_MEM port map (D=>din(i),clk=>CLK ,Q=>Q(i), reset=> Reset); 
      end generate step_1; 
    dout <= x"00000" + q; 
end generate lw; 

sw : if (ins15_0 = "000000000110100") generate 
    step_2 : for i in 0 to 31 generate 
         DFF2 : DFF_MEM port map (D=>rt(i),clk=>CLK ,Q=>Q(i), reset=> Reset); 
      end generate step_2; 

      dout <= rt; 
end generate sw; 
+0

'Case'是一個順序語句,您正在並行區域中使用它。改用'if ... generate'(你可以嵌套生成)。 – 2014-11-20 22:49:20

+0

我試過使用if,elsifs但是它與端口映射一起動作,給我錯誤「解析錯誤,意外的PORT,期待OPENPAR或TICK或LSQBRACK」 – user998316 2014-11-20 22:51:53

+0

「if ... generate」中沒有'elsif'。你真的在做什麼? – 2014-11-20 23:07:38

回答

0

因爲你的問題一直是一個移動的目標這解決「操作的結果=也不是一成不變的。」

從IEEE標準2076至08年(在LRM)11.8生成語句段11:

離散範圍中的用於 的生成參數規範生成聲明應是靜態的離散範圍;同樣,if語句中的每個 條件都應該是一個靜態表達式。

在精化時間(全局靜態),條件的值最爲靜態。這意味着你可以將一個或多個常量作爲表達式來評估,這些表達式可以通過泛型傳遞。

沒有看到ins15_0的排列,它看起來是一個數組類型,可能是一個std_logic_vector,並且可能聲明爲一個信號。

沒有看到更多的設計規範,很難推薦解決方案。

讓我們看的11.8第一段:

一個生成的語句爲反覆或有條件 闡述的描述的一部分的機制。

而且準確地知道什麼細化手段可能會有所幫助。

見14.2擬訂一項設計層次的:

一個設計層次結構的闡述創建了由網互連 進程的集合;然後可以執行這個過程集合和網絡來模擬設計的行爲。

而且我們可以看看前款規定,對啓蒙的最後位14.1通用的第3款:

爲了執行模型,設計層次定義模型 應首先闡述。然後在 中初始化網絡(見14.7.3.4),然後發生該模型。最後,模型的模擬繼續進行。 仿真包括重複執行仿真循環,在此過程中執行過程並更新網絡。

因此,生成對於準備執行模型至關重要,這意味着需要在制定時知道if生成語句中的條件以瞭解設計分層結構中連接了多少觸發器。模擬和合成的效果是相同的。

設計模型層次結構在細化之後不會改變。你還沒有提供可以做到這一點的設計規範。