電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>可編程邏輯>【ZYNQ Ultrascale+ MPSOC FPGA教程】第四章 PL的LED實(shí)驗(yàn)

【ZYNQ Ultrascale+ MPSOC FPGA教程】第四章 PL的LED實(shí)驗(yàn)

2021-01-22 | pdf | 2.22MB | 次下載 | 2積分

資料介紹

作者: 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ā)方式中皆可參考此方法。

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費(fèi)下載
  2. 0.00 MB  |  1491次下載  |  免費(fèi)
  3. 2單片機(jī)典型實(shí)例介紹
  4. 18.19 MB  |  95次下載  |  1 積分
  5. 3S7-200PLC編程實(shí)例詳細(xì)資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開(kāi)關(guān)電源原理及各功能電路詳解
  10. 0.38 MB  |  11次下載  |  免費(fèi)
  11. 6100W短波放大電路圖
  12. 0.05 MB  |  4次下載  |  3 積分
  13. 7基于單片機(jī)和 SG3525的程控開(kāi)關(guān)電源設(shè)計(jì)
  14. 0.23 MB  |  4次下載  |  免費(fèi)
  15. 8基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
  16. 0.11 MB  |  4次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費(fèi)
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費(fèi)
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費(fèi)
  7. 4LabView 8.0 專業(yè)版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費(fèi)
  9. 5555集成電路應(yīng)用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費(fèi)
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費(fèi)
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費(fèi)
  15. 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  16. 未知  |  21539次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537793次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191183次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183277次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138039次下載  |  免費(fèi)