日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

FPGA实战(五)时钟IP核(MMCM PLL)

發(fā)布時(shí)間:2024/1/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA实战(五)时钟IP核(MMCM PLL) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

來(lái)自正點(diǎn)原子的學(xué)習(xí)筆記
(關(guān)于開發(fā)板資源的相關(guān)理論我不太懂)
(本文側(cè)重于簡(jiǎn)單的理解和應(yīng)用層面

時(shí)鐘IP核(MMCM PLL)

  • 1時(shí)鐘資源簡(jiǎn)介
  • 2 硬件設(shè)計(jì)
  • 3時(shí)鐘IP核的使用
    • 3.1 創(chuàng)建和配置時(shí)鐘IP核
    • 3.2 創(chuàng)建模塊來(lái)例化時(shí)鐘IP核
      • 3.2.1 模塊端口定義
      • 3.2.2 尋找IP核的資源:例化模板
    • 3.3 仿真
      • 3.3.1 進(jìn)入仿真
      • 3.3.2 記錄當(dāng)時(shí)出的錯(cuò)
      • 3.3.3 創(chuàng)建仿真文件
      • 3.3.4 編寫tb文件/激勵(lì)文件
      • 3.3.5 重新仿真
      • 3.3.6 仿真
        • 3.3.6.1 基本操作
        • 3.3.6.2 測(cè)量sys_clk信號(hào)的時(shí)鐘頻率
        • 3.3.6.3 測(cè)量clk_100m信號(hào)的時(shí)鐘頻率
        • 3.3.6.4 測(cè)量clk_100m_180deg信號(hào)的時(shí)鐘頻率
        • 3.3.6.5 測(cè)量clk_50m信號(hào)的時(shí)鐘頻率
        • 3.3.6.6 測(cè)量clk_25m信號(hào)的時(shí)鐘頻率
    • 3.4 管腳分配
    • 3.5 生成比特流文件
    • 3.6 硬件連接

1時(shí)鐘資源簡(jiǎn)介

時(shí)鐘資源主要是對(duì)輸入的時(shí)鐘進(jìn)行倍頻、分頻、調(diào)整相位。

全局時(shí)鐘是一種專用的互聯(lián)網(wǎng)絡(luò),可以降低時(shí)鐘的偏斜、占空比的時(shí)鐘、功耗
區(qū)域時(shí)鐘獨(dú)立于全局時(shí)鐘
一個(gè)CMT包含了一個(gè)MMCM和一個(gè)PL。
ZYNQ7020包括了4個(gè)CMT

2 硬件設(shè)計(jì)

實(shí)驗(yàn)任務(wù):輸出不同頻率的時(shí)鐘,包括倍頻、分頻,以及時(shí)鐘相位的偏移。
我們通過(guò)時(shí)鐘IP核輸出的時(shí)鐘是連接到了擴(kuò)展口上的引腳。

可以通過(guò)示波器來(lái)測(cè)試幾個(gè)單口上的時(shí)鐘,從而驗(yàn)證通過(guò)時(shí)鐘IP核輸出的時(shí)鐘是否正確。

3時(shí)鐘IP核的使用

3.1 創(chuàng)建和配置時(shí)鐘IP核

賽靈思提供的IP核在這兒

接下來(lái)對(duì)IP核進(jìn)行配置
通常保持默認(rèn)就好了,不需要做額外的設(shè)置。
往下滑動(dòng)繼續(xù)配置
點(diǎn)擊output clocks對(duì)輸出的時(shí)鐘進(jìn)行配置。

再對(duì)輸出的時(shí)鐘進(jìn)行命名
下面也保持默認(rèn),不進(jìn)行修改

進(jìn)行下一項(xiàng)port renaming配置(保持默認(rèn))
這是最后設(shè)置的總結(jié),然后點(diǎn)擊OK進(jìn)行創(chuàng)建
然后彈出來(lái)的界面,選擇IP核最大為4來(lái)生成,點(diǎn)擊generate
然后進(jìn)行等待

直到顯示為ready
然后可以看到一個(gè)圖標(biāo),表示已經(jīng)生成好了。之后如果需要修改的話,直接雙擊圖標(biāo),按照之前的步驟進(jìn)行修改。

3.2 創(chuàng)建模塊來(lái)例化時(shí)鐘IP核

3.2.1 模塊端口定義

//1 模塊端口定義 module ip_clk_wiz(input sys_clk , //系統(tǒng)時(shí)鐘input sys_rst_n , //系統(tǒng)復(fù)位,低電平有效//輸出時(shí)鐘output clk_100m , //100Mhz時(shí)鐘頻率output clk_100m_180deg, //100Mhz時(shí)鐘頻率,相位偏移180度output clk_50m , //50Mhz時(shí)鐘頻率output clk_25m //25Mhz時(shí)鐘頻率//注意最后一個(gè)端口信號(hào)不要添加逗號(hào)!);

3.2.2 尋找IP核的資源:例化模板

然后這樣點(diǎn)擊來(lái)尋找IP核的資源

然后拷貝這一段在代碼里(見圖片)
,并做適當(dāng)?shù)男薷?#xff0c;把連接的端口的名稱對(duì)應(yīng)修改
修改后為:

