vendor.xilinx_{7series,spartan6}: emit IBUF/OBUF explicitly.
Do this to make sure all buffers, tristate/differential or not, are instantiated the exact same way, and are subject to the same set of toolchain bugs, if any.
This commit is contained in:
		
							parent
							
								
									2a8e7bc6f2
								
							
						
					
					
						commit
						3fc5f170e6
					
				
							
								
								
									
										12
									
								
								nmigen/vendor/xilinx_7series.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								nmigen/vendor/xilinx_7series.py
									
									
									
									
										vendored
									
									
								
							|  | @ -234,7 +234,11 @@ class Xilinx7SeriesPlatform(TemplatedPlatform): | ||||||
|                             valid_xdrs=(0, 1, 2), valid_attrs=True) |                             valid_xdrs=(0, 1, 2), valid_attrs=True) | ||||||
|         m = Module() |         m = Module() | ||||||
|         i, o, t = self._get_xdr_buffer(m, pin, i_invert=True if invert else None) |         i, o, t = self._get_xdr_buffer(m, pin, i_invert=True if invert else None) | ||||||
|         m.d.comb += i.eq(port) |         for bit in range(len(port)): | ||||||
|  |             m.submodules += Instance("IBUF", | ||||||
|  |                 i_I=port[bit], | ||||||
|  |                 o_O=i[bit] | ||||||
|  |             ) | ||||||
|         return m |         return m | ||||||
| 
 | 
 | ||||||
|     def get_output(self, pin, port, attrs, invert): |     def get_output(self, pin, port, attrs, invert): | ||||||
|  | @ -242,7 +246,11 @@ class Xilinx7SeriesPlatform(TemplatedPlatform): | ||||||
|                             valid_xdrs=(0, 1, 2), valid_attrs=True) |                             valid_xdrs=(0, 1, 2), valid_attrs=True) | ||||||
|         m = Module() |         m = Module() | ||||||
|         i, o, t = self._get_xdr_buffer(m, pin, o_invert=True if invert else None) |         i, o, t = self._get_xdr_buffer(m, pin, o_invert=True if invert else None) | ||||||
|         m.d.comb += port.eq(o) |         for bit in range(len(port)): | ||||||
|  |             m.submodules += Instance("OBUF", | ||||||
|  |                 i_I=o[bit], | ||||||
|  |                 o_O=port[bit] | ||||||
|  |             ) | ||||||
|         return m |         return m | ||||||
| 
 | 
 | ||||||
|     def get_tristate(self, pin, port, attrs, invert): |     def get_tristate(self, pin, port, attrs, invert): | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								nmigen/vendor/xilinx_spartan6.py
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								nmigen/vendor/xilinx_spartan6.py
									
									
									
									
										vendored
									
									
								
							|  | @ -249,7 +249,11 @@ class XilinxSpartan6Platform(TemplatedPlatform): | ||||||
|                             valid_xdrs=(0, 1, 2), valid_attrs=True) |                             valid_xdrs=(0, 1, 2), valid_attrs=True) | ||||||
|         m = Module() |         m = Module() | ||||||
|         i, o, t = self._get_xdr_buffer(m, pin, i_invert=True if invert else None) |         i, o, t = self._get_xdr_buffer(m, pin, i_invert=True if invert else None) | ||||||
|         m.d.comb += i.eq(port) |         for bit in range(len(port)): | ||||||
|  |             m.submodules += Instance("IBUF", | ||||||
|  |                 i_I=port[bit], | ||||||
|  |                 o_O=i[bit] | ||||||
|  |             ) | ||||||
|         return m |         return m | ||||||
| 
 | 
 | ||||||
|     def get_output(self, pin, port, attrs, invert): |     def get_output(self, pin, port, attrs, invert): | ||||||
|  | @ -257,7 +261,11 @@ class XilinxSpartan6Platform(TemplatedPlatform): | ||||||
|                             valid_xdrs=(0, 1, 2), valid_attrs=True) |                             valid_xdrs=(0, 1, 2), valid_attrs=True) | ||||||
|         m = Module() |         m = Module() | ||||||
|         i, o, t = self._get_xdr_buffer(m, pin, o_invert=True if invert else None) |         i, o, t = self._get_xdr_buffer(m, pin, o_invert=True if invert else None) | ||||||
|         m.d.comb += port.eq(o) |         for bit in range(len(port)): | ||||||
|  |             m.submodules += Instance("OBUF", | ||||||
|  |                 i_I=o[bit], | ||||||
|  |                 o_O=port[bit] | ||||||
|  |             ) | ||||||
|         return m |         return m | ||||||
| 
 | 
 | ||||||
|     def get_tristate(self, pin, port, attrs, invert): |     def get_tristate(self, pin, port, attrs, invert): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 whitequark
						whitequark