2013-11-20 41 views
2

我正在以低功耗實現VHDL中的數字設計。該設計有許多輸入被聲明爲多個標準邏輯向量。如果任何輸入上有任何變化,則允許器件喚醒。這必須是組合邏輯,因爲設備處於掉電狀態。什麼我試圖做的代碼說明了一切:(ToggleSTDBY是一個信號,這是合法的)std_logic_vector上的VHDL事件關鍵字

P_Wakeup: PROCESS (VEC1, VEC2, VEC3, Rst_N) IS 
BEGIN 
    IF Rst_N = '0' THEN 
    ToggleSTDBY <= '0'; 
    ELSIF VEC1'event OR VEC2'event OR VEC3'event THEN 
    ToggleSTDBY <= NOT(ToggleSTDBY); 
    END IF; 
END PROCESS P_Wakeup;  

這是在模擬合法的,但在合成時它說:「'只支持單位事件信號」。我怎樣才能解決這個問題?總共有66位的矢量在一起,我真的不想寫66個程序來喚醒設備。所有位上的按位OR不會解決任何問題,因爲大多數信號都是高電平,所以所有位上的或將總是導致高電平。下面的代碼:

P_Wakeup: PROCESS (VEC, Rst_N) IS 
BEGIN 
IF Rst_N = '0' THEN 
    ToggleSTDBY <= '0'; 
ELSE 
    FOR i IN VEC'RANGE LOOP 
    IF VEC(i)'EVENT THEN 
     ToggleSTDBY <= NOT(ToggleSTDBY); 
    END IF; 
    END LOOP; 
END IF; 
END PROCESS P_Wakeup; 

給出錯誤「信號屬性的前綴「事件必須是靜態信號名稱」。我怎樣才能解決它,並保持代碼的可讀性?

+0

這可能沒有時鐘嗎?我會認爲'事件需要有關於信號先前狀態的一些信息,我認爲這需要一個時鐘。除非這可以使用鎖存器來完成? – Russell

+1

@Russell:它用XOR和延遲線完成。該綜合工具知道器件中不同模塊的時序,因此它可以確保XOR每個輸入的延遲不同,因此XOR將會脈衝爲高電平,儘管其輸入是相同的信號,因爲瞬態到達一側在另一個之前。 DFF模塊的時鐘輸入還內置了邊沿檢測電路。 –

回答

1

即使有可能編寫一個模擬您的預期行爲的VHDL代碼,我相信它不會像您期望的那樣工作。我建議在編寫代碼之前,先試着弄清楚你的ToggleSTDBY將被設置,測試和重置的細節(電路圖可能有所幫助)。

如果您決定實施ToggleSTDBY作爲載體,爲一個解決方案「事件僅支持單比特信號」問題是循環轉移到過程之外,使用for-generate

gen: for i in ToggleSTDBY'range generate 

    p_wakeup : process (vec, rst_n) is 
    begin 
     if rst_n = '0' then 
      ToggleSTDBY(i) <= '0'; 
     else 
      if vec(i)'event then 
       ToggleSTDBY(i) <= not (ToggleSTDBY(i)); 
      end if; 
     end if; 
    end process p_wakeup; 

end generate; 
2

VHDL的HDL部分是硬件描述語言(HDL)的縮寫, 因此您可以使用的VHDL結構必須可以通過合成 工具映射到目標。 'event的使用通常與連續的 (時鐘控制)硬件元件(如觸發器或RAM)相關聯,綜合工具 通常要求您以特定方式編寫VHDL,因此工具可識別特定硬件元件要使用的。

即使你寫VHDL代碼,模擬器,例如ModelSim的,那 可以編譯和模擬使用'event在你的例子,合成 工具通常無法這一映射到任何可用的目標硬件因爲可能沒有諸如'event 檢測器之類的硬件元件。

但是一個'event實際上表明在信號值的變化,所以你也許可以 寫的信號值變化檢測明確VHDL,如:

change <= '1' if (vec_now /= vec_previous) else '0'; 

根據低功耗硬件元素用,您可能當在change上異步檢測到'1'時,啓動時鐘 ,可能通過 ToggleSTDBY,然後處理更改。進入 睡眠模式之前的最後一件事是然後捕獲當前vecvec_previous,因此 可以在睡眠模式下檢測到另一個變化。

基於描述,我假設您正在做 這種低功耗設計的可能性,完全取決於目標FPGA/ASIC技術中提供的功能 。因此,在試圖獲得VHDL語法之前,您可能需要根據可用的低功耗特性確定結果硬件的外觀。