2017-04-21 114 views
1

我在測試平臺中覆蓋約束時遇到了一些麻煩。 在我的順序我做了以下內容:覆蓋約束條件

`uvm_do_with(req, {trans_kind == WRITE ; 
         address == 40'hc0_0000_0000; 
         mask_mismatch_error == 1; 
         bus_error_type == SCB_BUS_ERR_NONE; 
         }) //this line sends the transaction 

在我的序列項目:

constraint c_mask_mismatch_error_disable_map8 { (cfg_h.is_map8 == 1) -> (mask_mismatch_error == 0); } 

日誌文件是給這樣的警告:

ncsim:* W,SVRNDF (源位置/行):隨機方法調用 失敗。失敗的隨機化調用的唯一ID是86

觀察仿真時間:79492842 PS + 14

ncsim:* W,RNDOCS:這些約束有助於一套 衝突的約束:})//這線發送交易 ( (mask_mismatch_error == 0);}(源位置/行)

ncsim:* W,RNDOCS:這些變量向組衝突的 約束:

狀態變量: cfg_h.is_ma P8(1)[源位置/線]

蘭特變量:mask_mismatch_error [源的位置/線]

我不理解爲什麼這種類型的倍率是不可能的。我能做什麼來覆蓋序列中的約束條件?

回答

1

調用randomizewith子句僅用於添加約束;它不能覆蓋它們。重寫約束的適當的OOP方法是擴展您的事務類並在擴展類中聲明具有相同名稱的約束。

你的另一個選擇是把限制使用關

req.c_mask_mismatch_error_disable_map8.constraint_mode(0); 

如果你這樣做,你可以不再使用`umm_do_with宏,許多人建議不要使用反正。

+0

謝謝,我將實施您的解決方案 – Pete

+0

另一種選擇是聲明作爲順序項目的一部分的約束,作爲'軟約束'。 – AndresM