De acuerdo con los requisitos de colocación de pines en Intel Agilex® 7 FPGA Guía del usuario de E/S de propósito general y LVDS SERDES, cada grupo X4 DQ comparte las mismas señales de activación de OE, restablecimiento y reloj, por lo tanto no puede dividir las señales de activación de OE, Reset o Clock dentro de un grupo DQ x4. Dada la restricción, he aquí algunas consideraciones al colocar pines I2C.
1. se utiliza FPGA como maestro I2C, lo que requiere el modo multimaster:
(i) Una implementación típica de I2C está utilizando OE en SCL y SDA, como se muestra a continuación. Por lo tanto, no puede colocar SCL y SDA en el mismo grupo DQ x4.
asignar i2c_serial_scl_in = arduino_adc_scl;
asignar arduino_adc_scl = i2c_serial_scl_oe? 1'b0: 1'bz;
asignar i2c_serial_sda_in = arduino_adc_sda;
asignar arduino_adc_sda = i2c_serial_sda_oe? 1'b0: 1'bz;
(ii) Otra forma es utilizar GPIO Intel FPGA IP. Puede habilitar el consumo abierto para SCL y SDA, conectar ambos puertos OE para SCL y SDA a 1 (alto) y conectar las señales invertidas de las señales de control OE originales. De esta manera, puede evitar la restricción. A continuación, se muestra un ejemplo:
gpioip_scl gpioip (
.dout (i2c_serial_scl_in),
.cena (~i2c_serial_scl_oe),
.oe (1'b1),
.pad_io (arduino_adc_scl)
);
gpioip_sda gpioip (
.dout (i2c_serial_sda_in),
.cena (~i2c_serial_sda_oe),
.oe (1'b1),
.pad_io (arduino_adc_sda)
);
2. FPGA se utiliza como modo maestro I2C único:
SCL es un pin de salida sin OE. SDA es un pin bidireccional con OE.
3. FPGA se utiliza como esclavo I2C:
SCL es un pin de entrada sin OE. SDA es un pin bidireccional con OE.
En 2 y 3 anteriores, porque SCL no tiene OE,
- Se puede asignar un SCL y un SDA en el mismo grupo DQ x4
- Se pueden asignar varios SCL y un SDA en el mismo grupo DQ x4
- No se puede asignar varios SDA en el mismo grupo DQ x4
- Cuando se asigna varios SDA en el mismo grupo DQ x4, el uso de GPIO Intel FPGA IP como se mencionó anteriormente también es una solución alternativa.