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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > FPGA系統(tǒng)設(shè)計(jì)原則和技巧之:FPGA系統(tǒng)設(shè)計(jì)的3種常用IP模塊

          FPGA系統(tǒng)設(shè)計(jì)原則和技巧之:FPGA系統(tǒng)設(shè)計(jì)的3種常用IP模塊

          作者: 時(shí)間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

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

          9.3的3種常用

          FPGA的開發(fā)工具軟件,如QuartusII、ISE等,一般都會(huì)提供一些經(jīng)過驗(yàn)證的。這些是芯片廠家提供的,所以只能用于該廠家的FPGA芯片設(shè)計(jì)中。這些IP主要包括以下幾類。

          ·算術(shù)類,如乘法器、加法器、除法器等。

          ·邏輯門類,如與門、或門、非門等。

          ·類,如FIFO、RAM、ROM、移位寄存器等。

          ·I/O類,如雙向IO、PLL、LVDS等。

          ·接口類,如以太網(wǎng)MAC、PCI接口控制器、(SERDES)等。

          ·商業(yè)IP核,需要付費(fèi)購買的。

          以上的IP中,最常用的3個(gè)IP分別是片上(RAM/ROM/FIFO),(PLL/DLL)和(SERDES)。靈活使用這些IP,可以提升設(shè)計(jì)的性能,同時(shí)降低設(shè)計(jì)的復(fù)雜度。

          IP模塊的實(shí)現(xiàn)方式主要有3種:使用HDL代碼描述、使用綜合約束屬性例化或類推、使用器件商的IPcore生成器。

          典型功能的IPcore都可以通過這3種途徑實(shí)現(xiàn)。其中前兩種方法需要學(xué)習(xí)綜合RAM、ROM、CAM等存儲單元的CodingStyle或約束屬性,后一種方法非常方便、直接,建議初學(xué)者首先要掌握使用器件商IPcore生成器設(shè)計(jì)RAM、ROM、CAM等存儲單元的方法。

          下面通過QuartusII工具分別介紹Altera的3種IP模塊的使用方法。

          9.3.1片上的使用方法

          片上存儲器由內(nèi)嵌于FPGA內(nèi)部的邏輯資源(分布RAM和塊RAM)搭建而成。搭建出來的這些片上存儲器的調(diào)用方法與分立器件基本一致,但卻為開發(fā)者省去了大量的PCB布線資源。在小容量的存儲器設(shè)計(jì)中有著非常廣泛的應(yīng)用,同時(shí)這些片上存儲器還常常用作數(shù)據(jù)緩沖及時(shí)鐘域轉(zhuǎn)換等工作。

          首先來介紹片上FIFO的使用方法。

          1.FIFO

          (1)打開宏模塊向?qū)Ч芾砥鳌?/p>

          在QuartusII中,IP模塊的生成都是通過“MegaWizardPlug-InManager”(宏模塊向?qū)Ч芾砥鳎?shí)現(xiàn)的,它可以通過如圖9.9的“Tools”菜單打開。

          (2)選擇新建宏模塊。

          在宏模塊向?qū)Ч芾砥鞯牡?頁,選擇新建一個(gè)自定義的宏模塊,如圖9.10所示。

          圖9.9宏模塊向?qū)Ч芾砥髡{(diào)用 圖9.10新建宏模塊

          (3)選擇宏模塊。

          在宏模塊向?qū)Ч芾砥鞯牡?頁,管理器為我們提供了支持的宏模塊樹形目錄。通過在該目錄中選擇相應(yīng)的宏模塊實(shí)現(xiàn)調(diào)用。同時(shí)在這一頁中還可以選擇應(yīng)用的FPGA器件系列和宏模塊的描述語言,并使用用戶自定義的模塊名,如圖9.11所示。

          圖9.11選擇宏模塊

          在本例中,我們選擇“LPM_FIFO+模塊”進(jìn)行實(shí)現(xiàn)。

          (4)設(shè)置FIFO寬度和深度。

          在宏模塊向?qū)Ч芾砥鳎‵IFO)的第3頁,可以設(shè)置FIFO的深度和寬度,同時(shí)在本頁的左下角會(huì)計(jì)算出實(shí)現(xiàn)這樣一個(gè)深度和寬度的FIFO所消耗的FPGA資源,如圖9.12所示。

          圖9.12設(shè)置FIFO深度和寬度

          (5)設(shè)置FIFO的控制信號。

          在宏模塊向?qū)Ч芾砥鳎‵IFO)的第4頁,可以設(shè)置FIFO的控制信號,包括滿信號full、空信號empty、使用字節(jié)信號組usedw[]、幾乎滿信號almostfull(可編程)、幾乎空信號almostempty(可編程)、異步清零信號和同步清零信號。

          通過選擇是否打開這些信號來構(gòu)造一個(gè)用戶自定義的FIFO,如圖9.13所示。

          圖9.13設(shè)置FIFO的控制信號

          (6)設(shè)置FIFO的模式。

          在宏模塊向?qū)Ч芾砥鳎‵IFO)的第6頁,可以設(shè)置FIFO的模式。分為Lagacy同步模式和Show-ahead同步模式。區(qū)別在于輸出數(shù)據(jù)是在FIFO的讀請求信號rdreq發(fā)出之前還是之后有效,用戶可以根據(jù)需要進(jìn)行選擇,如圖9.14所示。

          (7)設(shè)置FIFO的外部屬性。

          在宏模塊向?qū)Ч芾砥鳎‵IFO)的第7頁,可以設(shè)置FIFO的外部屬性,包括輸出寄存器使用最佳速度策略還是最小面積策略,數(shù)據(jù)溢出及讀空狀態(tài)下的保護(hù)機(jī)制,還可以強(qiáng)制只利用邏輯單元來構(gòu)造FIFO,如圖9.15所示。

          圖9.14設(shè)置FIFO的模式

          圖9.15設(shè)置FIFO的外部屬性

          (8)選擇生成的FIFO模塊文件。

          在宏模塊向?qū)Ч芾砥鳎‵IFO)的第8頁,也就是最后一頁,可以選擇生成的FIFO模塊文件。在QuartusII軟件中,宏模塊向?qū)Ч芾砥骺蔀镕IFO生成7個(gè)文件,如圖9.16所示。

          圖9.16選擇生成的FIFO模塊文件圖9.17打開工程添加/刪除文件對話框

          (9)向工程添加FIFO模塊文件。

          生成FIFO模塊的文件后,在工程的目錄下生成了選擇的文件。要在工程中調(diào)用這些模塊,首先要將這些文件添加到工程中來。

          打開“Project”菜單,選擇其中的“Add/RemoveFilesinProject…”選項(xiàng),如圖9.17所示,打開工程添加/刪除文件對話框。

          在打開的對話框中,選擇向工程添加3個(gè)文件,如圖9.18所示。

          圖9.18添加FIFO模塊文件圖 9.19工程瀏覽器

          添加成功后,在工程瀏覽器中,可以看到器件設(shè)計(jì)文件中已經(jīng)包含了這3個(gè)文件,如圖9.19所示。

          (10)FIFO模塊實(shí)例化。

          將模塊文件加入工程后,設(shè)計(jì)者就可以調(diào)用這個(gè)片上FIFO,并實(shí)例化了。

          首先我們看一下QuartusII是如何構(gòu)建這個(gè)FIFO的。打開fifo_test.v文件,這是FIFO模塊的構(gòu)造設(shè)計(jì)文件。該構(gòu)造設(shè)計(jì)文件主要可以分為下面4個(gè)部分。

          第一部分是端口聲明和說明,這部分是根據(jù)用戶自定義選擇的控制信號及深度、寬度等參數(shù)決定的,代碼如下:

          modulefifo_test(

          data, //數(shù)據(jù)輸入

          wrreq, //寫請求

          rdreq, //讀請求

          clock, //時(shí)鐘

          aclr, //異步清零

          q, //數(shù)據(jù)輸出

          full, //滿信號

          empty, //空信號

          usedw); //字節(jié)使用信號

          input [31:0]data; //輸入數(shù)據(jù)寬度

          input wrreq;

          input rdreq;

          input clock;

          input aclr;

          output [31:0]q; //輸出數(shù)據(jù)寬度

          output full;

          output empty;

          output [10:0]usedw; //自動(dòng)計(jì)算出的字節(jié)使用控制信號寬度

          第二部分是FIFO端口信號與Altera宏模塊之間的連線聲明,其中只有輸出信號需要聲明,而輸入信號可以直接調(diào)用,代碼如下:

          wire[10:0]sub_wire0; //usedw輸出類型聲明

          wiresub_wire1; //空信號輸出類型聲明

          wire[31:0]sub_wire2; //數(shù)據(jù)輸出類型聲明

          wiresub_wire3; //滿信號輸出類型聲明

          wire[10:0]usedw=sub_wire0[10:0]; //usedw連線

          wireempty=sub_wire1; //空信號連線

          wire[31:0]q=sub_wire2[31:0]; //數(shù)據(jù)輸出連線

          wirefull=sub_wire3; //滿信號連線

          第三部分是實(shí)例化FIFO所調(diào)用的宏模塊,這里調(diào)用的是scfifo模塊,代碼如下:

          scfifoscfifo_component( //scfifo模塊實(shí)例化

          .rdreq(rdreq), //讀請求

          .aclr(aclr), //異步清零

          .clock(clock), //時(shí)鐘

          .wrreq(wrreq), //寫請求

          .data(data), //輸入數(shù)據(jù)

          .usedw(sub_wire0), //字節(jié)使用信號

          .empty(sub_wire1), //空信號

          .q(sub_wire2), //數(shù)據(jù)輸出

          .full(sub_wire3) //滿信號

          .almost_empty(), //幾乎空信號

          .almost_full(), //幾乎滿信號

          .sclr() //清零信號

          .);

          第四部分是參數(shù)設(shè)置,這里設(shè)置的是scfifo模塊的參數(shù),包括寬度、深度以及之前生成步驟中設(shè)置的那些參數(shù),代碼如下:

          defparam

          scfifo_component.lpm_width=32, //寬度為32位

          scfifo_component.lpm_numwords=2048, //深度為2048字節(jié)

          scfifo_component.intended_device_family=Cyclone,//器件族為Cyclone

          scfifo_component.lpm_type=scfifo, //調(diào)用lpm為scfifo

          scfifo_component.lpm_showahead=OFF, //關(guān)閉showahead模式

          scfifo_component.overflow_checking=ON, //打開溢出校驗(yàn)

          scfifo_component.underflow_checking=ON, //打開讀空校驗(yàn)

          scfifo_component.add_ram_output_register=ON; //使用輸出寄存器

          在生成的3個(gè)FIFO模塊文件中,還包含一個(gè)fifo_test_bb.v文件,這個(gè)文件包含的是fifo_test.v文件的第一部分內(nèi)容,也就是說這個(gè)文件是FIFO模塊的端口聲明模塊。

          剩下的一個(gè)文件是fifo_test_inst.v,inst是實(shí)例化的簡稱。在這個(gè)文件里面提供了FIFO模塊實(shí)例化的模板,代碼如下:

          fifo_test fifo_test_inst( //fifo_test模塊實(shí)例化

          .data(data_sig), //輸入數(shù)據(jù)

          .wrreq(wrreq_sig), //寫請求

          .rdreq(rdreq_sig), //讀請求

          .clock(clock_sig), //時(shí)鐘

          .aclr(aclr_sig), //異步清零

          .q(q_sig), //輸出數(shù)據(jù)

          .full(full_sig), //滿信號

          .empty(empty_sig), //空信號

          .usedw(usedw_sig) //字節(jié)使用信號

          );

          通過復(fù)制這個(gè)模板至工程設(shè)計(jì)文件中,即可實(shí)現(xiàn)FIFO模塊的實(shí)例化。在進(jìn)行實(shí)例化時(shí),可以修改實(shí)例化的名稱以及FIFO模塊端口信號線的連線資源名稱。

          下面是將FIFO實(shí)例化在IP_Generate_Test工程中的代碼。

          moduleIP_Generate_Test(...); //調(diào)用FIFO模塊的設(shè)計(jì)文件模塊

          ... //連線資源聲明

          fifo_test fifo_test_inst1( //實(shí)例化為fifo_test_inst1

          .data(fifo_data), //FIFO數(shù)據(jù)輸入為fifo_data

          .wrreq(fifo_wrreq),

          .rdreq(fifo_rdreq),

          .clock(fifo_clock),

          .aclr(fifo_aclr),

          .q(fifo_q),

          .full(fifo_full),

          .empty(fifo_empty),

          .usedw() //未實(shí)例化的端口保留空白表示不使用該端口

          );

          ...

          endmodule

          至此,已經(jīng)在一個(gè)工程中實(shí)現(xiàn)了片上FIFO的調(diào)用。

          2.RAM

          這里主要介紹雙口RAM模塊的生成方法,模塊的構(gòu)造方法及調(diào)用方法與FIFO模塊類似,不詳細(xì)介紹。

          (1)打開宏模塊向?qū)Ч芾砥鞑⑿陆ê昴K。

          具體方法參見FIFO的方法。

          (2)選擇宏模塊。

          在本例中,我們選擇LPM_RAM_DP模塊進(jìn)行實(shí)現(xiàn),如圖9.20所示。

          圖9.20選擇宏模塊

          (3)設(shè)置DPRAM端口數(shù)及容量單位。

          在宏模塊向?qū)Ч芾砥鳎―PRAM)的第3頁,可以設(shè)置DPRAM的端口數(shù)及容量單位。支持兩種DPRAM:1個(gè)讀端口和1個(gè)寫端口的DPRAM,2個(gè)讀端口和2個(gè)寫端口的DPRAM??梢栽O(shè)置DPRAM的容量單位為位或者是字節(jié)。同時(shí)在本頁的左下角會(huì)計(jì)算出實(shí)現(xiàn)這樣一個(gè)DPRAM所消耗的FPGA資源,如圖9.21所示。

          圖9.21選擇宏模塊

          (4)設(shè)置DPRAM數(shù)據(jù)寬度及容量。

          在宏模塊向?qū)Ч芾砥鳎―PRAM)的第4頁,可以設(shè)置DPRAM的數(shù)據(jù)寬度及容量,同時(shí)可以設(shè)置輸入輸出端口為不同的寬度實(shí)現(xiàn)串并或并串轉(zhuǎn)換,如圖9.22所示。

          (5)設(shè)置DPRAM時(shí)鐘及使能。

          在宏模塊向?qū)Ч芾砥鳎―PRAM)的第5頁,可以設(shè)置DPRAM的時(shí)鐘及使能信號,可以將DPRAM設(shè)置為單時(shí)鐘(輸入輸出使用同一個(gè)時(shí)鐘),也可以使用獨(dú)立的時(shí)鐘。另外還可以為DPRAM增加讀使能信號rden,如圖9.23所示。

          圖9.22設(shè)置DPRAM數(shù)據(jù)寬度及容量

          圖9.23設(shè)置DPRAM時(shí)鐘及使能

          (6)設(shè)置DPRAM端口寄存器及清零信號。

          在宏模塊向?qū)Ч芾砥鳎―PRAM)的第7頁,可以設(shè)置DPRAM的端口寄存器及清零信號,可以選擇是否增加端口的寄存器,如圖9.24所示。

          圖9.24設(shè)置DPRAM端口寄存器及清零信號

          (7)設(shè)置DPRAM初始化值。

          在宏模塊向?qū)Ч芾砥鳎―PRAM)的第9頁,可以設(shè)置DPRAM的初始化值。通過選擇MIF文件或者HEX文件可以使用文件中的值對DPRAM進(jìn)行初始化,如圖9.25所示。

          圖9.25設(shè)置DPRAM初始化值

          (8)生成DPRAM模塊文件。

          設(shè)置完成所有的參數(shù),來到宏模塊向?qū)Ч芾砥鳎―PRAM)的最后一頁。可以選擇生成的DPRAM模塊文件,共有6個(gè)文件可以生成,如圖9.26所示。

          圖9.26生成DPRAM模塊文件

          DPRAM的調(diào)用方式與FIFO的類似,其構(gòu)建方式及模塊的聲明結(jié)構(gòu)可以參看DPRAM模塊的dpram_test.v和dpram_test_bb.v文件。

          3.ROM

          這里主要介紹ROM模塊的生成方法,模塊的構(gòu)造方法及調(diào)用方法與FIFO模塊類似,就不詳細(xì)介紹了。

          (1)打開宏模塊向?qū)Ч芾砥鞑⑿陆ê昴K。

          具體方法參見FIFO的方法。

          (2)選擇宏模塊。

          在本例中,我們選擇LPM_ROM模塊進(jìn)行實(shí)現(xiàn),如圖9.27所示。

          (3)設(shè)置ROM寬度、深度及時(shí)鐘控制方式。

          在宏模塊向?qū)Ч芾砥鳎―PRAM)的第3頁,可以設(shè)置DPRAM的寬度、深度及時(shí)鐘控制方式。ROM寬度指的是存儲器數(shù)據(jù)位寬,深度指的是具有該寬度的存儲單元個(gè)數(shù)。宏模塊向?qū)Ч芾砥鲿?huì)根據(jù)設(shè)計(jì)者的選擇自動(dòng)生成ROM的地址總線,同時(shí)也會(huì)在左下角顯示消耗的FPGA邏輯資源情況。

          圖9.27選擇宏模塊

          ROM的時(shí)鐘控制方式分為兩種,一種為單時(shí)鐘,另一種將輸入時(shí)鐘和輸出時(shí)鐘分離。ROM的輸入輸出使用的是同一個(gè)數(shù)據(jù)端口,時(shí)鐘的分離實(shí)際上也是對同一個(gè)數(shù)據(jù)端口作控制,如圖9.28所示。

          圖9.28設(shè)置ROM寬度、深度及時(shí)鐘控制方式

          (4)設(shè)置端口寄存器及清零信號。

          這個(gè)步驟與RAM中的第(6)步類似,不再詳述,如圖9.29所示。

          (5)設(shè)置ROM初始化值。

          同樣可以參看RAM使用方法的第(7)步,如圖9.30所示。

          圖9.29設(shè)置端口寄存器及清零信號

          圖9.30設(shè)置ROM初始化值

          (6)選擇生成ROM模塊文件。

          設(shè)置完成所有的參數(shù),來到宏模塊向?qū)Ч芾砥鳎≧OM)的最后一頁。可以選擇生成的ROM模塊文件,同樣有6個(gè)文件可以生成,如圖9.31所示。

          圖9.31生成ROM模塊文件

          ROM的調(diào)用方式與FIFO的類似,其構(gòu)建方式及模塊的聲明結(jié)構(gòu)可以參看ROM模塊的ROM_test.v和ROM_test_bb.v文件。

          9.3.2的使用方法

          在數(shù)字系統(tǒng)中的應(yīng)用非常廣泛,在Altera的FPGA產(chǎn)品中集成的是PLL模塊,在Xilinx的FPGA產(chǎn)品中集成的是DLL模塊。兩者采用的技術(shù)不同,但是實(shí)現(xiàn)的基本功能大致相同,但也各有特點(diǎn)。

          鎖相環(huán)的原理及在FPGA內(nèi)部的構(gòu)造這里將不做介紹,只以Altera的CycloneFPGA的PLL為例講解其使用方法。

          CyclonePLL具有時(shí)鐘倍頻和分頻、相位偏移、可編程占空比和外部時(shí)鐘輸出,進(jìn)行系統(tǒng)級的時(shí)鐘管理和偏移控制。PLL常用于同步內(nèi)部器件時(shí)鐘和外部時(shí)鐘,使內(nèi)部工作的時(shí)鐘頻率比外部時(shí)鐘更高,時(shí)鐘延遲和時(shí)鐘偏移最小,減小或調(diào)整時(shí)鐘到輸出(TCO)和建立(TSU)時(shí)間。

          (1)打開宏模塊向?qū)Ч芾砥鞑⑿陆ê昴K。

          具體方法參見FIFO的方法。

          (2)選擇宏模塊。

          在本例中,我們選擇ALTPLL模塊進(jìn)行實(shí)現(xiàn),如圖9.32所示。

          圖9.32選擇宏模塊

          (3)設(shè)置時(shí)鐘源,PLL類型及工作模式。

          在宏模塊向?qū)Ч芾砥鳎≒LL)的第3頁,設(shè)計(jì)者可以設(shè)置一些PLL基本屬性,如器件族、速度級別及基準(zhǔn)頻率,還可以設(shè)置PLL的類型及工作模式。

          值得注意的是,這里的基準(zhǔn)頻率并不一定是最終設(shè)計(jì)者向PLL輸入的時(shí)鐘。最終的PLL是通過比例值來對輸入頻率進(jìn)行綜合,所以PLL的關(guān)鍵參數(shù)是比例值,即圖9.33中PLL_test框圖中的Ratio值。

          例如Ratio值為5/2(通過后面幾個(gè)步驟實(shí)現(xiàn)),而基準(zhǔn)頻率為40MHz,則PLL的c0輸出為100MHz。在調(diào)用這個(gè)PLL時(shí),若設(shè)計(jì)者使用20MHz的頻率輸入,則輸出的頻率為50MHz,而不是100MHz。

          另外,在這頁中,設(shè)計(jì)者還可以設(shè)置PLL的工作模式,如圖9.33所示。

          圖9.33設(shè)置時(shí)鐘源、PLL類型及工作模式

          CyclonePLL支持3種(反饋)模式:標(biāo)準(zhǔn)、零延遲緩沖和無補(bǔ)償。和其他Altera器件系列不同,CyclonePLL不支持外部反饋模式。所有支持的3種時(shí)鐘反饋模式允許倍頻/分頻、相位偏移和可編程占空比。下面對每種模式進(jìn)行講解。

          ·標(biāo)準(zhǔn)模式。

          在標(biāo)準(zhǔn)模式下,PLL把參考時(shí)鐘和邏輯陣列或I/O單元的端口緩存器處的時(shí)鐘信號相位對齊,補(bǔ)償內(nèi)部全局時(shí)鐘網(wǎng)絡(luò)延遲。在ALTPLL宏模塊向?qū)Ч芾砥髦?,可以定義PLL的哪個(gè)內(nèi)部時(shí)鐘輸出(c0或c1)應(yīng)該補(bǔ)償。

          如果在該模式中使用外部時(shí)鐘輸出(PLL[2..1]_OUT),則相對于時(shí)鐘輸入管腳有相位偏移。如果用內(nèi)部PLL時(shí)鐘輸出驅(qū)動(dòng)通用I/O管腳,則相對應(yīng)的時(shí)鐘輸入管腳也有相位偏移。

          ·零延遲緩沖模式。

          PLL外部時(shí)鐘輸出管腳(PLL[2..1]_OUT)的時(shí)鐘信號和PLL輸入時(shí)鐘是相位對齊的,沒有延遲。如果用c[1..0]端口驅(qū)動(dòng)內(nèi)部時(shí)鐘管腳,那么相對于輸入時(shí)鐘管腳有相位偏移。

          ·無補(bǔ)償模式。

          在該模式下,PLL不補(bǔ)償任何時(shí)鐘網(wǎng)絡(luò)。這樣會(huì)有更佳的抖動(dòng)性能,因?yàn)榉答伒絇FD的時(shí)鐘不經(jīng)過某些電路。相對PLL時(shí)鐘輸入,PLL內(nèi)部和外部時(shí)鐘輸出都有相位偏移。

          (4)設(shè)置可選輸入輸出。

          在宏模塊向?qū)Ч芾砥鳎≒LL)的第4頁,可以選擇PLL模塊的可選輸出信號,如圖9.34所示。

          CyclonePLL有4個(gè)控制信號pllena、areset、prdena和locked,進(jìn)行PLL管理。

          ·pllena。

          PLL啟動(dòng)信號pllena用于啟動(dòng)PLL。當(dāng)pllena為低時(shí),PLL時(shí)鐘輸出端口為低,PLL失鎖。當(dāng)pllena再次變高時(shí),PLL重新鎖定并重新同步輸入時(shí)鐘。因此,pllena是高有效信號。

          因?yàn)樵贑ycloneFPGA中沒有專用的pllena管腳,內(nèi)部邏輯或任意通用I/O管腳都可以驅(qū)動(dòng)pllena端口。因?yàn)槊總€(gè)PLL都有自己的pllena控制電路或共享通用的pllena電路,這樣就很靈活。pllena信號是可選的,如果軟件中沒有啟動(dòng)它,端口內(nèi)部就連接到VCC。

          圖9.34設(shè)置可選輸入

          ·areset。

          PLLareset信號是每個(gè)PLL的復(fù)位或重新同步輸入。但驅(qū)動(dòng)為高時(shí),PLL計(jì)數(shù)器重置,清除PLL輸出,造成PLL失鎖,VCO復(fù)位后回到初始設(shè)置。當(dāng)areset再次變低,PLL重新開始鎖定,PLL重新和輸入時(shí)鐘同步。如果目標(biāo)VCO的頻率低于標(biāo)準(zhǔn)頻率,在鎖定過程中PLL時(shí)鐘輸出起始頻率值比所需值要高。areset是高有效信號。

          CycloneFPGA可以從內(nèi)部邏輯或任意通用I/O管腳驅(qū)動(dòng)這個(gè)PLL輸入信號。areset信號是可選的,如果在軟件中沒有使用它,該端口內(nèi)部連接到GND。

          ·pfdena。

          pfdena信號用可編程開關(guān)控制著PLL中PFD輸出。如果把a(bǔ)reset置低禁止PFD,那么VCO將以最后設(shè)置的控制電壓和頻率值工作,長時(shí)間會(huì)漂移到更低的頻率。即使每個(gè)輸入時(shí)鐘PLL時(shí)鐘輸出也會(huì)繼續(xù)觸發(fā),但是PLL可能會(huì)失鎖。

          當(dāng)PLL失鎖或輸入時(shí)鐘禁止時(shí),系統(tǒng)會(huì)繼續(xù)運(yùn)行。因?yàn)樵谝欢螘r(shí)間內(nèi)最后鎖定輸出頻率不會(huì)改變,所以可以用pfdena端口作為關(guān)機(jī)或清除功能。為了維持這一頻率,系統(tǒng)在關(guān)機(jī)之前有時(shí)間儲存當(dāng)前的設(shè)置。如果pfdena信號再次變高,PLL重新鎖定和輸入時(shí)鐘重新同步。因此pfdena管腳是高有效信號。

          可以用任意通用I/O管腳或內(nèi)部邏輯驅(qū)動(dòng)pfdena輸入信號。該信號是可選的,如果在軟件沒有使用它,該端口內(nèi)部連接到VCC。

          ·locked。

          當(dāng)locked輸出是邏輯高電平,表明PLL時(shí)鐘輸出和PLL參考輸入時(shí)鐘穩(wěn)定同相。當(dāng)PLL開始跟蹤參考時(shí)鐘時(shí),locked端口可能會(huì)觸發(fā),無需額外電路。

          PLL的locked端口可以使用任意通用I/O管腳和內(nèi)部邏輯。這個(gè)locked信號是可選的,在監(jiān)視PLL鎖定過程中是非常有用的。

          (5)設(shè)置c0輸出參數(shù)。

          在宏模塊向?qū)Ч芾砥鳎≒LL)的第5頁,可以選擇PLL模塊c0輸出參數(shù),包括Ratio比值、相移量、占空比等,如圖9.35所示。

          圖9.35設(shè)置c0輸出參數(shù)

          (6)設(shè)置c1輸出參數(shù)。

          在宏模塊向?qū)Ч芾砥鳎≒LL)的第6頁,同樣可以選擇PLL模塊c1輸出參數(shù),包括Ratio比值、相移量、占空比等,如圖9.36所示。

          圖9.36設(shè)置c1輸出參數(shù)

          (7)設(shè)置e0輸出參數(shù)。

          在宏模塊向?qū)Ч芾砥鳎≒LL)的第7頁,可以選擇PLL模塊e0輸出參數(shù),包括Ratio比值、相移量、占空比等,如圖9.37所示。

          圖9.37設(shè)置e0輸出參數(shù)

          (8)選擇生成PLL模塊文件。

          在宏模塊向?qū)Ч芾砥鳎≒LL)的第8頁,完成PLL參數(shù)設(shè)置后,可以選擇生成的PLL模塊文件,共包含6個(gè)文件可以生成,如圖9.38所示。

          圖9.38選擇生成PLL模塊文件

          PLL的調(diào)用方式與FIFO的類似,其構(gòu)建方式及模塊的聲明結(jié)構(gòu)可以參看PLL模塊的PLL_test.v和PLL_test_bb.v文件。

          9.3.3的使用方法

          1.SERDES簡介

          隨著對信息流量需求的不斷增長,傳統(tǒng)并行接口技術(shù)成為進(jìn)一步提高數(shù)據(jù)傳輸速率的瓶頸。過去主要用于光纖通信的串行通信技術(shù)——SERDES正在取代傳統(tǒng)并行總線而成為高速接口技術(shù)的主流。

          SERDES是英文SERializer(串行器)/DESerializer(解串器)的簡稱。它是一種時(shí)分多路復(fù)用(TDM)、點(diǎn)對點(diǎn)的通信技術(shù),即在發(fā)送端,多路低速并行信號被轉(zhuǎn)換成高速串行信號,經(jīng)過傳輸媒體(光纜或銅線),最后在接收端高速串行信號重新轉(zhuǎn)換成低速并行信號。這種點(diǎn)對點(diǎn)的串行通信技術(shù)充分利用傳輸媒體的信道容量,減少所需的傳輸信道和器件引腳數(shù)目,從而大大降低通信成本。

          隨著半導(dǎo)體技術(shù)的迅速發(fā)展,計(jì)算機(jī)的性能和應(yīng)用取得了長足進(jìn)步??墒?,傳統(tǒng)并行總線技術(shù)PCI卻跟不上處理器和存儲器的進(jìn)步,而成為提高數(shù)據(jù)傳輸速率的瓶頸。新一代PCI標(biāo)準(zhǔn)PCIExpress正是為解決計(jì)算機(jī)I/O瓶頸而提出的。

          PCIExpress是一種基于SERDES的串行雙向通信技術(shù),每個(gè)通道的數(shù)據(jù)傳輸速率為2.5Gbit/s,可多達(dá)32通道,支持芯片與芯片和背板與背板之間的通信。國際互聯(lián)網(wǎng)絡(luò)和信息技術(shù)的興起促成了計(jì)算機(jī)和通信技術(shù)的交匯,而SERDES串行通信技術(shù)逐步取代傳統(tǒng)并行總線正是這一交匯的具體體現(xiàn)。

          2.SERDES系統(tǒng)結(jié)構(gòu)

          基于SERDES的高速串行接口采用以下措施突破了傳統(tǒng)并行I/O接口的數(shù)據(jù)傳輸瓶頸:一是采用差分信號傳輸代替單端信號傳輸,從而增強(qiáng)了抗噪聲、抗干擾能力;二是采用時(shí)鐘和數(shù)據(jù)恢復(fù)技術(shù)代替同時(shí)傳輸數(shù)據(jù)和時(shí)鐘,從而解決了限制數(shù)據(jù)傳輸速率的信號時(shí)鐘偏移問題。

          一個(gè)典型SERDES收發(fā)機(jī)由發(fā)送通道和接收通道組成,如圖9.39所示。編碼器、串行器、發(fā)送器以及時(shí)鐘產(chǎn)生電路組成發(fā)送通道,解碼器、解串器、接收器以及時(shí)鐘恢復(fù)電路組成接收通道。顧名思義,編碼器和解碼器完成編碼和解碼功能,其中8B/10B、64B/66B和不規(guī)則編碼(scrambling)是最常用的編碼方案。

          圖9.39典型SERDES收發(fā)機(jī)結(jié)構(gòu)圖

          串行器和解串器負(fù)責(zé)從并行到串行和從串行到并行的轉(zhuǎn)換。串行器需要時(shí)鐘產(chǎn)生電路,時(shí)鐘發(fā)生電路通常由鎖相環(huán)(PLL)來實(shí)現(xiàn)。解串器需要時(shí)鐘和數(shù)據(jù)恢復(fù)電路(CDR),時(shí)鐘恢復(fù)電路通常也由鎖相環(huán)來實(shí)現(xiàn),但有多種實(shí)現(xiàn)形式如相位插值、過剩抽樣等。

          發(fā)送器和接收器完成差分信號的發(fā)送和接收,其中LVDS和CML是最常用的兩種差分信號標(biāo)準(zhǔn)。另外還有一些輔助電路也是必不可少的,例如環(huán)路(loopback)測試、內(nèi)置誤碼率測試等。

          3.SERDES實(shí)現(xiàn)方式

          SERDES在系統(tǒng)中的實(shí)現(xiàn)雖然概念上比較簡單,但是硬件實(shí)現(xiàn)要求很多細(xì)節(jié)正確無誤,如信號端接、參考時(shí)鐘的生成、鎖相環(huán)(PLL)的使用、背板信號完整性和位錯(cuò)誤率的評估等。

          下面以Altera的StratixGXFPGA為例介紹其中的內(nèi)嵌的數(shù)千兆位收發(fā)器功能塊。

          StratixGX器件將高速3.125Gbit/s收發(fā)器串行/解串行(SERDES)技術(shù)和業(yè)界最先進(jìn)的FPGA架構(gòu)相結(jié)合。在FPGA中嵌入的數(shù)千兆位收發(fā)器功能塊,能夠在需要靈活性、高性能和最先進(jìn)功能的許多新系統(tǒng)中使用收發(fā)器。

          下面是這個(gè)數(shù)千兆位收發(fā)器功能塊的主要特點(diǎn)。

          ·支持從622MHz~3.125GHz的所有頻率。

          ·每個(gè)塊有4個(gè)獨(dú)立的3.125Gbit/s全雙工通道,每個(gè)器件多達(dá)20個(gè)通道(5個(gè)塊)。

          ·支持3.1875Gbit/s的10Gbit光纖通道。

          ·集成時(shí)鐘數(shù)據(jù)恢復(fù)(CDR)、模式檢測、字對齊、8b/10b編解碼器和同步功能。

          ·功耗很低,每4通道只有450mW(包括數(shù)千兆收發(fā)器功能塊的功耗)。

          ·支持動(dòng)態(tài)可編程:預(yù)加重、均衡和I/O緩沖上的差分輸出電壓。

          ·支持SerialLite協(xié)議,這是一個(gè)精簡的點(diǎn)對點(diǎn)協(xié)議。

          ·對中等性能信號的差分片內(nèi)匹配。

          ·完全實(shí)現(xiàn)10Gbit以太網(wǎng)物理介質(zhì)接入層(PMA)和物理編碼子層(PCS)功能。

          ·支持靈活的時(shí)鐘拓?fù)洌總€(gè)收發(fā)器模塊中有一個(gè)發(fā)送器PLL和四個(gè)接收器PLL。

          ·采用1.5V、0.13mm全銅CMOS工藝技術(shù)制造,支持1.5VPCMLI/O標(biāo)準(zhǔn)。

          ·包括獨(dú)立的發(fā)送器和接收器節(jié)電功能,在不工作過程中減小功耗。

          ·內(nèi)嵌自檢(BIST)功能,包括嵌入偽隨機(jī)二進(jìn)制序列(PRBS)圖案生成和驗(yàn)證。

          ·有4個(gè)獨(dú)立的環(huán)回路徑用于系統(tǒng)驗(yàn)證。

          可以看到,StratixGX的這個(gè)收發(fā)器功能非常強(qiáng)大,遠(yuǎn)遠(yuǎn)超出了圖9.39所示的SERDES基本結(jié)構(gòu)圖的功能。圖9.40是它的原理框圖,需要說明的是,設(shè)計(jì)者在使用這個(gè)模塊時(shí)并不一定完全實(shí)現(xiàn)其中的每一個(gè)模塊,可以根據(jù)需要只實(shí)現(xiàn)其中的部分內(nèi)容。

          圖9.40StratixGX收發(fā)機(jī)

          下面介紹其中的一些模塊。

          (1)差分緩沖。

          數(shù)千兆位收發(fā)器功能塊差分I/O緩沖支持1.5VPCMLI/O標(biāo)準(zhǔn),有許多改善系統(tǒng)信號完整性的特性。例如,動(dòng)態(tài)可重配置預(yù)加重和均衡功能,調(diào)整信號以補(bǔ)償信號經(jīng)過傳送介質(zhì)的衰減。不同的可編程VOD設(shè)置確保了驅(qū)動(dòng)強(qiáng)度匹配傳輸線電阻和線長。另外,差分片內(nèi)匹配為中等性能信號提供了合適的接收器和發(fā)送器緩沖匹配。

          (2)可編程發(fā)送預(yù)加重模塊。

          發(fā)送預(yù)加重塊使收發(fā)器(SERDES)可以驅(qū)動(dòng)更長的背板或超過1GHz頻率下的電纜。在這些頻率下,通道損耗是很高的,衰減是很明顯的,因?yàn)檠蹐D的關(guān)閉無法讓發(fā)送的信號繼續(xù)傳送。預(yù)加重信號提升信號的高頻部分,補(bǔ)償傳輸線的衰減。使用可編程的預(yù)加重設(shè)置,能夠?yàn)榻o定的傳輸線選擇最優(yōu)的水平(或者在軟件設(shè)定,或者通過內(nèi)部或外部信號動(dòng)態(tài)選擇),讓信號眼圖在遠(yuǎn)端張得最開。

          (3)可編程接收均衡器模塊。

          接收均衡器塊使得收發(fā)器(SERDES)驅(qū)動(dòng)更長的背板或超過1GHz的電纜。當(dāng)信號經(jīng)過接收器均衡器塊時(shí),同樣可以提升信號的高頻部分能量,補(bǔ)償傳輸線的高頻衰減指標(biāo)??删幊叹馑娇梢愿鶕?jù)傳輸線進(jìn)行優(yōu)化(或者在軟件設(shè)定或者通過內(nèi)部或外部信號動(dòng)態(tài)選擇),讓信號眼圖在CDR單元輸入端張得最開。

          (4)發(fā)送器和接收器PLL。

          每個(gè)數(shù)千兆位收發(fā)器功能塊有一個(gè)專用發(fā)送器PLL和四個(gè)專用接收器PLL,提供靈活的時(shí)鐘拓?fù)?,支持一系列的輸入?shù)據(jù)流。對于輸出傳送和接收,這些PLL根據(jù)更低速的輸入?yún)⒖紩r(shí)鐘生成所需的時(shí)鐘頻率。每個(gè)PLL支持4、8、10、16或20的倍增因子。每個(gè)外部參考時(shí)鐘或StratixGX內(nèi)的各種時(shí)鐘源都可以驅(qū)動(dòng)PLL。

          (5)時(shí)鐘恢復(fù)單元。

          CDR從輸入串行數(shù)據(jù)流中提取時(shí)鐘。恢復(fù)的時(shí)鐘用于采樣串行數(shù)據(jù)流、同步控制解串行器。

          (6)串行/解串模塊。

          SERDES模塊將輸入的高速串行數(shù)據(jù)轉(zhuǎn)換為更低速度的并行接口,反之亦然。SERDES模塊可以配置為8、10、16或20位并行接口。

          (7)模式檢測器模塊。

          模式檢測器模塊識別輸入數(shù)據(jù)流中的特殊模式。模式檢測器包括一個(gè)內(nèi)建的8b/10b的K28間隔符號檢測和SONET的A1A2模式檢測。在定制模式下,設(shè)計(jì)者可以創(chuàng)建專用模式。

          (8)字對齊模塊。

          字對齊模塊和模式檢測器共同識別和調(diào)整正確的字節(jié)邊界。此外,字對齊有一個(gè)定制模式,能夠從FPGA內(nèi)核邏輯人工地控制字節(jié)對齊。

          (9)速率匹配器模塊。

          在串行數(shù)據(jù)傳輸中,發(fā)送和接收器件的時(shí)鐘頻率通常是不匹配的。這種不匹配會(huì)引起數(shù)據(jù)以略快或慢于接收器件能解釋的速度傳送。StratixGX速率匹配器從數(shù)據(jù)流中插入或刪除如傳送協(xié)議中定義的可移除的符號,解決了恢復(fù)時(shí)鐘和PLD邏輯陣列時(shí)鐘的頻差,而不會(huì)丟失傳送的數(shù)據(jù)。StratixGX數(shù)據(jù)匹配器為使用8b/10b編碼數(shù)據(jù)的系統(tǒng)進(jìn)行了優(yōu)化。

          (10)信道對齊器。

          信道對齊器消除了實(shí)現(xiàn)4個(gè)收發(fā)器XAUI協(xié)議相關(guān)的信道至信道的偏移。信道對齊器消除4信道的偏移,為內(nèi)核邏輯建立了可靠的以太網(wǎng)XGMII接口。

          (11)8b/10b編解碼器。

          8b/10b編解碼器模塊將8比特的數(shù)據(jù)轉(zhuǎn)換為10比特的數(shù)據(jù),反之亦然。該算法平衡了串行數(shù)據(jù)流中“0”和“1”的數(shù)量,增加了變換密度,因此更易于接收器恢復(fù)串行數(shù)據(jù)。

          (12)同步器。

          同步器補(bǔ)償了并行收發(fā)器接口和FPGA內(nèi)核邏輯之間的相位差。

          (13)內(nèi)建自測。

          BIST為收發(fā)器提供了一組強(qiáng)大的診斷能力。它包括偽隨機(jī)二進(jìn)制序列(PRBS)和其他圖案的生成器和檢查器。BIST也提供了4個(gè)環(huán)回配置用于系統(tǒ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); })();