यूवीएम में, मैं एक सरणी को बाधित करना चाहता हूं जैसे कि मैं एक सरणी में लोगों की संख्या को 3 तक ठीक कर सकता हूं, मैंने निम्नलिखित कोड को बाधा का उपयोग करके लिखा है जो $countones का उपयोग करता है, लेकिन $countones का उपयोग किए बिना इसे कैसे करें ??

class class_1;
rand bit[31:0] array;

constraint three_ones {
$countones(array) == 3;
}
endclass
0
Grace90 8 फरवरी 2019, 01:39

1 उत्तर

सबसे बढ़िया उत्तर

आपने जो लिखा वह बराबर है

constraint three_ones {
int'(array[0]) + int'(array[1]) + int'(array[2]) + ... + int'(array[31]) )
   == 3;
}
endclass

अद्यतन

बिना किसी फ़ंक्शन के प्रोग्रामेटिक रूप से ऐसा करने के लिए, आप इंडेक्स की एक सूची के साथ एक और सरणी बना सकते हैं जिसे एक पर सेट किया जाना चाहिए। सरणी का आकार वह संख्या है जिसे आप सेट करना चाहते हैं।

bit [0:255] array;
int countones = 5;
rand int unsigned bitset[]; 
constraint c_bits { bitset.size == countones;
                    foreach(bitset[i]) bitset[i] inside {[0;$bits(array)-1];
                    unique {bitset};
                  }
function void post_randomize();
   array = 0;
   foreach(bitset[i]) array[bitset[i]] = 1'b1;
endfunction

अब अद्वितीय बाधा के बिना ऐसा करने का एक तरीका है, और बिना post_randomize के, लेकिन यह मेरे लिए बहुत अधिक काम है।

0
dave_59 10 फरवरी 2019, 09:09