如何選擇靠譜的建站公司網(wǎng)絡服務主要包括
文章目錄
- 前言
- 一、CMT(時鐘管理單元)
- 1、CMT 簡介
- 2、FPGA CMT 框圖
- 3、MMCM 框圖
- 4、PLL 框圖
- 二、創(chuàng)建工程
- 1、創(chuàng)建工程
- 2、PLL IP 核配置
- 3、進行例化
- 三、進行仿真
- 1、創(chuàng)建仿真文件
- 2、進行仿真設置
- 3、進行行為級仿真
- 四、硬件驗證
- 1、引腳綁定
- 2、生成比特流文件
- 3、驗證
- 五、資源自取
前言
本節(jié)介紹一下賽靈思鎖相環(huán)的一個使用方法,我手頭的 AC7020 fpga 開發(fā)板上面有一個 50MHz 的晶振連接在 PL 端,晶振輸出鏈接到 FPGA 的全局時鐘(MRCC),這個 CLK 可以用來驅(qū)動 FPGA 內(nèi)的用戶邏輯電路,該時鐘源的原理圖如圖所示:
但是在我們實際應用當中呢我們可能想要使用特定大小的頻率,比如 25MHz 或者 100MHz,那么我們可以使用賽靈思的鎖相環(huán)的 IP 實現(xiàn)它的時鐘分頻或者倍頻。
一、CMT(時鐘管理單元)
1、CMT 簡介
Xilinx7 系列器件中的時鐘資源包含了CMT(全稱 Clock Management Tile,即時鐘管理單元),每個 CMT 由一個 MMCM(全稱 Mixed-Mode Clock Manager,即混合模式時鐘管理)和一個 PLL(全稱 Phase Locked Loop,即鎖相環(huán))組成,
- MMCM(混合模式時鐘管理):是基于 PLL 的新型混合模式時鐘管理器,實現(xiàn)了最低的抖動和抖動濾波,為高性能的 FPGA 設計提供更高性能的時鐘管理功能。
- MMCM 在 PLL 的基礎上加上了相位動態(tài)調(diào)整功能,
- PLL:為鎖相回路或鎖相環(huán),用來統(tǒng)一整合時鐘信號,使高頻器件正常工作,如內(nèi)存的存取數(shù)據(jù) 等。PLL 用于振蕩器中的反饋技術(shù)。
- 鎖相環(huán)擁有強大的性能,可以對輸入到 FPGA 的時鐘信號進行任意分頻、倍頻、相位調(diào)整、占空比調(diào)整,從而輸出一個期望時鐘;
MMCM 相對 PLL 的優(yōu)勢就是相位可以動態(tài)調(diào)整,但 PLL 占用的面積更小,而在大部分的設計當中大家使用 MMCM 或者 PLL 來對系統(tǒng)時鐘進行分頻、倍頻和相位偏移都是完全可以的。
2、FPGA CMT 框圖
下圖為 7 系列 FPGA CMT 的一個簡單的結(jié)構(gòu),最左邊是輸入的一些時鐘源,最右邊是輸出。
3、MMCM 框圖
下圖是 MMCM 的框圖,可以看到它包含 8 個相位的拍 + 1 個可變相位拍
4、PLL 框圖
下圖是 PLL 的框圖,可以看到它只包含 8 個相位的拍
二、創(chuàng)建工程
1、創(chuàng)建工程
創(chuàng)建一個名字為 pll_test 的工程
2、PLL IP 核配置
1、點擊 IP Catalog,搜索 clock,找到 Clocking Wizard 并雙擊
2、在 Clocking Option 下按如下圖進行配置
- Primitive 選擇 PLL
- Input Clock Information 中的主時鐘的輸入頻率填上我們板子晶振頻率:50MHz
3、在 Output Clocks 下按如下圖進行配置,并點擊 OK
我們輸出 200MHz、100MHz、50MHz、25MHz 這么四路不同頻率的時鐘
4、點擊生成 Generate
3、進行例化
1、創(chuàng)建一個名為 pll_test.v 文件
2、復制例化模板到我們剛創(chuàng)建的 pll_test.v 文件中
3、對 pll_test.v 文件進行修改,修改之后的代碼如下(這里我們只輸出 25MHz 信號)
`timescale 1ns / 1psmodule pll_test(input sys_clk, // 50MHzinput rst_n,output clk_out);wire pll_locked; clk_wiz_0 clk_inst(// Clock out ports.clk_out1(), // output clk_out1.clk_out2(), // output clk_out2.clk_out3(), // output clk_out3.clk_out4(clk_out), // output clk_out4// Status and control signals.reset(~rst_n), // input reset.locked(pll_locked), // output locked// Clock in ports.clk_in1(sys_clk)); // input clk_in1 endmodule
三、進行仿真
1、創(chuàng)建仿真文件
創(chuàng)建名為 vtf_pll_test.v 的仿真文件,并進行例化編寫 verilog 仿真程序
`timescale 1ns / 1psmodule vtf_pll_test;reg sys_clk;
reg rst_n;
wire clk_out;pll_test pll_inst(.sys_clk (sys_clk), // 50MHz.rst_n (rst_n),.clk_out (clk_out));initial
beginsys_clk = 1'b0;rst_n = 1'b0; // 對于按鍵來說我們進行的是低電平的一個復位# 100 rst_n = 1'b1;
endalways #10 sys_clk = ~sys_clk; // 10ns 時鐘翻轉(zhuǎn)產(chǎn)生 25MHz 時鐘endmodule
2、進行仿真設置
①、右鍵 Run Simulation -> Simulation Settings…
②、設置仿真時間,這里填 200us 即可
3、進行行為級仿真
①、左鍵 Run Simulation -> Run Behavioral Simulation
②、將 vtf_pll_test 下的 pll_inst 下的 clk_inst 的 clk_out1、clk_out2、clk_out3、clk_out_4、reset、locked 拖拽到仿真界面 Name 欄下
③、點擊 Run for 10us,可以看下圖結(jié)果
四、硬件驗證
1、引腳綁定
1、點擊 “Open Elaborated Design”,再打開 Window 下的 I/O Ports
2、查看原理圖
①、T11 -> rst_n,T0 -> clk_out
②、U18 -> sys_clk
③、因此分配情況如下:
④、進行保存
⑤、生成的 pll.xdc 文件如下圖:
2、生成比特流文件
①、點擊 “Generate Bitstream”,直接生成 bit 文件
出現(xiàn)了如下報錯:
[Place 30-172] Sub-optimal placement for a clock-capable IO pin and PLL pair. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_inst/inst/clk_in1_clk_wiz_0] >
clk_inst/inst/clkin1_ibufg (IBUF.O) is locked to IOB_X0Y15clk_inst/inst/plle2_adv_inst (PLLE2_ADV.CLKIN1) is provisionally placed by clockplacer on PLLE2_ADV_X0Y0The above error could possibly be related to other connected instances. Following is a list of
all the related clock rules and their respective instances.Clock Rule: rule_pll_bufg
Status: PASS
Rule Description: A PLL driving a BUFG must be placed on the same half side (top/bottom) of the deviceclk_inst/inst/plle2_adv_inst (PLLE2_ADV.CLKFBOUT) is provisionally placed by clockplacer on PLLE2_ADV_X0Y0and clk_inst/inst/clkf_buf (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y5
把這條提示加入 XDC 約束文件里面即可,原理就是繞過 PAR 的檢查。
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_inst/inst/clk_in1_clk_wiz_0]
②、選擇 Open Hardware Manager 并點擊 OK
③、插上 fpga 仿真器及其電源,選擇 Auto Connect
④、右鍵 xc7z020_1 -> Program Device
3、驗證
找一個示波器用探頭接到 T10 引腳查看輸出,可以看到 25MHz 方波信號
五、資源自取
基于vivado 2017.4 的 pll 測試
我的qq:2442391036,歡迎交流!