//1 先編寫端口名 module ip_clk_wiz(input sys_clk , //系統(tǒng)時(shí)鐘input sys_rst_n , //系統(tǒng)復(fù)位,低電平有效//輸出時(shí)鐘output clk_100m , //100Mhz時(shí)鐘頻率output clk_100m_180deg, //100Mhz時(shí)鐘頻率,相位偏移180度output clk_50m , //50Mhz時(shí)鐘頻率output clk_25m //25Mhz時(shí)鐘頻率//最后一個(gè)端口信號(hào)不用加上逗號(hào),);//2 wire define聲明信號(hào) wire locked;//MMCM/PLL IP核的例化 clk_wiz_0 instance_name(// Clock out ports.clk_out1_100m(clk_100m), // output clk_out1_100m.clk_out2_100m_180(clk_100m_180deg), // output clk_out2_100m_180.clk_out3_50m(clk_50m), // output clk_out3_50m.clk_out4_25m(clk_25m), // output clk_out4_25m// Status and control signals.reset(~sys_rst_n), // input reset低電平有效的復(fù)位信號(hào).locked(locked), // output locked// Clock in ports.clk_in1(sys_clk)); // input clk_in1 //其實(shí)就是把上面定義的端口信號(hào),除了這次不用的locked之外,把下面括號(hào)里的都替換成上面對(duì)應(yīng)的就行 endmodule

其實(shí)就是把上面定義的端口信號(hào),除了這次不用的locked之外,把下面括號(hào)里的都替換成上面對(duì)應(yīng)的就行
這樣就例化好了時(shí)鐘模塊

3.3 仿真

到剛才那里模塊已經(jīng)例化完成,如果有開發(fā)板的話可以直接分配引腳過(guò)后,生成比特流文件然后用示波器測(cè)量各個(gè)引腳的輸出信號(hào)。
但是這里,我們可以采用仿真來(lái)實(shí)現(xiàn)這些功能。

3.3.1 進(jìn)入仿真

注意是左鍵點(diǎn)擊Run Simulation,然后開始進(jìn)行功能的仿真
(右鍵點(diǎn)擊出來(lái)的是setting)

3.3.2 記錄當(dāng)時(shí)出的錯(cuò)

當(dāng)時(shí)第一次弄得時(shí)候報(bào)錯(cuò)了,,,,也看不懂,不過(guò)以上代碼都是第二次成功的代碼,放心使用

此處記錄一下

大概率時(shí)當(dāng)時(shí)我直接復(fù)制粘貼的正點(diǎn)原子的代碼的問(wèn)題
信號(hào)這些不適配,
建議還是老老實(shí)實(shí)地把IP的那段資源復(fù)制過(guò)去,稍微調(diào)一調(diào)


3.3.3 創(chuàng)建仿真文件

然后就進(jìn)入了這個(gè)界面
可以發(fā)現(xiàn)時(shí)鐘和復(fù)位的信號(hào)都是藍(lán)色的信號(hào),說(shuō)明是不定態(tài)
接下來(lái)就是給它添加激勵(lì)文件,然后才能進(jìn)行仿真

創(chuàng)建一個(gè)仿真文件,點(diǎn)擊OK。

然后,在這個(gè)路徑下就可以找到tb文件

3.3.4 編寫tb文件/激勵(lì)文件

值得注意的是!這一次,仿真的時(shí)候,**這一行語(yǔ)句不要?jiǎng)h除!**與平時(shí)寫源文件的時(shí)候不一樣!

