在開始使用VHDL(或其他任何HDL)時(shí),非常重要的是要拋棄順序代碼的所有概念,而要專注于通過硬件的數(shù)據(jù)流。在硬件中,所有東西本質(zhì)上都是并行的(一切同時(shí)發(fā)生),但是使用不斷變化的數(shù)據(jù)(輸入信號)來計(jì)算不斷變化的結(jié)果(輸出信號)!
如果不深入到諸如變量、等待命令等更高級的主題,進(jìn)程中的所有內(nèi)容都會同時(shí)發(fā)生。如果在同一進(jìn)程中發(fā)生沖突的事情(對同一信號多次寫入),則流程中的最后一條語句將獲勝,這通常是VHDL中關(guān)于“順序”代碼的混淆的地方。
這是由于將值分配給信號的方式而產(chǎn)生的。當(dāng)給信號賦值時(shí),信號的值不會立即改變!相反,賦值將被記住,并將在以后作為實(shí)際信號值提交(為下一個(gè)δ周期做準(zhǔn)備,這實(shí)際上是下一個(gè)時(shí)間量程)。
由于下一個(gè)增量周期將在上一個(gè)增量周期的所有進(jìn)程完成后才開始,因此信號值只有在沒有進(jìn)程運(yùn)行時(shí)才會更改。一旦所有信號都改變了,下一個(gè)增量循環(huán)就開始了,任何對一個(gè)變化信號敏感的進(jìn)程都將被執(zhí)行。
如果一個(gè)進(jìn)程對它所寫的信號很敏感,你就有一個(gè)所謂的組合回路,例如,輸出輸入的一個(gè)門。這幾乎總是你的電路中的一個(gè)錯(cuò)誤,并且通常會導(dǎo)致模擬器進(jìn)入無限的三角循環(huán)。
這就是我現(xiàn)在要寫的全部內(nèi)容,因?yàn)锽rianDrummond的回答只是在我寫這篇文章的時(shí)候彈出來的,但是請盡管留下評論,我會添加一些更多的細(xì)節(jié)。