国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Spartan-3 FPGA系列中高效PCB布局的LVDS信號倒相

發(fā)布時間:2010-11-7 20:08    發(fā)布者:techshare
關(guān)鍵詞: FPGA , LVDS , PCB , Spartan , 信號倒相
提要

在比較簡單的未大量使用過孔的四層或六層 PCB 上,可能很難對 LVDS 或 LVPECL 這類差分信號布線。其原因是,驅(qū)動器上的正極引腳必須驅(qū)動接收器上的相應(yīng)正極引腳,而負極引腳則必須驅(qū)動接收器的負極引腳。有時跡線以錯誤的方向結(jié)束,這實際上是向電路中添加了一個倒相器。本應(yīng)用指南說明 Spartan?- 3 FPGA 系列如何僅通過在接收器數(shù)據(jù)通路中加入一個倒相器即可避免大量使用過孔,并且在不要求 PCB 重新設(shè)計的情況下即可解決意外的 PCB 跡線交換問題。這項技術(shù)同樣適用于將 FPGA 用作驅(qū)動器的情況,而且交換跡線可使得在其他器件或連接器上的 PCB 布線更容易。

簡介

圖1 所示為一個 PCB 示例,其中正極引腳驅(qū)動接收器的正極引腳,負極引腳驅(qū)動接收器的負極引腳。如果引腳被意外交換,那么 PCB 跡線實際上就變成了一個倒相器,這就可能需要電路板重新設(shè)計。



圖2 說明 Spartan-3 FPGA 系列如何通過在接收器數(shù)據(jù)通路中加入必要的倒相器來解決這一問題。有此功能,設(shè)計人員便可以為簡化布線而任意交換跡線。因此,PCB 設(shè)計人員可以為實現(xiàn)最大信號完整性而自由布置差分對;所發(fā)生的任何交換都可以在 FPGA 內(nèi)部得到校正。如果使用 DCM (請參閱“異步輸入”),則這一布線的自由僅適用于數(shù)據(jù)線,而“不”適用于時鐘線。交換線路絕對不會損壞器件。

吸收倒相器示例

在兩種情況下,可以向前吸收倒相器:

1. 當直接驅(qū)動觸發(fā)器輸入時
2. 當驅(qū)動到邏輯函數(shù)中時

在第一種情況下,Spartan-3 FPGA 系列在 CLB 觸發(fā)器的直接 (D) 輸入路徑上有一個多路復用器(如圖3 所示)。此多路復用器在真實輸入信號和補充輸入信號之間進行選擇。它通過一個配置單元進行配置,該單元由加載到此器件中的比特流進行初始化。用戶在操作過程中不能訪問多路復用器。




在第二種情況下,倒相器直接就被吸收了。例如,如果一個執(zhí)行“B = "A”的倒相器后面緊跟著一個執(zhí)行“D = B 與 C”的與門,那么一種簡單的替代方式就是一個無倒相器的執(zhí)行“D ="A 與 C”的與門;換句話說,就邏輯的利用和延遲而言,倒相器吸收永遠是“自由”的。

這種倒相器吸收的機制也適用于 IOB 輸出觸發(fā)器。同樣,如果是為簡化 PCB 布局所需,這種吸收可以“自由”地在 FPGA 的輸出通路中加入倒相器。如果 FPGA 驅(qū)動某接插件,而此接插件帶有與此 FPGA 的 N 和 P 兩個 LVDS 輸出直接匹配的預定義引腳,則此機制可以起到幫助作用。

異步輸入

圖2 是可以考慮的最簡單的示例。接收到的經(jīng)過交換的 LVDS 信號將用在 FPGA 內(nèi)部的組合邏輯中。在此例中,只需將一個簡單的倒相器添加到代碼中。此倒相器的代碼以 VerilogVHDL語言表述如下:

Verilog: assign rx_input_fix = "rx_input;
VHDL: rx_input_fix <= not rx_input;

可以將此倒相器吸收到由輸入信號驅(qū)動的組合邏輯中,也可以將其吸收到 FPGA 內(nèi)部的某個觸發(fā)器的 D 輸入中,但不能將其吸收到 FPGA 的 IOB 內(nèi)的觸發(fā)器、DCM 或 BUFGMUX 時鐘緩沖器中。因此,引腳交換的靈活性無法用到將用于數(shù)據(jù)時鐘的時鐘信號上。如果上述時鐘只是系統(tǒng)的振蕩器,那么可以交換線路并且不需要再倒相,這樣做不會產(chǎn)生任何負面效應(yīng)。

