0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA學習筆記:PLL IP核的使用方法

CHANBAEK ? 來源:小小研究生 ? 作者:小小研究生 ? 2023-08-22 15:04 ? 次閱讀

理論學習

IP理論學習

IP(Intellectual Property)是知識產權的意思,半導體行業(yè)的IP是“用于ASICFPGA中的預先設計好的電路功能模塊”。一些常用的復雜的功能模塊(如FIFO、RAM、FIR濾波器、SDRAM控制器、PCIE接口等),不可能每次使用都要用戶自行設計,所以可以將其設計成 參數可修改的模塊 ,其他用戶可以直接調用。具有復雜功能和商業(yè)價值的IP核一般具有知識產權。

IP核有三種不同的存在形式: HDL語言形式,網表形式、版圖形式 。分別對應三類IP內核: 軟核、固核和硬核 。

軟核:通常是以硬件描述語言HDL源文件的形式出現,大多數應用于FPGA的IP內核均為軟核。軟核通常以加密形式提供,RTL對用戶不可見,但布局和布線靈活。在這些加密的軟核中,如果對內核進行了參數化,那么用戶就可通過頭文件或圖形用戶接口(GUI)方便地對參數進行操作。

固核:完成了綜合的功能塊,以網表的形式交給客戶使用。對于那些對時序要求嚴格的內核(如PCIE接口內核),可預布線特定信號或分配特定的布線資源,以滿足時序要求。內核是預先設計的,可能會影響整體設計,例如:由于內核的建立時間、保持時間和握手信號都可能是固定的,因此其它電路的設計時都必須考慮與該內核進行正確地接口。如果內核具有固定布局或部分固定的布局,那么這還將影響其它電路的布局。

硬核:最終階段產品——掩膜(Mask),以經過完全的布局布線的網表形式提供。硬核缺乏靈活性且可移植性差,但由于無須提供RTL文件,更易于實現IP保護。比如一些FPGA芯片內置的ARM核就是硬核。

IP核也有缺點:1、不同的廠商會有自己的IP且一般不通用,不好移植,如果之前用的一個廠商的某個IP核,改用另一個廠商就需要將整個IP核替換。2、IP核實質是個加密的 黑匣子 ,如果出現問題或者想優(yōu)化都不好修改。3、有些定制的IP核會很貴。

Altera公司提供兩類功能模塊:免費的LPM宏功能模塊(Megafunction/LPM)和需要授權使用的IP知識產權(MegaCore),兩者的實現功能上有區(qū)別,使用方法相同。Altera IP核有邏輯運算IP核,數學運算IP核,存儲器類IP核,數字信號處理IP核,數字通信IP核,圖像處理IP核,輸入/輸出IP核,芯片接口IP核,設計調試IP核等等。

這里通過Quartus II中MegaWizard插件管理器去例化IP核。(非Altera的第三方IP核以網表文件方式提供)。在MegaWizard插件管理中可以創(chuàng)建、定制和例化Altera IP核。

PLL理論知識

PLL(Phase Locked Loop,即鎖相環(huán))是最常用的IP核之一,可以對輸入到FPGA的時鐘信號進行任意 分頻、倍頻、相位調整、占空比調整 ,輸出期望時鐘。即使不改變輸入時鐘,也會使用PLL,因為經過 PLL 后的時鐘在抖動(Jitter)方面的性能更好一些。

PLL的結構如圖所示:

圖片

能夠看出來這個系統是閉環(huán)負反饋系統。

FD/PD是鑒頻鑒相器,參考時鐘(ref_clk)通過鑒頻(FD)鑒相器(PD)和輸出的時鐘頻率進行比較,參考時鐘頻率等于輸出時鐘頻率則鑒頻鑒相器輸出為0,如果參考時鐘頻率比較大則鑒頻鑒相器輸出>1的值,如果參考時鐘頻率較小則鑒頻鑒相器輸出<1的值。

LF是環(huán)路濾波器,用于控制噪聲的帶寬,濾掉高頻噪聲,將帶有噪聲的波形變平滑。

VCO是壓控振蕩器,LF輸出的電壓越大,VCO輸出的頻率越高,然后將這個頻率信號連接到鑒頻鑒相器作為需要比較的頻率。

PLL的作用是讓期望得到的輸出時鐘與參考時鐘的頻率逐漸相等并穩(wěn)定。

倍頻的實現: 在VCO后接一個分頻器,分頻后的pll_out頻率等于ref_clk頻率,那么pll_out頻率就是ref_clk頻率的倍頻

