新聞中心

EEPW首頁(yè) > 嵌入式系統(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 來(lái)源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/201706/348809.htm

9.3的3種常用

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

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

·邏輯門(mén)類,如與門(mén)、或門(mén)、非門(mén)等。

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

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

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

·商業(yè)IP核,需要付費(fèi)購(gòu)買(mǎ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都可以通過(guò)這3種途徑實(shí)現(xiàn)。其中前兩種方法需要學(xué)習(xí)綜合RAM、ROM、CAM等存儲(chǔ)單元的CodingStyle或約束屬性,后一種方法非常方便、直接,建議初學(xué)者首先要掌握使用器件商IPcore生成器設(shè)計(jì)RAM、ROM、CAM等存儲(chǔ)單元的方法。

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

9.3.1片上的使用方法

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

首先來(lái)介紹片上FIFO的使用方法。

1.FIFO

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

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

(2)選擇新建宏模塊。

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

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

(3)選擇宏模塊。

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

圖9.11選擇宏模塊

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

圖9.16選擇生成的FIFO模塊文件圖9.17打開(kāi)工程添加/刪除文件對(duì)話框

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

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

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

在打開(kāi)的對(duì)話框中,選擇向工程添加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的。打開(kāi)fifo_test.v文件,這是FIFO模塊的構(gòu)造設(shè)計(jì)文件。該構(gòu)造設(shè)計(jì)文件主要可以分為下面4個(gè)部分。

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

modulefifo_test(

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

wrreq, //寫(xiě)請(qǐng)求

rdreq, //讀請(qǐng)求

clock, //時(shí)鐘

aclr, //異步清零

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

full, //滿信號(hào)

empty, //空信號(hào)

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

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é)使用控制信號(hào)寬度

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

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

wiresub_wire1; //空信號(hào)輸出類型聲明

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

wiresub_wire3; //滿信號(hào)輸出類型聲明

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

wireempty=sub_wire1; //空信號(hào)連線

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

wirefull=sub_wire3; //滿信號(hào)連線

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

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

.rdreq(rdreq), //讀請(qǐng)求

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

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

.wrreq(wrreq), //寫(xiě)請(qǐng)求

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

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

.empty(sub_wire1), //空信號(hào)

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

.full(sub_wire3) //滿信號(hào)

.almost_empty(), //幾乎空信號(hào)

.almost_full(), //幾乎滿信號(hào)

.sclr() //清零信號(hào)

.);

第四部分是參數(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, //打開(kāi)溢出校驗(yàn)

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

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

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

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

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

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

.wrreq(wrreq_sig), //寫(xiě)請(qǐng)求

.rdreq(rdreq_sig), //讀請(qǐng)求

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

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

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

.full(full_sig), //滿信號(hào)

.empty(empty_sig), //空信號(hào)

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

);

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

下面是將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)打開(kāi)宏模塊向?qū)Ч芾砥鞑⑿陆ê昴K。

具體方法參見(jiàn)FIFO的方法。

(2)選擇宏模塊。

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

圖9.20選擇宏模塊

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

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

圖9.21選擇宏模塊

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

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

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

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

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

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

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

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

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

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

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

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

(8)生成DPRAM模塊文件。

設(shè)置完成所有的參數(shù),來(lái)到宏模塊向?qū)Ч芾砥鳎―PRAM)的最后一頁(yè)??梢赃x擇生成的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)打開(kāi)宏模塊向?qū)Ч芾砥鞑⑿陆ê昴K。

具體方法參見(jiàn)FIFO的方法。

(2)選擇宏模塊。

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

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

在宏模塊向?qū)Ч芾砥鳎―PRAM)的第3頁(yè),可以設(shè)置DPRAM的寬度、深度及時(shí)鐘控制方式。ROM寬度指的是存儲(chǔ)器數(shù)據(jù)位寬,深度指的是具有該寬度的存儲(chǔ)單元個(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í)際上也是對(duì)同一個(gè)數(shù)據(jù)端口作控制,如圖9.28所示。

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

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

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

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

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

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

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

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