圖4 所示示例中的輸入實際上是一條由“n”個信號對組成的總線。其中某些信號對是正確的,而其他信號對則為了方便而進行了交換。此例中,在設(shè)計中最好定義一個對應(yīng)這“n”個輸入的掩碼。該掩碼用來有選擇地反轉(zhuǎn)(事實上不包括“與”)那些需要校正的位,但不反轉(zhuǎn)接收無誤的位。在圖4 中,位 0 和 2 是正確的,而位 1 需要倒相。在代碼中處理校正的最好方式是使用生成環(huán),它們可以例化輸入緩沖器并且有選擇地逐位執(zhí)行倒相。





以下 Verilog 代碼用生成環(huán)來執(zhí)行接收倒相:
.
parameter [2:0] SWAP_MASK = 3'b010;
.
.
genvar i;
generate
for (i = 0; i <= 2; i = i + 1)
begin: loop0
IBUFDS
#(.IOSTANDARD("LVDS_25"), .IBUF_DELAY_VALUE("0"), .DIFF_TERM("FALSE"))
ibuf_d (.I(datain_p[ i]), .IB(datain_n[ i]), .O(rx_input[ i]));
assign rx_input_fix[ i] = rx_input[ i] ^ SWAP_MASK[ i];
end
endgenerate

以下 VHDL 代碼用生成環(huán)來執(zhí)行接收倒相:
.
constant SWAP_MASK : std_logic_vector(2 downto 0):= "010";
.
.
loop0: for i in 0 to 2 generate
ibuf_d: ibufds generic map
(IOSTANDARD => "LVDS_25", IBUF_DELAY_VALUE => "0", DIFF_TERM => FALSE)
port map
(i => datain_p(i), iB => datain_n(i), o => rx_input(i));
rx_input_fix(i) <= rx_input(i) xor SWAP_MASK(i);
end generate;

通過修改紅色的粗體字符,可以方便地將此機制擴展到不同的位寬。

IOB 輸入觸發(fā)器的同步使用

通常,輸入信號寄存在 IOB 觸發(fā)器中,因為高速數(shù)據(jù)傳輸是使用 LVDS 的最常見的原因。可使用下列技術(shù)之一來寄存數(shù)據(jù):

? 單數(shù)據(jù)速率 (SDR) 技術(shù),這種技術(shù)在 IOB 中只使用一個(通常是正沿觸發(fā)的)觸發(fā)器或者
? 雙數(shù)據(jù)速率 (DDR) 技術(shù),這種技術(shù)使用正沿和負沿都觸發(fā)的觸發(fā)器對輸入數(shù)據(jù)線進行采樣

在兩種情況下都不可能在輸入放大器和觸發(fā)器之間反轉(zhuǎn)輸入信號,因為 IOB 模塊中的觸發(fā)器沒有可倒相的輸入。倒相器需要添加到 IOB 輸入觸發(fā)器后,它們可以被吸收到其后的寄存邏輯或組合邏輯中。

SDR 示例

圖5 所示為 IOB 中帶有一個觸發(fā)器的 SDR 方案。




以下代碼說明針對相同生成環(huán)示例的 SDR 寄存情況。唯一的變化是增加了觸發(fā)器例示。
Verilog 語言代碼:
.
parameter [2:0] SWAP_MASK = 3'b010;
.
.
genvar i;
generate
for (i = 0; i <= 2; i = i + 1)
begin: loop0
IBUFDS#(.IOSTANDARD("LVDS_25"), .IFD_DELAY_VALUE("0"), .DIFF_TERM("FALSE"))
ibuf_d (.I(datain_p[ i]), .IB(datain_n[ i]), .O(rx_input[ i]));
FD fd_d (.C(clkin), .D(rx_input[ i]), .Q(rx_input_reg[ i]));
assign rx_input_fix[ i] = rx_input_reg[ i] ^ SWAP_MASK[ i];
end
endgenerate

VHDL 語言代碼:
.
constant SWAP_MASK : std_logic_vector(2 downto 0):= "010";
.
.
loop0: for i in 0 to 2 generate
ibuf_d: ibufds
generic map (IOSTANDARD => "LVDS_25", IFD_DELAY_VALUE => "0", DIFF_TERM => FALSE)
port map (i => datain_p(i), iB => datain_n(i), o => rx_input(i));
fd_d: fd port map (c => clkin, d => rx_input(i), q => rx_input_reg(i));
rx_input_fix(i) <= rx_input_reg(i) xor SWAP_MASK(i);
end generate;

通過修改紅色的粗體字符,可以方便地將此機制擴展到不同的位寬。

輸入 DDR 示例

