在VHDL中,當模擬測試臺時,我有一個過程和一個靈敏度列表。 是否有可能看到靈敏度列表中的哪個信號觸發了該過程?我知道這可能取決於工具。 即時通訊使用Xilinx ISE。模擬器是否提供這些信息?靈敏度列表中的哪個信號觸發過程
回答
可以結合使用'transaction
屬性與'event
,以確定哪些信號不得不在當前的增量週期一個事務:
process(a, b) is
begin
if a'transaction'event then
report "Transaction on a";
end if;
if b'transaction'event then
report "Transaction on b";
end if;
end process;
的'transaction
屬性創建類型比特的一個新的信號,關於每個事務切換。該信號上的'event
屬性標識何時在父信號上發生任何事務。
您還可以使用not <signal name>'quiet(0 ns)
能夠確定由敏感列表這標誌着曾在上次一步一個交易:
process(a, b) is
begin
if not a'quiet(0 ns) then
report "Transaction on a";
end if;
if not b'quiet(0 ns) then
report "Transaction on b";
end if;
end process;
後者可能是更有益的,如果你不想處理測序發生在不同的三角洲週期的事件。
兩個VHDL概念是與此有關:
交易:交易(:在一個仿真週期(時間和△循環)
事件一個值的信號的分配賦值)導致信號值改變
因此,在每個分配給該信號的信號上都會發生交易,但只有在該分配實際上改變了信號的值時纔會發生 。
VHDL具有以下方面的屬性:
S'active
:布爾在模擬週期發生TRUE當且僅當交易S'event
:布爾這是真的當且僅當事件發生在目前的模擬週期
的方法是在任何的感光度表的信號的事件恢復, 所以要確定導致恢復過程的哪一個信號(S),此 代碼可用於:
alfa: process (a, b) is
begin
report "Process alfa was resumed";
if a'event then
report "- Event on a";
end if;
if b'event then
report "- Event on b";
end if;
end process;
如果a
或b
被賦予當前值,則不會發生。
然而,VHDL具有能夠生成在每一個交易 的變化,從而有效的交易轉換爲 事件隱式信號,由此處理可以恢復一個屬性:
S'transaction
:當交易發生
由事務恢復了a
或b
的方法,改變位因此,可以與由:
bravo: process (a'transaction, b'transaction) is
begin
report "Process bravo was resumed";
if a'active then
report "- Transaction on a";
end if;
if a'event then
report "- Event on a";
end if;
if b'active then
report "- Transaction on b";
end if;
if b'event then
report "- Event on b";
end if;
end process;
行爲可以與測試臺過程產生的刺激被示出爲:
process is
begin
a <= 0; -- Declared as natural
b <= 0; -- --||--
wait for 1 ns;
a <= 1; -- Both transaction and event @ 1 ns 1 delta
wait for 0 sec; -- Delta delay
a <= 1; -- Only transaction, but no event @ 1 ns 2 delta
wait for 0 sec; -- Delta delay
b <= 2; -- Both transaction and event @ 1 ns 3 delta
wait for 0 sec; -- Delta delay
a <= 3; -- Both transaction and event @ 1 ns 4 delta
b <= 3; -- Both transaction and event @ 1 ns 4 delta
wait for 1 ns;
wait;
end process;
這將驅動信號,如下所示。需要注意的是ModelSims「膨脹時間 德爾塔模式」已經被用於在所述增量週期來顯示的信號變化:從處理的阿爾法
報告輸出(除了在0 ps的初始運行)是:
Time: 1 ns Iteration: 1 Instance: /tb # ** Note: Process alfa was resumed
Time: 1 ns Iteration: 1 Instance: /tb # ** Note: - Event on a
Time: 1 ns Iteration: 3 Instance: /tb # ** Note: Process alfa was resumed
Time: 1 ns Iteration: 3 Instance: /tb # ** Note: - Event on b
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: Process alfa was resumed
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: - Event on a
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: - Event on b
從過程喝彩
報告輸出(除了在0 ps的初始運行)是:
Time: 1 ns Iteration: 1 Instance: /tb # ** Note: Process bravo was resumed
Time: 1 ns Iteration: 1 Instance: /tb # ** Note: - Transaction on a
Time: 1 ns Iteration: 1 Instance: /tb # ** Note: - Event on a
Time: 1 ns Iteration: 2 Instance: /tb # ** Note: Process bravo was resumed
Time: 1 ns Iteration: 2 Instance: /tb # ** Note: - Transaction on a
Time: 1 ns Iteration: 3 Instance: /tb # ** Note: Process bravo was resumed
Time: 1 ns Iteration: 3 Instance: /tb # ** Note: - Transaction on b
Time: 1 ns Iteration: 3 Instance: /tb # ** Note: - Event on b
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: Process bravo was resumed
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: - Transaction on a
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: - Event on a
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: - Transaction on b
Time: 1 ns Iteration: 4 Instance: /tb # ** Note: - Event on b
所以,可以看出,反式僅在1 ns處動作,僅針對a
的動作信號變化delta 2僅由進程中的事務檢查bravo報告,並且沒有與此相關的事件 this。
@Morten,所以使用事件和事務我甚至可以捕獲我發送相同的值的信號連續的實例。 如示例中那樣:
a < = 0; - 聲明爲天然
b < = 0;
等待1納秒;
a < = 1; - 交易和事件@ 1納秒1德爾塔
等待0秒; - 三角延遲
a < = 1; - 只有交易,但沒有事件@ 1 ns 2 delta
等待0秒; - 德爾塔延遲
在該行,其中分配相同的值的信號 'A'
一個< = 1; - 只有交易,但沒有事件@ 1納秒2增量
我的假設是,您可以捕獲此事務,事務= 1,事件= 0。
然而,如果在FPGA中進行合成,這仍然很棒嗎?
只有交易(沒有價值變化)和「等待0秒」僅用於模擬,因爲硬件需要信號發生變化以便發生任何通信(因此不是隻有交易),並且不存在delta循環的概念硬件中等待0秒)。 – 2014-09-20 05:52:55
感謝您的答覆和澄清。非常感激。 – Jun 2014-09-21 06:15:05
- 1. ds觸摸屏靈敏度
- 2. iScroll的靈敏度
- 3. 當靈敏度列表不變時,VHDL進程被激活
- 4. 爲Grub 2引導加載程序添加觸摸靈敏度?
- 5. 圖表反應靈敏號碼:佈局
- 6. verilog always @ *靈敏度列表中包含什麼?
- 7. 滑動效果靈敏度
- 8. Pyomo靈敏度分析
- 9. 麥克風靈敏度
- 10. iPhone滑塊靈敏度
- 11. JQTouch壓力靈敏度
- 12. 調整Android中setOnTouchListner的靈敏度
- 13. Bing Maps中的縮放靈敏度
- 14. 敏捷軟件開發過程度量
- 15. 觸發信號流
- 16. 解決WPF觸摸屏靈敏度的方法
- 17. 信號從gtkmm彈出列表中觸發兩次
- 18. 在GLFW中設置鼠標靈敏度
- 19. 調整qooxdoo滾動速度/靈敏度
- 20. 調整UICollectionView滾動速度/靈敏度
- 21. Apple Pencil SDK - 靈敏度和區別觸摸輸入
- 22. 使用Sigasi編輯器的VHDL中的不完整靈敏度列表
- 23. Box2d - 降低b2body的靈敏度
- 24. jQuery Mobile的 - 改變taphold靈敏度
- 25. 更改FirstPersonController MouseLook的靈敏度
- 26. 跨Android設備的屏幕靈敏度
- 27. Andengine精靈在陣列中觸及哪一個?
- 28. SSH轉發信號來遠程過程
- 29. 靈敏度R隨機森林
- 30. .NET屬性更改了靈敏度
謝謝!看起來屬性是檢測這些的最好方法。 – Jun 2014-09-13 08:06:06
您的代碼將(正確)報告A或B上是否有交易,但單純的交易不會觸發敏感列表。當然,要回答這個問題,你需要:「如果一個事件發生了」,那麼這個問題實際上就是這樣提出的。 – 2016-05-26 08:55:14