圖片

分頻的實現: 在參考時鐘后接一個分頻器,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)成良好的習慣,有助于以后在復雜工程里方便的查找文件,也方便別人閱讀。然后打開MegaWizard Plug,創(chuàng)建ip并配置ip:

Tools-MegaWizard Plug-In Manager-creat a new custom megafunction variation-next

圖片

圖片

圖片

后面配置擴展頻譜時鐘和帶寬可編程,配置時鐘切換,PLL重新配置都用默認項,都是高級設置。到output clock設置頁面就要進行輸出時鐘的參數配置。

圖片

我們將c0設置為輸入時鐘的2倍頻,c1設置為2分頻,c2設置為相移90°,c3設置為占空比20%,如下圖所示:

圖片

圖片

圖片

圖片

圖片

接下來是EDA配置界面,可以直接點擊“Next”。

圖片

這里顯示了我們在仿真PLL IP核時所需要的Altera的仿真庫,使用NativeLink聯合ModelSim的仿真時不需要關心這個仿真庫,設置好NativeLink后系統會自動幫我們添加這個仿真庫的,但如果使用ModelSim單獨進行仿真時不添加該仿真庫就會報錯,這里提示了我們需要添加哪些庫才能夠滿足ModelSim的單獨仿真。

接下來是Summary(總體設置)界面,顯示的是配置好PLL IP核后要輸出的文件,其中“pll_ip.v”和“pll_ip.ppf”是默認輸出的,不可以取消。此外我們再將“pll_ip_inst.v”這個實例化模板文件添加上,方便我們實例化時使用,其余的文件都不要勾選。

圖片

在彈出的頁面中勾選,可以把.qip文件添加到file目錄下

圖片

也可以手動把.qip文件添加到file目錄下

圖片

創(chuàng)建和設置完Ip后可以觀察到ipcore文件夾中生成了.ppf文件,.qip文件,pll_ip.v文件,pll_ip_inst.v文件。

.qip文件可以通過手動添加的方式或者彈窗確定的方式添加到工程結構中。