圖 6 所示為接收 DDR 方案,其中每條輸入線生成兩條可能需要倒相的內(nèi)部數(shù)據(jù)線。對于Spartan-3E FPGA 的 DDR 輸入,推薦使用新型的 IDDR2 輸入觸發(fā)器結(jié)構(gòu)。這種結(jié)構(gòu)去除了從下降沿到下一上升沿的所有通路,從而可以使內(nèi)部邏輯更容易設(shè)計。要了解有關(guān) IDDR2 的詳情,請參閱 DS312 《Spartan-3E FPGA 系列數(shù)據(jù)手冊》。







以下代碼說明針對相同生成環(huán)示例的 DDR 寄存接收器情況。唯一的變化是增加了 Spartan-3E FPGA 的 IDDR2 例示。原 Spartan-3 器件需要略微不同的代碼,因為它不包含 IDDR2 結(jié)構(gòu)。
所附 ZIP 文件包含完整細節(jié)(請參閱“設(shè)計文件”)。

Verilog 語言代碼:
.
parameter [2:0] SWAP_MASK = 3'b010;
.
.
genvar i;
generate
for (i = 0; i <= 2; i = i + 1)
begin: loop0
IBUFDS#(.IOSTANDARD("LVDS_25"), .IFD_DELAY_VALUE("0"), .DIFF_TERM("FALSE"))
ibuf_d (.I(datain_p[ i]), .IB(datain_n[ i]), .O(rx_input[ i]));
IDDR2 #(.DDR_ALIGNMENT("C0")) fd_ioc(.C0(clkin), .C1(notclk), .D(rx_input[ i]),
.CE(1'b1), .R(1'b0), .S(1'b0), .Q0(rx_input_reg[i+3]),
.Q1(rx_input_reg[ i]));
assign rx_input_fix[ i] = rx_input_reg[ i] ^ SWAP_MASK[ i];
assign rx_input_fix[ i+3] = rx_input_reg[ i+3] ^ SWAP_MASK[ i];
end
endgenerate

VHDL 語言代碼:
.
constant SWAP_MASK : std_logic_vector(2 downto 0):= "010";
.
.
loop0: for i in 0 to 2 generate
ibuf_d : ibufds
generic map (IOSTANDARD => "LVDS_25", IFD_DELAY_VALUE => "0", DIFF_TERM => FALSE)
port map (i => datain_p(i), iB => datain_n(i), o => rx_input(i));
fd_d : iddr2
generic map (DDR_ALIGNMENT => "C0")
port map (c0 => clkin, c1 => notclock, d => rx_input(i), ce => '1', r => '0',
s => '0', q0 => rx_input_reg(i+3), q1 => rx_input_reg(i));
rx_input_fix(i) <= rx_input_reg(i) xor SWAP_MASK(i);
rx_input_fix(i+3) <= rx_input_reg(i+3) xor SWAP_MASK(i);

通過修改紅色的粗體字符,可以方便地將此機制擴展到不同的位寬。

在使用 DDR 技術(shù)時,位操作可能很重要。DDR 生成環(huán)示例生成一條總線,總線的低階位聚集在時鐘的下降沿,而其高階位則聚集在下一個上升沿。圖7 是 DDR 設(shè)計模擬運行的屏幕截圖,其中顯示了這種位集中現(xiàn)象。此模擬運行假設(shè)所有跡線都是正確的(即沒有進行引腳交換),以清楚地顯示具體位的結(jié)束位置。



輸出 DDR 示例

圖8 所示為發(fā)射器的 DDR 方案,其中每對發(fā)送數(shù)據(jù)線由 Spartan-3E FPGA 中的 ODDR2(在Spartan-3 FPGA 中是 FDDRRSE)機制進行多路復用。這種情況下,在與極性需要倒相的LVDS 輸出相關(guān)聯(lián)的每條線路中都增加了倒相器。因為這些倒相器在上述實現(xiàn)過程中被吸收到輸出觸發(fā)器中,所以它們不會改變電路的時序。




以下代碼說明生成環(huán)示例的發(fā)射器 DDR 寄存情形。原 Spartan-3 器件需要略微不同的代碼,因為它不包含 ODDR2 結(jié)構(gòu)。所附 ZIP 文件包含完整細節(jié)(請參閱“設(shè)計文件”)。

Verilog 語言代碼:

