FPGA_单引脚输入输出-三态
以常见的I2C协议通讯方式讲解,SDA线既可以接收数据也可以发送数据, I2C 发送写控制命令,在空闲状态时,我们给 I2C 数据方向控制(sda_dir)信号赋值高电平,将 sda 总线的方向设置为主机 FPGA 输出数据。至于我们为什么要定义一个 I2C 数据方向控制信号,是因为数据线 SDA 是双向的,如下图所示,为了避免主机、从机同时操作数据线,可以在 FPGA内部可以使用三态门结构避免此事件发生。
sda_dir 表示 I2C 数据方向,为 1 时表示主机(FPGA)输出信号,为 0 时 FPGA 输出高阻态,表示释放控制权。如下图所示:
所以在 I2C 单次写操作,既每次 FPGA 输出数据时,在进行数据传输之前都需要先将 sda_dir 信号拉高,在数据传输完成后再将 sda_dir 信号拉低,将 SDA 总线的控制权交给从机发送响应数据。
实现方式
assign i2c_sda = i2C_sda_dir?(i2C_sda_out?1'1bz:0): 1'1bz;