目前,我嘗試開發自己的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
放在靈敏度列表中,因爲它完全依賴於clock
和reset
。
什麼是正確的,現在?
Sigasi。而不一定是你可能會想到的原因。在任何掛起的進程尚未恢復或掛起時,不更新innerValue。你意味着最後一項任務的延遲。將innerValue放在靈敏度列表中也是一個錯誤,它會導致innerValue在連續的增量循環中不斷更新(直到達到極限時才執行)。該任務是一個組合循環。爲什麼不設置innerValue以匹配從initValue分配的if語句中的最後一個賦值中的右手錶達式?或者在過程中聲明innerValue作爲變量。 – user1155120
您的過程不能模擬可在大多數技術(ASIC或FPGA)中實現的數字硬件。我可以建議仔細閱讀我幾個小時前爲類似問題寫的答案[匹配模擬和VHDL後合成行爲](http://stackoverflow.com/questions/38778965/match-simulation-and-post - 合成 - 行爲 - 在 - VHDL/38783500#38783500)? –