2 蜂鳥(niǎo)E203開(kāi)源SoC
對(duì)于一個(gè)處理器核,還需要配套的SoC才能具備完整的功能。 蜂鳥(niǎo)E203內(nèi)核不僅僅完全開(kāi)源了Core的實(shí)現(xiàn),還搭配完整的開(kāi)源SoC平臺(tái),請(qǐng)參見(jiàn)《蜂鳥(niǎo)E203開(kāi)源SoC簡(jiǎn)介》(本篇即將發(fā)布,請(qǐng)持續(xù)關(guān)注公眾號(hào);或點(diǎn)擊https://github.com/SI-RISCV/e200_opensource 查看詳情)了解更多SoC的介紹與信息。
蜂鳥(niǎo)E203開(kāi)源SoC的代碼結(jié)構(gòu)如下所示。
各個(gè)主要的代碼模塊簡(jiǎn)述如下:
general目錄主要用于存放一些通用的Verilog RTL模塊供整個(gè)SoC公用,譬如一些DFF(D觸發(fā)器寄存器)定義文件,ICB總線的基礎(chǔ)模塊等等。
core目錄主要用于存放處理器核模塊的Verilog RTL代碼。e203_cpu_top是蜂鳥(niǎo)E203處理器核的頂層。
fab目錄主要實(shí)現(xiàn)SoC中ICB Bus Fabric模塊的Verilog RTL代碼。 sirv_icb1to4_bus.v, sirv_icb1to8_bus.v或者sirv_icb1to16_bus.v實(shí)際例化調(diào)用了sirv_icb_splt模塊將一組ICB總線按照地址區(qū)間分發(fā)成為4組,8組或者16組ICB總線。
subsys目錄包含了SoC的主體頂層模塊的Verilog RTL代碼,其中e203_subsys_top是事實(shí)上的SoC頂層文件,它例化了Main Domain模塊(e203_subsys_main.v)和Always-onDomain模塊(e203_aon_top.v)。e203_subsys_mems模塊實(shí)現(xiàn)了系統(tǒng)存儲(chǔ)總線(System Memory Bus),通過(guò)調(diào)用例化sirv_icb1to8_bus模塊并且配置其參數(shù)的方式來(lái)配置每個(gè)從設(shè)備的地址區(qū)間。e203_subsys_perips模塊實(shí)現(xiàn)了系統(tǒng)設(shè)備總線(System Peripheral Bus),通過(guò)調(diào)用例化sirv_icb1to16_bus模塊并且配置其參數(shù)的方式來(lái)配置每個(gè)從設(shè)備的地址區(qū)間。除了已經(jīng)實(shí)現(xiàn)的從設(shè)備,還預(yù)留了地址區(qū)間實(shí)現(xiàn)外部存儲(chǔ)(sysmem),外部外設(shè)(sysper)和外部快速IO(sysfio)總線接口。
mems目錄主要用于存放memory模塊的Verilog RTL代碼,由于Memory的具體實(shí)現(xiàn)依賴于芯片生產(chǎn)加工廠(foundry)譬如SIMC或者TSMC的Memory宏單元,因此本文件夾下的Verilog RTL代碼僅僅是行為模型。
perips目錄主要用于存放各種外設(shè)(Peripherals)模塊的Verilog RTL代碼,譬如GPIO,UART,SPI等。大部分的Peripherals的Verilog RTL代碼是直接復(fù)制于SiFive的Freedom E310項(xiàng)目中Chisel語(yǔ)言生成的出的Verilog RTL代碼,在此基礎(chǔ)上將其TileLink總線接口修改成了ICB總線接口,如圖3-5中所示的GPIO模塊ICB總線接口。
debug目錄包含了SoC中有關(guān)debugger調(diào)試器模塊的Verilog RTL代碼。
soc目錄主要用于存放SoC頂層模塊的Verilog RTL代碼。e203_soc_top.v是一個(gè)簡(jiǎn)單地頂層SoC Wrapper模塊,將e203_subsys_top進(jìn)行例化。另外由于e203_subsys_top模塊輸出的sysmem,sysfio和sysmem總線在此FPGA SoC中并沒(méi)有連接任何外部從設(shè)備。為了防止軟件程序訪問(wèn)到這些總線接口的地址區(qū)間無(wú)任何返回而掛死,在e203_soc_top頂層模塊中將這些ICB總線的Command Channel信號(hào)直接反接到其Response Channel,同時(shí)將Response Channel中的其他返回信號(hào)連接成常數(shù)0。
3搭建FPGA原型平臺(tái)
我們?yōu)榉澍B(niǎo)E203開(kāi)源SoC定制了專用的FPGA原型開(kāi)發(fā)板和JTAG調(diào)試器, E203開(kāi)源項(xiàng)目基于該FPGA開(kāi)發(fā)板,使用蜂鳥(niǎo)E203開(kāi)源SoC搭建完整的原型平臺(tái)與示例。
FPGA原型主要分為兩部分:FPGA開(kāi)發(fā)板,和調(diào)試器。接下來(lái)章節(jié)分別予以介紹。完整的FPGA開(kāi)發(fā)板原型(包括FPGA開(kāi)發(fā)板和調(diào)試器)如圖3-1所示。
圖3-1 FPGA開(kāi)發(fā)板原型(包括JTAG調(diào)試器)
3.1FPGA開(kāi)發(fā)板和項(xiàng)目介紹
蜂鳥(niǎo)E203專用FPGA開(kāi)發(fā)板是一款低成本的入門(mén)級(jí)XilinxFPGA開(kāi)發(fā)板,如圖3-2所示。該開(kāi)發(fā)板不僅可以用于一塊FPGA開(kāi)發(fā)板作為電路設(shè)計(jì)使用,同時(shí)由于其預(yù)燒了蜂鳥(niǎo)E203開(kāi)源SoC(包括E203內(nèi)核),因此其可以直接作為一塊MCU SoC原型開(kāi)發(fā)板進(jìn)行嵌入式軟件開(kāi)發(fā)。
有關(guān)此FPGA開(kāi)發(fā)板的詳細(xì)介紹請(qǐng)參見(jiàn)《蜂鳥(niǎo)FPGA開(kāi)發(fā)板和JTAG調(diào)試器介紹》。
若想購(gòu)買此開(kāi)發(fā)板,用戶可以在E203開(kāi)源項(xiàng)目的Github網(wǎng)頁(yè)上(https://github.com/SI-RISCV/e200_opensource/tree/master/boards)了解此開(kāi)發(fā)板的購(gòu)買渠道。
圖3-2 蜂鳥(niǎo)E203專用FPGA開(kāi)發(fā)板
E203開(kāi)源項(xiàng)目FPGA項(xiàng)目相關(guān)的代碼結(jié)構(gòu)如下所示。
FPGA項(xiàng)目通過(guò)Makefile(fpga/common.mk文件)將添加一個(gè)特殊的宏FPGA_SOURCE至Core的宏文件中,如圖3-3所示。所以最終用于編譯FPGA比特流的RTL源代碼必須包含此宏(FPGA_SOURCE)。
圖3-3 FPGA項(xiàng)目宏定義文件中添加FPGA_SOURCE
在FPGA的頂層模塊(system.org)中除了例化SoC的頂層(e203_soc_top)之外,主要是使用Xilinx的I/O Pad單元例化頂層的Pad。另外使用Xilinx的MMCM單元生成時(shí)鐘。注意:SoC的MainDomain使用的MMCM產(chǎn)生的高速時(shí)鐘連接到SoC的hfextclk,Always-On Domain使用的是開(kāi)發(fā)板上的低速實(shí)時(shí)時(shí)鐘(32.768KHz)。
蜂鳥(niǎo)E203開(kāi)源SoC的頂層I/O Pad經(jīng)過(guò)FPGA的約束文件(nuclei-master.xdc)進(jìn)行約束使之連接到FPGA芯片外部的引腳上面(譬如將JTAG I/O約束到開(kāi)發(fā)板的MCU_JTAG插口引腳上)。
3.2生成mcs文件燒寫(xiě)FPGA
在前文中介紹了E203開(kāi)源項(xiàng)目的SoC整體架構(gòu)和Verilog RTL代碼,為了使得該SoC能夠真正運(yùn)行在FPGA硬件上,需要將其編譯成為bitstream文件然后燒錄到FPGA中去。可以使用如下步驟進(jìn)行編譯和燒錄。
//步驟一:準(zhǔn)備好自己的電腦環(huán)境,可以在公司的服務(wù)器環(huán)境中運(yùn)行,如果是個(gè)人用戶,推薦如下配置:
(1)使用VMware虛擬機(jī)在個(gè)人電腦上安裝虛擬的Linux操作系統(tǒng)。
(2)由于Linux操作系統(tǒng)的版本眾多,推薦使用Ubuntu16.04版本的Linux操作系統(tǒng)有關(guān)如何安裝VMware以及Ubuntu操作系統(tǒng)本文不做介紹,有關(guān)Linux的基本使用本文也不做介紹,請(qǐng)用戶自行查閱資料學(xué)習(xí)。
//步驟二:安裝Xilinx Vivado軟件至此虛擬機(jī)Linux操作系統(tǒng)中。有關(guān)如何安裝Xilinx Vivado軟件本文不做介紹,請(qǐng)用戶自行查閱資料了解。
//步驟三:將e200_opensource項(xiàng)目下載到本機(jī)Linux環(huán)境中,使用如下命令:
git clonehttps://github.com/SI-RISCV/e200_opensource.git
//經(jīng)過(guò)此步驟將項(xiàng)目克隆下來(lái),本機(jī)上即可具有如前文所述完整的e200_opensource目錄文件夾,假設(shè)該目錄為
//步驟四:設(shè)置需要編譯的Core的具體型號(hào),使用如下命令:
cd
//進(jìn)入到e200_opensource目錄文件夾下面的fpga目錄。
make install CORE=e203
//運(yùn)行該命令指明需要為e203內(nèi)核進(jìn)行編譯,該命令會(huì)在fpga目錄下生成一個(gè)install子文件夾,在其中放置Vivado所需的腳本,且將腳本中的關(guān)鍵字設(shè)置為e203。
//步驟五:生成bitstream文件或者mcs文件(推薦使用mcs文件),使用如下命令:
make bit
//運(yùn)行該命令將調(diào)用Vivado軟件對(duì)VerilogRTL進(jìn)行編譯生成bitstream文件生成的bitstream文件名和路徑為
//熟悉Vivado和Xilinx FPGA使用的用戶應(yīng)該了解,bitstream文件燒錄到FPGA中去之后FPGA不能掉電,因?yàn)橐坏┑綦娭驠PGA燒錄的內(nèi)容即丟失,需要重新使用Vivado的Hardware Manager進(jìn)行燒錄方能使用。
//為了方便用戶使用,Xilinx的Arty開(kāi)發(fā)板可以將需要燒錄的內(nèi)容寫(xiě)入開(kāi)發(fā)板上的Flash中,然后在每次FPGA上電之后通過(guò)硬件電路自動(dòng)將需要燒錄的內(nèi)容從外部的Flash中讀出并燒錄到FPGA之中(該過(guò)程非常的快,不影響用戶使用)。由于Flash是非易失性的內(nèi)存,具有掉電后仍可保存的特性,因此意味著將需要燒錄的內(nèi)容寫(xiě)入Flash后,每次掉電后無(wú)需使用Hardware Manager人工重新燒錄(而是硬件電路快速自動(dòng)完成),即等效于,F(xiàn)PGA上電即可使用。有關(guān)此特性的詳細(xì)原理與描述,本文不做贅述,請(qǐng)用戶自行參閱Arty開(kāi)發(fā)板手冊(cè)。
//為了能夠?qū)汧PGA的內(nèi)容寫(xiě)入Flash中,需要生成mcs文件,使用如下命令:
make mcs
//運(yùn)行該命令將調(diào)用Vivado軟件對(duì)VerilogRTL進(jìn)行編譯生成mcs文件生成的mcs文件名和路徑為
如何使用Vivado的HardwareManager燒寫(xiě)mcs文件至FPGA開(kāi)發(fā)板上的Flash中去,參考如下步驟。
//前提步驟1:將FPGA開(kāi)發(fā)板的“FPGA JTAG接口”通過(guò)USB連接線與電腦的USB接口連接。開(kāi)發(fā)板的“FPGA JTAG接口”的位置請(qǐng)參見(jiàn)圖3-2中標(biāo)注所示。
//前提步驟2:將FPGA開(kāi)發(fā)板的“DC:5V供電及開(kāi)關(guān)”通過(guò)USB連接線與電腦USB接口或者電源插座連接,并將“開(kāi)關(guān)”撥開(kāi),對(duì)FPGA開(kāi)發(fā)板進(jìn)行供電。開(kāi)發(fā)板的“DC:5V供電及開(kāi)關(guān)”的位置請(qǐng)參見(jiàn)圖3-2中標(biāo)注所示。
//步驟一:打開(kāi)Vivado軟件。
//步驟二:打開(kāi)Hardware Manager,會(huì)自動(dòng)連接FPGA開(kāi)發(fā)板(如果前提步驟1操作正確)。如圖3-4和圖3-5所示。
//步驟三:右鍵FPGA Device,選擇“Add Configuration Memory Device”。如圖3-6所示。
//步驟四:選擇如下參數(shù)的Flash,如圖3-7所示:
Part n25q128-3.3v
Manufacturer Micron
Family n25q
Type spi
Density 128
Width x1 x2 x4
//步驟五:彈出“Do you want to program the configuration memory device now?”,選擇OK
//步驟六:在彈出的窗口中的
//步驟七:一旦燒寫(xiě)Flash成功,則可以通過(guò)按開(kāi)發(fā)板上的“FPGA_PROG”按鍵觸發(fā)硬件電路使用Flash中的內(nèi)容對(duì)FPGA重新進(jìn)行燒錄。
注意:FPGA燒寫(xiě)成功之后,則可以無(wú)需再連接“FPGA JTAG接口”的USB連接線。
圖3-4打開(kāi)Vivado Hardware Manager
圖3-5使用Vivado Hardware Manager連接Arty開(kāi)發(fā)板
圖3-6 FPGA Device選擇AddConfiguration Memory Device
圖3-7 選擇Flash類型
3.3JTAG調(diào)試器
圖3-8 蜂鳥(niǎo)E203專用FPGA開(kāi)發(fā)板的MCU_JTAG插槽
為了支持使用GDB進(jìn)行交互式調(diào)試或者通過(guò)GDB動(dòng)態(tài)下載程序到處理器中運(yùn)行,需要為FPGA原型平臺(tái)配備一個(gè)JTAG調(diào)試器(JTAG Debugger),E203內(nèi)核支持通過(guò)標(biāo)準(zhǔn)的JTAG接口對(duì)其進(jìn)行調(diào)試,且SoC頂層JTAG的I/O Pad連接到了 FPGA芯片的pin腳上,而該組pin腳在E203專用FPGA開(kāi)發(fā)板上實(shí)際被連接到MCU_JTAG插槽上,如圖3-8中黃色圓圈所示。
我們?yōu)镋203內(nèi)核定制了專用的“JTAG調(diào)試器”,如圖3-9中黃色圓圈所示。
圖3-9 蜂鳥(niǎo)E203專用的JTAG調(diào)試器
有關(guān)此JTAG調(diào)試器的詳細(xì)介紹請(qǐng)參見(jiàn)《蜂鳥(niǎo)FPGA開(kāi)發(fā)板和JTAG調(diào)試器介紹》。
若想購(gòu)買此JTAG調(diào)試器,用戶可以在E203開(kāi)源項(xiàng)目的Github網(wǎng)頁(yè)上(https://github.com/SI-RISCV/e200_opensource/tree/master/boards)了解此JTAG調(diào)試器的購(gòu)買渠道。
由于“JTAG調(diào)試器”將其與上游主機(jī)PC的USB接口連接,因此上游PC的USB端口需要正確的設(shè)置以保證其有正確的權(quán)限。以Ubuntu 16.04為例,可以使用如下步驟進(jìn)行配置。
//步驟一:準(zhǔn)備好自己的電腦環(huán)境,可以在公司的服務(wù)器環(huán)境中運(yùn)行,如果是個(gè)人用戶,推薦如下配置:
(1)使用VMware虛擬機(jī)在個(gè)人電腦上安裝虛擬的Linux操作系統(tǒng)。
(2)由于Linux操作系統(tǒng)的版本眾多,推薦使用Ubuntu16.04版本的Linux操作系統(tǒng)有關(guān)如何安裝VMware以及Ubuntu操作系統(tǒng)本文不做介紹,有關(guān)Linux的基本使用本文也不做介紹,請(qǐng)用戶自行查閱資料學(xué)習(xí)。
//步驟二:使用“JTAG調(diào)試器”將主機(jī)PC與FPGA開(kāi)發(fā)板連接,如圖4-9中圓圈所示。注意使該USB接口被虛擬機(jī)的Linux系統(tǒng)識(shí)別(而非被Windows識(shí)別),如圖4-10中圓圈所示,若USB圖標(biāo)在虛擬機(jī)中顯示為高亮,則表明USB被虛擬機(jī)中Linux系統(tǒng)正確識(shí)別(而非被Windows識(shí)別),將FPGA開(kāi)發(fā)板通電。
//步驟三:使用如下命令查看USB設(shè)備的狀態(tài):
lsusb //運(yùn)行該命令后會(huì)顯示如下信息。
...
Bus 001Device 029: ID 15ba:002a Olimex Ltd. ARM-USB-TINY-H JTAG interface
//步驟四:使用如下命令設(shè)置udev rules使得該USB設(shè)備能夠被plugdev group所訪問(wèn):
sudo vi /etc/udev/rules.d/99-openocd.rules
//用vi打開(kāi)該文件,然后添加以下內(nèi)容至該文件中,然后保存退出。
# These arefor the Olimex Debugger for use with Arty Dev Kit
SUBSYSTEM=="usb",ATTR{idVendor}=="15ba",
ATTR{idProduct}=="002a",MODE="664", GROUP="plugdev"
SUBSYSTEM=="tty",ATTRS{idVendor}=="15ba",
ATTRS{idProduct}=="002a",MODE="664", GROUP="plugdev"
//步驟五:使用如下命令查看該USB設(shè)備是否屬于plugdev group:
ls /dev/ttyUSB* //運(yùn)行該命令后會(huì)顯示類似如下信息。
/dev/ttyUSB0/dev/ttyUSB1
ls -l/dev/ttyUSB1 //運(yùn)行該命令后會(huì)顯示類似如下信息。
crw-rw-r-- 1root plugdev 188, 1 Nov 28 12:53 /dev/ttyUSB1
//步驟六:將你自己的用戶添加到plugdev group中:
whoami
//運(yùn)行該命令能顯示自己用戶名,假設(shè)你的自己用戶名顯示為your_user_name。運(yùn)行如下命令將your_user_name添加到plugdev group中sudo usermod -a -G plugdev your user name。
//步驟七:確認(rèn)自己的用戶是否屬于plugdev group:
groups //運(yùn)行該命令后會(huì)顯示類似如下信息。
... plugdev...
//只要從顯示的groups中看到plugdev則意味著自己的用戶屬于該組,表示設(shè)置成功 。
圖3-10 虛擬機(jī)Linux系統(tǒng)識(shí)別USB圖標(biāo)
在下一章將介紹利用該JTAG調(diào)試器如何使用GDB軟件對(duì)蜂鳥(niǎo)E203 SoC原型進(jìn)行程序下載或遠(yuǎn)程調(diào)試。
3.4 FPGA原型平臺(tái)DIY總結(jié)
至此,我們將以上論述的加以總結(jié),為了能夠搭建完整的FPGA原型平臺(tái),用戶需要做如下硬件的準(zhǔn)備:
購(gòu)買一塊蜂鳥(niǎo)E203專用FPGA開(kāi)發(fā)板
購(gòu)買一塊蜂鳥(niǎo)E203專用JTAG調(diào)試器
用戶需要做如下軟件的準(zhǔn)備:
推薦安裝VMware虛擬機(jī)且安裝Linux操作系統(tǒng)于虛擬機(jī)中
安裝Xilinx的Vivado軟件
在下一章將介紹如何使用燒錄后的FPGA原型平臺(tái)運(yùn)行真正的軟件示例。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603419 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5050瀏覽量
97483
原文標(biāo)題:蜂鳥(niǎo)FPGA開(kāi)發(fā)板全知道篇2:快速上手介紹(中)
文章出處:【微信號(hào):real_farmer,微信公眾號(hào):硅農(nóng)亞歷山大】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論