在Xilinx FPGA Editor下查看工程中的一个输入接口dsp_cs_n的底层映射视图。如图1所示,从PAD到IBUF_inst到IMUX再到I(即最后的dsp_cs_n_IBUF)。这是Virtex器件的输入端口在默认情况下的一个输入路径。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
图1
下面再看在这个输入端口上添加了一个IBUF,例化如下:
IBUF #(
.IBUF_DELAY_VALUE("0"), // Specify the amount of added input delay for
// the buffer, "0"-"16" (Spartan-3E/3A only)
.IFD_DELAY_VALUE("AUTO"), // Specify the amount of added delay for input
// register, "AUTO", "0"-"8" (Spartan-3E/3A only)
.IOSTANDARD("DEFAULT") // Specify the input I/O standard
)IBUF_inst (
.O(dsp_cs_nr), // Buffer output
.I(dsp_cs_n) // Buffer input (connect directly to top-level port)
);
那么再看在添加了IBUF后的底层视图,如图2所示。从图2 来看,其实上面这个IBUF例化好像没起到任何变化。换句话说,也就是ISE默认情况下其实已经给输入PAD的路径上添加了一个IBUF。
图2
那么这个IBUF到底是什么,有什么作用呢?特权同学查看了ISE Help,解释如下:
An IBUF acts as a protection for the chip, shielding it from eventual current overflows.
那么,从上面这句话来看,IBUF其实应该是能够起到一个过流保护的作用,说得通俗些,也就是相当于接口隔离的作用吧。而对于对于前面例化的实例上看,Spartan-3E/3A器件还能够配置这个IBUF来进行一些输入的延时。特权同学没有用过也不知道实际效果如何。
另外,特权同学还看到了一段这样的关于I/O Buffer的叙述:
Specifies whether or not to infer input/output buffers on all top-level I/O ports of the design. The type of input/output buffer (IBUF, OBUF, OBUFT) inferred depends on how the port is defined and used in the design. The compiler adds I/O buffers only on ports that do not already have connections to I/O buffers that you instantiate in the design. I/O buffers are required on all top-level ports for the module before it can be implemented. When this property is set to False (checkbox is blank), you must either instantiate I/O buffers on all top-level ports in the design, or you must encapsulate the resulting netlist within a higher-level design that contains I/O buffers on all top-level ports before implementing the design. By default, this property is set to True (checkbox is checked).
这段话也印证了特权同学前面的推想。如图3所示,另外随意找了一个输出常0的PAD。其基本的路径OMUXàOUTMUXàOBUFàPAD也出现了OBUF。
图3
如图4所示,对于一个双向的PAD,相应的图3的OBUF就是图4的OBUFT,它的控制端就是双向口的方向控制端。
图4
对于FPGA的外部时钟输入PAD,它会默认经过一个IBUFG,这个IBUFG不是任何输入管脚都可以例化的(映射时会报错的),必须是输入到专用时钟输入管脚上的信号(一般是时钟),或者内部DLL的输出时钟才能使用的。并且从特权同学工程应用上发现,这个DLL输出的时钟如果要作为DLL的一个反馈信号,那么这个输出时钟就必须例化通过IBUFG(默认不会经过IBUFG的)后才能使用。
图5
用户1843194 2015-9-17 23:33
用户1767368 2015-7-9 20:45
用户417832 2013-4-8 10:54