@@ -568,6 +568,10 @@ def get_io_buffer(self, buffer):
568568 raise TypeError ("iCE40 does not support bidirectional differential ports" )
569569 elif buffer .direction is io .Direction .Output :
570570 m = Module ()
571+ # Note that the non-inverting output pin is not driven the same way as a regular
572+ # output pin. The inverter introduces a delay, so for a non-inverting output pin,
573+ # an identical delay is introduced by instantiating a LUT. This makes the waveform
574+ # perfectly symmetric in the xdr=0 case.
571575 invert_lut = isinstance (buffer , io .Buffer )
572576 m .submodules .p = self ._get_io_buffer_single (buffer , port_p , invert_lut = invert_lut )
573577 m .submodules .n = self ._get_io_buffer_single (buffer , port_n , invert_lut = invert_lut )
@@ -578,7 +582,7 @@ def get_io_buffer(self, buffer):
578582 # differs between LP/HX and UP series:
579583 # * for LP/HX, z=0 is DPxxB (B is non-inverting, A is inverting)
580584 # * for UP, z=0 is IOB_xxA (A is non-inverting, B is inverting)
581- return self ._get_io_buffer_single (buffer , port_p , invert_lut = invert_lut )
585+ return self ._get_io_buffer_single (buffer , port_p )
582586 else :
583587 assert False # :nocov:
584588 elif isinstance (buffer .port , io .SingleEndedPort ):
0 commit comments