来源:FPGA从入门到跑路
1.输入信号
时钟单端
时钟差分
单端信号
差分信号
inputclk,//时钟 inputclk_P,//差分时钟+端 inputclk_N,//差分时钟-端 inputDin_S,//单端信号输入 inputDin_D_P,//差分信号+端 inputDin_D_N,//差分信号-端
2.输出信号
时钟单端
时钟差分
单端信号
差分信号
outputclk_O,//时钟 outputclk_O_P,//差分时钟+端 outputclk_O_N,//差分时钟-端 outputDout_S,//单端信号输入 outputDout_D_P,//差分信号+端 outputDout_D_N//差分信号-端
3.双向信号端口
inout是可以输入也可以输出的引脚,只能由wire型网线驱动。
inoutDataBus,//双向信号
当inout作输入引脚时需要将此引脚置为高阻态z。inout端口的实现是使用三态门。

inout端口的实现
assignDataBus=control?'bz:DataOut;
inout端口DataBus作为输出的时候值为DataOut,作为输入时为高阻态。
4.IO相关原语
输入:
IBUF
输入缓冲器。
单端输入信号的处理举例:
wireDin; IBUF#( .IOSTANDARD("DEFAULT")//SpecifytheinputI/Ostandard )IBUF_Din( .O(Din),//Bufferoutput .I(Din_S)//Bufferinput(connectdirectlytotop-levelport) );
IBUFDS
专用差分输入时钟缓冲器(Dedicated Differential Signaling Input Buffer with Selectable I/O Interface)。将差分时钟转换成单端时钟作为全局时钟,需要添加例化此原语。IBUFDS是一个输入缓冲器,支持低压差分信号(如LVCMOS、LVDS等)。在IBUFDS中,一个电平接口用两个独特的电平接口(I和IB)表示。一个可以认为是主信号,另外一个可以认为是从信号。主信号和从信号是同一个逻辑信号,但是相位相反。

IBUFDS
使用方式如下:
IBUFDS#( .DIFF_TERM("FALSE"),//DifferentialTermination .IBUF_LOW_PWR("TRUE"),//Lowpower="TRUE",Highestperformance="FALSE" .IOSTANDARD("DEFAULT")//SpecifytheinputI/Ostandard )IBUFDS_inst( .O(O),//Bufferoutput .I(I),//Diff_pbufferinput(connectdirectlytotop-levelport) .IB(IB)//Diff_nbufferinput(connectdirectlytotop-levelport) );
IBUFG
输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错。 IBUFG支持AGP、CTT、GTL、GTLP、HSTL、LVCMOS、LVDCI、LVDS、LVPECL、LVTTL、PCI、PCIX和 SSTL等多种格式的IO标准。
IBUFGDS
IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时,必须使用IBUFGDS作为全局时钟输入缓冲。IBUFG支持BLVDS、LDT、LVDSEXT、LVDS、LVPECL和ULVDS等多种格式的IO标准。
IDDR2
后面单独介绍。
双向:
IOBUF

IOBUF
IOBUF由一个OBUFT和一个IBUF组成。

OBUFT
OBUFT是三态输出缓冲器,其结构和真值表如下图所示,可以看到,当T为1时,输出是高阻态。当T为0时,输出与输入结果相同。

OBUFT真值表
使用双向信号端口时,使用此原语和使用上面第3部分的三态门效果相同。
assignDataBus=control?'bz:DataOut;
IOBUFIOBUF( .I(DataIn), .O(DataOut), .T(control), .IO(DataBus) );
输出:
OBUF
输出缓冲器。使用方式如下:
wireDout;
OBUF#(
.DRIVE(12),//Specifytheoutputdrivestrength
.IOSTANDARD("DEFAULT"),//SpecifytheoutputI/Ostandard
.SLEW("SLOW")//Specifytheoutputslewrate
)OBUF_inst(
.O(Dout_S),//Bufferoutput(connectdirectlytotop-levelport)
.I(Dout)//Bufferinput
);
OBUFDS
差分输出时钟缓冲器(Differential Signaling Output Buffer with Selectable I/O Interface),将单端信号转换成差分信号。OBUFDS是一个输出缓冲器,支持低压差分信号。OBUFDS隔离出了内电路并向芯片上的信号提供驱动电流。它的输出用O和OB两个独立接口表示。一个可以认为是主信号,另外一个可以认为是从信号。主信号和从信号是同一个逻辑信号,但是相位相反。

OBUFDS示意图
使用方式如下:
OBUFDS#(
.IOSTANDARD("DEFAULT"),//SpecifytheoutputI/Ostandard
.SLEW("SLOW")//Specifytheoutputslewrate
)OBUFDS_inst(
.O(O),//Diff_poutput(connectdirectlytotop-levelport)
.OB(OB),//Diff_noutput(connectdirectlytotop-levelport)
.I(I)//Bufferinput
);
IBUFDS、IBUFGDS 和 OBUFDS 真值表
ODDR2
后面单独介绍。
5.举例
单端输入时钟的处理——全局时钟:
wireclk_in;
IBUFG#(
.IOSTANDARD("DEFAULT")
)IBUFG_CLK_S(
.O(clk_in),//Clockbufferoutput
.I(clk)//Clockbufferinput(connectdirectlytotop-levelport)
);
差分输入时钟的处理——全局时钟,以LVDS为例子
wireclk_in_D;
IBUFGDS#(
.DIFF_TERM(“TRUE"),//DifferentialTermination
.IOSTANDARD("LVDS_25")//SpecifiestheI/Ostandardforthisbuffer
)IBUFGDS_inst(
.O(clk_in_D),//Clockbufferoutput
.I(clk_P),//Diff_pclockbufferinput
.IB(clk_N)//Diff_nclockbufferinput
);
差分输入信号的处理 ,以LVDS为例子
wireDin_D;
IBUFDS#(
.DIFF_TERM("TRUE"),//DifferentialTermination
.IOSTANDARD("LVDS_25")//SpecifytheinputI/Ostandard
)IBUFDS_inst(
.O(Din_D),//Bufferoutput
.I(Din_D_P),//Diff_pbufferinput(connectdirectlytotop-levelport)
.IB(Din_D_N)//Diff_nbufferinput(connectdirectlytotop-levelport)
);
更多相关内容,或者想要深入学习,建议去看UG471。
-
FPGA
+关注
关注
1656文章
22297浏览量
630455 -
输入输出
+关注
关注
0文章
44浏览量
11043 -
输入信号
+关注
关注
0文章
558浏览量
13107
原文标题:FPGA的输入输出处理
文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
对于IO空间映射在存储空间的结构,输入输出处理介绍
一文详解FPGA编程技巧输入输出偏移约束
什么是输入输出模块_输入输出模块有什么作用
STM32的8种GPIO输入输出模式
GPIO通用输入输出

详解FPGA的输入输出处理
评论