【ZYNQ Ultrascale+ MPSOC FPGA教程】第四章 PL的LED實(shí)驗(yàn)
資料介紹
作者: ALINX
* 本原創(chuàng)教程由芯驛電子科技(上海)有限公司(ALINX)創(chuàng)作,版權(quán)歸本公司所有,如需轉(zhuǎn)載,需授權(quán)并注明出處。
適用于板卡型號(hào):
AXU2CGA/AXU2CGB/AXU3EG/AXU4EV-E/AXU4EV-P/AXU5EV-E/AXU5EV-P /AXU9EG/AXU15EG
實(shí)驗(yàn)Vivado工程為“l(fā)ed”。
對(duì)于ZYNQ來(lái)說(shuō)PL(FPGA)開(kāi)發(fā)是至關(guān)重要的,這也是ZYNQ比其他ARM的有優(yōu)勢(shì)的地方,可以定制化很多ARM端的外設(shè),在定制ARM端的外設(shè)之前先讓我們通過(guò)一個(gè)LED例程來(lái)熟悉PL(FPGA)的開(kāi)發(fā)流程,熟悉Vivado軟件的基本操作,這個(gè)開(kāi)發(fā)流程和不帶ARM的FPGA芯片完全一致。
在本例程中,我們要做的是LED燈控制實(shí)驗(yàn),每秒鐘控制開(kāi)發(fā)板上的LED燈翻轉(zhuǎn)一次,實(shí)現(xiàn)亮、滅、亮、滅的控制。會(huì)控制LED燈,其它外設(shè)也慢慢就會(huì)了。
1. LED硬件介紹
1.1 開(kāi)發(fā)板的PL部分連接了4個(gè)紅色的用戶LED燈。這1個(gè)燈完全由PL控制。如果PL_LED1為高電平,燈則會(huì)滅,否則會(huì)亮。
1.2 我們可以根據(jù)原理圖的連線關(guān)系確定LED和PL管腳的綁定關(guān)系。
1.3 原理圖中以PS_MIO開(kāi)頭的IO都是PS端IO,不需要綁定,也不能用于PL端的引腳綁定
2. 創(chuàng)建Vivado工程
2.1 啟動(dòng)Vivado,在Windows中可以通過(guò)雙擊Vivado快捷方式啟動(dòng)
2.2 在Vivado開(kāi)發(fā)環(huán)境里點(diǎn)擊“Create New Project”,創(chuàng)建一個(gè)新的工程。
2.3 彈出一個(gè)建立新工程的向?qū)Вc(diǎn)擊“Next”
2.4 在彈出的對(duì)話框中輸入工程名和工程存放的目錄,我們這里取一個(gè)led的工程名。需要注意工程路徑“Project location”不能有中文空格,路徑名稱也不能太長(zhǎng)。
2.5 在工程類型中選擇“RTL Project”
2.6 目標(biāo)語(yǔ)言“Target language”選擇“Verilog”,雖然選擇Verilog,但VHDL也可以使用,支持多語(yǔ)言混合編程。
2.7 點(diǎn)擊“Next”,不添加任何文件
2.8 在“Part”選項(xiàng)中,器件家族“Family”選擇“Zynq UltraScale+ MPSoCs”,封裝類型“Package”選擇“sfvc784”,Speed選擇”-1”,Temperature選擇“I”減少選擇范圍。在下拉列表中選擇“xczu2cg-sfvc784-1-i”,“-1”表示速率等級(jí),數(shù)字越大,性能越好,速率高的芯片向下兼容速率低的芯片。
2.9 點(diǎn)擊“Finish”就可以完成以后名為“l(fā)ed”工程的創(chuàng)建。
2.10 Vivado軟件界面
3. 創(chuàng)建Verilog HDL文件點(diǎn)亮LED
3.1 點(diǎn)擊Project Manager下的Add Sources圖標(biāo)(或者使用快捷鍵Alt+A)
3.2 選擇添加或創(chuàng)建設(shè)計(jì)源文件“Add or create design sources”,點(diǎn)擊“Next”
3.3 選擇創(chuàng)建文件“Create File”
3.4 文件名“File name”設(shè)置為“l(fā)ed”,點(diǎn)擊“OK”
3.5 點(diǎn)擊“Finish”,完成“l(fā)ed.v”文件添加
3.6 在彈出的模塊定義“Define Module”,中可以指定“l(fā)ed.v”文件的模塊名稱“Module name”,這里默認(rèn)不變?yōu)椤發(fā)ed”,還可以指定一些端口,這里暫時(shí)不指定,點(diǎn)擊“OK”。
3.7 在彈出的對(duì)話框中選擇“Yes”
3.8 雙擊“l(fā)ed.v”可以打開(kāi)文件,然后編輯
3.9 編寫“l(fā)ed.v”,這里定義了一個(gè)32位的寄存器timer, 用于循環(huán)計(jì)數(shù)0~24999999(1秒鐘), 計(jì)數(shù)到24999999(1秒)的時(shí)候, 寄存器timer變?yōu)?,并翻轉(zhuǎn)四個(gè)LED。這樣原來(lái)LED是滅的話,就會(huì)點(diǎn)亮,如果原來(lái)LED為亮的話,就會(huì)熄滅。編寫好后的代碼如下:
module led( input sys_clk, input rst_n, outputreg[3:0] led ); reg[31:0] timer_cnt; always@(posedge sys_clk ornegedge rst_n) begin if(!rst_n) begin led <=4'd0; timer_cnt <=32'd0; end elseif(timer_cnt >=32'd24_999_999) begin led <=~led; timer_cnt <=32'd0; end else begin led <= led; timer_cnt <= timer_cnt +32'd1; end end endmodule
3.10 編寫好代碼后保存
4. 添加管腳約束
Vivado使用的約束文件格式為xdc文件。xdc文件里主要是完成管腳的約束,時(shí)鐘的約束, 以及組的約束。這里我們需要對(duì)led.v程序中的輸入輸出端口分配到FPGA的真實(shí)管腳上。
4.1 點(diǎn)擊“Open Elaborated Design”
4.2 在彈出的窗口中點(diǎn)擊“OK”按鈕
4.3 在菜單中選擇“Window -> I/O Ports”
4.4 在彈出的I/O Ports中可以看到管腳分配情況
4.5 將復(fù)位信號(hào)rst_n綁定到PL端的按鍵,給LED和時(shí)鐘分配管腳、電平標(biāo)準(zhǔn),完成后點(diǎn)擊保存圖標(biāo)
4.6 彈出窗口,要求保存約束文件,文件名我們填寫“l(fā)ed”,文件類型默認(rèn)“XDC”,點(diǎn)擊“OK”
4.7 打開(kāi)剛才生成的“l(fā)ed.xdc”文件,我們可以看到是一個(gè)TCL腳本,如果我們了解這些語(yǔ)法,完全可以通過(guò)自己編寫led.xdc文件的方式來(lái)約束管腳
下面來(lái)介紹一下最基本的XDC編寫的語(yǔ)法,普通IO口只需約束引腳號(hào)和電壓,管腳約束如下:
set_property PACKAGE_PIN "引腳編號(hào)" [get_ports “端口名稱”]
電平信號(hào)的約束如下:
set_property IOSTANDARD "電平標(biāo)準(zhǔn)" [get_ports “端口名稱”]
這里需要注意文字的大小寫,端口名稱是數(shù)組的話用{ }刮起來(lái),端口名稱必須和源代碼中的名字一致,且端口名字不能和關(guān)鍵字一樣。
電平標(biāo)準(zhǔn)中“LVCMOS33”后面的數(shù)字指FPGA的BANK電壓,LED所在BANK電壓為3.3伏,所以電平標(biāo)準(zhǔn)為“LVCMOS33”。Vivado默認(rèn)要求為所有IO分配正確的電平標(biāo)準(zhǔn)和管腳編號(hào)。
5. 添加時(shí)序約束
一個(gè)FPGA設(shè)計(jì)除了管腳分配以外,還有一個(gè)重要的約束,那就是時(shí)序約束,這里通過(guò)向?qū)Х绞窖菔救绻M(jìn)行一個(gè)時(shí)序約束。
5.1 點(diǎn)擊“Run Synthesis”開(kāi)始綜合
5.2 彈出對(duì)話框點(diǎn)擊“OK”
5.3 綜合完成以后點(diǎn)擊“Cancel”
5.4 點(diǎn)擊“Constraints Wizard”
5.5 在彈出的窗口中點(diǎn)擊“Next”
5.6 時(shí)序約束向?qū)Х治龀鲈O(shè)計(jì)中的時(shí)鐘,這里把“sys_clk_p”頻率設(shè)置為200Mhz,然后點(diǎn)擊“Skip to Finish”結(jié)束時(shí)序約束向?qū)А?/p>
5.7 彈出的窗口中點(diǎn)擊“OK”
5.8 點(diǎn)擊“Finish”
5.9 這個(gè)時(shí)候led.xdc文件已經(jīng)更新,如果xdc文件已經(jīng)打開(kāi),會(huì)提示“Reload”重新加載文件,并保存文件
6. 生成BIT文件
6.1 編譯的過(guò)程可以細(xì)分為綜合、布局布線、生成bit文件等,這里我們直接點(diǎn)擊“Generate Bitstream”,直接生成bit文件。
6.2 在彈出的對(duì)話框中可以選擇任務(wù)數(shù)量,這里和CPU核心數(shù)有關(guān),一般數(shù)字越大,編譯越快,點(diǎn)擊“OK”
6.3 這個(gè)時(shí)候開(kāi)始編譯,可以看到右上角有個(gè)狀態(tài)信息,在編譯過(guò)程中可能會(huì)被殺毒軟件、電腦管家攔截運(yùn)行,導(dǎo)致無(wú)法編譯或很長(zhǎng)時(shí)間沒(méi)有編譯成功。
6.4 編譯中沒(méi)有任何錯(cuò)誤,編譯完成,彈出一個(gè)對(duì)話框讓我們選擇后續(xù)操作,可以選擇“Open Hardware Manger”,當(dāng)然,也可以選擇“Cancel”,我們這里選擇 “Cancel”,先不下載。
7. Vivado仿真
接下來(lái)我們不妨小試牛刀,利用Vivado自帶的仿真工具來(lái)輸出波形驗(yàn)證流水燈程序設(shè)計(jì)結(jié)果和我們的預(yù)想是否一致(注意:在生成bit文件之前也可以仿真)。具體步驟如下:
7.1 設(shè)置Vivado的仿真配置,右擊SIMULATION中Simulation Settings。
7.2 在Simulation Settings窗口中進(jìn)行如下圖來(lái)配置,這里設(shè)置成50ms(根據(jù)需要自行設(shè)定),其它按默認(rèn)設(shè)置,單擊OK完成。
7.3 添加激勵(lì)測(cè)試文件,點(diǎn)擊Project Manager下的Add Sources圖標(biāo),按下圖設(shè)置后單擊Next。
7.4 點(diǎn)擊Create File生成仿真激勵(lì)文件。
在彈出的對(duì)話框中輸入激勵(lì)文件的名字,這里我們輸入名為vtf_led_test。
7.5 點(diǎn)擊Finish按鈕返回。
這里我們先不添加IO Ports,點(diǎn)擊OK。
在Simulation Sources目錄下多了一個(gè)剛才添加的vtf_led_test文件。雙擊打開(kāi)這個(gè)文件,可以看到里面只有module名的定義,其它都沒(méi)有。
7.6 接下去我們需要編寫這個(gè)vtf_led_test.v文件的內(nèi)容。首先定義輸入和輸出信號(hào),然后需要實(shí)例化led_test模塊,讓led_test程序作為本測(cè)試程序的一部分。再添加復(fù)位和時(shí)鐘的激勵(lì)。完成后的vtf_led_test.v文件如下:
`timescale1ns/1ps ////////////////////////////////////////////////////////////////////////////////// // Module Name: vtf_led_test ////////////////////////////////////////////////////////////////////////////////// module vtf_led_test; // Inputs reg sys_clk; reg rst_n ; // Outputs wire[3:0] led; // Instantiate the Unit Under Test (UUT) led uut ( .sys_clk(sys_clk), .rst_n(rst_n), .led(led) ); initial begin // Initialize Inputs sys_clk =0; rst_n =0; #1000; rst_n =1; end //Create clock always#20 sys_clk =~ sys_clk; endmodule
7.7 編寫好后保存,vtf_led_test.v自動(dòng)成了這個(gè)仿真Hierarchy的頂層了,它下面是設(shè)計(jì)文件led_test.v。
7.8 點(diǎn)擊Run Simulation按鈕,再選擇Run Behavioral Simulation。這里我們做一下行為級(jí)的仿真就可以了。
如果沒(méi)有錯(cuò)誤,Vivado中的仿真軟件開(kāi)始工作了。
7.9 在彈出仿真界面后如下圖,界面是仿真軟件自動(dòng)運(yùn)行到仿真設(shè)置的50ms的波形。
由于LED[3:0]在程序中設(shè)計(jì)的狀態(tài)變化時(shí)間長(zhǎng),而仿真又比較耗時(shí),在這里觀測(cè)timer[31:0]計(jì)數(shù)器變化。把它放到Wave中觀察(點(diǎn)擊Scope界面下的uut,再右鍵選擇Objects界面下的timer,在彈出的下拉菜單里選擇Add Wave Window)。
添加后timer顯示在Wave的波形界面上,如下圖所示。
7.10 點(diǎn)擊如下標(biāo)注的Restart按鈕復(fù)位一下,再點(diǎn)擊Run All按鈕。(需要耐心?。。。?,可以看到仿真波形與設(shè)計(jì)相符。(注意:仿真的時(shí)間越長(zhǎng),仿真的波形文件占用的磁盤空間越大,波形文件在工程目錄的xx.sim文件夾)
我們可以看到led的信號(hào)會(huì)變成f,說(shuō)明LED燈會(huì)由亮變滅。
8. 下載
8.1 連接好開(kāi)發(fā)板的JTAG接口,給開(kāi)發(fā)板上電
注意拔碼開(kāi)關(guān)要選擇JTAG模式,也就是全部拔到”O(jiān)N”,“ON”代表的值是0,不用JTAG模式,下載會(huì)報(bào)錯(cuò)。
8.2 在“HARDWARE MANAGER”界面點(diǎn)擊“Auto Connect”,自動(dòng)連接設(shè)備
8.3 可以看到JTAG掃描到arm和FPGA內(nèi)核
8.4 選擇芯片,右鍵“Program Device...”
8.5 在彈出窗口中點(diǎn)擊“Program”
8.6 等待下載
8.7 下載完成以后,我們可以看到PL LED開(kāi)始每秒變化一次。到此為止Vivado簡(jiǎn)單流程體驗(yàn)完成。后面的章節(jié)會(huì)介紹如果把程序燒錄到Flash,需要PS系統(tǒng)的配合才能完成,只有PL的工程不能直接燒寫Flash。在”體驗(yàn)ARM,裸機(jī)輸出”Hello World”一章的常見(jiàn)問(wèn)題中有介紹。
9. 在線調(diào)試
前面介紹了仿真和下載,但仿真并不需要程序燒寫到板子,是比較理想化的結(jié)果,下面介紹Vivado在線調(diào)試方法,觀察內(nèi)部信號(hào)的變化。Vivado有內(nèi)嵌的邏輯分析儀,叫做ILA,可以用于在線觀察內(nèi)部信號(hào)的變化,對(duì)于調(diào)試有很大幫助。在本實(shí)驗(yàn)中我們觀察timer_cnt和led的信號(hào)變化。
9.1 添加ILA IP核
9.1.1 點(diǎn)擊IP Catalog,在搜索框中搜索ila,雙擊ILA的IP
9.1.2 修改名稱為ila,由于要采樣兩個(gè)信號(hào),Probes的數(shù)量設(shè)置為2,Sample Data Depth指的是采樣深度,設(shè)置的越高,采集的信號(hào)越多,同樣消耗的資源也會(huì)越多。
9.1.3 在Probe_Ports頁(yè)面,設(shè)置Probe的寬度,設(shè)置PROBE0位寬為32,用于采樣timer_cnt,設(shè)置PROBE1位寬為4,用于采樣led。點(diǎn)擊OK
彈出界面,選擇OK
再如下設(shè)置,點(diǎn)擊Generate
9.1.4 在led.v中例化ila,并保存
9.1.5 重新生成Bitstream
9.1.6 下載程序
9.1.7 這時(shí)候看到有bit和ltx文件,點(diǎn)擊program
9.1.8 此時(shí)彈出在線調(diào)試窗口,出現(xiàn)了我們添加的信號(hào)
點(diǎn)擊運(yùn)行按鈕,出現(xiàn)信號(hào)的數(shù)據(jù)
也可以觸發(fā)采集,在Trigger Setup窗口點(diǎn)擊“+”,深度選擇timer_cnt信號(hào)
將Radix改為U,也就是十進(jìn)制,在Value中設(shè)置為24999999,也就是timer_cnt計(jì)數(shù)的最大值
再次點(diǎn)擊運(yùn)行,即可以看到觸發(fā)成功,此時(shí)timer_cnt顯示為十六進(jìn)制,而led也在此時(shí)翻轉(zhuǎn)。
9.2 MARK DEBUG
上面介紹了添加ILA IP的方式在線調(diào)試,下面介紹在代碼中添加綜合屬性,實(shí)現(xiàn)在線調(diào)試。
9.2.1 首先打開(kāi)led.v,將ila的例化部分注釋掉
9.2.2 在led和timer_cnt的定義前面添加(* MARK_DEBUG=”true” *),保存文件。
9.2.3 點(diǎn)擊綜合
9.2.4 綜合結(jié)束后,點(diǎn)擊Set Up Debug
9.2.5 彈出的窗口點(diǎn)擊Next
按照默認(rèn)點(diǎn)擊Next
采樣深度窗口,選擇Next
點(diǎn)擊Finish
點(diǎn)擊保存
在xdc文件中即可看到添加的ila核約束
9.2.6 重新生成bitstream
9.2.7 調(diào)試方法與前面一樣,不再贅述。
10. 實(shí)驗(yàn)總結(jié)
本章節(jié)介紹了如何在PL端開(kāi)發(fā)程序,包括工程建立,約束,仿真,在線調(diào)試等方法,在后續(xù)的代碼開(kāi)發(fā)方式中皆可參考此方法。
- Zynq UltraScale+ MPSoC驗(yàn)證數(shù)據(jù)手冊(cè)
- Zynq UltraScale+ MPSoC中的隔離方法
- Zynq UltraScale+ MPSoC的隔離設(shè)計(jì)示例
- 電路理論的基礎(chǔ)知識(shí)第四章電路定理 0次下載
- 米爾電子zynq ultrascale+ mpsoc底板外設(shè)資源清單分享
- 數(shù)字信號(hào)處理第四章IFFT算法PPT課件下載 4次下載
- 計(jì)算機(jī)網(wǎng)絡(luò)第四章網(wǎng)絡(luò)層課件下載 0次下載
- 如何調(diào)試 Zynq UltraScale+ MPSoC VCU DDR 控制器?
- 【ZYNQ Ultrascale+ MPSOC FPGA教程】第一章 MPSoC芯片介紹
- Zynq UltraScale MPSOC數(shù)據(jù)手冊(cè)免費(fèi)下載 20次下載
- 電力系統(tǒng)繼電保護(hù)第四章-輸電線路縱聯(lián)保護(hù)(課件)下載.PPT 0次下載
- 靜噪基礎(chǔ)第四章_空間傳導(dǎo)及其應(yīng)對(duì)措施 2次下載
- 數(shù)字信號(hào)處理 第四章 7次下載
- 《測(cè)控電路》習(xí)題完整參考答案(第四章) 0次下載
- 高頻電子線路第四章答案
- 針對(duì)UltraScale/UltraScale+芯片DFX應(yīng)考慮的因素有哪些(1) 537次閱讀
- Xilinx ZYNQ UltraScale+系列產(chǎn)品介紹 2405次閱讀
- FPGAs,Zynq和Zynq MPSoC器件的特點(diǎn) 2275次閱讀
- 基于Xilinx Zynq UltraScale+ RFSoC ZCU216評(píng)估套件詳細(xì)內(nèi)容介紹 9162次閱讀
- 基于Xilinx Zynq ultraScale+ 系列FPGA的AXU2CGB 開(kāi)發(fā)板評(píng)測(cè) 9051次閱讀
- 米爾科技Zynq UltraScale+ MPSoC技術(shù)參考手冊(cè)介紹 2975次閱讀
- 詳解Xilinx公司Zynq? UltraScale+?MPSoC產(chǎn)品 3184次閱讀
- Xilinx Zynq UltraScale MPSoC可擴(kuò)展電源設(shè)計(jì) 1950次閱讀
- Xilinx Kintex UltraScale+ FPGA KCU116評(píng)估套件主要性能和優(yōu)勢(shì) 6734次閱讀
- Zynq UltraScale+ MPSoC ZCU102評(píng)估套件解決方案 8640次閱讀
- Enea OSE可實(shí)現(xiàn)對(duì)Xilinx UltraScale+ MPSoC的支持 2790次閱讀
- Xilinx基于ARM的Zynq-7000和Zynq UltraScale+ MPSoC及RFSoC器件是否存在安全漏洞 2620次閱讀
- Zynq UltraScale+ MPSoC 上的多個(gè)Linux UIO設(shè)計(jì) 3219次閱讀
- 用ZYNQ MPSoC玩DOOM! 2539次閱讀
- Ti推出面向Zynq UltraScale+ MPSoC的電源參考設(shè)計(jì) 3588次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1491次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 95次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
- 4.28 MB | 18次下載 | 4 積分
- 5開(kāi)關(guān)電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費(fèi)
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機(jī)和 SG3525的程控開(kāi)關(guān)電源設(shè)計(jì)
- 0.23 MB | 4次下載 | 免費(fèi)
- 8基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537793次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論
查看更多