ตามข้อกําหนดการวางพินใน Intel Agilex® 7 FPGA คู่มือผู้ใช้ I/O และ LVDS SERDES อเนกประสงค์ แต่ละกลุ่ม x4 DQ จะแชร์สัญญาณ OE การรีเซ็ต และสัญญาณนาฬิกาเดียวกัน ดังนั้นคุณจึงไม่สามารถแยกสัญญาณเปิดใช้งาน OE รีเซ็ต หรือสัญญาณนาฬิกาภายในกลุ่ม x4 DQ ได้ เมื่อพิจารณาจากข้อจํากัด ต่อไปนี้เป็นข้อควรพิจารณาบางส่วนเมื่อวางพิน I2C
1. ใช้ FPGA เป็นมาสเตอร์ I2C ซึ่งต้องใช้โหมดหลายมาสเตอร์:
(i) การใช้งาน I2C โดยทั่วไปกําลังใช้ OE บน SCL และ SDA ตามที่แสดงด้านล่าง ดังนั้น คุณไม่สามารถวาง SCL และ SDA ไว้ในกลุ่ม x4 DQ เดียวกันได้
กําหนด i2c_serial_scl_in = arduino_adc_scl;
มอบหมาย arduino_adc_scl = i2c_serial_scl_oe ? 1'b0 : 1'bz;
มอบหมาย i2c_serial_sda_in = arduino_adc_sda;
กําหนด arduino_adc_sda = i2c_serial_sda_oe ? 1'b0 : 1'bz;
(ii) อีกวิธีหนึ่งคือการใช้ Intel FPGA IP GPIO คุณสามารถเปิดใช้งานการเปิดระบายน้ําสําหรับ SCL และ SDA เชื่อมต่อพอร์ต OE ทั้งสองพอร์ตสําหรับ SCL และ SDA ไปยัง 1 (สูง) และเชื่อมต่อสัญญาณคว่ําของสัญญาณควบคุม OE ดั้งเดิม ด้วยวิธีนี้คุณสามารถทํางานกับข้อจํากัดได้ ต่อไปนี้เป็นตัวอย่าง:
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 จะถูกใช้เป็นโหมดเดี่ยวต้นแบบ I2C:
SCL เป็นพินเอาต์พุตที่ไม่มี OE SDA เป็นพินสองทิศทางกับ OE
3. FPGA จะถูกใช้เป็น I2C Slave:
SCL เป็นพินอินพุตที่ไม่มี OE SDA เป็นพินสองทิศทางกับ OE
ใน 2 และ 3 ข้างต้น เนื่องจาก SCL ไม่มี OE
- สามารถกําหนด SCL และ SDA ในกลุ่ม x4 DQ เดียวกันได้
- สามารถกําหนด SCL หลายตัวและ SDA ได้ในกลุ่ม x4 DQ เดียวกัน
- ไม่สามารถกําหนด SDA หลายตัวในกลุ่ม x4 DQ เดียวกันได้
- เมื่อมีการกําหนด SDA หลายตัวในกลุ่ม x4 DQ เดียวกัน การใช้ Intel FPGA IP GPIO ตามที่กล่าวมาข้างต้นยังเป็นการแก้ไขปัญหา