1.概述
一個vhdl描述可能包括多個設計實體, 每個實體又可能包括多個結構體. 配置語句configuration就是用來在仿真/綜合時指定使用哪些實體和結構體的.
配置語句完成兩件事:
i. 指定每個組件實例(component instance)中替換的設計實體.(就像將一塊不同於組件聲明的芯片插入芯片插座, 然后將插座-芯片的組件實例插入pcb一樣)
ii. 指定每一個設計實體使用的結構體.
2. 默認配置
以下為默認配置的格式
CONFIGURATION 配置名 OF 實體名 IS
FOR 結構體名
END FOR;
END 配置名;
該配置指定了實體使用的結構體. 在省略配置語句或使用默認配置時, 默認地, 該結構體中的所有組件的例化都被配置為與組件定義名相同的實體, 而其實體又使用最新分析的結構體(好像意思是最新被編譯的結構體, 不過通常多結構體時都會明確指定, 可以不考慮這個).
如下例, 對實體mux2的配置mux2_default_cfg中, 指定使用結構體structure, 里面進行的組件實例化都是用的是同名實體. 比如u1 : aoi port map(..); u1插入的"芯片"默認為叫做aoi的實體.
use WORK.all;
configuration MUX2_default_CFG of MUX2 is
for STRUCTURE
-- Components inside STRUCTURE configured by default
end for;
end MUX2_default_CFG;
3. 指定配置(元件的實體-結構體對配置)
配置聲明是vhdl的另一設計單元, 所以也需要調用庫和程序包. 指定配置可以為實體指定結構體, 並指定其中例化語句所用的實體-結構體組合(不局限於同名實體)
USE work.ALL; --使工作庫中所有編譯的實體都對配置可視.
CONFIGURATION mux_cfg OF mux IS
FOR structure1
--指定mux實體使用structure1結構體, mux_cfg是配置名
FOR g2 : aoi
USE ENTITY work.aoi(v1);
--指定structure1結構體中, 組件aoi例化的g2使用work庫中編譯的aoi實體-v1結構體
END FOR;
END FOR;
END mux_cfg;
4. 指定實例化元件的低層配置
CONFIGURATION 配置名 OF 實體名 IS
FOR 選配結構體名
FOR 元件例化名 : 元件名 USE CONFIGURATION 庫名.元件配置名;
END FOR;
FOR 元件例化名 : 元件名 USE CONFIGURATION 庫名.元件配置名;
END FOR;
END FOR;
END 配置名;
與3中指定配置的區別是, 指定配置直接為實例化元件配置了實體-結構體對; 低層配置直接將之前一個針對實體的配置(實體-結構體對+嵌套的對結構體內部實例化元件的配置)一同封裝好配置給實例化元件.
5. 塊的配置
這個不難理解, 之前是配置結構體-元件, 塊配置的是結構體-塊-元件. 也同樣可以使用低層配置和指定配置.
CONFIGURATION 配置名 OF 實體名 IS
FOR 選配結構體名
FOR <塊名>
FOR 元件例化名 : 元件名 USE CONFIGURATION 庫名.元件配置名;
END FOR;
FOR 元件例化名 : 元件名 USE CONFIGURATION 庫名.元件配置名;
END FOR;
END FOR;
…
FOR <塊名>
…
END FOR;
END FOR;
END [配置名];
6. 結構體的配置
在結構體說明語句部分使用, 毫無疑問這是對該結構體內部的元件進行配置的.
FOR <元件例化標號>: <元件名> USE ENTITY <庫名>.<實體名(結構體名)>;
FOR <元件例化標號>: <元件名> USE CONFIGURATION <庫名>.<元件配置名>;
7. 使用方法
vhdl初學, 還未測試, 也沒有搜到相關教程, 根據一些例程推測:
在modelsim的命令行中輸入 "vsim 配置名"即可直接將該配置針對的實體-結構體對設置為頂層模塊進行仿真.
8. 注意
i. 在《vhdl golden reference》的示例代碼中, 有一行比較有意思:
port map (IP => To_Vector(A), To_Int8(OP) => F);
或許這條應該放在元件實例化的教程中: 實例化的接口可以直接使用數據類型轉換來實現類型匹配.
ii. 可選項: 元件例化配置中, 在use 語句末尾還可以插入generic map和port map子句(只在最后有一個分號).
iii. 可選項: 可以在元件例化的配置中, 直接嵌套一個"for 結構體 … end for"來重新配置, 也是作為use語句的子句, 只在use語句的最后用一個分號就行.
iv. 實例名也可以使用all和others關鍵詞.
v. 配置語句單獨放在一個vhd文件中.
9. 參考資料.
○ https://www.doulos.com/knowhow/vhdl/configurations-part-1/
○ http://read.pudn.com/downloads184/sourcecode/others/863871/vhdl/8.pdf
○ 《vhdl golden reference》configuration一節
新手發文, 可能有錯誤,歡迎留言討論