設(shè)置完成所有的參數(shù),來(lái)到宏模塊向?qū)Ч芾砥鳎≧OM)的最后一頁(yè)??梢赃x擇生成的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)級(jí)的時(shí)鐘管理和偏移控制。PLL常用于同步內(nèi)部器件時(shí)鐘和外部時(shí)鐘,使內(nèi)部工作的時(shí)鐘頻率比外部時(shí)鐘更高,時(shí)鐘延遲和時(shí)鐘偏移最小,減小或調(diào)整時(shí)鐘到輸出(TCO)和建立(TSU)時(shí)間。

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

具體方法參見(jiàn)FIFO的方法。

(2)選擇宏模塊。

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

圖9.32選擇宏模塊

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

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

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

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

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

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

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

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

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

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

·零延遲緩沖模式。

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

·無(wú)補(bǔ)償模式。

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

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

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

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

·pllena。

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

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

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

·areset。

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

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

·pfdena。

pfdena信號(hào)用可編程開(kāi)關(guān)控制著PLL中PFD輸出。如果把a(bǔ)reset置低禁止PFD,那么VCO將以最后設(shè)置的控制電壓和頻率值工作,長(zhǎng)時(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í)間儲(chǔ)存當(dāng)前的設(shè)置。如果pfdena信號(hào)再次變高,PLL重新鎖定和輸入時(shí)鐘重新同步。因此pfdena管腳是高有效信號(hào)。

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

·locked。

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

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

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

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

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

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

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

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

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

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

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

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

在宏模塊向?qū)Ч芾砥鳎≒LL)的第8頁(yè),完成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簡(jiǎn)介

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

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

隨著半導(dǎo)體技術(shù)的迅速發(fā)展,計(jì)算機(jī)的性能和應(yīng)用取得了長(zhǎng)足進(jìn)步??墒?,傳統(tǒng)并行總線技術(shù)PCI卻跟不上處理器和存儲(chǔ)器的進(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通道,支持芯片與芯片和背板與背板之間的通信。國(guó)際互聯(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ù)傳輸瓶頸:一是采用差分信號(hào)傳輸代替單端信號(hào)傳輸,從而增強(qiáng)了抗噪聲、抗干擾能力;二是采用時(shí)鐘和數(shù)據(jù)恢復(fù)技術(shù)代替同時(shí)傳輸數(shù)據(jù)和時(shí)鐘,從而解決了限制數(shù)據(jù)傳輸速率的信號(hào)時(shí)鐘偏移問(wèn)題。

一個(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)來(lái)實(shí)現(xiàn)。解串器需要時(shí)鐘和數(shù)據(jù)恢復(fù)電路(CDR),時(shí)鐘恢復(fù)電路通常也由鎖相環(huán)來(lái)實(shí)現(xiàn),但有多種實(shí)現(xiàn)形式如相位插值、過(guò)剩抽樣等。

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

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

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

下面以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)、模式檢測(cè)、字對(duì)齊、8b/10b編解碼器和同步功能。

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

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

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

·對(duì)中等性能信號(hào)的差分片內(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é)電功能,在不工作過(guò)程中減小功耗。

·內(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是它的原理框圖,需要說(shuō)明的是,設(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)信號(hào)完整性的特性。例如,動(dòng)態(tài)可重配置預(yù)加重和均衡功能,調(diào)整信號(hào)以補(bǔ)償信號(hào)經(jīng)過(guò)傳送介質(zhì)的衰減。不同的可編程VOD設(shè)置確保了驅(qū)動(dòng)強(qiáng)度匹配傳輸線電阻和線長(zhǎng)。另外,差分片內(nèi)匹配為中等性能信號(hào)提供了合適的接收器和發(fā)送器緩沖匹配。

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

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

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

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

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

每個(gè)數(shù)千兆位收發(fā)器功能塊有一個(gè)專用發(fā)送器PLL和四個(gè)專用接收器PLL,提供靈活的時(shí)鐘拓?fù)?,支持一系列的輸入?shù)據(jù)流。對(duì)于輸出傳送和接收,這些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)模式檢測(cè)器模塊。

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

(8)字對(duì)齊模塊。

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

(9)速率匹配器模塊。

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

(10)信道對(duì)齊器。

信道對(duì)齊器消除了實(shí)現(xiàn)4個(gè)收發(fā)器XAUI協(xié)議相關(guān)的信道至信道的偏移。信道對(duì)齊器消除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)建自測(cè)。

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



評(píng)論


相關(guān)推薦

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

關(guān)閉