Ejemplo n.º 1
0
class SVRandSocket(RandBase):
    @inject
    def __init__(self, top, cons=Inject('sim/svrand/constraints')):
        basedir = os.path.dirname(__file__)
        self.tenv = TemplateEnv(basedir)
        self.tenv.cons = self.tenv.load(basedir, 'svrand_cons.j2').module

        super().__init__(top, cons)

    def create_type_cons(self, desc={}):
        return find_tcon_resolver(desc, self.tenv)

    def before_setup(self, sim):
        basedir = os.path.dirname(__file__)
        tenv = TemplateEnv(basedir)

        self.create_svrand_top()
        register_intf(SVServerModule(self.outdir, self.constraints, tenv))

        for c in self.constraints:
            c.index = register_intf(SVServerIntf())

        self.conn = reg['sim/svsock/server']
        self.send_cmd = self.conn.send_cmd
        self.dtype_recv = self.conn.dtype_recv

    def parse_name(self, name):
        for c in self.constraints:
            if c.name == name:
                return c.index, c.dtype

    def send_req(self, index, dtype):
        self.send_cmd(CMD_READ | index)
        return self.dtype_recv(dtype)

    def get_rand(self, name):
        index, dtype = self.parse_name(name)
        data = self.send_req(index, dtype)
        return data

    def create_svrand_top(self):
        base_addr = os.path.dirname(__file__)
        env = jinja2.Environment(loader=jinja2.FileSystemLoader(base_addr),
                                 trim_blocks=True,
                                 lstrip_blocks=True)

        context = {
            'tcons': self.constraints,
        }

        res = env.get_template('svrand_top.j2').render(context)
        save_file('svrand_top.sv', self.outdir, res)

        # custom classes
        for con in self.constraints:
            if con.cls == 'qenvelope':
                context = {'tcon': con}
                res = env.get_template('qenvelope.j2').render(context)
                save_file(f'qenvelope_{con.name}.sv', self.outdir, res)
Ejemplo n.º 2
0
    def setup(self):
        basedir = os.path.dirname(__file__)
        tenv = TemplateEnv(basedir)
        tenv.snippets = tenv.load(basedir, 'svsock_intf.j2').module

        for cp in self.in_cosim_ports:
            sock_id = register_intf(SVServerIntf(cp.port, tenv))
            self.handlers[cp.port.basename] = SimSocketInputDrv(cp.port, sock_id)

        for p in self.gear.out_ports:
            sock_id = register_intf(SVServerIntf(p, tenv))
            self.handlers[p.basename] = SimSocketOutputDrv(p, sock_id)

        register_intf(SVServerModule(self.rtl_node, tenv, self.srcdir, rst=self.rst))

        self.conn = reg['sim/svsock/server']
        self.send_cmd = self.conn.send_cmd

        super().setup()
Ejemplo n.º 3
0
def load_jenv():
    jenv = TemplateEnv(os.path.dirname(__file__))
    jenv.snippets = jenv.load(jenv.basedir, 'snippet.j2').module
    return jenv