FPGA实战(五)时钟IP核(MMCM PLL)
來(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)修改
修改后為:
其實(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 ) );endmodule3.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))
3.5 生成比特流文件
見我之前的博客
Vivado 2018.3入門教程(三):生成比特流文件+硬件連接.
3.6 硬件連接
總結(jié)
以上是生活随笔為你收集整理的FPGA实战(五)时钟IP核(MMCM PLL)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: input输入框使用正则限制为数字、英文
- 下一篇: 奔驰漏油维权调查结果公布!罚款100万