2016-08-25 34 views
0

我們使用[延遲]語句來提供延遲,並且我們可以在模擬中進行分析。但是當我們將這個模型加載到FPGA中時,由VHDL代碼生成的實際硬件會影響延遲,或者這種延遲僅限於模擬?在[延遲第二秒]語句後僅在模擬中還是在實際合成模型中提供延遲才能在VHDL中加載到fpga中?

a <= not b after 1s; 

因此,假設我連一個開關到b,並導致a所以我會得到在按下開關和更新LED狀態之間一秒的延遲?

+2

那將在'1秒後'; –

+1

你認爲你的合成器會產生什麼硬件來在1秒後實現'a <=不是b;'? –

+0

我看到了合成後的硬件,它只生成了與b相連的一個;確切地說, –

回答

0

當你模擬你需要提供事情發生和輸入發生了什麼。在FPGA上實現它之後,外部事件會創建輸入,而模擬對此無關緊要。

所以,如果我明白你的問題是正確的,是的,你顯示的延遲只會影響模擬。

編輯: 關於定時器,您知道FPGA的時鐘頻率。所以你可以創建一個變量並在每個clk_up上增加它(我使用CLK = '1' and CLK'Event,但有更好的方法可以做到這一點),當它達到與時鐘頻率相同的值時,已經過去了1秒。

不那麼僞代碼:

signal clock: unsigned (9 downto 0); 
if CLK = '1' and CLK'Event then 
    clock<= clock + 1; 
    if clock = "1100100000" then --clock frequency (this is an example) 
     clock <= "0000000000" 
     -- 1 secound passed! 
    end if; 
end if; 
+1

簡而言之,'wait''和'after'語句不能合成。 –

+0

那麼我怎麼能產生可以合成的延遲? –

+2

@NeilTerminator使用時鐘信號來實現定時器。還有其他的問題。 –

1

如之前所說,在等待語句不能合成,只會影響仿真。但是,我應該補充一點,即使在模擬中,您可能得不到您的期望。請允許我解釋一下。

VHDL提供2種延遲模型:傳輸延遲和慣性延遲,後者是默認值,您選擇時不指定使用哪種模型。

如果b在延遲過程中發生不穩定的情況,比如每隔500ms切換一次,a不會按照您的意願切換。要真正引入純滯後,選擇傳輸延遲模型如下:

​​

當然,同樣,這不能合成,僅供模擬的目的。