2017-03-01 30 views
1

因此,當端口映射組件位於「頂層文件」時,是否可以在端口映射時反轉復位輸入,如下例所示?端口映射中的低電平有效復位

假設上面文件中的代碼是:

 entity topfile is 
     port(
       clk : in std_logic; 
       reset : in std_logic 
       --Other input and outputs 
       ); 


     architecture arch of topfile is 
     begin 

      c1: entity work.component1(behavioral) 
      port map(
        clk => clk, 
        reset => not reset, 
        . 
        . 
        . 
        ); 
      c2: entity work.component2(behavioral) 
      port map(
        clk => clk, 
        reset => not reset, 
        . 
        . 
        . 
        ); 


       end arch; 

回答

2

是的,你可以,但你必須使用VHDL 2008年以前,以2008年VHDL是,所謂的港口表情映射是不允許的。

不要輕易決定使用VHDL 2008。並非所有工具都支持VHDL 2008,即使您發現當前使用的所有工具都支持VHDL 2008,您是否可以確定您將來可能希望切換到的任何工具也支持它?

考慮使用VHDL 2008年解決這個特定的問題是邊際的優勢,我會建議使用虛擬信號是這樣的:

entity topfile is 
    port(
      clk : in std_logic; 
      reset : in std_logic 
      --Other input and outputs 
      ); 


    architecture arch of topfile is 
      signal resetn : std_logic 
    begin 

    resetn <= not reset; 

     c1: entity work.component1(behavioral) 
     port map(
       clk => clk, 
       reset => resetn, 
       . 
       . 
       . 
       ); 
     c2: entity work.component2(behavioral) 
     port map(
       clk => clk, 
       reset => resetn, 
       . 
       . 
       . 
       ); 

表達的端口映射添加額外的增量延遲,所以上面會模擬與您的原始代碼完全相同

0

是的,可以。只要「操縱」信號的類型和長度與端口相匹配即可。

0

如馬修指出,表達式未在端口映射允許預2008年,但轉換函數至少由Vivado,ISE,和ModelSim支持預2008。您可以編寫一個簡單的invert函數,並將其放入一個包中,該包將在您的其他源文件中獲取use d。事情是這樣的:

function invert (input : std_logic) return std_logic is 
begin 
    return not input; 
end function; 

然後可以使用reset => invert(reset),在你的端口映射,而不需要在你的工具VHDL2008支持。這仍然是非常可讀的,沒有使用任何'額外'信號。


在一個相關的說明,我會建議對在FPGA中使用低有效的內部信號。對器件中物理模塊的時鐘啓用和復位通常不是低電平有效,因此將它們寫入低電平有助於產生額外的反轉邏輯。