vhdl中的配置語句configuration的語法和使用


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一節
新手發文, 可能有錯誤,歡迎留言討論


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM