vendor.*: fix [io]_domain propagation when creating buffers.

Closes #1347.
This commit is contained in:
Wanda 2024-05-05 04:42:13 +02:00 committed by Catherine
parent 9e82d54302
commit 25c3531e93
4 changed files with 42 additions and 14 deletions

View file

@ -475,9 +475,13 @@ class AlteraPlatform(TemplatedPlatform):
if isinstance(buffer, io.Buffer):
result = IOBuffer(buffer.direction, buffer.port)
elif isinstance(buffer, io.FFBuffer):
result = FFBuffer(buffer.direction, buffer.port)
result = FFBuffer(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif isinstance(buffer, io.DDRBuffer):
result = DDRBuffer(buffer.direction, buffer.port)
result = DDRBuffer(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
else:
raise TypeError(f"Unsupported buffer type {buffer!r}") # :nocov:
if buffer.direction is not io.Direction.Output:

View file

@ -543,9 +543,13 @@ class GowinPlatform(TemplatedPlatform):
if isinstance(buffer, io.Buffer):
result = IOBuffer(buffer.direction, buffer.port)
elif isinstance(buffer, io.FFBuffer):
result = FFBuffer(buffer.direction, buffer.port)
result = FFBuffer(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif isinstance(buffer, io.DDRBuffer):
result = DDRBuffer(buffer.direction, buffer.port)
result = DDRBuffer(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
else:
raise TypeError(f"Unsupported buffer type {buffer!r}") # :nocov:
if buffer.direction is not io.Direction.Output:

View file

@ -998,18 +998,28 @@ class LatticePlatform(TemplatedPlatform):
result = IOBuffer(buffer.direction, buffer.port)
elif isinstance(buffer, io.FFBuffer):
if self.family in ("ecp5", "machxo2"):
result = FFBufferECP5(buffer.direction, buffer.port)
result = FFBufferECP5(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif self.family == "nexus":
result = FFBufferNexus(buffer.direction, buffer.port)
result = FFBufferNexus(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
else:
raise NotImplementedError # :nocov:
elif isinstance(buffer, io.DDRBuffer):
if self.family == "ecp5":
result = DDRBufferECP5(buffer.direction, buffer.port)
result = DDRBufferECP5(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif self.family == "machxo2":
result = DDRBufferMachXO2(buffer.direction, buffer.port)
result = DDRBufferMachXO2(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif self.family == "nexus":
result = DDRBufferNexus(buffer.direction, buffer.port)
result = DDRBufferNexus(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
else:
raise NotImplementedError # :nocov:
else:

View file

@ -1168,16 +1168,26 @@ class XilinxPlatform(TemplatedPlatform):
if isinstance(buffer, io.Buffer):
result = IOBuffer(buffer.direction, buffer.port)
elif isinstance(buffer, io.FFBuffer):
result = FFBuffer(buffer.direction, buffer.port)
result = FFBuffer(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif isinstance(buffer, io.DDRBuffer):
if self.family in ("virtex2", "virtex2p", "spartan3"):
result = DDRBufferVirtex2(buffer.direction, buffer.port)
result = DDRBufferVirtex2(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif self.family in ("spartan3e", "spartan3a", "spartan3adsp", "spartan6"):
result = DDRBufferSpartan3E(buffer.direction, buffer.port)
result = DDRBufferSpartan3E(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif self.family in ("virtex4", "virtex5", "virtex6", "series7"):
result = DDRBufferVirtex4(buffer.direction, buffer.port)
result = DDRBufferVirtex4(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
elif self.family in ("ultrascale", "ultrascaleplus"):
result = DDRBufferUltrascale(buffer.direction, buffer.port)
result = DDRBufferUltrascale(buffer.direction, buffer.port,
i_domain=buffer.i_domain,
o_domain=buffer.o_domain)
else:
raise TypeError(f"Family {self.family} doesn't implement DDR buffers")
else: