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