-
IP功能與I/O描述:
-
開啟Vivado專案,主選單Tool/Create and Package New IP。
-
Next>到下一頁,選取Create a new AXI4 peripheral,再Next>到下一頁填寫IP相關資訊(名字、版本等等)。
- Next>到下一頁,設定好暫存器數量後繼續往下,選擇Edit IP然後Finish。
- 此時會自動開啟一個新的Vivado視窗,這是IP的專案,在Design Sources中會看到兩個.v檔(.v for verilog and .vhd for VHDL),檔名是根據IP名稱取的,因此可能略有不同。
- GPIO_irq_v1_0(GPIO_irq_v1_0.v): 包裝IP的hdl,只添加或刪除I/O。
- GPIO_irq_v1_0_S00_AXI_inst:GPIO_irq_v1_0_S00_AXI(GPIO_irq_v1_0_S00_AXI.v): IP本體,要添加或刪除功能都在此檔案內。
- 先修改GPIO_irq_v1_0_S00_AXI.v,並存檔。
- 再修改GPIO_irq_v1_0.v,存檔後確定沒有語法錯誤的提示。
- 回到Package IP頁面中的Port and Interfaces,點擊上排藍字,自動合併改變。
- irq上按滑鼠右鍵,Edit Interface,將SENSITIVITY的值改成EDGE_RISING。
- clk_lf上按滑鼠右鍵,Auto Infer Single Bit Interface/Data。
- 換到File Groups頁面,一樣自動合併改變,確定都打綠色勾之後,切換到Review and Package,Re-Package IP重新打包IP,只要IP有更動都需要這些步驟。
- 會出現要不要關閉此IP專案,通常在開發階段我是不會關的,如果還要改的話就直接改,不需要重新開啟。
- 叫出MPSoC、ILA和自定義IP GPIP_irq。
- MPSoC: Run Block Automation和Run Conneciton Automation按一按,不需額外設定。
- ILA: 設定兩個Probe,深度皆為1(參考:zcu111-ILA步驟3),分別連接到irq與clk_lf。
- GPIP_irq: AXI的部分也使用Run Conneciton Automation,clk_lf則用Make External拉出(參考:zcu111-EMIO步驟4),irq直接拉到MPSoC上的pl_ps_irq。
-
加入一個約束檔top.xdc(參考:zcu111-EMIO步驟7),指定clk_lf接到實體按鈕GPIO_SW_C。
-
跑Generate Bitstream,然後開啟SDK(參考:zcu111-EMIO步驟8~11)。
-
在Vivado中開啟Hardware Manager(參考:zcu111-ILA步驟7~12)。
-
在SDK中開啟一個Application Project(參考:zcu111-EMIO步驟12~15),將main.c中的內容複製到專案內的*.c檔,並編譯確認無error,即可燒錄(參考:zcu111-EMIO步驟18)。
-
回到Vivado中的Hardware Manager,本設計是當clk_lf為正緣時,irq就會asserted,因此調整ILA觸發條件,當clk_lf為R(0-to-1 transition),設定好後按Run trigger等待觸發條件完成。
- 按下按鈕(對應到約束檔的那個按紐),ILA會抓到正緣訊號,但因Enable flag(slv_reg0[0])為0,因此irq不會有反應。
- 回到SDK將slv_reg0[0]設定為1,並在hw_ila視窗按Run trigger,可預期若此時按下按鈕,irq就會asserted。
- 按下按鈕,觀察波型。