第6講 PLL和ROM的IP核使用

来源:http://www.cnblogs.com/huangsanye/archive/2016/03/09/5257119.html
-Advertisement-
Play Games

學習目的: (1) 熟悉Altera FPGA的PLL的四種工作模式,同時掌握鎖相環的工作原理; (2) 掌握PLL IP核的配置過程及使用方法; (3) 掌握ROM IP核的配置過程及初始化方法,學會用MATLAB產生mif文件來初始化ROM。 學習過程: 【PLL的四種模式】 ① PLL的源同步...


學習目的:

(1) 熟悉Altera FPGA的PLL的四種工作模式,同時掌握鎖相環的工作原理;

(2) 掌握PLL IP核的配置過程及使用方法;

(3) 掌握ROM IP核的配置過程及初始化方法,學會用MATLAB產生mif文件來初始化ROM。

學習過程:

【PLL的四種模式】

① PLL的源同步模式

特點:在PLL的作用下,從輸入管腳到寄存器,時鐘信號與數據信號的相位差一直保持不變,即:從最開始PLL參考時鐘源從輸入管腳引入,數據源從data管腳引入,它們兩的相位差與時鐘信號和數據信號達到寄存器端時刻的相位差是相同的。因此,這種一般在做埠或介面的時候使用(如:FPGA與其他外部晶元埠對埠通信時需要用到這種模式)。

clip_image002

圖1 源同步模式

② PLL的零補償模式

特點:因PLL對時鐘信號沒有補償調節,故到達寄存器端的時鐘信號和輸出給FPGA外部使用的時鐘信號都沒能保持相位差的一致性。因此,這種模式一般不被使用。

clip_image004

圖2 零補償模式

③ 普通模式

特點:在PLL的作用下,PLL時鐘源輸入管腳處的時鐘信號與寄存器端的時鐘信號保持相位一致,而與PLL輸出給FPGA外部用的時鐘信號的相位則不一致,後者與前兩者存在一些相位差。因此,這種模式可用在FPGA內部,但一般不將時鐘輸出給FPGA外部使用。

clip_image006

圖3 普通模式

④ 零延時緩衝模式

特點:它與普通模式恰好相反,在PLL的作用下,PLL時鐘源輸入管腳處的時鐘信號與PLL輸出給FPGA外部使用的時鐘信號保持相位一致,而與寄存器端的時鐘信號存在相位差。因此,這種模式一般用作FPGA給外部送時鐘信號用。

clip_image008

圖4 零延時緩衝模式

PLL一般不設置複位(應取消areset和自動複位),複位容易造成失鎖;

PLL一般要設置locked輸出端,用於調試的時候查看PLL是否失鎖。

【PLL的基本原理】

image

圖5 鎖相環PLL的原理框圖

clip_image011

圖6 鎖相環的工作原理示意圖

如圖5所示,PLL由DIV(分頻器)、PD/FD(鑒相器/鑒頻器)、LF(低通濾波器)以及VCO(壓控振蕩器)等部分組成,PLL Ref是鎖相環的參考輸入時鐘信號,VCO有一個初始的振蕩頻率,通過設置兩個DIV的分頻繫數可以達到PLL分頻或倍頻的效果。FPGA的PLL IP核配置步驟如下:

① 建工程,然後創建一個定製型的IP巨集模塊:

clip_image013

圖7 步驟①

clip_image015

圖8步驟①

② 在I/O中選擇ALTPLL,指定IP核輸出文件的存放路徑和名稱,同時在quartus_prj目錄下創建ipcore_dir文件夾,用於存放IP核輸出文件(ISE會自動創建這個文件夾,但quartus不會自動創建它)。

image

圖9步驟②

③ 配置PLL的速度等級、輸入參考時鐘的頻率、工作模式等參數(速度等級的數值越大,則速度越慢;輸入參考時鐘頻率設為50MHz,工作模式設為普通模式):

clip_image019

圖10 步驟③

④ 取消非同步複位的配置:

clip_image021

圖11 步驟④

⑤ 預設操作:

clip_image023

圖12 步驟⑤

⑥ 設置clk c0、clk c1、clk c2(設置PLL輸出信號的參數):

clip_image025

圖13 clk c0的設置(2倍頻、零相移、50%占空比)

