In base ai requisiti di posizionamento dei pin in Intel Agilex® 7 FPGA guida utente di I/O di uso generale e LVDS SERDES, ogni gruppo DQ x4 condivide lo stesso segnale OE, reset e clock enable, pertanto non è possibile dividere i segnali OE, Reset o clock enable all'interno di un gruppo DQ x4. Dato il vincolo, ecco alcune considerazioni quando si posizionano i pin I2C.
1. FPGA viene utilizzato come master I2C, che richiede la modalità multi-master:
(i) Un'implementazione tipica di I2C sta utilizzando OE su SCL e SDA, come mostrato di seguito. Pertanto, non è possibile inserire SCL e SDA nello stesso gruppo DQ x4.
assegnare i2c_serial_scl_in = arduino_adc_scl;
assegnare arduino_adc_scl = i2c_serial_scl_oe ? 1'b0: 1'bz;
assegnare i2c_serial_sda_in = arduino_adc_sda;
assegnare arduino_adc_sda = i2c_serial_sda_oe ? 1'b0: 1'bz;
(ii) Un altro modo è utilizzare Intel FPGA IP GPIO. È possibile attivare lo scarico aperto per SCL e SDA, collegare entrambe le porte OE per SCL e SDA a 1 (alto) e collegare i segnali invertiti dei segnali di controllo OE originali. In questo modo, è possibile aggirare il vincolo. Di seguito è riportato un esempio:
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 viene utilizzato come modalità singola master I2C:
SCL è un pin di output senza OE. L'SDA è un pin bidirezionale con OE.
3. FPGA viene utilizzato come slave I2C:
SCL è un pin di input senza OE. L'SDA è un pin bidirezionale con OE.
In 2 e 3 sopra, perché SCL non ha OE,
- Un SCL e un SDA possono essere assegnati nello stesso gruppo DQ x4
- Più SCL e un SDA possono essere assegnati nello stesso gruppo DQ x4
- Non è possibile assegnare più SDA nello stesso gruppo DQ x4
- Quando più SDA sono assegnati nello stesso gruppo DQ x4, l'utilizzo di GPIO Intel FPGA IP come sopra indicato è anche una soluzione alternativa.