新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA的高頻時鐘的分頻和分配設計

        基于FPGA的高頻時鐘的分頻和分配設計

        作者: 時間:2004-12-08 來源:網絡 收藏
        摘要:介紹了為PET(正電子發射斷層掃描儀)的前端電子學模塊提供時間基準而設計的一種新型扇出電路。該電路利用芯片來實現對,并用LVDS傳輸標準對生成的多路時鐘信號進行傳輸,從而最大程度地減少了輸出各路時鐘之間的延時偏差,同時利用低壓差分信號的傳輸特性增強了信號的抗干擾能力。文章給出了采用VHDL語言編寫的時鐘電路程序代碼。

        關鍵詞:;VHDL

        1 引言

        隨著應用系統向高速度、低功耗和低電壓方向的發展,對電路設計的要求越來越高?傳統集成電路設計技術已無法滿足性能日益提高的整機系統的要求。同時,由于IC設計與工藝技術水平的提高,集成電路規模越來越大,復雜程度越來越高。目前已經可以將整個系統集成在一個芯片上,即片上系統(System on a Chip?縮寫為SOC),這種芯片以具有系統級性能的復雜可編程邏輯器件(CPLD)和現場可編程門陣列(FPGA)為主要代表。與主要實現組合邏輯功能的CPLD相比,FPGA主要用于實現時序邏輯功能。對于ASIC設計來說,采用FPGA在實現小型化、集成化和高可靠性系統的同時,還可以減少風險、降低成本、縮短開發周期。

        2 系統硬件組成

        本文介紹的時鐘板主要由于為PET(正電子發射斷層掃描儀)的前端電子學模塊提供32路系統時鐘(62.5MHz)和32路同步時鐘(4MHz)。時鐘信號之間的偏差要求在2ns之內。為了消除各路時鐘信號之間的偏差,文中介紹利用FPGA來實現主時鐘的、零延時輸出和,同時利用LVDS技術實現多路時鐘的傳輸的實現方法。圖1所示是其硬件設計示意圖。

        由圖1可知,該時鐘電路的具體工作原理是:首先由精密晶體振蕩器產生62.5MHz的時鐘信號,然后經時鐘驅動芯片CY2305輸入FPGA芯片的時鐘引腳GCLK以作為時鐘源。該時鐘在FPGA芯片內部經DLL(延遲鎖定環)模塊分別生成62.5MHz的系統時鐘和4MHz的同步時鐘?LVTTL電平信號?,然后由內部的IOB(輸入輸出功能模塊)到64個輸出引腳(32路62.5MHz系統時鐘和32路4MHz同步時鐘),這64路LVTTL電平信號兩兩進入32塊LVDS(兩路)驅動轉換芯片后,即可轉換為LVDS信號并通過差分雙絞線傳輸給前端電子學模塊的32塊數字電路板。

        圖2

        2.1 FPGA的結構

        單元型FPGA主要由三部分組成:可配置邏輯模塊CLB(Configurable Logic Block),輸入、輸出模塊I/OB和可編程連線PI(Programmable Interconnect)。對于不同規格的芯片,可分別包含88、2020、4444甚至9292個CLB陣列,同時配有64、160、352、甚至448個I/OB以及為實現可編程連線所必需的其它部件。圖2所示是本設計中使用的XC2S30芯片的內部結構。

        2.2 Xinlinx公司的SpartanII系列FPGA

        Xinlinx公司目前生產的FPGA有兩類代表性產品?一類是XC40003/Spartan系列?另一類是Vir-tex/SpartanII系列。這兩類產品除具有FPGA的三種基本資源(可編程I/O、可編程邏輯功能模塊CLB和可編程布線等)外?還具有片內RAM資源。但兩種產品也有所不同。其中XC4000E可以用于實現片內分布RAM,同時專門為實現可編程片上系統開發的Virtex系列,其片內分布RAM和塊RAM都可以實現,并可實現片上系統所要求的其他性能,如時鐘分配和多種電平接口等特性。SpartanII系列與Virtex系列產品相比,除了塊RAM數量少于Virtex系列產品外,其余有關性能(如典型門范圍、線寬、金屬層、芯內電壓、芯片輸入輸出引腳電壓、系統頻率和所含DLL個數等)都基本相同,它的一個突出優點(也是本設計選用該系列芯片的主要原因)是:該系列產品是專門為取代掩膜門陣列的低價位FPGA,在達到門陣列數量時,其價格可與門陣列相比。因此,本文介紹的時鐘電路的設計選用SpartanII系列FP-GA中的XC2S30-5PQ208芯片來實現。

        3 用FPGA實現時鐘和分配

        如圖2所示?SpartanII系列芯片內部含有四個全數字延時鎖定環(DLL),每一個DLL可驅動兩個全局時鐘分布網絡。通過控制DLL輸出時鐘的一個采樣?可以補償由于布線網絡帶來的時鐘延時,從而有效消除從外部輸入端口到器件內部各個時鐘負載的延時。DLL除提供對用戶輸入時鐘的零延時之外,還具有時鐘倍頻和分頻功能。它可以對時鐘源進行兩倍頻和1.5、2、3、4、5、8或16分頻。本設計就是利用DLL的零延時和分頻功能來實現對62.5MHz時鐘的輸出和16分頻后4MHz(約)時鐘的輸出。

        3.1 數字延時鎖定環(DLL)的結構原理

        圖3是一個DLL的內部原理框圖,它由各類時鐘延時線和控制邏輯組成。延時線主要用于對時鐘輸入端CLKIN產生一個延時。通過器件內部的時鐘分布網絡可將該輸入時鐘分配給所有的內部寄存器和時鐘反饋端CLKFB。控制邏輯則主要用于采樣輸入時鐘和反饋時鐘以調整延時線。這里所說的延時線由壓控延時或衰減延時組件構成,SpartanII系列芯片選用了后者。DLL可在輸入時鐘和反饋時鐘之間不停地插入延時,直到兩個時鐘的上升沿同步為止。當兩時鐘同步時,DLL鎖定。在DLL鎖定后,只要輸入時鐘沒有變化,兩時鐘就不會出現可識別偏差。因此,DLL輸出時鐘就補償了時鐘分布網絡帶來的輸入時鐘延時,從而消除了源時鐘和負載之間的延時。

        3.2 DLL功能的實現

        SpartanII系列芯片內含專門實現DLL功能的宏單元模塊BUFGDLL,其結構簡圖如圖4所示。該模塊由IBUFG、CLKDLL和BUFG三個庫元件組成?其原理框圖如圖5所示。圖5中,CLKDLL庫元件用于實現DLL的主要功能?包括完成時鐘的零延時輸出、時鐘的倍頻以及分頻和鏡像操作。而IBUFG和BUFG則分別實現外部時鐘的輸入以及將輸出時鐘分配到芯片引腳。本設計的時鐘分頻就是將62.5MHz的時鐘由IBUFG輸入?經CLKDLL分頻后再由CLKDV端傳給BUFG?然后經片內IOBUF分配到芯片的普通I/O輸出引腳。

        4 軟件實現

        在設計的總體構思和器件選擇完成后,必須進行的工作是建立設計輸入文件,該文件主要用于描述所設計電路的邏輯功能。這里使用的是XILINX公司提供的開發工具FOUNDATION 4.1。本設計采用硬件描述語言VHDL來設計,其部分程序如下:

        entity lvds is

        port (

        pclk: in STD LOGIC;

        pclk_62: out std_logic_vector(31 downto 0);?

        pclk_4: out std_logic_vector(31 downto 0));

        end lvds;

        architecture lvds_arch of lvds is

        component clkdll

        port( clkin: in std_logic;

        clkfb : in std_logic;

        rst: in std_logic;

        clk0: out std_logic;

        clk90 : out std_logic;

        clk180: out std_logic;

        clk270: out std_logic;

        clk2x : out std_logic;

        clkdv: out std_logic;

        locked: out std_logic);

        end component;

        begin

        reset n<=‘0' ;

        uibuf : ibufg port map (

        i => pclk,

        o => clk);

        udll: clkdll port map( clkin => clk,

        rst => reset_n,

        clkfb => clkfb,

        clk0 => clk0,

        clk90 => open,

        clk180 => open,

        clk270 => open,

        clk2x => clk2x,

        clkdv => clkdv,

        locked => locked

        );

        bufg_clk0: bufg port map ( i => clk0,

        o=>clk_int2;

        );

        clkfb<=clk_int2;

        process(clk2x);

        begin

        if clk2x′event and clk2x=′1′ then

        clk_int <=clk int2;

        clk_int3<= clkdv;

        pclk_62(0)<=clk_int;

        pclk_62(1)<=clk_int;

        pclk_62(31)<=clk_int;

        pclk_4(0)<=clk_int3;

        pclk_4(1)<=clk_int3;

        pclk_4(31)<=clk_int3;

        end if;

        end process;

        end lvds_arch;



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 南华县| 彭州市| 关岭| 龙井市| 聂拉木县| 青海省| 泸州市| 武邑县| 贵溪市| 青川县| 乌什县| 乌拉特中旗| 滁州市| 墨竹工卡县| 蓬莱市| 蕉岭县| 称多县| 四平市| 琼结县| 进贤县| 方正县| 什邡市| 沁源县| 萍乡市| 南宁市| 古丈县| 肥西县| 含山县| 馆陶县| 额敏县| 永康市| 瑞丽市| 涿鹿县| 祁东县| 延川县| 朔州市| 安福县| 新乡市| 洪雅县| 甘泉县| 祥云县|