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

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

評(píng)論