2012-03-28 65 views
9

VHDL配置可用於將組件綁定到具有不同名稱的實體,甚至可以使用完全不同的端口。 [see this article for more info]先進的VHDL配置曾經在現實生活中使用過嗎?

configuration c2 of testbench is 
    for str 
     for dut_inst : dut 
      use entity work.unrelated(rtl) 
       port map(
        port1 => a, 
        port2 => b, 
        port3 => c, 
        port4 => "unused" 
       ); 
     end for; 
    end for; 
    end configuration c2; 

您有沒有見過這種情況發生在商業項目項目中?放棄一個看起來不相關的實體的目的是什麼?他們爲什麼不只是改變實例化代碼?

我可以彌補假設的情況,但我對現實生活中的用例感興趣。

+0

感謝您提出這個問題 - 我也很感興趣。根據我的經驗,我從來沒有見過這個人使用過自己,並曾在針對多個FPGA板/系統的大型代碼庫中工作。 – Josh 2012-03-28 15:58:59

+1

同樣適用於我。 VHDL似乎有一些語言元素,使其感覺非常古老,併爲比現在的FPGA工程師更小的用戶羣指定。靈敏度列表,配置,強制性標籤,缺乏C預處理器的等價物,堅持列表中的最後一個元素不能有尾隨昏迷,或者在開發人員將開發人員假定'1'= true和name時區分std_logic和bool相應的信號。基本概念很好,但有人需要從頭開始重新設計語言。 – maxy 2012-03-28 16:47:43

+0

@maxy:其中一些我會同意,有些則不會。靈敏度列表是編譯器/模擬器無法勝任的遺留問題,所以我會給你。尾隨逗號,好吧,但我不會失眠。配置功能強大且有用(儘管上面的示例似乎沒有必要)。我不想要預處理器。你有沒有看到人們用它做的可怕事情?泛型讓你90%,但強制結構。 std_logic vs bool是具有嚴格類型語言的人工製品,對於RTL恕我直言,僵化打字是一件好事。標籤...你爲什麼不標註某些東西? :-) – 2012-03-29 09:28:34

回答

3

不,我從來沒有在野外見過。

我想原因是大多數人(包括我自己)甚至不知道這樣的事情是可能的配置。

4

從來沒有見過端口綁定的變化,但我已經看到它用於綁定在不同版本的組件與相同的端口映射。我見過的一些例子:

  • 在構建大型系統級仿真時綁定空的版本。設計的一部分被版本替換,在測試設計的其他部分時,這些版本不會做任何事情來減少內存佔用。
  • 類似的,但是當測試一個設計的總線基礎設施時,以簡單的單位進行綁定,以「野蠻」和「不快」的方式進行響應。
  • 具有不同設計折衷的特定塊的不同版本。例如一個大而快的版本,一個小而緩慢。然後可以根據系統組合或特定應用需要什麼進行交換。

這些都不需要你談論的功能。我能想到的只有使用不同的組件可能會有用,因爲如果你有像多個RAM庫供應商那樣的東西,並且需要定期交換它們。即使那樣,你也不可能做一對一的端口映射。總是有一個掉電引腳,需要反相或其他東西。

+0

隨着大型項目的進展,我會添加(1)交換RTL模型的行爲模型,以及(2)使用配置選擇不同版本的模擬。這在大型項目中很常見。我還想補充一點,你只需要與Verilogger交談,以瞭解當名稱作爲不同庫中的不同組件存在時,只允許使用一個名稱是多麼痛苦。配置是IMO對VHDL的基礎。 – EML 2013-04-23 09:07:49

1

我幾次使用過這種配置。我儘量避免它,但它有時對白盒測試有用。

假設我有一個非常大的實體+體系結構FooMachine,並且我希望編寫一系列關於FooMachine中的信號的白盒單元測試。理想情況下,FooMachine將被拆分成幾個組件,我會對這些組件進行黑盒測試,但是我繼承了一些真正龐大的體系結構,我無法從經濟角度考慮需要重構的時間,因爲只需要進行微小的更改。我將做什麼是限定在FooMachine

component Dummy is 
end component Dummy; 

組件和實例

dummy_g : Dummy; 

然後,在信號xFooMachine一個單元測試,我會寫的實體+架構

entity TestDummy is 
    port (
     x : in std_logic 
    ); 
end entity; 

architecture Arch of TestDummy is 
    ... 
end Arch; 

and a configuration

configuration conf of ... is 
... 
    for all : FooMachine 
     ... 
     for all : Dummy 
      use entity work.TestDummy(Arch) 
       port map (x => x); 
     end for; 
    end for; 
... 
end configuration; 

然後我可以在TestDummy中寫我的斷言。

同樣,這不是我更喜歡編寫單元測試的方式,但有時候這是解決不幸問題的最佳方法。

+0

很好的答案,沒有多少人明白這一點的含義和用處 – CJC 2016-02-02 08:21:26

相關問題