pll_ip.v和pll_ip_inst.v文件是根據我們設置好的ip參數生成的,如果不想改變輸出時鐘就不要改變里面的內容。pll的ip(atpll)可以看作一個器件,我們不需要也不能了解內部構造,只能通過配置參數進行設計,得到想要的輸出。我們通過圖形化界面的配置會生成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當作一個子模塊,實例化并調用它,寫成頂層模塊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)是否已經鎖定,只有該信號為高時輸出的時鐘才是穩(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模塊的輸入為系統時鐘50MHz,輸出信號名稱分別對應各自的特性

pll_ip模塊中定義的輸入和輸出引腳,在實例化時,通過信號名稱關聯進行引用。c0就是2倍頻,c1就是2分頻...

圖片

Testbench

Testbench文件是tb_pll.v,testbench的原理是將頂層模塊作為待測件DUT,定義一個時鐘輸入作為DUT的激勵,并觀察輸出波形,如果得到了預想的波形說明我們的程序沒有問題。模塊必須要經過實例化才能調用,這里想調用頂層模塊作為被測件,我們需要實例化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 ;


 //初始化系統時鐘
 initial sys_clk = 1'b1;


 //sys_clk:模擬系統時鐘,每10ns電平翻轉一次,周期為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等同于物理連線。

初始化:時鐘初始為高電平

模擬系統時鐘:我們需要給DUT一個激勵時鐘,頻率為50MHz,因此每延時10ns要翻轉一次電平

實例化pll模塊:用物理連線將tb_pll模塊的輸入輸出和pll模塊的輸入輸出連接,那么tb_pll的輸出就是DUT對模擬系統時鐘的響應。通過modelsim觀察輸出信號,就可以判斷是否達到理想結果。

波形分析

圖片

和預想一致

說在后面:IP核給我們一種很好的學習思路,在使用一個模塊時,可以先不必看懂他的代碼,只需要根據模塊的作用進行實例化就可以完成我們想要的設計!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1625

    文章

    21620

    瀏覽量

    601234
  • 半導體
    +關注

    關注

    334

    文章

    26855

    瀏覽量

    214305
  • fifo
    +關注

    關注

    3

    文章

    386

    瀏覽量

    43492
  • pll
    pll
    +關注

    關注

    6

    文章

    774

    瀏覽量

    135006
  • IP核
    +關注

    關注

    4

    文章

    326

    瀏覽量

    49376
收藏 人收藏

    評論

    相關推薦

    關于FPGA IP

    對于深入學習使用FPGA的小伙伴們,特別是一些復雜的、大規(guī)模的設計應用,適宜的IP核對開發(fā)能起到事半功倍的作用。IP的概念與我們sdk里庫
    發(fā)表于 04-29 21:01

    FPGAIP使用技巧

    的工作原理、使用方法和限制條件。 參數化配置 : 如果IP提供了參數化配置選項,可以根據項目需求進行配置。例如,對于RAM IP
    發(fā)表于 05-27 16:13

    FPGA IP的相關問題

    我用的是xinlinx spartan6 FPGA,我想知道它的IPRAM是與FPGA獨立的,只是集成在了一起呢,還是占用了FPGA的資源
    發(fā)表于 01-10 17:19

    【鋯石A4 FPGA試用體驗】IPPLL(一)新建IP

    通過Quartus II 軟件創(chuàng)建PLL IP。首先,要新建一個工程,這個方法在之前的帖子中已經發(fā)過,不會的可以查看前面的相關帖子。創(chuàng)建好自己的工程:打開如下的菜單
    發(fā)表于 09-23 21:44

    xilinx FPGA的FFT IP的調用

    有沒有大神可以提供xilinx FPGA的FFT IP的調用的verilog 的參考程序,最近在學習FFT的IP
    發(fā)表于 12-25 17:05

    勇敢的芯伴你玩轉Altera FPGA連載63:PLL IP創(chuàng)建于配置

    `勇敢的芯伴你玩轉Altera FPGA連載63:PLL IP創(chuàng)建于配置特權同學,版權所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1i5LMUUD
    發(fā)表于 04-20 21:45

    LabVIEW FPGA CORDIC IP的arctan使用方法

    使用LabVIEW FPGA模塊中的CORDIC IP,配置arctan(X/Y)算法,配置完成之后,IP只有一個輸入。我參考網上VHD
    發(fā)表于 09-10 20:07

    【雨的FPGA筆記】基礎實踐-------IPPLL的使用

    的時鐘。首先建立一個文件在ip目錄里搜索ALTPLL然后在工程文件的par文件里建立一個文件夾ipcore將剛剛的變化保存到文件里命名為pll_clk然后點擊ok就會出現配置過程界面FPGA
    發(fā)表于 01-13 18:13

    正點原子開拓者FPGA開發(fā)板資料連載第十三章 IPPLL實驗

    往往需要使用多個時鐘和時鐘相位的偏移,且通過編寫代碼輸出的時鐘無法實現時鐘的倍頻,因此學習Altera PLL IP使用方法是我們
    發(fā)表于 07-30 14:58

    基于IPFPGA設計方法是什么?

    的分類和特點是什么?基于IPFPGA設計方法是什么?
    發(fā)表于 05-08 07:07

    FPGAIP的生成

    FPGAIP的生成,簡單介紹Quartus II生成IP的基本操作,簡單實用挺不錯的資料
    發(fā)表于 11-30 17:36 ?11次下載

    FPGA中配置PLL的步驟及使用方法

    FPGA中配置PLL的步驟及使用方法
    發(fā)表于 05-28 10:01 ?21次下載

    FPGA學習筆記:ROM IP使用方法

    上一篇介紹了常用的鎖相環(huán)IP,這一節(jié)將介紹一種較為常用的 存儲類IP ——ROM的使用方法。ROM是 只讀存儲器 (Read-Only Memory),顧名思義,我們只能讀出事先存放
    的頭像 發(fā)表于 08-22 15:06 ?4514次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>:ROM <b class='flag-5'>IP</b><b class='flag-5'>核</b>的<b class='flag-5'>使用方法</b>

    FPGA學習筆記:RAM IP使用方法

    我們知道除了只讀存儲器外還有隨機存取存儲器,這一篇將介紹另一種 存儲類IP ——RAM的使用方法。RAM是 隨機存取存儲器 (Random Access Memory),是一個易失性存儲器,斷電丟失。RAM工作時可以隨時從任何
    的頭像 發(fā)表于 08-29 16:46 ?3373次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>:RAM <b class='flag-5'>IP</b><b class='flag-5'>核</b>的<b class='flag-5'>使用方法</b>

    FPGA實現基于Vivado的BRAM IP的使用

    Xilinx公司的FPGA中有著很多的有用且對整個工程很有益處的IP,比如數學類的IP,數字信號處理使用的
    的頭像 發(fā)表于 12-05 15:05 ?1475次閱讀