我碰到過VHDL中的兩種風格的進程語句。等到rising_edge(clk)vs如果rising_edge(clk)
process(clk)
begin
if rising_edge(clk)
....do something....
另一種是
process
begin
wait until rising_edge(clk)
....do something....
什麼是每種方法的優點和缺點。
我碰到過VHDL中的兩種風格的進程語句。等到rising_edge(clk)vs如果rising_edge(clk)
process(clk)
begin
if rising_edge(clk)
....do something....
另一種是
process
begin
wait until rising_edge(clk)
....do something....
什麼是每種方法的優點和缺點。
假設...
第二個示例的一部分沒有任何wait
語句,這兩個表單在語義上是等價的。
它們在模擬中的表現完全相同。
但是,第一種形式是用於合成的推薦樣式,並且會被許多人認爲更具可讀性。
由誰推薦?支持這兩種形式,請參閱撤回的IEEE Std 1076.6-2004,6.1.3.1靈敏度列表和一個時鐘的進程中的邊緣敏感存儲,以及使用單個等待語句的6.1.3.2邊緣敏感存儲。區別在於流程是否有一個靈敏度列表,暗示「等待時鐘;'作爲流程的最後一個順序語句(IEEE標準1076-2008 11.3流程語句)。哪種形式是純粹的編碼風格選擇, – user1155120
@user我手邊沒有任何參考,但有_synthesis_工具,它不會用'wait'語法推斷出合適的FF。 – wap26
他們不會是1076.6兼容。 – user1155120
基本上,第二種類型只在仿真中有用。等待語句需要時間在流程內的不同語句之間流動,這與硬件合成過程不同。它通常會出現在模擬刺激或診斷過程中。在第一種形式中,進程由時鐘事件觸發,並在一個步驟中運行,表示同步邏輯。
vs'等到clk ='1'' –