def _generate_ios(f, ios, ns): outs = list_special_ios(f, False, True, False) inouts = list_special_ios(f, False, False, True) r = [] for io in ios: direction = "OUTPUT" if io in outs else "INOUT" if io in inouts else "INPUT" r.append(_Port(name=ns.get_name(io), direction=direction)) return r
def add_iobufs(f, ios): for tri in f.specials: if isinstance(tri, Tristate): f.specials.add(Instance("IOBUF", i_I=tri.o, i_T=~tri.oe, o_O=tri.i, io_IO=tri.target)) f.specials.remove(tri) outs = ios & (list_targets(f) | list_special_ios(f, False, True, False)) inouts = ios & (list_special_ios(f, False, False, True)) ins = ios - outs - inouts bufferedios, iobufs = _build_iobufs(ins, outs) _replace_iosigs(f, bufferedios) f.specials.update(iobufs)
def lower_processes(f, ios): # gets called after synthesize_fd, so sync is already empty sd = OrderedDict() sped = list_special_ios(f, False, True, True) for s in list_signals(f): if s not in sped: sd[s] = s.reset _build_conditional_expr(None, f.comb, sd) for s in ios: if s in sd and sd[s] == s.reset: del sd[s] f.comb = [k.eq(v) for k, v in sd.items()]
def convert(f, ios, cell_library, vendor, device, name="top", return_ns=False): if not isinstance(f, _Fragment): f = f.get_fragment() if f.comb != [] or f.sync != {}: raise ValueError("Edif conversion can only handle synthesized fragments") if ios is None: ios = set() cells = _generate_cells(f) ns = build_namespace(list_special_ios(f, True, True, True)) instances = _generate_instances(f, ns) inouts = _generate_ios(f, ios, ns) connections = _generate_connections(f, ios, ns) r = _write_edif(cells, inouts, instances, connections, cell_library, name, device, vendor) if return_ns: return r, ns else: return r
def convert(f, ios, cell_library, vendor, device, name="top"): if not isinstance(f, _Fragment): f = f.get_fragment() if f.comb != [] or f.sync != {}: raise ValueError("EDIF conversion can only handle synthesized fragments") if ios is None: ios = set() cells = _generate_cells(f) ns = build_namespace(list_special_ios(f, True, True, True)) instances = _generate_instances(f, ns) inouts = _generate_ios(f, ios, ns) connections = _generate_connections(f, ios, ns) src = _write_edif(cells, inouts, instances, connections, cell_library, name, device, vendor) r = ConvOutput() r.set_main_source(src) r.ns = ns return r
def convert(f, ios, cell_library, vendor, device, name="top", return_ns=False): if not isinstance(f, _Fragment): f = f.get_fragment() if f.comb != [] or f.sync != {}: raise ValueError( "Edif conversion can only handle synthesized fragments") if ios is None: ios = set() cells = _generate_cells(f) ns = build_namespace(list_special_ios(f, True, True, True)) instances = _generate_instances(f, ns) inouts = _generate_ios(f, ios, ns) connections = _generate_connections(f, ios, ns) r = _write_edif(cells, inouts, instances, connections, cell_library, name, device, vendor) if return_ns: return r, ns else: return r
def convert(f, ios, cell_library, vendor, device, name="top"): if not isinstance(f, _Fragment): f = f.get_fragment() if f.comb != [] or f.sync != {}: raise ValueError( "EDIF conversion can only handle synthesized fragments") if ios is None: ios = set() cells = _generate_cells(f) ns = build_namespace(list_special_ios(f, True, True, True)) instances = _generate_instances(f, ns) inouts = _generate_ios(f, ios, ns) connections = _generate_connections(f, ios, ns) src = _write_edif(cells, inouts, instances, connections, cell_library, name, device, vendor) r = ConvOutput() r.set_main_source(src) r.ns = ns return r