zynq网络时钟控制寄存器_ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断...
軟件的定時(shí)中斷很難控制精準(zhǔn)觸發(fā)沿的位置,可以通過(guò) PL-PS 的中斷完成精準(zhǔn)的定時(shí)中斷。PL 的中斷通過(guò) Verilog 代碼產(chǎn)生,這樣緊密結(jié)合 PS-PL 的處理,發(fā)揮各自的優(yōu)勢(shì)。
一、PL 側(cè)定時(shí)中斷
1.實(shí)際要求
① 上升沿中斷;
② 高電平寬度不小于1us;
③ 中斷計(jì)數(shù)器的時(shí)鐘為 200Mhz;
④ 有兩個(gè)中斷: 3ms 和0.5ms
2.Verilog中斷代碼
1 //**************************************************************************2 //*** 名稱 : genintr3ms05ms.v3 //*** 作者 : xianyu_FPGA4 //*** 博客 :https://www.cnblogs.com/xianyufpga/
5 //*** 日期 :2019-08-106 //*** 描述 : 3ms和0.5ms精準(zhǔn)延時(shí)7 //**************************************************************************
8
9
10 modulegenintr3ms05ms11 //====================================================================
12 (13 //input -----------------------------------------
14 input wire clk , //時(shí)鐘,200Mhz
15 input wire rst , //復(fù)位,高電平有效16 //output ----------------------------------------
17 output reg intr3ms , //3ms中斷
18 output reg intr05ms //0.5ms中斷
19 );20 //====================================================================
21 parameter CNT3MS_END = 600000;22 parameter CNT05MS_END = 100000;23 parameter PULSEW = 200 ; //中斷高電平維持時(shí)間24 //====================================================================
25 reg [23:0] cnt3ms ;26 wireadd_cnt3ms ;27 wireend_cnt3ms ;28 reg [23:0] cnt05ms ;29 wireadd_cnt05ms ;30 wireend_cnt05ms ;31
32 //==========================================================================33 //== 0.5ms延時(shí)34 //==========================================================================
35 always @(posedge clk) begin
36 if(rst)37 cnt3ms <= 0;38 else if(add_cnt3ms) begin
39 if(end_cnt3ms)40 cnt3ms <= 0;41 else
42 cnt3ms <= cnt3ms + 1;43 end
44 end
45
46 assign add_cnt3ms = 1;47 assign end_cnt3ms = add_cnt3ms && cnt3ms== CNT3MS_END-1;48
49 always @(posedge clk) begin
50 if(rst) begin
51 intr3ms <= 0;52 end
53 else if(end_cnt3ms) begin
54 intr3ms <= 1;55 end
56 else if(add_cnt3ms && cnt3ms==PULSEW-1) begin
57 intr3ms <= 0;58 end
59 end
60
61 //==========================================================================62 //== 3ms延時(shí)63 //==========================================================================
64 always @(posedge clk) begin
65 if(rst)66 cnt05ms <= 0;67 else if(add_cnt05ms) begin
68 if(end_cnt05ms)69 cnt05ms <= 0;70 else
71 cnt05ms <= cnt05ms + 1;72 end
73 end
74
75 assign add_cnt05ms = 1;76 assign end_cnt05ms = add_cnt05ms && cnt05ms== CNT05MS_END-1;77
78 always @(posedge clk) begin
79 if(rst) begin
80 intr05ms <= 0;81 end
82 else if(end_cnt05ms) begin
83 intr05ms <= 1;84 end
85 else if(add_cnt05ms && cnt05ms==PULSEW-1) begin
86 intr05ms <= 0;87 end
88 end
89
90
91
92 endmodule
3.PL中斷封裝成私有IP
①打開(kāi) Vivado,新建工程,然后選擇菜單欄 Tools --- Create and Package New IP...
②Vivado 打開(kāi)了一個(gè)新的界面,類似于原界面,但是多了一個(gè)選項(xiàng)
這時(shí)如果 Verilog 有語(yǔ)法錯(cuò)誤,Source處會(huì)顯示紅色波浪線。也可以在此新界面修改代碼,修改后保存,頁(yè)面顯示成編輯圖標(biāo),必須點(diǎn)擊更新才行。
③默認(rèn)情況下,復(fù)位是低有效,我們可以手動(dòng)改成高有效
④選擇 Review and Package 可以看到 Package IP ,點(diǎn)擊它即可完成 IP 的封裝
⑤此頁(yè)面自動(dòng)關(guān)閉,回到原頁(yè)面,可以在 Settings --- IP --- Repository 中可以看到這個(gè)自定義 IP,此頁(yè)面也可以手動(dòng)添加第三方 IP
⑥生成 bit 文件并以此加載 SDK。
二、ZYNQ硬中斷的使用
1.進(jìn)入到 Create Block Design 中,輸入 genintr3ms05ms 即可添加該自定義 IP
2.添加 ZYNQ,復(fù)位選上,時(shí)鐘頻率設(shè)置為 200Mhz,同時(shí)記得勾選中斷
3.連線,兩個(gè)中斷,但只有一個(gè)接口,我們借用一個(gè) Concat IP 即可
4.連線可以直接點(diǎn)擊上方 Run 自動(dòng)布線,會(huì)多出一個(gè) Processor System Reset模塊,中斷復(fù)位是高有效,而ZYNQ復(fù)位是低有效,此模塊會(huì)協(xié)調(diào)好。而手動(dòng)布線則可能出錯(cuò)。
5.如果布線時(shí)發(fā)現(xiàn)自定義 IP 需要修改,可以選中該 IP,右鍵進(jìn)入修改
之后就可以進(jìn)入到SDK進(jìn)行中斷代碼編寫了,和普通PL中斷是類似的。
參考資料:
[1]V3學(xué)院FPGA教程
總結(jié)
以上是生活随笔為你收集整理的zynq网络时钟控制寄存器_ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你的电脑正被它挖矿赚钱电脑挖矿能赚钱吗
- 下一篇: 如何选择精品文献如何挑选精品电脑