亚洲日韩久久|国偷自产一区二区三区蜜臀国|国产一区二区日韩|99热这里只亚洲无码,无码

紫光同創(chuàng)PGL22G開發(fā)平臺試用連載(2)---PDS軟件試用

日期:2020-07-22 來源:電子創(chuàng)新網(wǎng)作者:LuoGuibin閱讀:137

作者:羅桂斌

一款好用的FPGA永遠(yuǎn)離不開強(qiáng)大的開發(fā)工具作為支持。對于設(shè)計(jì)FPGA的公司而言,設(shè)計(jì)出優(yōu)秀的FPGA器件還不足以獲得市場和FPGA開發(fā)人員的青睞。優(yōu)秀的開發(fā)工具軟件卻能最快速度的討好一線工程,培養(yǎng)他們的開發(fā)流程和使用習(xí)慣。一旦習(xí)慣了一款開發(fā)工具之后,再使用其他家的工具,只要不符合之前的經(jīng)驗(yàn)就會覺得這個(gè)工具不好用、不人性。這種先入為主的情況,各大廠家也是心知肚明,所以才會積極的推進(jìn)自家的器件在大學(xué)的推廣。這些未來的FPGA工程師一旦適應(yīng)了某一家的開發(fā)思想和流程,當(dāng)他們走上工作崗位之后,也會毫不猶豫地選擇自己熟悉的器件。培養(yǎng)自己的潛在客戶,是面向未來的投資。

Quartus、Vivado和Diamond,相信前兩個(gè)大家都比較熟悉,Diamond是Lattice的FPGA開發(fā)工具。Quartus和Vivado都是業(yè)界比較優(yōu)秀的軟件,可以完成FPGA從評估、設(shè)計(jì)、調(diào)試的各個(gè)環(huán)節(jié)。FPGA開發(fā)軟件都是按照FPGA的開發(fā)流程來設(shè)計(jì)的,下面來簡要回顧一下FPGA的開發(fā)流程:

  1. FPGA選型、資源和功耗評估;
  2. FPGA RTL代碼、約束設(shè)計(jì);
  3. RTL代碼仿真和驗(yàn)證;
  4. FPGA版本集成和綜合(Synthsis);
  5. 布局布線(Place and Route)和生成bitstream文件;
  6. 上板調(diào)試;
  7. 發(fā)布FPGA版本

以上各個(gè)環(huán)節(jié)其實(shí)都是可以在廠商提供的集成開發(fā)環(huán)境中完成的,Quartus和Vivado自然不用多說,相信大家再熟悉不過了。今天我們要看試用的主角-PDS是否能夠完成以上各個(gè)環(huán)節(jié)的開發(fā)。

PDS的安裝很容易,只要按照軟件的安裝教程操作即可。需要注意的是,PDS需要到紫光通創(chuàng)的官網(wǎng)(https://www.pangomicro.com/support/License-pds/index.html)申請PDS和Synplify的Node-lock Lisence,需要電腦網(wǎng)卡的MAC地址。官方審核通過之后,會以郵件附件的形式將Lisence發(fā)送給你。

PDS安裝過程很順利,然后打開一個(gè)demo工程led_test,功能是板上4個(gè)LED流水燈。重新綜合和布局布線,然后下載,一切順利,板上LED輪流點(diǎn)亮,試用結(jié)束!

如果就這樣敷衍的試用一下肯定是不行的,作為一個(gè)專業(yè)的FPGA工程師,可是每天都要和開發(fā)工具斗爭的,所以肯定要按照流程走一下,看看各個(gè)環(huán)節(jié)表現(xiàn)如何啊。

首先一般公司在開發(fā)一款產(chǎn)品的時(shí)候,F(xiàn)PGA設(shè)計(jì)可不是從零開始,大部分的代碼都是復(fù)用和移植。所以在評估資源的時(shí)候都是先集成一個(gè)近似的版本出來,綜合和布局布線,分析資源利用報(bào)告和功耗評估報(bào)告,初步評估資源的使用情況和功耗。在評估的基礎(chǔ)上留出一定的裕量,比如30%;當(dāng)然是按照資源占用率最多的一項(xiàng)資源,比如IO、BRAM或DSP等。

至于仿真驗(yàn)證就不用多說了,我從來沒用過Quartus和Vivado里面的仿真器,因?yàn)槎紱]有Modelsim/Questsim/VCS好用啊。實(shí)際上Quartus的仿真器關(guān)聯(lián)的也是Modelsim。Vivado集成了自己的仿真器,但是我沒用過(編譯、仿真速度和可視化肯定不如Modelsim)。

那么我直接打開了一個(gè)ov5640_ddr_hdmi的demo工程,在這個(gè)基礎(chǔ)上試試PDS。這里提示大家一下,打開help->HelpTopics,有關(guān)于PDS操作的說明文檔。重點(diǎn)是中文!中文!中文!

