最近在用FPGA调试一个器件时,发现在vivado中的block design里面,若有inout数据端口,若不加IOBUF,系统将不会生成三态门。只将其视为输出端口,在代码中挂高阻仍然会接收不到任何数据。IOBUF写法如下:
IOBUF #(
.DRIVE(12), // Specify the output drive strength
.IBUF_LOW_PWR("TRUE"), // Low Power - "TRUE", High Performance = "FALSE"
.IOSTANDARD("DEFAULT"), // Specify the I/O standard
.SLEW("SLOW") // Specify the output slew rate
) IOBUF_inst_io0 (
.O(pin_in[0]), // IO_pad输入。管脚经过IBUF缓冲输出到内部信号
.IO(pin[0]), // pad接口/管脚
.I(pin_out[0]), // 输出到IO_pad。内部信号经过OBUF缓冲到管脚
.T(x_writ_read) // 当IO_pad需要输入的时候,使能OBUF使其输出高组态 高有效
);
需要注意的是,上述IOBUF只对应一位宽数据。若inout口为16bit数据,则需例化16个上述的IOBUF。