最近在把Quartus Prime 15.1的工程移植到Vivado 2019.1,須要改變的地方仍是不少的,先記一下差分信號在FPGA中的收發管腳定義和配置。以LVDS信號爲例吧。ide
在7 Series FPGA & ZYNQ-7000 All Programmable SoC Library Guide for HDL Design(UG768)和7 Series FPGA SelectIO Resource(UG471)文檔裏面給出了HDL文件進行管腳分配的辦法:ui
用OBUFDS原語(Primitive)能夠進行單端轉差分輸出,其實使用該原語就是在FPGA IO Bank使用了一個LVDS發送器。spa
對應的,用IBUFDS原語能夠進行差分信號的接收,該原語在IO Bank使用了一個LVDS接收器。設計
在Vivado環境中Flow Navigator --- PROJECT MANAGER --- Language Templates能夠找到,上述原語分別以下:code
OBUFDSorm
OBUFDS #( .IOSTANDARD("DEFAULT"), // Specify the output I/O standard .SLEW("SLOW") // Specify the output slew rate ) OBUFDS_inst( .O(O), // Diff_p output (connect directly to top-level port) .OB(OB), // Diff_n output (connect directly to top-level port) .I(I) // Buffer input );
IBUFDSblog
IBUFDS #( .DIFF_TERM("FALSE"), // Differential Termination .IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest performance="FALSE" .IOSTANDARD("DEFAULT") // Specify the input I/O standard ) IBUFDS_inst( .O(O), // Buffer output .I(I), // Diff_p buffer input (connect directly to top-level port) .IB(IB) // Diff_n buffer input (connect directly to top-level port) );
上面只貼出了Verilog版本,VHDL版本請自行實驗吧。ci
從語法上看,上面的原語例化了LVDS發送器和接收器,其中I端口是輸入,IB端口是I的互補差分信號輸入,O端口是輸出,OB端口是O端口的互補差分輸出。文檔
在模塊名和例化名之間,還有井號#帶領的一些參數,這些都是和差分收發器具體實現相關的參數,好比具體的IO電平規格(LVDS,DIFF_HSTL等等),輸出差分信號的壓擺率(高/低),接收器端內部負載電阻使能,下降接收器的能耗等參數。input
***************************************************************************************************************************************************************************************
和Quartus環境中的差分IO配置相比,Xilinx中的設計過程當中須要在HDL文件裏面多加東西,增長了嚴謹性可是失去了必定的方便性:)