import vsc
|
|
|
|
|
|
# Random stimuli model class
|
|
@vsc.randobj
|
|
class constraints():
|
|
def __init__(self):
|
|
self.key = vsc.rand_bit_t(128)
|
|
self.data = vsc.rand_bit_t(128)
|
|
|
|
@vsc.constraint
|
|
def c(self):
|
|
self.data >= 0 and self.data <= 2**128-1
|
|
vsc.dist(self.key, [
|
|
vsc.weight(0, 15),
|
|
vsc.weight((1,2**128-2), 70),
|
|
vsc.weight((2**128-1), 15)])
|
|
|
|
|
|
# Stimuli covergroup
|
|
@vsc.covergroup
|
|
class covergroup():
|
|
def __init__(self, name="bla"):
|
|
self.options.name = name
|
|
self.with_sample(
|
|
mode = vsc.bit_t(1),
|
|
key = vsc.bit_t(128)
|
|
)
|
|
|
|
self.enc = vsc.coverpoint(self.mode, bins=dict(
|
|
enc = vsc.bin(0)))
|
|
|
|
self.dec = vsc.coverpoint(self.mode, bins=dict(
|
|
dec = vsc.bin(1)))
|
|
|
|
self.key0 = vsc.coverpoint(self.key, bins=dict(
|
|
key0 = vsc.bin(0)))
|
|
|
|
self.keyF = vsc.coverpoint(self.key, bins=dict(
|
|
keyF = vsc.bin(2**128-1)))
|
|
|
|
self.encXkey0 = vsc.cross([self.enc, self.key0])
|
|
self.encXkeyF = vsc.cross([self.enc, self.keyF])
|
|
|
|
self.decXkey0 = vsc.cross([self.dec, self.key0])
|
|
self.decXkeyF = vsc.cross([self.dec, self.keyF])
|