我正在設計一個shift鍵檢測器。我寫了一個測試工作臺。測試表明我的實現不正確。VHDL - 在我的密鑰檢測中未定義的行爲
這裏是ModelSim中的模擬。
紅線指示未定義。這種行爲只發生兩次。
讓我困惑的是:爲什麼這兩個值之間有這麼大的差距?如果你看看測試臺,第三和第四程序使用第一和第二的格式。
試驗檯是在這裏:
http://pastebin.com/BJVFFgGr
探測器代碼是在這裏:
http://pastebin.com/di42FLqT
正如你所看到的。我的設計中有兩個狀態。 PS2接收器將在按下(或釋放)按鍵時過濾並生成乾淨的8位製作代碼。中斷代碼只是F0,後面跟着剛剛發佈的密鑰的代碼。我的狀態機使用兩個額外的位來跟蹤哪個鍵被按下。
我經歷了調試,並且當我們輸入第三個測試值時,SHIFT = U而不是前一個值中的1。
-- release left shift
hex <= "11110000";
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
hex <= "00010010"; <----- when I am here shift is already U
wait for 5 ns;
clk <= NOT clk;
wait for 50 ns;
clk <= NOT clk;
wait for 50 ns;
if (shift /= '0')then
error <= '1';
end if;
left_pressed和right_pressed是信號,而不是變量。所以他們應該在任何情況下都有價值。如果其中一個改變,與換檔信號的連接將自動更新。
有人可以幫我嗎?謝謝。
謝謝。
謝謝!我在哪裏插入next_state <= current_state?我做了其他的事情,但我認爲有人在搞我。謝謝 – CppLearner
開始更新next_state的過程。這是一個默認情況,所以如果其他任務都沒有命中,那麼你仍然定義了下一個狀態應該是什麼。 –