`timescale 1ns / 1psmodule tb_ip_clk_wiz(); //1 聲明端口信號(hào) reg sys_clk; reg sys_rst_n;wire clk_100m; wire clk_100m_180deg; wire clk_50m; wire clk_25m; //3 生成時(shí)鐘的反轉(zhuǎn)信號(hào) always #10 sys_clk = ~sys_clk; //延時(shí)10nm,時(shí)鐘切換一次,這樣系統(tǒng)時(shí)鐘就是一個(gè)50Mhz的時(shí)鐘了//2 對(duì)時(shí)鐘和復(fù)位進(jìn)行初始化 initial beginsys_clk = 1'b0;sys_rst_n = 1'b0;#200//延時(shí)200sys_rst_n = 1'b1; end //4 對(duì)所要測(cè)試的模塊進(jìn)行例化 類似于函數(shù)調(diào)用 ip_clk_wiz u_ip_clk_wiz(.sys_clk (sys_clk ),.sys_rst_n (sys_rst_n ),.clk_100m (clk_100m ),.clk_100m_180deg (clk_100m_180deg),.clk_50m (clk_50m ),.clk_25m (clk_25m ) );endmodule

3.3.5 重新仿真

然后點(diǎn)擊,重新登入仿真

這里的仿真同樣沒有出現(xiàn)。
之前點(diǎn)擊run simulation 的時(shí)候,它是默認(rèn)把ip_clk_wiz當(dāng)成了頂層文件的,新輸入的這個(gè)tb模塊其實(shí)并沒有添加進(jìn)來(lái)。

這里需要我們先關(guān)掉,再重新進(jìn)入仿真
SIMULATION,右鍵點(diǎn)擊關(guān)掉

然后再重新進(jìn)入

可以看到現(xiàn)在已經(jīng)出現(xiàn)了這個(gè)tb文件了


所以說(shuō)平時(shí)我們應(yīng)該先添加tb文件再進(jìn)行功能仿真!!!!!!!!!!!!
應(yīng)該都很熟悉這個(gè)操作了,里面添加1約束文件(IO分配)2 源文件3 仿真文件
推薦這個(gè)操作!

3.3.6 仿真

3.3.6.1 基本操作

點(diǎn)擊zoom fit顯示所有的波形


是這個(gè)樣子

然后運(yùn)行10微妙

再點(diǎn)擊zoom fit重新顯示所有的波形
點(diǎn)擊放大

這里還少了一個(gè)lock 的信號(hào),我們把它添加進(jìn)來(lái)。

然后點(diǎn)擊重新運(yùn)行

運(yùn)行10微妙顯示所有的波形
然后進(jìn)行放大


然后繼續(xù)放大

3.3.6.2 測(cè)量sys_clk信號(hào)的時(shí)鐘頻率

在測(cè)量開始之前,先提醒一下!為了結(jié)果!(也就是接下來(lái)第三張圖的紅色字部分!) 設(shè)置marker的時(shí)候,一定要在locker信號(hào)變?yōu)楦唠娖街?#xff01;

將黃色得線停留在sys_clk得上升沿,點(diǎn)擊add marker ,添加一個(gè)標(biāo)記


再點(diǎn)擊另外一個(gè)上升沿,add marker
(等于說(shuō)是要么選擇一致,要么上升沿,要么下降沿,這樣測(cè)出來(lái)就是一個(gè)周期。)


然后單擊左邊的線,可以看到下方多了一個(gè)黃色的條,可以看出間隔是20ns,說(shuō)明sys_clk是50Mhz!!

3.3.6.3 測(cè)量clk_100m信號(hào)的時(shí)鐘頻率

先點(diǎn)擊藍(lán)色的線,右鍵選擇delete all markers

點(diǎn)擊100m的上升沿,添加一個(gè)藍(lán)色的marker,再添加另一個(gè)上升沿的藍(lán)色標(biāo)記
可以看到,周期是10ns,說(shuō)明是100Mhz。驗(yàn)證成功

3.3.6.4 測(cè)量clk_100m_180deg信號(hào)的時(shí)鐘頻率

剛好跟clk_100相位相反,說(shuō)明OK

3.3.6.5 測(cè)量clk_50m信號(hào)的時(shí)鐘頻率

跟上面操作一樣

3.3.6.6 測(cè)量clk_25m信號(hào)的時(shí)鐘頻率

然后關(guān)閉仿真的界面,可以選擇保存

接下來(lái)進(jìn)行開發(fā)板上驗(yàn)證設(shè)計(jì)

3.4 管腳分配

具體參見這個(gè)博客 Vivado 2018.3入門教程(二):邏輯編寫+IO配置.
輸出的時(shí)鐘需要手動(dòng)進(jìn)行分配(其實(shí)就是改個(gè)名字,改個(gè)引腳號(hào)

set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk] set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports sys_rst_n] //輸出的時(shí)鐘 set_property -dict {PACKAGE_PIN B19 IOSTANDARD LVCMOS33} [get_ports clk_100m] set_property -dict {PACKAGE_PIN C20 IOSTANDARD LVCMOS33} [get_ports clk_100m_180deg] set_property -dict {PACKAGE_PIN P19 IOSTANDARD LVCMOS33} [get_ports clk_50m] set_property -dict {PACKAGE_PIN N18 IOSTANDARD LVCMOS33} [get_ports clk_25m]

3.5 生成比特流文件

見我之前的博客
Vivado 2018.3入門教程(三):生成比特流文件+硬件連接.

3.6 硬件連接

總結(jié)

以上是生活随笔為你收集整理的FPGA实战(五)时钟IP核(MMCM PLL)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。