2016-08-05 118 views
0

目前,我嘗試開發自己的VHDL技巧,因此我使用Sigasi插件來編寫一些VHDL代碼。 Sigasi是一個偉大的工具,但有一件事情,這是困擾着我,雖然。不斷地,Sigasi在流程定義中拋出關於不完整敏感列表的警告,這從我的觀點來看是不合理的。一個例子是具有相應體系結構的以下實體。這是一個環移位的描述寄存器使用Sigasi編輯器的VHDL中的不完整靈敏度列表

library ieee; 
use ieee.std_logic_1164.all; 
use ieee.numeric_std.all; 

entity RingShiftReg is 
    generic(
     WIDTH : integer := 8 
    ); 
    port(
     clock  : in std_ulogic; 
     reset  : in std_ulogic; 
     set  : in std_ulogic; 
     initValue : in std_ulogic_vector(WIDTH - 1 downto 0); 
     value  : out std_ulogic_vector(WIDTH - 1 downto 0) 
    ); 
end; 

architecture ringShiftRegArch of RingShiftReg is 
    signal innerValue : std_ulogic_vector(WIDTH - 1 downto 0); 
begin 
    P1: process(clock, reset) 
    begin 
     if reset = '1' then 
      innerValue <= (others => '0'); 
     elsif rising_edge(clock) then 
      if set = '1' then 
       innerValue <= initValue; 
      end if; 
     else 
      innerValue <= innerValue(WIDTH - 2 downto 0) & innerValue(WIDTH - 1); 
     end if; 
    end process; 
    value <= innerValue; 
end ringShiftRegArch; 

的Sigasi短絨聲稱過程P1的靈敏度列表是不完全的,因爲信號innerValue缺失。但在我看來,沒有必要把innerValue放在靈敏度列表中,因爲它完全依賴於clockreset

什麼是正確的,現在?

+2

Sigasi。而不一定是你可能會想到的原因。在任何掛起的進程尚未恢復或掛起時,不更新innerValue。你意味着最後一項任務的延遲。將innerValue放在靈敏度列表中也是一個錯誤,它會導致innerValue在連續的增量循環中不斷更新(直到達到極限時才執行)。該任務是一個組合循環。爲什麼不設置innerValue以匹配從initValue分配的if語句中的最後一個賦值中的右手錶達式?或者在過程中聲明innerValue作爲變量。 – user1155120

+3

您的過程不能模擬可在大多數技術(ASIC或FPGA)中實現的數字硬件。我可以建議仔細閱讀我幾個小時前爲類似問題寫的答案[匹配模擬和VHDL後合成行爲](http://stackoverflow.com/questions/38778965/match-simulation-and-post - 合成 - 行爲 - 在 - VHDL/38783500#38783500)? –

回答

2

你也許是這個意思?

elsif rising_edge(clock) then 
    if set = '1' then 
    innerValue <= initValue; 
    else 
    innerValue <= innerValue(WIDTH - 2 downto 0) & innerValue(WIDTH - 1); 
    end if; 
end if; 
2

要長話短說,你

else 
    innerValue <= ... 
end if; 

不作經典數字硬件有道理的,因爲在這種情況下您else表示:

  • clockreset(或兩者)改變,
  • reset不等於'1'
  • 這不是ar正在clock的邊緣。

所以,可以這樣:

  • reset下降沿,或
  • clockreset下降沿等於'0'

可能不是你想要的。如果這是你的意圖,你應該嘗試找到另一個目標技術。傳統的數字硬件無法實現這一點,因爲在ASIC標準單元庫或FPGA中沒有多時鐘,多邊沿,寄存器。