clip_image027

圖14 clk c1的設置(2分頻、零相移、50%占空比)

clip_image029

圖15 clk c2的設置(50MHz、相移180°、50%占空比)

⑦ 預設操作、選擇要生成的.v例化文件(去掉pll1_bb.v選項、勾選pll1_inst.v選項):

clip_image031

圖16

clip_image033

圖17

clip_image035

圖18 設置產生pll1_inst.v例化文件

clip_image037

圖19 將IP巨集文件加入到當前工程中

⑧ IP核的例化(將產生的例化文件pll1_inst.v中的內容拷貝到頂層模塊ex_ipcore.v中去,並修改信號名稱)

⑨ 編寫頂層模塊ex_ipcore.v中的代碼(註意IP核模塊的輸出信號只能聲明為wire型,不能聲明為reg型,如:此例中的oclk0、locked等)

image

⑩ 編寫測試腳本和run.do文件

Testbench文件:

image

run.do文件:

image

⑪ 添加altera_mf模擬庫文件

在模擬工程目錄下新建文件夾altera_lib,然後從quartus的安裝目錄D:\Quartus II12.1\altera\quartus\eda\sim_lib下拷貝altera_mf.v文件到剛新建的文件夾下(C:\Users\Administrator\Desktop\FPGA_EX_self\PLL-ROM-RAM\sim\altera_lib)。

⑫ 新建Modelsim工程,然後進行模擬

⑬ 模擬結果

image

圖20 模擬波形圖

由圖20可知,oclk0的頻率為100 MHz,是sclk的兩倍;oclk1的頻率為25 MHz,是sclk的1/2;oclk2的頻率為50 MHz,與sclk正好反相(相移180°)。有此可見,它們與PLL設置中情況一致,達到了設計的目的。

【註意】因為佈線用線質量的不同(PLL用的是金線),所以不建議使用自己寫的計數器進行分頻,只建議使用PLL分頻倍頻。

【ROM】

ROM的用途:數據緩存(即:跨時鐘域的處理)。

① 新建ROM IP核,輸出文件命名為rom_8x256:

image

圖21 新建ROM的IP核

② 配置ROM的IP核模塊的參數:

clip_image049

圖22 配置ROM IP核模塊的參數

如圖22所示,設置輸出位寬為8bit,設置存儲深度為256,M4K是ROM的一個基本存儲單元,可以用FPGA晶元的Embedded Memory數(單位:Kbits)除以4得出該FPGA晶元內部包含多少個M4K的Memory,這裡設置ROM存儲塊的類型為auto。可以設置為雙時鐘的方式(寫入是一個時鐘,輸出是另外一個獨立的時鐘,用於跨時鐘域操作)。

③ 在ROM的q端加寄存器,可提高電路的時序質量和頻率

clip_image051

圖23 在q端加寄存器

clip_image053

圖24 加寄存器的效果

【在q端加寄存器能提高電路的頻率】如圖24所示,在中間加了寄存器之後,截斷兩級電路之間的延遲(10ns)為5ns+5ns,原來的電路延遲為10ns,能跑的最高頻率為100MHz,而延遲截斷後最高頻率能達到200 MHz。

④ 新建一個.hex文件或者.mif文件,將其設置為ROM的初始化文件

clip_image055

圖25 新建mif文件

clip_image057

clip_image059

圖26 填寫mif文件中的數據並保存

clip_image061

圖27 設置mif文件為ROM的初始化文件

.mif文件中的內容:

clip_image063

.hex文件中的內容:

clip_image065

對比分析mif文件和hex文件的內部內容可知,mif更加條理清晰、容易用MATLAB產生。故通常採用mif文件來初始化ROM。

⑤ 設置生成例化文件rom_8x256_inst.v,並添加生成的IP文件到工程中

clip_image067

圖28 設置生成例化文件

⑥ 在頂層模塊ex_ipcore.v文件中添加rom_8x256_inst.v的例化內容,並修改ex_ipcore.v(例化、修改信號埠名稱、添加ROM的地址控制)、tb_ex_ipcore.v(修改例化語句)以及run.do(添加編譯rom_8x256.v文件的語句)中的代碼。

ex_ipcore.v文件:

