Zgodnie z wymaganiami dotyczącymi rozmieszczenia pinów w Intel Agilex® 7 FPGA ogólnego przeznaczenia we/wy oraz przewodniku użytkownika LVDS SERDES, każda grupa DQ x4 ma taki sam układ operacyjny, resetowanie i włączanie sygnałów zegara, dlatego nie można podzielić sygnałów OE, Resetuj lub zegara w grupie X4 DQ. Biorąc pod uwagę ograniczenie, przy umieszczaniu pinów I2C należy uwzględnić pewne aspekty.
1. FPGA jest używany jako element nadrzędny I2C, wymagający trybu wieloobserwowego:
(i) Typowa implementacja I2C wykorzystuje system operacyjny (OE) zarówno na SCL, jak i SDA, jak pokazano poniżej. W związku z tym nie można umieścić SCL i SDA w tej samej grupie DQ x4.
przypisaj i2c_serial_scl_in = arduino_adc_scl;
przypisaj arduino_adc_scl = i2c_serial_scl_oe? 1'b0: 1'bz;
przypisaj i2c_serial_sda_in = arduino_adc_sda;
przypisać arduino_adc_sda = i2c_serial_sda_oe? 1'b0: 1'bz;
(ii) Innym sposobem jest wykorzystanie Intel FPGA IP GPIO. Można włączyć open-drain na potrzeby SCL i SDA, połączyć oba porty OE dla SCL i SDA z 1 (wysokie) oraz podłączyć inwersje oryginalnych sygnałów sterowania OE. W ten sposób można obejść to ograniczenie. Poniżej postępuje przykład:
gpioip_scl gpioip (
.dout (i2c_serial_scl_in),
.din (~i2c_serial_scl_oe),
.oe (1'b1),
.pad_io (arduino_adc_scl)
);
gpioip_sda gpioip (
.dout (i2c_serial_sda_in),
.din (~i2c_serial_sda_oe),
.oe (1'b1),
.pad_io (arduino_adc_sda)
);
2. FPGA jest używany jako tryb nadrzędny I2C w pojedynczym trybie:
SCL to pin wyjściowy bez OE. SDA to dwukierunkowy pin z OE.
3. FPGA jest używany jako element podrzędny I2C:
SCL to pin wejściowy bez OE. SDA to dwukierunkowy pin z OE.
W 2 i 3 powyżej, ponieważ SCL nie ma OE,
- SCL i SDA można przypisać w tej samej grupie DQ x4
- Wiele SCL i SDA można przypisać w tej samej grupie DQ x4
- Nie można przypisać wielu dysków SDA w tej samej grupie DQ x4
- W przypadku, gdy wiele SDA jest przypisanych do tej samej grupy DQ x4, zastosowanie Intel FPGA IP GPIO, jak wspomniano powyżej, również jest obejściem.