我對SystemVerilog中的競態條件有疑問,特別是在UVM中。在標準情況下,我們所擁有的是多個驅動程序,它們在同一時鐘前驅動我們的小玩意兒,在記分牌中產生一些函數調用。這些調用是同時進行的,他們檢查/修改黃金參考模型中的某些共享變量是現實的。如果這些操作是在非阻塞賦值的情況下完成的,那就沒有問題,但是阻塞賦值可能會存在競爭條件。哪個是解決這個問題的最好方法?要不在課堂上實現黃金參考模型? 預先感謝UVM阻塞分配競爭條件
記分牌的僞代碼的一個例子可以是:
function void write_A(input TrA A);
if(GRF.b >= 100 && A.a==1)
GRF.c = 1;
endfunction
function void write_B(input TrB B);
GRF.b+=B.b;
endfunction
當然的結果取決於這兩個函數執行的順序,這是未知的。人們可以用一些同步機制來解決,但是很多寫並行函數會使事情變得更加困難。使用非阻塞賦值會使情況變得更加清晰和簡單......也許解決方案可能是讓GRF的所有成員都是靜態的?
這就是爲什麼你通常實現一些同步機制來處理並行性。 – 2014-11-15 00:43:10
如果我沒有記錯,應該使用uvm_analysis功能自動處理計劃和同步記分板。 – Greg 2014-11-15 19:03:22