Source code for wishbone_bfms.wb_target_bfm

'''
Created on Nov 21, 2020

@author: mballance
'''

import pybfms

[docs]@pybfms.bfm(hdl={ pybfms.BfmType.Verilog : pybfms.bfm_hdl_path(__file__, "hdl/wb_target_bfm.v"), pybfms.BfmType.SystemVerilog : pybfms.bfm_hdl_path(__file__, "hdl/wb_target_bfm.v"), }, has_init=True) class WbTargetBfm(): def __init__(self): self.busy = pybfms.lock() self.ack_ev = pybfms.event() self.addr_width = 0 self.data_width = 0 self.reset_ev = pybfms.event() self.is_reset = False self.responder = None
[docs] def set_responder(self, responder): self.responder = responder
@pybfms.import_task(pybfms.uint64_t,pybfms.uint8_t) def access_ack(self, dat, err): pass @pybfms.export_task(pybfms.uint64_t, pybfms.uint8_t, pybfms.uint8_t, pybfms.uint64_t) def _access_req(self, adr, we, sel, dat_w): if self.is_reset: if self.responder is not None: self.responder(self, adr, we, sel, dat_w) else: # Acknowledge as an error print("Note: no responder") self.access_ack(0xDEADBEEF, 1) else: print("Ignore request in reset") pass @pybfms.export_task(pybfms.uint32_t,pybfms.uint32_t) def _set_parameters(self, addr_width, data_width): self.addr_width = addr_width self.data_width = data_width @pybfms.export_task() def _reset(self): print("--> _reset") self.is_reset = True self.reset_ev.set() print("<-- _reset")