<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Spartan-3 FPGA系列中高效PCB布局的LVDS信號(hào)倒相

          Spartan-3 FPGA系列中高效PCB布局的LVDS信號(hào)倒相

          作者:Nick Sawyer等 時(shí)間:2008-07-24 來(lái)源:賽靈思公司 收藏

            提要

          本文引用地址:http://www.ex-cimer.com/article/86182.htm

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

            簡(jiǎn)介

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

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

            吸收倒相器示例

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

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

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

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

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

            異步輸入

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

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

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

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

            以下 Verilog 代碼用生成環(huán)來(lái)執(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)來(lái)執(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;


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

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

            通常,輸入信號(hào)寄存在 IOB 觸發(fā)器中,因?yàn)楦咚贁?shù)據(jù)傳輸是使用 LVDS 的最常見的原因。可使用下列技術(shù)之一來(lái)寄存數(shù)據(jù):

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

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

             示例

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

            以下代碼說明針對(duì)相同生成環(huán)示例的 SDR 寄存情況。唯一的變化是增加了觸發(fā)器例示。
          Verilog 語(yǔ)言代碼:
          .
          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 語(yǔ)言代碼:
          .
          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;

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

           


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: PCB LVDS 倒相器 FPGA SDR

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();