在FPGA设计开发中,很多场合会遇到同一根信号既可以是输入信号,又可以是输出信号,即IO类型(Verilog定义成inout)。
对于inout型的信号,我们既可以使用FPGA原语来实现,也可以使用Verilog代码来实现。下面将介绍在Xilinx 7系列FPGA上两种实现方式的差别和注意点。
不管哪种方式实现IO功能,从编译结果看都会调用IOBUF原语,为此,我们先来看一下IOBUF的结构,如下图所示。
1.FPGA原语实现
首先,我们编写的代码如下:
1`define PRIMITIVE 2 3 module io_buf( 4 input T , 5 input I , 6 output O , 7 inout IO 8 ); 9 10 `ifdef PRIMITIVE 11 IOBUF #( 12 .DRIVE (12 ), // Specify the output drive strength 13 .IBUF_LOW_PWR ("TRUE" ), // Low Power - "TRUE", High Performance = "FALSE" 14 .IOSTANDARD ("DEFAULT" ), // Specify the I/O standard 15 .SLEW