diff --git a/pyuvm_tests/Coverage.py b/pyuvm_tests/Coverage.py index b7aac64..eaaf31a 100644 --- a/pyuvm_tests/Coverage.py +++ b/pyuvm_tests/Coverage.py @@ -3,41 +3,38 @@ import vsc # Random stimuli model class @vsc.randobj -class constraints(): +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)]) + 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(): +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.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.enc = vsc.coverpoint(self.mode, bins=dict(enc=vsc.bin(0))) - self.dec = vsc.coverpoint(self.mode, bins=dict( - dec = vsc.bin(1))) + 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.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.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]) diff --git a/pyuvm_tests/VaiBfm.py b/pyuvm_tests/VaiBfm.py index e64ea14..a728ba6 100644 --- a/pyuvm_tests/VaiBfm.py +++ b/pyuvm_tests/VaiBfm.py @@ -20,7 +20,7 @@ class Mode(enum.IntEnum): Decrypt = 1 -# VAI BFM with queues for +# VAI BFM with queues for class VaiBfm(metaclass=pyuvm.Singleton): """Valid-Accept Bfm""" @@ -32,7 +32,9 @@ class VaiBfm(metaclass=pyuvm.Singleton): self.driver_queue = Queue(maxsize=1) self.in_monitor_queue = Queue(maxsize=0) self.out_monitor_queue = Queue(maxsize=0) - self.clock = Clock(self.dut.clk_i, 10, units="ns") # Create a 10 ns period clock + self.clock = Clock( + self.dut.clk_i, 10, units="ns" + ) # Create a 10 ns period clock cocotb.start_soon(self.clock.start()) # Reset coroutine @@ -82,9 +84,11 @@ class VaiBfm(metaclass=pyuvm.Singleton): while True: await RisingEdge(self.dut.clk_i) if self.dut.valid_i.value and self.dut.accept_o.value: - in_tuple = (self.dut.mode_i.value, - self.dut.key_i.value, - self.dut.data_i.value) + in_tuple = ( + self.dut.mode_i.value, + self.dut.key_i.value, + self.dut.data_i.value, + ) self.in_monitor_queue.put_nowait(in_tuple) # VAI output monitor @@ -95,7 +99,6 @@ class VaiBfm(metaclass=pyuvm.Singleton): out_data = self.dut.data_o.value self.out_monitor_queue.put_nowait(out_data) - # Launching the coroutines using start_soon def start_tasks(self): cocotb.start_soon(self.__driver()) @@ -115,4 +118,4 @@ class VaiBfm(metaclass=pyuvm.Singleton): # send_op puts the VAI input operation into the driver queue async def send_op(self, mode, key, data): - await self.driver_queue.put((mode, key, data)) \ No newline at end of file + await self.driver_queue.put((mode, key, data)) diff --git a/pyuvm_tests/tb_aes.py b/pyuvm_tests/tb_aes.py index 4d65191..ade6880 100644 --- a/pyuvm_tests/tb_aes.py +++ b/pyuvm_tests/tb_aes.py @@ -47,7 +47,6 @@ class ParallelTest(AesTest): # Virtual sequence that starts other sequences class TestAllSeq(uvm_sequence): - async def body(self): # get the sequencer handle seqr = ConfigDB().get(None, "", "SEQR") @@ -59,7 +58,6 @@ class TestAllSeq(uvm_sequence): # Running encryption and decryption sequences in parallel class TestAllParallelSeq(uvm_sequence): - async def body(self): seqr = ConfigDB().get(None, "", "SEQR") enc_rand_seq = EncRandSeq("enc_random") @@ -71,7 +69,6 @@ class TestAllParallelSeq(uvm_sequence): # Sequence item which holds the stimuli for one operation class AesSeqItem(uvm_sequence_item): - def __init__(self, name, mode, key, data): super().__init__(name) self.mode = mode @@ -79,7 +76,11 @@ class AesSeqItem(uvm_sequence_item): self.data = data def __eq__(self, other): - same = self.mode == other.mode and self.key == other.key and self.data == other.data + same = ( + self.mode == other.mode + and self.key == other.key + and self.data == other.data + ) return same def __str__(self): @@ -90,7 +91,6 @@ class AesSeqItem(uvm_sequence_item): # Abstract basis sequence class # set_operands() has to be implemented by class that inherits from this class class BaseSeq(uvm_sequence): - async def body(self): self.cr = constraints() for _ in range(20): @@ -143,7 +143,6 @@ class Driver(uvm_driver): class Scoreboard(uvm_component): - def build_phase(self): self.input_fifo = uvm_tlm_analysis_fifo("input_fifo", self) self.output_fifo = uvm_tlm_analysis_fifo("output_fifo", self) @@ -171,12 +170,16 @@ class Scoreboard(uvm_component): else: reference = aes.decrypt(data.buff) if result.buff == reference: - self.logger.info(f"PASSED: {Mode(mode).name} {data.hex()} with key " - f"{key.hex()} = {result.hex()}") + self.logger.info( + f"PASSED: {Mode(mode).name} {data.hex()} with key " + f"{key.hex()} = {result.hex()}" + ) else: - self.logger.error(f"FAILED: {Mode(mode).name} {data.hex()} with key " - f"{key.hex()} = 0x{result.hex()}, " - f"expected {reference.hex()}") + self.logger.error( + f"FAILED: {Mode(mode).name} {data.hex()} with key " + f"{key.hex()} = 0x{result.hex()}, " + f"expected {reference.hex()}" + ) self.passed = False def report_phase(self): @@ -201,12 +204,10 @@ class Monitor(uvm_component): # Coverage collector and checker class Coverage(uvm_subscriber): - def start_of_simulation_phase(self): self.cg = covergroup() try: - self.disable_errors = ConfigDB().get( - self, "", "DISABLE_COVERAGE_ERRORS") + self.disable_errors = ConfigDB().get(self, "", "DISABLE_COVERAGE_ERRORS") except UVMConfigItemNotFound: self.disable_errors = False @@ -217,19 +218,17 @@ class Coverage(uvm_subscriber): def report_phase(self): if not self.disable_errors: if self.cg.get_coverage() != 100.0: - self.logger.warning( - f"Functional coverage incomplete.") + self.logger.warning("Functional coverage incomplete.") else: self.logger.info("Covered all operations") - with open('results/tb_aes_fcover.txt', 'a', encoding='utf-8') as f: + with open("results/tb_aes_fcover.txt", "a", encoding="utf-8") as f: f.write(get_coverage_report(details=True)) - vsc.write_coverage_db('results/tb_aes_fcover.xml') + vsc.write_coverage_db("results/tb_aes_fcover.xml") # AES test bench environment # Creates instances of components and connects them class AesEnv(uvm_env): - def build_phase(self): self.seqr = uvm_sequencer("seqr", self) ConfigDB().set(None, "*", "SEQR", self.seqr)