parameter [2:0] SWAP_MASK = 3'b010 ;
genvar i ;
generate
for (i = 0 ; i <= 2 ; i = i + 1)
begin : loop0
OBUFDS #(.IOSTANDARD("LVDS_25"))
obuf_d (.I(tx_output_reg[ i]), .O(dataout_p[ i]), .OB(dataout_n[ i]));
ODDR2 #(.DDR_ALIGNMENT("NONE")) fd_ioc (.C0(clkin), .C1(notclk),
.D0(tx_output_fix[ i+3]), .D1(tx_output_fix[ i]), .CE(1'b1), .R(1'b0),
.S(1'b0), .Q(tx_output_reg[ i])) ;
assign tx_output_fix[ i] = tx_output[ i] ^ SWAP_MASK[ i] ;
assign tx_output_fix[ i+3] = tx_output[ i+3] ^ SWAP_MASK[ i] ;
end
endgenerate

VHDL 語言代碼:

constant SWAP_MASK : std_logic_vector(2 downto 0) := "010" ;
loop0 : for i in 0 to 2 generate
ibuf_d : obufds generic map (IOSTANDARD => "LVDS_25")
port map (i => tx_output_reg(i), o => dataout_p(i), oB =>
dataout_n(i));
fd_d : oddr2 generic map (DDR_ALIGNMENT => "NONE")
port map (c0 => clkin, c1 => notclock, d0 => tx_output_fix(i),
d1 => tx_output_fix(i+3), ce => '1', r => '0', s => '0', q =>
tx_output_reg(i));
tx_output_fix(i) <= tx_output(i) xor SWAP_MASK(i) ;
tx_output_fix(i+3) <= tx_output(i+3) xor SWAP_MASK(i) ;
end generate ;

通過修改紅色的粗體字符,可以方便地將此機制擴展到不同的位寬。

如上所述,在使用 DDR 技術(shù)時,位操作可能很重要。DDR 生成環(huán)示例生成一條總線,總線的低階位在時鐘的下降沿上發(fā)送,而其高階位則在下一個上升沿上發(fā)送。

設(shè)計文件

本應(yīng)用指南介紹的各種接收器和發(fā)射器示例的設(shè)計文件是針對所有 Spartan-3 器件和
Spartan-3E 系列器件編寫的。可從 Xilinx 網(wǎng)站 (xapp491.zip) 獲得 Verilog 和 VHDL 兩種語言的設(shè)計文件。所附 readme.txt 文件提供了最新詳情。

結(jié)論

用 LVDS 進行設(shè)計時,有計劃地謹慎使用 Spartan-3 FPGA 系列資源,可以大幅度降低 PCB 布局的復雜性,同時可以提高整體電路板信號的完整性。對于器件中集成的 LVDS 接收器和LVDS 發(fā)射器來說也是如此,但輸入時鐘引腳除外;輸入時鐘引腳必須具有正確的極性。
本文地址:http://www.qingdxww.cn/thread-37120-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 我們是Microchip
  • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設(shè)計風險
  • 深度體驗Microchip自動輔助駕駛應(yīng)用方案——2025巡展開啟報名!
  • Cortex-M4外設(shè) —— TC&TCC結(jié)合事件系統(tǒng)&DMA優(yōu)化任務(wù)培訓教程
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99 久久99久久精品免观看 | 九九久久免费视频 | 欧美一级淫片漂亮的老师 | 日日噜噜夜夜狠狠视频欧美人 | 在线免费看黄的网站 | 第四色播日韩第一页 | 免费精品国产自产拍观看 | 日本不卡二 | 国产一级久久久久久毛片 | 欧美日韩不卡视频一区二区三区 | 天堂中文在线观看 | 欧美日韩一二 | 99久久免费精品国产免费 | 国产99视频精品免费视频免里 | 素人约啪 | 啦啦啦视频在线视频免费4 啦啦啦视频在线观看影院 啦啦啦社区手机在线视频免费视频 | 东方伊人免费在线观看 | 天天久久| 免费欧美黄色片 | 欧美日韩一区二区三区在线视频 | 青青久久精品国产免费看 | 免费一级毛片清高播放 | 国产三级网站在线观看 | 欧美 日韩 成人 | 黄色免费在线观看网站 | 亚洲国产日韩在线一区 | 日本男人天堂 | 国产在线观看第一页 | 日本欧美在线播放 | 欧美成人全部费免网站 | 一级做a爰片久久毛片图片 一级做a爰片久久毛片人呢 | 亚洲高清在线视频 | 日本免费一级片 | 456极品嫩模在线视频 | 亚洲天堂成人在线观看 | 国产天天色 | 久久综合影院 | 亚洲精品永久www忘忧草 | 午夜精品一区二区三区免费视频 | 久久久久国产精品美女毛片 | 日本大片aa特黄 |