예제 #1
0
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
예제 #2
0
파일: edif.py 프로젝트: RP7/migen
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
예제 #3
0
파일: iobuf.py 프로젝트: nakengelhardt/mist
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)
예제 #4
0
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()]
예제 #5
0
파일: edif.py 프로젝트: RP7/migen
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
예제 #6
0
파일: edif.py 프로젝트: fallen/migen
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
예제 #7
0
파일: edif.py 프로젝트: tmbinc/migen
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
예제 #8
0
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