理論學(xué)習(xí)
IP理論學(xué)習(xí)
IP(Intellectual Property)是知識產(chǎn)權(quán)的意思,半導(dǎo)體行業(yè)的IP是“用于ASIC或FPGA中的預(yù)先設(shè)計好的電路功能模塊”。一些常用的復(fù)雜的功能模塊(如FIFO、RAM、FIR濾波器、SDRAM控制器、PCIE接口等),不可能每次使用都要用戶自行設(shè)計,所以可以將其設(shè)計成 參數(shù)可修改的模塊 ,其他用戶可以直接調(diào)用。具有復(fù)雜功能和商業(yè)價值的IP核一般具有知識產(chǎn)權(quán)。
IP核有三種不同的存在形式: HDL語言形式,網(wǎng)表形式、版圖形式 。分別對應(yīng)三類IP內(nèi)核: 軟核、固核和硬核 。
軟核:通常是以硬件描述語言HDL源文件的形式出現(xiàn),大多數(shù)應(yīng)用于FPGA的IP內(nèi)核均為軟核。軟核通常以加密形式提供,RTL對用戶不可見,但布局和布線靈活。在這些加密的軟核中,如果對內(nèi)核進行了參數(shù)化,那么用戶就可通過頭文件或圖形用戶接口(GUI)方便地對參數(shù)進行操作。
固核:完成了綜合的功能塊,以網(wǎng)表的形式交給客戶使用。對于那些對時序要求嚴格的內(nèi)核(如PCIE接口內(nèi)核),可預(yù)布線特定信號或分配特定的布線資源,以滿足時序要求。內(nèi)核是預(yù)先設(shè)計的,可能會影響整體設(shè)計,例如:由于內(nèi)核的建立時間、保持時間和握手信號都可能是固定的,因此其它電路的設(shè)計時都必須考慮與該內(nèi)核進行正確地接口。如果內(nèi)核具有固定布局或部分固定的布局,那么這還將影響其它電路的布局。
硬核:最終階段產(chǎn)品——掩膜(Mask),以經(jīng)過完全的布局布線的網(wǎng)表形式提供。硬核缺乏靈活性且可移植性差,但由于無須提供RTL文件,更易于實現(xiàn)IP保護。比如一些FPGA芯片內(nèi)置的ARM核就是硬核。
IP核也有缺點:1、不同的廠商會有自己的IP且一般不通用,不好移植,如果之前用的一個廠商的某個IP核,改用另一個廠商就需要將整個IP核替換。2、IP核實質(zhì)是個加密的 黑匣子 ,如果出現(xiàn)問題或者想優(yōu)化都不好修改。3、有些定制的IP核會很貴。
Altera公司提供兩類功能模塊:免費的LPM宏功能模塊(Megafunction/LPM)和需要授權(quán)使用的IP知識產(chǎn)權(quán)(MegaCore),兩者的實現(xiàn)功能上有區(qū)別,使用方法相同。Altera IP核有邏輯運算IP核,數(shù)學(xué)運算IP核,存儲器類IP核,數(shù)字信號處理IP核,數(shù)字通信IP核,圖像處理IP核,輸入/輸出IP核,芯片接口IP核,設(shè)計調(diào)試IP核等等。
這里通過Quartus II中MegaWizard插件管理器去例化IP核。(非Altera的第三方IP核以網(wǎng)表文件方式提供)。在MegaWizard插件管理中可以創(chuàng)建、定制和例化Altera IP核。
PLL理論知識
PLL(Phase Locked Loop,即鎖相環(huán))是最常用的IP核之一,可以對輸入到FPGA的時鐘信號進行任意 分頻、倍頻、相位調(diào)整、占空比調(diào)整 ,輸出期望時鐘。即使不改變輸入時鐘,也會使用PLL,因為經(jīng)過 PLL 后的時鐘在抖動(Jitter)方面的性能更好一些。
PLL的結(jié)構(gòu)如圖所示:
能夠看出來這個系統(tǒng)是閉環(huán)負反饋系統(tǒng)。
FD/PD是鑒頻鑒相器,參考時鐘(ref_clk)通過鑒頻(FD)鑒相器(PD)和輸出的時鐘頻率進行比較,參考時鐘頻率等于輸出時鐘頻率則鑒頻鑒相器輸出為0,如果參考時鐘頻率比較大則鑒頻鑒相器輸出>1的值,如果參考時鐘頻率較小則鑒頻鑒相器輸出<1的值。
LF是環(huán)路濾波器,用于控制噪聲的帶寬,濾掉高頻噪聲,將帶有噪聲的波形變平滑。
VCO是壓控振蕩器,LF輸出的電壓越大,VCO輸出的頻率越高,然后將這個頻率信號連接到鑒頻鑒相器作為需要比較的頻率。
PLL的作用是讓期望得到的輸出時鐘與參考時鐘的頻率逐漸相等并穩(wěn)定。
倍頻的實現(xiàn): 在VCO后接一個分頻器,分頻后的pll_out頻率等于ref_clk頻率,那么pll_out頻率就是ref_clk頻率的倍頻
分頻的實現(xiàn): 在參考時鐘后接一個分頻器,ref_clk分頻后頻率等于pll_out頻率,那么pll_out是ref_clk的分頻
具體步驟 :
首先依然是創(chuàng)建prj,rtl,sim文件夾,prj中放工程,rtl中放綜合用的.v文件,sim中放testbench文件。建立工程,工程名為pll。工程名,頂層的文件名,頂層模塊名最好都保持一致,否則可能會報錯。另外在prj文件中建立一個子文件夾ipcore用來放工程中可能用到的ip,ipcore文件夾下再放一個pll_ip文件夾,表示存放的是pll的ip。養(yǎng)成良好的習(xí)慣,有助于以后在復(fù)雜工程里方便的查找文件,也方便別人閱讀。然后打開MegaWizard Plug,創(chuàng)建ip并配置ip:
Tools-MegaWizard Plug-In Manager-creat a new custom megafunction variation-next
后面配置擴展頻譜時鐘和帶寬可編程,配置時鐘切換,PLL重新配置都用默認項,都是高級設(shè)置。到output clock設(shè)置頁面就要進行輸出時鐘的參數(shù)配置。
我們將c0設(shè)置為輸入時鐘的2倍頻,c1設(shè)置為2分頻,c2設(shè)置為相移90°,c3設(shè)置為占空比20%,如下圖所示:
接下來是EDA配置界面,可以直接點擊“Next”。
這里顯示了我們在仿真PLL IP核時所需要的Altera的仿真庫,使用NativeLink聯(lián)合ModelSim的仿真時不需要關(guān)心這個仿真庫,設(shè)置好NativeLink后系統(tǒng)會自動幫我們添加這個仿真庫的,但如果使用ModelSim單獨進行仿真時不添加該仿真庫就會報錯,這里提示了我們需要添加哪些庫才能夠滿足ModelSim的單獨仿真。
接下來是Summary(總體設(shè)置)界面,顯示的是配置好PLL IP核后要輸出的文件,其中“pll_ip.v”和“pll_ip.ppf”是默認輸出的,不可以取消。此外我們再將“pll_ip_inst.v”這個實例化模板文件添加上,方便我們實例化時使用,其余的文件都不要勾選。
在彈出的頁面中勾選,可以把.qip文件添加到file目錄下
也可以手動把.qip文件添加到file目錄下
創(chuàng)建和設(shè)置完Ip后可以觀察到ipcore文件夾中生成了.ppf文件,.qip文件,pll_ip.v文件,pll_ip_inst.v文件。
.qip文件可以通過手動添加的方式或者彈窗確定的方式添加到工程結(jié)構(gòu)中。
pll_ip.v和pll_ip_inst.v文件是根據(jù)我們設(shè)置好的ip參數(shù)生成的,如果不想改變輸出時鐘就不要改變里面的內(nèi)容。pll的ip(atpll)可以看作一個器件,我們不需要也不能了解內(nèi)部構(gòu)造,只能通過配置參數(shù)進行設(shè)計,得到想要的輸出。我們通過圖形化界面的配置會生成pll_ip.v文件,文件中定義了pll_ip module,輸入是我們定義的50MHz的時鐘,輸出是我們定義的c0,c1,c2,c3和locked。實例化atpll黑匣子模塊,將定義的6個輸入輸出與atpll模塊相連,我們的pll_ip模塊就具有了自定義的鎖相環(huán)功能,其他引腳沒有被使用,就是默認的配置。還生成了pll_ip_inst.v文件,是將pll_ip模塊進行實例化。
接下來需要將pll的ip當作一個子模塊,實例化并調(diào)用它,寫成頂層模塊pll
編寫代碼
module pll
(
input wire sys_clk ,
output wire clk_mul_2 , //2倍頻后的時鐘
output wire clk_div_2 , //2分頻后的時鐘
output wire clk_phase_90 , //相移90°后的時鐘
output wire clk_ducle_20 , //占空比為20%的時鐘
output wire locked //檢測鎖相環(huán)是否已經(jīng)鎖定,只有該信號為高時輸出的時鐘才是穩(wěn)定的
);
pll_ip pll_ip_inst
(
.inclk0 (sys_clk ),
.c0 (clk_mul_2 ),
.c1 (clk_div_2 ),
.c2 (clk_phase_90 ),
.c3 (clk_ducle_20 ),
.locked (locked )
);
endmodule
pll模塊的輸入為系統(tǒng)時鐘50MHz,輸出信號名稱分別對應(yīng)各自的特性
pll_ip模塊中定義的輸入和輸出引腳,在實例化時,通過信號名稱關(guān)聯(lián)進行引用。c0就是2倍頻,c1就是2分頻...
Testbench
Testbench文件是tb_pll.v,testbench的原理是將頂層模塊作為待測件DUT,定義一個時鐘輸入作為DUT的激勵,并觀察輸出波形,如果得到了預(yù)想的波形說明我們的程序沒有問題。模塊必須要經(jīng)過實例化才能調(diào)用,這里想調(diào)用頂層模塊作為被測件,我們需要實例化pll.v并重新連接輸入輸出。
`timescale 1ns/1ns
module tb_pll();
reg sys_clk;
wire clk_mul_2 ;
wire clk_div_2 ;
wire clk_phase_90;
wire clk_ducle_20;
wire locked ;
//初始化系統(tǒng)時鐘
initial sys_clk = 1'b1;
//sys_clk:模擬系統(tǒng)時鐘,每10ns電平翻轉(zhuǎn)一次,周期為20ns,頻率為50MHz
always #10 sys_clk = ~sys_clk;
pll pll_inst(
.sys_clk (sys_clk ), //input sys_clk
.clk_mul_2 (clk_mul_2 ), //output clk_mul_2
.clk_div_2 (clk_div_2 ), //output clk_div_2
.clk_phase_90 (clk_phase_90 ), //output clk_phase_90
.clk_ducle_20 (clk_ducle_20 ), //output clk_ducle_20
.locked (locked ) //output locked
);
endmodule
時鐘信號用寄存器reg變量進行定義,剩下的幾個輸出變量都用wire等同于物理連線。
初始化:時鐘初始為高電平
模擬系統(tǒng)時鐘:我們需要給DUT一個激勵時鐘,頻率為50MHz,因此每延時10ns要翻轉(zhuǎn)一次電平
實例化pll模塊:用物理連線將tb_pll模塊的輸入輸出和pll模塊的輸入輸出連接,那么tb_pll的輸出就是DUT對模擬系統(tǒng)時鐘的響應(yīng)。通過modelsim觀察輸出信號,就可以判斷是否達到理想結(jié)果。
波形分析
和預(yù)想一致
說在后面:IP核給我們一種很好的學(xué)習(xí)思路,在使用一個模塊時,可以先不必看懂他的代碼,只需要根據(jù)模塊的作用進行實例化就可以完成我們想要的設(shè)計!
-
FPGA
+關(guān)注
關(guān)注
1643文章
21923瀏覽量
612399 -
半導(dǎo)體
+關(guān)注
關(guān)注
335文章
28381瀏覽量
230421 -
fifo
+關(guān)注
關(guān)注
3文章
397瀏覽量
44512 -
pll
+關(guān)注
關(guān)注
6文章
879瀏覽量
135938 -
IP核
+關(guān)注
關(guān)注
4文章
337瀏覽量
50314
發(fā)布評論請先 登錄
關(guān)于FPGA IP核
FPGA的IP軟核使用技巧
FPGA IP核的相關(guān)問題
【鋯石A4 FPGA試用體驗】IP核之PLL(一)新建IP核
xilinx FPGA的FFT IP核的調(diào)用
勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載63:PLL IP核創(chuàng)建于配置
LabVIEW FPGA CORDIC IP核的arctan使用方法
【雨的FPGA筆記】基礎(chǔ)實踐-------IP核中PLL的使用
正點原子開拓者FPGA開發(fā)板資料連載第十三章 IP核之PLL實驗
FPGA學(xué)習(xí)筆記:ROM IP核的使用方法

FPGA學(xué)習(xí)筆記:RAM IP核的使用方法

評論