2015-06-16 79 views
2

我有一個由KEEP, DONT_TOUCH和MARK_DEBUG組成的巨大屬性列表。這主要是我想要在我的設計中進行調試的信號列表。由於列表佔用了太多的空間,我想知道是否有可能以某種方式將文件中的所有屬性存儲在 文件中,並根據全局 常量變量/信號/任何內容將它們加載到我的VHDL設計中?將屬性放入文件可能嗎?

因此,這將是這個樣子:

entity top is 
end top ; 
architecture Behavioral of top is 
    if(DEBUG_ENABLE = "TRUE") then 
     include "../path/to/file.txt"; 
    end if; 
begin 
end Behavioral; 

和文件看起來是這樣的:

attribute KEEP   : string; 
attribute DONT_TOUCH : string; 
attribute MARK_DEBUG : string; 

attribute KEEP of signal_1   : signal is "TRUE"; 
attribute KEEP of signal_2   : signal is "TRUE"; 

attribute DONT_TOUCH of signal_1  : signal is "TRUE"; 
attribute DONT_TOUCH of signal_2  : signal is "TRUE"; 

attribute MARK_DEBUG of signal_1  : signal is "TRUE"; 
attribute MARK_DEBUG of signal_2  : signal is "TRUE"; 

任何人都知道,這是否可行?

乾杯

編輯: 我的意思不是包括通過使用語句庫。這主要是爲了將其他組件或類型/數組/函數/過程聲明包含到實體中。我想包含一些東西到不是組件或類似的東西,首先沒有提及我的實體設計,除非我明確地實例化它。我想在我的架構頭中包含描述已聲明信號的內容。據我的理解,這是不可能的庫和包。

+0

可能重複[如何在VHDL中創建包含文件?](http://stackoverflow.com/questions/13414682/how-to-to-to-create-include-files-in-vhdl)。注意屬性必須與其聲明範圍內的各種類的實體關聯(指定)。 – user1155120

回答

3

您可以實現有條件的屬性是這樣的:

attribute KEEP : BOOLEAN; 

constant ENABLE_DEBUG : BOOLEAN := TRUE; 
attribute KEEP of mySignal : signal is ENABLE_DEBUG; 

條件字符串賦值可以由ITE(IF-THEN-ELSE)功能來解決。

function ite(cond : BOOLEAN; val1 : STRING ; val2 : STRING) return STRING is 
begin 
    if cond then 
    return val1; 
    else 
    return val2; 
    end if; 
end function; 

attribute FSM_ENCODING : STRING; 
attribute FSM_ENCODING of State : signal is ite(ENABLE_DEBUG, "gray", "auto"); 

某些屬性可以通過供應商依賴的約束文件加載/分配。

賽靈思ISE例如:
例如KEEP可以以原理圖,VHDL和Verilog或經由賽靈思XCF,NCF或UCF文件被分配。 請參閱Xilinx Constraint Guide瞭解哪些工具(合成圖,P & R,...)可以分配哪些屬性(頁21)的詳細信息。

NET "myInstance/mySignal" KEEP; 

賽靈思Vivado例如:
Vivado支持 'DONT_TOUCH' 屬性,其可以通過XDC文件來設置。有關更多詳細信息,請參見Vivado的Using Constraints用戶指南。以下示例來自第56頁:

set_property DONT_TOUCH true [get_cells fsm_reg] 

因此,查看您的綜合工具的用戶指南和支持的屬性/約束列表。

+1

如果我在XDC文件中聲明屬性,我不需要合成器之後該信號的實際網表名稱,是嗎?據我的理解,我會需要合成器之後的名字,這可能會變得非常混亂。因爲我希望在我的VHDL文件中包含屬性,所以我可以保留我的信號(即signal_1)的漂亮名稱,而不是加密的名稱,意思是:signal_1_ [reg] [0:0] – Spyro

+1

@SteffenKern ,是的,但是Xilinx應該儘可能保留你的名字。它可能會更好,因爲你按照實現方式調試設計,'keep'和al會改變合成的輸出。否則,使用外部文件很容易排除這些限制,並且它們支持正則表達式。 Vivado甚至通過TCL支持輕鬆鎖定實體的所有觸發器,例如,在方便的TCL命令中。如果您需要的信號消失了,您可以隨時添加VHDL中的屬性。 –

+0

我希望我們不是在這裏交叉討論,但是很快就是我想要完成的。即當我添加data_a:signal的屬性KEEP爲「TRUE」的行時,進入我的架構(在同一信號上加上一個mark_debug),而合成器後面的信號被稱爲data_a_ [0],好吧......我們可以清楚地看到合成器前後的信號相同,mark_debug保持在該信號上。我只是認爲可能有一種構造將所有keep和mark_debugs「外包」爲一個單獨的文件(不是XDC!),並且可以將其包含在內。只是爲了乾淨的代碼風格。 – Spyro

相關問題