clip_image069

clip_image071

tb_ex_ipcore.v文件:

clip_image073

clip_image075

run.do文件:

clip_image077

⑦ 運行模擬

第一次運行模擬時,波形中odata沒有出來數據,一直都是0,查看Modelsim的編譯結果可知,有如下警告提示:

image

圖29 編譯警告

【解釋】因為rom_8x256.v這個文件中有altsyncram_component.init_file = "rom_8x256.mif"這句話,modelsim編譯時會自動地去sim的根目錄下找rom_8x256.mif文件,可是該文件只在PLL-ROM-RAM\quartus_prj\ipcore_dir有,故需要將這個mif文件拷貝到sim的根目錄下去(否則,modelsim無法用mif文件初始化ROM)。

image

image

圖30 模擬結果圖

由圖30可知,odata有了數據產生,並且較地址rom_addr有兩個時鐘周期的延遲,是由於在ROM的輸出端加了寄存器造成的,與當初的設想是一致的。

【用MATLAB產生mif文件】

① 在當前工程目錄下新建matlab_sim文件夾,然後將miffile.m文件拷貝到該文件夾中(miffile.m文件的目的是實現miffile(filename,var,width,depth)函數),方便MATLAB程式調用;

② 打開MATLAB,並切換MATLAB的工作目錄到matlab_sim文件夾下;

③ 新建一個MATLAB腳本,命名為gen_mif,並保存到matlab_sim文件夾下;

④ 編寫MATLAB的程式代碼:

clip_image085

⑤ 運行gen_mif.m文件後,發現在matlab_sim文件夾下生成了一個rom_8x256.mif文件,其內容如下(與用quartus生成的mif文件基本一致):

image

⑥ 將生成的rom_8x256.mif文件拷貝到sim文件夾和ex_6\quartus_prj\ipcore_dir目錄下,替換掉原來的rom_8x256.mif文件,然後重新運行模擬,模擬結果如圖31和圖32所示:

image

圖31 用MATLAB產生mif文件初始化ROM的模擬圖1

image

圖32 用MATLAB產生mif文件初始化ROM的模擬圖2

由圖31和圖32可知,ROM的數據範圍為0~255,與mif文件中的數據一致。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • "Web 伺服器上的請求篩選被配置為拒絕該請求,因為內容長度超過配置的值。" 這個問題在開發需要上傳文件的時候可能會遇到,今天遇到這個問題,百度過也有挺多的修改方法。 方法1: 修改IIS的applicationhost.config文件位置: %windir%/system32/inetsrv/c
  • 最近好久沒有更新文章了,因為好久沒有寫代碼了,以至於我不知道同大家分享些什麼,剛好,今天突然叫我學習下jenkins每日構建,我就把今天的學習筆記記錄下來,這其中很多東西都是公司同事之前調研總結的,我在他的基礎上進行了更加詳細的整理,並自己一步一步的對著實現了一下。 環境準備 下載jenkins的w
  • Servlet的@WebServlet註解 編寫好Servlet之後,要告訴Web容器有關這個Servlet的一些信息. 在Servlet3.0中,可以使用標註(Annotation)來告訴容器哪些Servlet會提供服務以及額外的信息 寫個例子: package cn.my.servlet; im
  • 深入剖析tomcat 筆記 目錄:
  • nginx 軟體: a: openssl-1.0.1r.tar.gz tar zxf openssl-1.0.1r.tar.gz b: pcre-8.32.tar.gz tar zxf openssl-1.0.1r.tar.gz cd pcre-8.32 ./configure --prefix=/
  • 原文地址:http://blog.csdn.net/lubiaopan/article/details/4802430 感謝原作者! static{}(即static塊),會在類被載入的時候執行且僅會被執行一次,一般用來初始化靜態變數和調用靜態方法,下麵我們詳細的討論一下該語句塊的特性及應用。 一、
  • c語言的curl 編程 [Linux@centos-64-min exercise]# gcc -Wall -o curltest curltest.c /tmp/ccosVANi.o: In function `main': curltest.c:(.text+0x2a): undefined r
  • http://blog.csdn.net/appleheshuang/article/details/7602499 一 module通常模塊為一個文件,直接使用import來導入就好了。可以作為module的文件類型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...