2014-01-19 168 views
2

我試圖編譯此片的VHDL代碼,使用Altera的10.2,但我得到這個錯誤:不支持的功能錯誤

Unsupported feature error: non-locally-static attribute names are not supported

我問我的教練對這個錯誤消息的一些幫助,但他說,我的源代碼對他來說看起來很好,它應該能夠正確編譯。

if ((ina'event AND ilvla=ilvlb) AND (ilvla=NOT ilvlc)) then 
    if (ilvla=lvla AND ilvlb=lvlb AND ilvlc=lvlc) then 
     ilvla <= '0'; 
     ilvlb <= '0'; 
     ilvlc <= '0'; 
     clk <= '1'; 
    else 
     ilvla <= (ilvlc AND ilvlb AND NOT ilvla) OR (ilvla AND NOT ilvlc) OR (ilvla AND NOT ilvlb); 
     ilvlb <= ilvlb XOR ilvlc; 
     ilvlc <= NOT ilvlc; 
    end if; 
else 
    rst <= '1'; 
end if; 

錯誤發生在if語句的第一行。

+1

編譯模擬,還是合成?那第一行絕對不會合成! –

+0

我不知道...我即將做模擬,但altera的菜單中只有一個編譯選項... –

回答

1

你有什麼打算與'事件?你想創造一個觸發器嗎?如果不是,你不應該使用'事件。如果是這樣,你錯過了尋找上升的基礎。他們是以下三種之一:

if Clk = '1' and Clk'event then 
if Clk'event and Clk = '1' then 
if rising_edge(Clk) then -- *** Preferred for readability. 

真的是沒有形式,您可以檢查「一些信號的事件,您是否匹配和/或不匹配的一些其他信號。

此外,您使用的結構不適合觸發器。你正在分配一個時鐘的其他分支內的值,這會使工具不快。另外,如果時鐘只在分支最外層,合成工具纔會最快樂。以下兩種觸發器常見:

SimpleFF : process(Clk) 
begin 
    if rising_edge(Clk) then 
    -- other stuff 
    end if ; 
end process SimpleFF ; 

    AsyncResetFF : process(Clk, nReset) 
    begin 
    if nReset = '0' then 
     -- reset stuff 
    elsif rising_edge(Clk) then 
     -- other stuff 
    end if ; 
    end process SimpleFF ; 

在編寫代碼時,您正在創建硬件。不要忘記這一點。第一步是始終畫出你想要的東西。特別是,識別硬件元素,例如觸發器,組合邏輯和算術邏輯。然後編寫捕獲圖片內容的代碼。

+0

我做了你所說的改變,但現在出現了一個新的錯誤:'[%DLS -F-NullArg,FindAttibute的空所有者節點參數。]'但是這裏沒有突出顯示的行。有任何想法嗎 ? –

+0

分而治之!意義設置一個項目只是爲了編譯有問題的文件。刪除一半的代碼。錯誤消失了嗎?如果不是,那麼錯誤不在代碼的這一部分 - 追蹤另一半的代碼。如果是,則將代碼再分爲一半並重復。早期的EDA工具不如今天好,但調試技術不時回來。 –