De acordo com os requisitos de colocação de pinos no guia de usuário de E/S e LVDS SERDES de 7 FPGA de uso geral, cada grupo de DQ x4 compartilha os mesmos sinais de OE, redefinição e habilitação do clock, portanto, você não pode dividir os sinais de EE, Redefinir ou ativar clock dentro de um grupo de DQ x4. Intel Agilex® Dada a restrição, aqui estão algumas considerações ao colocar pinos I2C.
1. FPGA é usado como mestre I2C, exigindo modo multi-mestre:
(i) Uma implementação típica de I2C está usando OE em SCL e SDA, conforme mostrado abaixo. Assim, você não pode colocar SCL e SDA no mesmo grupo de DQ x4.
atribuir i2c_serial_scl_in = arduino_adc_scl;
atribuir arduino_adc_scl = i2c_serial_scl_oe? 1'b0: 1'bz;
atribuir i2c_serial_sda_in = arduino_adc_sda;
atribuir arduino_adc_sda = i2c_serial_sda_oe? 1'b0: 1'bz;
(ii) Outra maneira é usar o GPIO Intel FPGA IP. Você pode habilitar o esvaziamento aberto para SCL e SDA, conectar ambas as portas OE para SCL e SDA a 1 (alta) e conectar os sinais invertidos dos sinais de controle de OE originais. Desta forma, você pode trabalhar em torno da restrição. A seguir, um exemplo:
gpioip gpioip_scl (
.dout (i2c_serial_scl_in),
.din (~i2c_serial_scl_oe),
.oe (1'b1),
.pad_io (arduino_adc_scl)
);
gpioip gpioip_sda (
.dout (i2c_serial_sda_in),
.din (~i2c_serial_sda_oe),
.oe (1'b1),
.pad_io (arduino_adc_sda)
);
2. FPGA é usado como modo único mestre I2C:
SCL é um pino de saída sem OE. SDA é um pino bidirecional com OE.
3. FPGA é usado como escravo I2C:
SCL é um pino de entrada sem OE. SDA é um pino bidirecional com OE.
Em 2 e 3 acima, porque a SCL não tem OE,
- Uma SCL e uma SDA podem ser atribuídas no mesmo grupo de DQ x4
- Vários SCL e um SDA podem ser atribuídos no mesmo grupo de DQ x4
- Vários SDA não podem ser atribuídos no mesmo grupo de DQ x4
- Quando vários SDA são atribuídos no mesmo grupo de DQ x4, o uso do GPIO Intel FPGA IP como mencionado acima também é uma solução alternativa.