本篇文章为个人学习记录,欢迎讨论更正。
FPGA的顶层信号,定义为input/output的管脚,编译器会自动分配ibuf/obuf,但是定义为inout的信号由于需要额外的控制信号来控制输入,输出,高阻三个状态,所以需要手动分配,详细的应用方法如下:
在Language Template中能找到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 (
.O(O), // Buffer output
.IO(IO), // Buffer inout port (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input, high=input, low=output
);
1、当外部端口信号输入进FPGA内部逻辑时:
.O() : 括号内填写从inout口输入到FPGA内部的,供用户在内部逻辑使用的逻辑信号名。
.IO():括号内填写顶层的inout端口信号名。
.I() :括号内填写内部逻辑需要送至外部端口的信号(此时为高阻)
.T() : 括号内填写三态的控制信号,此时填写“1”,表示外部输入有效, .O() 接口将外部IO端口的信号引入逻辑; // 3-state enable input, high=input(外部信号输入内部有效), low=output(内部信号输出到外部有效)
2、当内部FPGA内部逻辑信号输出到外部inout端口时:
.O() : 括号内填写从inout口输入到FPGA内部的,供用户在内部逻辑使用的逻辑信号名。(此时为高阻)
.IO():括号内填写顶层的inout端口信号名。
.I() :括号内填写内部逻辑需要送至外部端口的信号
.T() : 括号内填写三态的控制信号,此时填写“0”,表示内部信号输出有效, .IO() 接口将内部, .I() 接口的送入信号发送到外部; // 3-state enable input, high=input(外部信号输入内部有效), low=output(内部信号输出到外部有效)