RTL代碼和約束開發(fā)

RTL代碼開發(fā)沒什么可說的,大家直接使用自己順手的編輯器和插件就好了,F(xiàn)PGA開發(fā)工具里的文本編輯器沒有一個(gè)是好用的。PDS的約束沒有使用標(biāo)準(zhǔn)的sdc文件,而是一個(gè)fdc文件。但是語法都類似。如果不懂語法可以直接使用PDS的約束編輯器開發(fā)約束,常用的基本約束都有:時(shí)鐘約束、輸入輸出延時(shí)和時(shí)序例外。引腳約束也可以在約束編輯器的Device->IO中設(shè)置,這一點(diǎn)跟Quartus一樣,引腳比較多的時(shí)候可能工作量大一點(diǎn),好在引腳約束只需要項(xiàng)目開始的時(shí)候編寫一次就行了,之后創(chuàng)建新工程的時(shí)候直接把約束文件拷貝過來就行了。

綜合(Synthsis)

綜合器絕對是FPGA工具的核心組件,直接決定了綜合出來的電路實(shí)現(xiàn)。即使是Intel和Xilinx這樣的巨頭在這方面做的也不是很好,綜合速度和效率并不是最好的。Synopsys這家公司做ASIC設(shè)計(jì)的同行應(yīng)該再熟悉不過了,Synopsys和Mentor是ASIC設(shè)計(jì)領(lǐng)域永遠(yuǎn)繞不過的兩大家,其提供了ASIC全流程的開發(fā)工具。在FPGA/CPLD領(lǐng)域也一樣,Synopsys的Synplify是各家開發(fā)工具都支持的第三方綜合器。

PDS提供了兩個(gè)綜合器:ADS和Synplify,在Project Setting→Part中可以選擇。ADS應(yīng)該是PDS內(nèi)置的綜合器,Synplify是第三方綜合器,需要在紫光同創(chuàng)官網(wǎng)申請OEM Lisence。那這兩個(gè)綜合器哪個(gè)更好一些呢?我很快得出了結(jié)論,下面來看兩個(gè)綜合器對同一個(gè)工程的綜合結(jié)果。

圖1.ADS綜合結(jié)果(上)Synplify綜合結(jié)果(下)

這個(gè)工程的資源占用率并不是很高,但是ADS卻有時(shí)序不過的情況,Synplify則沒有出現(xiàn)時(shí)序問題。出于好奇,我還是打開了時(shí)序報(bào)告和Design Editor看看是哪里時(shí)序不過。又對比了一下Synplify同一個(gè)端口的路徑有沒有問題。

圖2.資源利用率報(bào)告

圖3.ADS最差路徑(左)和Synplify最差路徑(右)

雖然看起來差不多,但是結(jié)果還是說明Synplify會好一些,這也是官方為什么默認(rèn)使用Synplify作為綜合器的原因吧?

有時(shí)候在綜合的時(shí)候不確定某些資源和信號是否被優(yōu)化掉,偶爾會打開RTL視圖(Schematic)看看連線和端口有沒有別優(yōu)化掉。使用不同的綜合器,RTL 視圖也是不一樣的,Synplify會另外自動(dòng)打開,ADS則還是在PDS里面。貌似還是Synplify好看一些呢。

圖4.ADS RTL視圖

圖5.Synplify RTL視圖

布局布線(Place and Route)

其實(shí)在綜合和布局布線中間應(yīng)該還有一個(gè)步驟是-映射(Mapping),即把綜合出來的電路映射成FPGA中的資源。但是在PDS中沒有體現(xiàn)這一個(gè)步驟,咱也不知道,咱也不敢問。布局布線器也是FPGA開發(fā)工具中的核心技術(shù),直接決定了能否布通和時(shí)序是否滿足。布局布線的細(xì)節(jié)就不得而知了,但是可以對實(shí)際的布局布線結(jié)果進(jìn)行一下分析。

圖6.工程布局布線結(jié)果

這里想要重點(diǎn)夸一波PDS的Design Editor功能,通過這個(gè)視圖可以很清楚的看到FPGA內(nèi)部資源的分布和架構(gòu)??梢院唵蔚目匆幌聨讉€(gè)基本的資源排布。

圖7.基本資源排布

圖8.布線資源

而且顯示這么多的資源和布線,我這么差的機(jī)器一點(diǎn)也不卡,很流暢。想想Vivado打開Device View的時(shí)候,我要感動(dòng)的哭了。

