玩轉Zynq連載18——[ex01] 小試牛刀,基于Zynq PL的第一個工程 更多資料共享 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網盤鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c ![]() 騰訊微云鏈接:https://share.weiyun.com/5s6bA0s 百度網盤鏈接:https://pan.baidu.com/s/1XTQtP5LZAedkCwQtllAEyw 提取碼:ld9c 蜂鳴器是一種最簡單的發聲元器件,它的應用也非常廣泛,大都是作為報警或發聲提醒裝置。比如臺式電腦在剛開機時,通常主板上會發出一聲較短的尖銳的“滴……”的鳴叫聲,提示用戶主板自檢通過,可以正常進行后面的啟動;而如果是1長1短或1長2短的鳴叫聲,則表示可能發生了電腦內存或顯卡故障;當然還可以有其他不同的鳴叫聲提示其他的故障,總而言之,可別小看了這顆區區幾毛錢的蜂鳴器,關鍵時刻還挺有用的。可以毫不夸張的說,蜂鳴器也算是一種人機交互的手段。 PWM(Pulse Width Modulation),即脈沖寬度調制,如圖所示,PWM的輸出只有高電平1和低電平0。PWM不停的重復輸出周期為T,其中高電平1時間為t的脈沖,t/T是它的占空比,1/T是它的頻率。
![]() 如圖所示,這是Zstar板上蜂鳴器的電路原理圖,BEEP網絡連接到FPGA的IO上,當BEEP = 1時,三極管Q1的BE導通,則CE也導通,蜂鳴器U2就有電流回路,那么蜂鳴器就會發聲。同理,BEEP = 0時,Q1截止,蜂鳴器無電流回路,那么蜂鳴器就不會發出聲音。
![]() 如圖所示,基于蜂鳴器在FPGA的IO輸出1就發聲、0則不發聲的原理,我們給IO口一個占空比為10%的PWM的信號,讓蜂鳴器間歇性的發聲鳴叫。如果它的頻率高,則發聲就顯得相對尖銳急促一些;如果它的發聲頻率低,則發聲就顯得低沉平緩一些。
![]() 在我們給出的實例代碼中,我們期望產生一個輸出頻率為1Hz(1s)、占空比為10%的PWM信號去驅動蜂鳴器的發聲。因此,我們使用系統時鐘25MHz進行計數,每計數25,000,000次,這個計數器就清零重新計算。因為這個計數器是2進制的,要能夠表達0-24,999,999的每一個計數值,那么這個2進制計數器至少必須是25位的(代碼中取計數器為28位)。此外,為了得到輸出的PWM占空比為10%,那么我們只要判斷計數值小于最大計數值的1/10即2,500,000時,輸出高電平1,反之輸出低電平0。 創建一個最終可以跑在Zynq的PL上的應用工程,最基本的可以歸納為以下幾個步驟。下面我們會逐一進行實踐操作。流程不過是一個熟能生巧的過程,只要大家認真走過一遍,后續大量實例中不斷操作,反復練習就能輕松掌握。
![]() 參考文檔《玩轉Zynq-工具篇:新建Vivado工程.pdf》。 如圖所示,選中Project Manager à Sources à Design Sources,右鍵單擊,彈出菜單中選中Add Sources…。
![]() 圖新建Verilog源碼菜單 接著如圖所示,使用默認選項Add or create design sources,點擊“Next”。
![]() 圖選擇文件類型 如圖所示,單擊Create File按鈕。
![]() 圖新建設計文件 如圖所示,設置創建的文件類型(File type)為Verilog;文件名(File name)為zstar;文件路徑(File location)為默認的 ![]() 圖6.20 設置新建文件名稱和路徑 最后點擊Finish按鈕完成Verilog源文件創建。 隨后還會彈出如圖所示的模塊端口設置頁面,可以直接點擊OK不做設置。
![]() 圖定義模塊 接著還會彈出如圖所示的確認對話框,點擊Yes。
![]() 圖定義模塊確認對話框 如圖所示,雙擊Design Sources下剛剛創建好的zstar.v文件,將彈出源碼,里面有基本的Verilog模塊定義,內容空空如也,需要我們來填充。
![]() 圖6.23 創建好的Verilog源文件 如圖所示,將Verilog代碼填充進去,實現一個完整的設計源碼模塊。 ![]() 如圖所示,選中Project Manager à Constraints à constrs_1,右鍵單擊,在彈出菜單選擇Add Sources…。 ![]() 接著如圖所示,使用默認選項Add or create constraints。 ![]() 如圖所示,單擊Create File按鈕。 ![]() 如圖所示,設置創建的文件類型(File type)為XDC;文件名(File name)為zstar;文件路徑(File location)為默認的 ![]() 圖設置新建文件名稱和路徑 最后點擊Finish按鈕完成約束文件創建。 如圖所示,雙擊Constraints下剛剛創建好的zstar.xdc文件,里面是完全空白的。 ![]() 如圖所示,將這個實例的引腳約束都寫入這個約束文件中。從簡單的語法可以看出,這里約束了zstar中頂層接口信號對應Zynq芯片的引腳號(PACKAGE_PIN)以及電平標準(IOSTANDARD)。 ![]() 如圖所示,工程路徑下新產生的zstar.srcs\source_1和zstar.srcs\constrs_1文件夾分別和Project Manager下的Design Source和Constraints相對應。
![]() 圖工程路徑下對應的文件夾 參考文檔《玩轉Zynq:Vivado中PL的功能仿真.pdf》。 如圖所示,Vivado的編譯主要分為三步,即Run Synthesis(綜合編譯)、Run Implementation(實現編譯)和Generate Bitstream(生成bit流)。一般而言,我們直接點擊Generate Bitstream生成bit文件后就可以進行板級調試。 ![]() 編譯過程中,如圖所示,在Vivado工具的右上角,有當前編譯的狀態指示。 ![]() 如圖所示,編譯完成后,會彈出提示選項窗口,該窗口有多個下一步操作執行的選項可供選擇。大家可以直接點擊Open Hardware Manager進入板級下載調試的界面。 ![]() 如圖示,在工程路徑“…/project/zstar_ex01/zstar.uns/impl_1”下就生成了zstar.bit文件,這是用于燒錄到FPGA在線運行的比特流。 ![]() |