build: efinix: EfinixTristateImpl: use GPIO Bus

use the gpio bus for Efinix Tristate implemenation.

Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
This commit is contained in:
Fin Maaß 2024-09-26 15:58:29 +02:00
parent e9a4b178ce
commit a825c61385
1 changed files with 26 additions and 22 deletions

View File

@ -134,27 +134,31 @@ class EfinixClkOutput(Module):
class EfinixTristateImpl(Module): class EfinixTristateImpl(Module):
def __init__(self, io, o, oe, i=None): def __init__(self, io, o, oe, i=None):
platform = LiteXContext.platform platform = LiteXContext.platform
nbits, sign = value_bits_sign(io) if len(io) == 1:
io_name = platform.get_pin_name(io)
for bit in range(nbits): io_pad = platform.get_pin_location(io)
io_name = platform.get_pin_name(io[bit]) io_prop = platform.get_pin_properties(io)
io_loc = platform.get_pin_location(io[bit]) else:
io_prop = platform.get_pin_properties(io[bit]) io_name = platform.get_pins_name(io)
io_o = platform.add_iface_io(io_name + "_OUT") io_pad = platform.get_pins_location(io)
io_oe = platform.add_iface_io(io_name + "_OE") io_prop = platform.get_pin_properties(io[0])
io_i = platform.add_iface_io(io_name + "_IN") io_prop_dict = dict(io_prop)
self.comb += io_o.eq(o >> bit) io_data_i = platform.add_iface_io(io_name + "_OUT")
self.comb += io_oe.eq(oe) io_data_o = platform.add_iface_io(io_name + "_IN")
io_data_e = platform.add_iface_io(io_name + "_OE")
self.comb += io_data_i.eq(o)
self.comb += io_data_e.eq(oe)
if i is not None: if i is not None:
self.comb += i[bit].eq(io_i) self.comb += i.eq(io_data_o)
block = { block = {
"type" : "GPIO", "type" : "GPIO",
"mode" : "INOUT", "mode" : "INOUT",
"name" : io_name, "name" : io_name,
"location" : [io_loc[0]], "location" : io_pad,
"properties" : io_prop "properties" : io_prop,
"size" : len(io),
"drive_strength" : io_prop_dict.get("DRIVE_STRENGTH", "4")
} }
platform.toolchain.ifacewriter.blocks.append(block) platform.toolchain.ifacewriter.blocks.append(block)
platform.toolchain.excluded_ios.append(platform.get_pin(io)) platform.toolchain.excluded_ios.append(platform.get_pin(io))