作者:羅桂斌
一款好用的FPGA永遠(yuǎn)離不開(kāi)強(qiáng)大的開(kāi)發(fā)工具作為支持。對(duì)于設(shè)計(jì)FPGA的公司而言,設(shè)計(jì)出優(yōu)秀的FPGA器件還不足以獲得市場(chǎng)和FPGA開(kāi)發(fā)人員的青睞。優(yōu)秀的開(kāi)發(fā)工具軟件卻能最快速度的討好一線工程,培養(yǎng)他們的開(kāi)發(fā)流程和使用習(xí)慣。一旦習(xí)慣了一款開(kāi)發(fā)工具之后,再使用其他家的工具,只要不符合之前的經(jīng)驗(yàn)就會(huì)覺(jué)得這個(gè)工具不好用、不人性。這種先入為主的情況,各大廠家也是心知肚明,所以才會(huì)積極的推進(jìn)自家的器件在大學(xué)的推廣。這些未來(lái)的FPGA工程師一旦適應(yīng)了某一家的開(kāi)發(fā)思想和流程,當(dāng)他們走上工作崗位之后,也會(huì)毫不猶豫地選擇自己熟悉的器件。培養(yǎng)自己的潛在客戶,是面向未來(lái)的投資。
Quartus、Vivado和Diamond,相信前兩個(gè)大家都比較熟悉,Diamond是Lattice的FPGA開(kāi)發(fā)工具。Quartus和Vivado都是業(yè)界比較優(yōu)秀的軟件,可以完成FPGA從評(píng)估、設(shè)計(jì)、調(diào)試的各個(gè)環(huán)節(jié)。FPGA開(kāi)發(fā)軟件都是按照FPGA的開(kāi)發(fā)流程來(lái)設(shè)計(jì)的,下面來(lái)簡(jiǎn)要回顧一下FPGA的開(kāi)發(fā)流程:
- FPGA選型、資源和功耗評(píng)估;
- FPGA RTL代碼、約束設(shè)計(jì);
- RTL代碼仿真和驗(yàn)證;
- FPGA版本集成和綜合(Synthsis);
- 布局布線(Place and Route)和生成bitstream文件;
- 上板調(diào)試;
- 發(fā)布FPGA版本
以上各個(gè)環(huán)節(jié)其實(shí)都是可以在廠商提供的集成開(kāi)發(fā)環(huán)境中完成的,Quartus和Vivado自然不用多說(shuō),相信大家再熟悉不過(guò)了。今天我們要看試用的主角-PDS是否能夠完成以上各個(gè)環(huán)節(jié)的開(kāi)發(fā)。
PDS的安裝很容易,只要按照軟件的安裝教程操作即可。需要注意的是,PDS需要到紫光通創(chuàng)的官網(wǎng)(https://www.pangomicro.com/support/License-pds/index.html)申請(qǐng)PDS和Synplify的Node-lock Lisence,需要電腦網(wǎng)卡的MAC地址。官方審核通過(guò)之后,會(huì)以郵件附件的形式將Lisence發(fā)送給你。
PDS安裝過(guò)程很順利,然后打開(kāi)一個(gè)demo工程led_test,功能是板上4個(gè)LED流水燈。重新綜合和布局布線,然后下載,一切順利,板上LED輪流點(diǎn)亮,試用結(jié)束!
如果就這樣敷衍的試用一下肯定是不行的,作為一個(gè)專業(yè)的FPGA工程師,可是每天都要和開(kāi)發(fā)工具斗爭(zhēng)的,所以肯定要按照流程走一下,看看各個(gè)環(huán)節(jié)表現(xiàn)如何啊。
首先一般公司在開(kāi)發(fā)一款產(chǎn)品的時(shí)候,F(xiàn)PGA設(shè)計(jì)可不是從零開(kāi)始,大部分的代碼都是復(fù)用和移植。所以在評(píng)估資源的時(shí)候都是先集成一個(gè)近似的版本出來(lái),綜合和布局布線,分析資源利用報(bào)告和功耗評(píng)估報(bào)告,初步評(píng)估資源的使用情況和功耗。在評(píng)估的基礎(chǔ)上留出一定的裕量,比如30%;當(dāng)然是按照資源占用率最多的一項(xiàng)資源,比如IO、BRAM或DSP等。
至于仿真驗(yàn)證就不用多說(shuō)了,我從來(lái)沒(méi)用過(guò)Quartus和Vivado里面的仿真器,因?yàn)槎紱](méi)有Modelsim/Questsim/VCS好用啊。實(shí)際上Quartus的仿真器關(guān)聯(lián)的也是Modelsim。Vivado集成了自己的仿真器,但是我沒(méi)用過(guò)(編譯、仿真速度和可視化肯定不如Modelsim)。
那么我直接打開(kāi)了一個(gè)ov5640_ddr_hdmi的demo工程,在這個(gè)基礎(chǔ)上試試PDS。這里提示大家一下,打開(kāi)help->HelpTopics,有關(guān)于PDS操作的說(shuō)明文檔。重點(diǎn)是中文!中文!中文!
RTL代碼和約束開(kāi)發(fā)
RTL代碼開(kāi)發(fā)沒(méi)什么可說(shuō)的,大家直接使用自己順手的編輯器和插件就好了,F(xiàn)PGA開(kāi)發(fā)工具里的文本編輯器沒(méi)有一個(gè)是好用的。PDS的約束沒(méi)有使用標(biāo)準(zhǔn)的sdc文件,而是一個(gè)fdc文件。但是語(yǔ)法都類似。如果不懂語(yǔ)法可以直接使用PDS的約束編輯器開(kāi)發(fā)約束,常用的基本約束都有:時(shí)鐘約束、輸入輸出延時(shí)和時(shí)序例外。引腳約束也可以在約束編輯器的Device->IO中設(shè)置,這一點(diǎn)跟Quartus一樣,引腳比較多的時(shí)候可能工作量大一點(diǎn),好在引腳約束只需要項(xiàng)目開(kāi)始的時(shí)候編寫一次就行了,之后創(chuàng)建新工程的時(shí)候直接把約束文件拷貝過(guò)來(lái)就行了。
綜合(Synthsis)
綜合器絕對(duì)是FPGA工具的核心組件,直接決定了綜合出來(lái)的電路實(shí)現(xiàn)。即使是Intel和Xilinx這樣的巨頭在這方面做的也不是很好,綜合速度和效率并不是最好的。Synopsys這家公司做ASIC設(shè)計(jì)的同行應(yīng)該再熟悉不過(guò)了,Synopsys和Mentor是ASIC設(shè)計(jì)領(lǐng)域永遠(yuǎn)繞不過(guò)的兩大家,其提供了ASIC全流程的開(kāi)發(fā)工具。在FPGA/CPLD領(lǐng)域也一樣,Synopsys的Synplify是各家開(kāi)發(fā)工具都支持的第三方綜合器。
PDS提供了兩個(gè)綜合器:ADS和Synplify,在Project Setting→Part中可以選擇。ADS應(yīng)該是PDS內(nèi)置的綜合器,Synplify是第三方綜合器,需要在紫光同創(chuàng)官網(wǎng)申請(qǐng)OEM Lisence。那這兩個(gè)綜合器哪個(gè)更好一些呢?我很快得出了結(jié)論,下面來(lái)看兩個(gè)綜合器對(duì)同一個(gè)工程的綜合結(jié)果。
圖1.ADS綜合結(jié)果(上)Synplify綜合結(jié)果(下)
這個(gè)工程的資源占用率并不是很高,但是ADS卻有時(shí)序不過(guò)的情況,Synplify則沒(méi)有出現(xiàn)時(shí)序問(wèn)題。出于好奇,我還是打開(kāi)了時(shí)序報(bào)告和Design Editor看看是哪里時(shí)序不過(guò)。又對(duì)比了一下Synplify同一個(gè)端口的路徑有沒(méi)有問(wèn)題。
圖2.資源利用率報(bào)告
圖3.ADS最差路徑(左)和Synplify最差路徑(右)
雖然看起來(lái)差不多,但是結(jié)果還是說(shuō)明Synplify會(huì)好一些,這也是官方為什么默認(rèn)使用Synplify作為綜合器的原因吧?
有時(shí)候在綜合的時(shí)候不確定某些資源和信號(hào)是否被優(yōu)化掉,偶爾會(huì)打開(kāi)RTL視圖(Schematic)看看連線和端口有沒(méi)有別優(yōu)化掉。使用不同的綜合器,RTL 視圖也是不一樣的,Synplify會(huì)另外自動(dòng)打開(kāi),ADS則還是在PDS里面。貌似還是Synplify好看一些呢。
圖4.ADS RTL視圖
圖5.Synplify RTL視圖
布局布線(Place and Route)
其實(shí)在綜合和布局布線中間應(yīng)該還有一個(gè)步驟是-映射(Mapping),即把綜合出來(lái)的電路映射成FPGA中的資源。但是在PDS中沒(méi)有體現(xiàn)這一個(gè)步驟,咱也不知道,咱也不敢問(wèn)。布局布線器也是FPGA開(kāi)發(fā)工具中的核心技術(shù),直接決定了能否布通和時(shí)序是否滿足。布局布線的細(xì)節(jié)就不得而知了,但是可以對(duì)實(shí)際的布局布線結(jié)果進(jìn)行一下分析。
圖6.工程布局布線結(jié)果
這里想要重點(diǎn)夸一波PDS的Design Editor功能,通過(guò)這個(gè)視圖可以很清楚的看到FPGA內(nèi)部資源的分布和架構(gòu)??梢院?jiǎn)單的看一下幾個(gè)基本的資源排布。
圖7.基本資源排布
圖8.布線資源
而且顯示這么多的資源和布線,我這么差的機(jī)器一點(diǎn)也不卡,很流暢。想想Vivado打開(kāi)Device View的時(shí)候,我要感動(dòng)的哭了。
這里的FPGA基本資源中有一個(gè)很有趣的東西,叫做SRB(Signal Relax Block),我在官方手冊(cè)里沒(méi)有找到關(guān)于他的細(xì)節(jié)介紹,但是很明顯他是負(fù)責(zé)完成FPGA內(nèi)部走線互聯(lián)的開(kāi)關(guān)矩陣,相當(dāng)于Xilinx FPGA的SwitchBox。每一個(gè)CLM旁邊都有一個(gè)SRB,相信經(jīng)過(guò)多少個(gè)SRB和每個(gè)SRB的內(nèi)部走線延時(shí)會(huì)對(duì)時(shí)序有很大的影響。
在做時(shí)序優(yōu)化的時(shí)候(一般由于時(shí)序裕量小或者時(shí)序不過(guò)),會(huì)看關(guān)鍵路徑在哪里,然后通過(guò)在長(zhǎng)路徑中插入寄存器或者改變資源的位置來(lái)優(yōu)化時(shí)序。在PDS中可以很容易的找到關(guān)鍵路徑,只需要點(diǎn)擊最差時(shí)序路徑即可,這一點(diǎn)非常好用。
調(diào)試(Debugger)
對(duì)于調(diào)試這一點(diǎn),我可能要吐槽一下。在實(shí)際的項(xiàng)目調(diào)試的時(shí)候,很多條件和情況是沒(méi)法通過(guò)仿真驗(yàn)證覆蓋的,所以只能上板調(diào)試,然后抓FPGA內(nèi)部的信號(hào)分析。PDS的調(diào)試功能對(duì)于有經(jīng)驗(yàn)的工程師可能還好,但是對(duì)于初學(xué)者肯定是不友好的。要實(shí)現(xiàn)片上信號(hào)的觸發(fā)捕獲,首先要?jiǎng)?chuàng)建兩個(gè)IP:debug_core和jtag_hub。debug_core需要設(shè)置觸發(fā)信號(hào)和需要捕獲的數(shù)據(jù)位寬等,然后將調(diào)試信號(hào)連接到debug_core;最后用jtag_hub連接到debug_core上。
PDS需要打開(kāi)Debugger,如果連接正確,在Scan JTAG的時(shí)候會(huì)識(shí)別到FPGA器件和內(nèi)部的debug_core。點(diǎn)擊觸發(fā)就可以捕獲到信號(hào)了。此外在debugger中也可以看到內(nèi)部ADC監(jiān)控的溫度和核電壓。這種用法和Vivado有點(diǎn)像,Vivado也提供可以直接在代碼中例化的ILA IP。這要是沒(méi)幾年FPGA開(kāi)發(fā)經(jīng)驗(yàn),這玩應(yīng)真是不會(huì)玩。想想Vivado的Setup debug功能,綜合后直接設(shè)置想要調(diào)試的信號(hào)即可,在Vivado中可以設(shè)置任意信號(hào)做為觸發(fā)和觸發(fā)條件,簡(jiǎn)直不要太好用。PDS這方面好好學(xué)學(xué)。
圖9.ADC溫度電壓監(jiān)控
圖10.debug_core代碼
圖11.調(diào)試界面
寫在最后
另外還有幾個(gè)地方想要說(shuō)一下,PDS提供的IP實(shí)在是太少,少到什么情況呢。只有基本的片上資源IP,PLL、RAM、FIFO、QUEUE、乘法器這些。連片上的DDR控制IP都沒(méi)有集成在IP Compiler里面,需要另外導(dǎo)入。PGL22G內(nèi)部集成了硬核的DDR控制器,這個(gè)是我比較感興趣的,但是DDR的IP竟然沒(méi)有集成在PDS里面,而且配置也略顯麻煩,支持最多三組AXI,一組128bit位寬的,兩組64bit位寬的。
圖12.DDR控制器IP
跟Vivado對(duì)比一下,實(shí)在是差的比較多。
圖13.PDS IP Compiler(左)Vivado IP Catalog(右)
這一點(diǎn)對(duì)于具有一定規(guī)模的公司來(lái)言還好,畢竟一些常用的模塊都有內(nèi)部開(kāi)發(fā)的IP可以調(diào)用。但是對(duì)于白手起家的,可能初期的版本要花費(fèi)較長(zhǎng)的時(shí)間了。在IP配置界面可以點(diǎn)擊datasheet,查看IP的使用方法,重點(diǎn)是中文!中文!中文!
寫在最后,對(duì)于國(guó)產(chǎn)FPGA開(kāi)發(fā)工具我的心里預(yù)期是比較低的。但是PDS絕對(duì)出乎我的意料,因?yàn)樗粌H僅是能用,有些方面還是挺好用的。我第一次用PDS,大概用了三四個(gè)小時(shí),已經(jīng)可以熟練使用了,連debugger這么復(fù)雜的功能都玩起來(lái)了。要說(shuō)紫光同創(chuàng)的FPGA是國(guó)貨之光可能有點(diǎn)過(guò),但是目前看來(lái)基本替代低端的國(guó)外FPGA應(yīng)該問(wèn)題不大。只要是紫光同創(chuàng)的FPGA在開(kāi)發(fā)過(guò)程中沒(méi)有潛在的坑,同時(shí)價(jià)格有優(yōu)勢(shì),并且供貨有保障的情況;說(shuō)真心話,我非常愿意在下一個(gè)項(xiàng)目里使用Logos系列FPGA替換掉Lattice的XO2。
說(shuō)的好像我說(shuō)的算一樣~