這里的FPGA基本資源中有一個(gè)很有趣的東西,叫做SRB(Signal Relax Block),我在官方手冊里沒有找到關(guān)于他的細(xì)節(jié)介紹,但是很明顯他是負(fù)責(zé)完成FPGA內(nèi)部走線互聯(lián)的開關(guān)矩陣,相當(dāng)于Xilinx FPGA的SwitchBox。每一個(gè)CLM旁邊都有一個(gè)SRB,相信經(jīng)過多少個(gè)SRB和每個(gè)SRB的內(nèi)部走線延時(shí)會對時(shí)序有很大的影響。

在做時(shí)序優(yōu)化的時(shí)候(一般由于時(shí)序裕量小或者時(shí)序不過),會看關(guān)鍵路徑在哪里,然后通過在長路徑中插入寄存器或者改變資源的位置來優(yōu)化時(shí)序。在PDS中可以很容易的找到關(guān)鍵路徑,只需要點(diǎn)擊最差時(shí)序路徑即可,這一點(diǎn)非常好用。

調(diào)試(Debugger)

對于調(diào)試這一點(diǎn),我可能要吐槽一下。在實(shí)際的項(xiàng)目調(diào)試的時(shí)候,很多條件和情況是沒法通過仿真驗(yàn)證覆蓋的,所以只能上板調(diào)試,然后抓FPGA內(nèi)部的信號分析。PDS的調(diào)試功能對于有經(jīng)驗(yàn)的工程師可能還好,但是對于初學(xué)者肯定是不友好的。要實(shí)現(xiàn)片上信號的觸發(fā)捕獲,首先要?jiǎng)?chuàng)建兩個(gè)IP:debug_core和jtag_hub。debug_core需要設(shè)置觸發(fā)信號和需要捕獲的數(shù)據(jù)位寬等,然后將調(diào)試信號連接到debug_core;最后用jtag_hub連接到debug_core上。

PDS需要打開Debugger,如果連接正確,在Scan JTAG的時(shí)候會識別到FPGA器件和內(nèi)部的debug_core。點(diǎn)擊觸發(fā)就可以捕獲到信號了。此外在debugger中也可以看到內(nèi)部ADC監(jiān)控的溫度和核電壓。這種用法和Vivado有點(diǎn)像,Vivado也提供可以直接在代碼中例化的ILA IP。這要是沒幾年FPGA開發(fā)經(jīng)驗(yàn),這玩應(yīng)真是不會玩。想想Vivado的Setup debug功能,綜合后直接設(shè)置想要調(diào)試的信號即可,在Vivado中可以設(shè)置任意信號做為觸發(fā)和觸發(fā)條件,簡直不要太好用。PDS這方面好好學(xué)學(xué)。

圖9.ADC溫度電壓監(jiān)控

圖10.debug_core代碼

圖11.調(diào)試界面

寫在最后

另外還有幾個(gè)地方想要說一下,PDS提供的IP實(shí)在是太少,少到什么情況呢。只有基本的片上資源IP,PLL、RAM、FIFO、QUEUE、乘法器這些。連片上的DDR控制IP都沒有集成在IP Compiler里面,需要另外導(dǎo)入。PGL22G內(nèi)部集成了硬核的DDR控制器,這個(gè)是我比較感興趣的,但是DDR的IP竟然沒有集成在PDS里面,而且配置也略顯麻煩,支持最多三組AXI,一組128bit位寬的,兩組64bit位寬的。

圖12.DDR控制器IP

跟Vivado對比一下,實(shí)在是差的比較多。

圖13.PDS IP Compiler(左)Vivado IP Catalog(右)

這一點(diǎn)對于具有一定規(guī)模的公司來言還好,畢竟一些常用的模塊都有內(nèi)部開發(fā)的IP可以調(diào)用。但是對于白手起家的,可能初期的版本要花費(fèi)較長的時(shí)間了。在IP配置界面可以點(diǎn)擊datasheet,查看IP的使用方法,重點(diǎn)是中文!中文!中文!

寫在最后,對于國產(chǎn)FPGA開發(fā)工具我的心里預(yù)期是比較低的。但是PDS絕對出乎我的意料,因?yàn)樗粌H僅是能用,有些方面還是挺好用的。我第一次用PDS,大概用了三四個(gè)小時(shí),已經(jīng)可以熟練使用了,連debugger這么復(fù)雜的功能都玩起來了。要說紫光同創(chuàng)的FPGA是國貨之光可能有點(diǎn)過,但是目前看來基本替代低端的國外FPGA應(yīng)該問題不大。只要是紫光同創(chuàng)的FPGA在開發(fā)過程中沒有潛在的坑,同時(shí)價(jià)格有優(yōu)勢,并且供貨有保障的情況;說真心話,我非常愿意在下一個(gè)項(xiàng)目里使用Logos系列FPGA替換掉Lattice的XO2。

說的好像我說的算一樣~

打賞
聯(lián)系客服 投訴反饋  頂部