ZYNQ筆記(6):普通自定義IP封裝實現PL精准定時中斷


  軟件的定時中斷很難控制精准觸發沿的位置,可以通過 PL-PS 的中斷完成精准的定時中斷。PL 的中斷通過 Verilog 代碼產生,這樣緊密結合 PS-PL 的處理,發揮各自的優勢。

 

一、PL 側定時中斷

1.實際要求

 

① 上升沿中斷;
② 高電平寬度不小於1us;
③ 中斷計數器的時鍾為 200Mhz;
④ 有兩個中斷: 3ms 和 0.5ms

 

2.Verilog中斷代碼

 1 //**************************************************************************
 2 // *** 名稱 : genintr3ms05ms.v
 3 // *** 作者 : xianyu_FPGA
 4 // *** 博客 :https://www.cnblogs.com/xianyufpga/
 5 // *** 日期 :2019-08-10
 6 // *** 描述 : 3ms和0.5ms精准延時
 7 //**************************************************************************
 8 
 9 
10 module genintr3ms05ms
11 //==================<端口>==================================================
12 (
13 //input -----------------------------------------
14 input  wire                 clk                 , //時鍾,200Mhz
15 input  wire                 rst                 , //復位,高電平有效
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               ; //中斷高電平維持時間
24 //==================<信號>==================================================
25 reg  [23:0]                 cnt3ms              ;
26 wire                        add_cnt3ms          ;
27 wire                        end_cnt3ms          ;
28 reg  [23:0]                 cnt05ms             ;
29 wire                        add_cnt05ms         ;
30 wire                        end_cnt05ms         ;
31 
32 //==========================================================================
33 //==    0.5ms延時
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延時
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

①打開 Vivado,新建工程,然后選擇菜單欄 Tools --- Create and Package New IP...

②Vivado 打開了一個新的界面,類似於原界面,但是多了一個選項

這時如果 Verilog 有語法錯誤,Source處會顯示紅色波浪線。也可以在此新界面修改代碼,修改后保存,頁面顯示成編輯圖標,必須點擊更新才行。

③默認情況下,復位是低有效,我們可以手動改成高有效

④選擇 Review and Package 可以看到 Package IP ,點擊它即可完成 IP 的封裝

⑤此頁面自動關閉,回到原頁面,可以在 Settings --- IP --- Repository 中可以看到這個自定義 IP,此頁面也可以手動添加第三方 IP

⑥生成 bit 文件並以此加載 SDK。

 

二、ZYNQ硬中斷的使用

1.進入到 Create Block Design 中,輸入 genintr3ms05ms 即可添加該自定義 IP

2.添加 ZYNQ,復位選上,時鍾頻率設置為 200Mhz,同時記得勾選中斷

3.連線,兩個中斷,但只有一個接口,我們借用一個 Concat IP 即可

 4.連線可以直接點擊上方 Run 自動布線,會多出一個 Processor System Reset模塊,中斷復位是高有效,而ZYNQ復位是低有效,此模塊會協調好。而手動布線則可能出錯。

5.如果布線時發現自定義 IP 需要修改,可以選中該 IP,右鍵進入修改

 

  之后就可以進入到SDK進行中斷代碼編寫了,和普通PL中斷是類似的。

參考資料:

    [1]V3學院FPGA教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM