引用:https://www.cnblogs.com/YangGuangPu/p/11478487.html
最近在把Quartus Prime 15.1的工程移植到Vivado 2019.1,需要改變的地方還是很多的,先記一下差分信號在FPGA中的收發管腳定義和配置。以LVDS信號為例吧。
在7 Series FPGA & ZYNQ-7000 All Programmable SoC Library Guide for HDL Design(UG768)和7 Series FPGA SelectIO Resource(UG471)文檔里面給出了HDL文件進行管腳分配的辦法:
用OBUFDS原語(Primitive)可以進行單端轉差分輸出,其實使用該原語就是在FPGA IO Bank使用了一個LVDS發送器。
對應的,用IBUFDS原語可以進行差分信號的接收,該原語在IO Bank使用了一個LVDS接收器。
在Vivado環境中Flow Navigator --- PROJECT MANAGER --- Language Templates可以找到,上述原語分別如下:
OBUFDS
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 );
IBUFDS
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版本請自行實驗吧。
從語法上看,上面的原語例化了LVDS發送器和接收器,其中I端口是輸入,IB端口是I的互補差分信號輸入,O端口是輸出,OB端口是O端口的互補差分輸出。
在模塊名和例化名之間,還有警號井號#帶領的一些參數,這些都是和差分收發器具體實現相關的參數,比如具體的IO電平規格(LVDS,DIFF_HSTL等等),輸出差分信號的壓擺率(高/低),接收器端內部負載電阻使能,降低接收器的能耗等參數。
***************************************************************************************************************************************************************************************
和Quartus環境中的差分IO配置相比,Xilinx中的設計過程中需要在HDL文件里面多加東西,增加了嚴謹性但是失去了一定的方便性:)