基于OR1200的SoC程序無(wú)線(xiàn)智能加載系統設計及驗證
作者/ 黃誠1 唐明華2 1.湘潭大學(xué) 物理與光電工程學(xué)院(湖南 湘潭 411105) 2.湘潭大學(xué) 材料科學(xué)與工程學(xué)院(湖南 湘潭 411105)
本文引用地址:http://dyxdggzs.com/article/201708/363622.htm*基金項目:國家自然科學(xué)基金(編號:51472210)
黃誠(1992-),男,碩士生,研究方向:數字電路SoC設計等。
摘要:SoC是當前微電子芯片發(fā)展的趨勢,然而由于受帶開(kāi)發(fā)環(huán)境的PC終端、額外硬件接口、連接線(xiàn)等條件的約束,很難支持SoC產(chǎn)品的二次開(kāi)發(fā)。本文提出一種SoC無(wú)線(xiàn)程序加載系統設計方案,通過(guò)無(wú)線(xiàn)控制實(shí)現不同程序的加載,不需要添加額外的接口與復雜的模塊,不需要連接下載線(xiàn)和IDE開(kāi)發(fā)環(huán)境等工具,簡(jiǎn)化了芯片的二次開(kāi)發(fā),增加了芯片的利用率。并且在FPGA板上測試通過(guò)。
引言
隨著(zhù)SoC技術(shù)的不斷發(fā)展,其產(chǎn)品在市場(chǎng)上的占用比例也越來(lái)越大。對于SoC的開(kāi)發(fā)流程,它需要有一套相應的IDE開(kāi)發(fā)工具,包括裝有配套開(kāi)發(fā)環(huán)境的PC、硬件接口和連接線(xiàn)。開(kāi)發(fā)完成后應用于嵌入式領(lǐng)域,但是由于受帶開(kāi)發(fā)環(huán)境的PC終端、電路板、連接線(xiàn)等條件的約束,一般很難支持二次開(kāi)發(fā)。
為了解決上述技術(shù)問(wèn)題,本文提出一種能方便實(shí)現二次開(kāi)發(fā)、芯片利用率高的基于SoC的無(wú)線(xiàn)智能程序加載方法。使用帶藍牙功能的終端發(fā)送不同的命令即可選擇flash程序區中不同的程序加載到內存模塊,通過(guò)無(wú)線(xiàn)控制實(shí)現不同程序的加載,不需要添加額外的接口與復雜的模塊,不需要連接下載線(xiàn)和IDE開(kāi)發(fā)環(huán)境等工具,并提供一種無(wú)線(xiàn)智能程序加載SoC系統。經(jīng)過(guò)在FPGA開(kāi)發(fā)板上測試,該方法能很好地應用在智能終端領(lǐng)域中,例如智能玩具小車(chē),主控采用本發(fā)明的SoC芯片,就能設定小車(chē)的三種工作場(chǎng)景——遙控控制小車(chē)、小車(chē)自動(dòng)避障和小車(chē)循跡,通過(guò)帶藍牙的終端向主控發(fā)送相應的命令就能改變小車(chē)的工作模式,增加小車(chē)的功能。
1 系統總體結構
本文中的無(wú)線(xiàn)智能程序加載SoC系統包括時(shí)鐘模塊、處理器模塊、只讀存儲器ROM模塊、Wishbone總線(xiàn)仲裁模塊、SPI控制器模塊、內存DDR2模塊和通用異步收發(fā)傳輸器UART模塊。所有模塊均通過(guò)Wishbone總線(xiàn)連接到處理器??偩€(xiàn)仲裁采用輪循機制實(shí)現主設備與從設備之間的訪(fǎng)問(wèn)。本系統改變了傳統的把一個(gè)程序存儲在flash中,當燒錄下一個(gè)程序時(shí)就會(huì )覆蓋上一個(gè)程序的做法,而是把flash劃分成三個(gè)程序區,燒錄flash時(shí),把不同的程序放在不同的程序區。當從SPI flash啟動(dòng)時(shí),程序指針首先指向只讀存儲器ROM里的bootload區,以完成程序從flash拷貝到內存,再從內存開(kāi)始執行指令。本系統在此基礎上增加了bootload的功能,不僅能完成程序的拷貝,還能監測串口,根據收到的命令選擇一個(gè)程序區的程序拷貝到內存,使得芯片封裝好之后,無(wú)需接線(xiàn),無(wú)需相應的IDE軟件來(lái)加載程序,通過(guò)手機或帶有藍牙模塊的終端就可以加載不同的程序,簡(jiǎn)化芯片的二次開(kāi)發(fā),在智能終端領(lǐng)域能有很好的應用??傮w框架圖如圖1所示。
2 硬件系統設計
2.1 硬件頂層結構設計
系統硬件頂層采用硬件描述語(yǔ)言Verilog HDL設計,以總線(xiàn)作為分割介質(zhì)來(lái)看整個(gè)系統,包括一個(gè)主設備和四個(gè)從設備。其中主設備為處理器OR1200,從設備為只讀存儲器模塊、內存模塊、串行外設接口模塊和通用異步手法傳輸器模塊。如圖2所示。
2.2 總線(xiàn)仲裁設計
總線(xiàn)仲裁設計主要包含兩組仲裁,一組為處理器中的指令總線(xiàn)IBUS,通過(guò)高位地址判斷從只讀存儲器ROM取指令還是從內存模塊DDR2中取指令;另一組為處理器中的數據總線(xiàn),通過(guò)高八位地址判斷訪(fǎng)問(wèn)哪個(gè)外設,具體訪(fǎng)問(wèn)哪個(gè)寄存器通過(guò)低位判斷。其中主設備采用輪詢(xún)的機制搶占總線(xiàn),核心設計思想為:統計主設備的個(gè)數n,然后定義n位的變量token={00....01},通過(guò)一定周期把1向左循環(huán)取到每個(gè)主設備,而實(shí)現仲裁的輪循機制。
2.3 flash存儲器程序區劃分結構設計
如圖3所示,flash存儲器地址從0x100000到0x1c0000是bit文件放置區1,0x1c0001到0x1f0000是程序區Ⅰ2,地址從0x1f0001到0x220000是程序區Ⅱ 3,地址從0x220001到0x250000是程序區Ⅲ4,地址從0x250001到0x300000是擴展區5。SoC系統bit文件利用Xilinx ISE中的impact工具燒錄進(jìn)去,其他程序區的程序通過(guò)硬件描述語(yǔ)言中的readmemh命令寫(xiě)入。
3 軟件設計
系統在上電啟動(dòng)的時(shí)候,程序指針PC指向只讀存儲器ROM中Bootload區的一段代碼,這段代碼一般完成程序從flash存儲器拷貝到內存,再將程序指針跳轉去內存一條一條執行的功能。本文中的軟件設計在此基礎上增加了改進(jìn),如圖4所示。首先優(yōu)化串行外設接口SPI和通用異步收發(fā)傳輸器UART,并實(shí)時(shí)監測終端發(fā)過(guò)來(lái)的命令;若監測到命令,校驗接收到的命令是否為有效命令,若為有效命令則根據接收到的命令選擇flash存儲器相應程序區的有效地址,否則通過(guò)通用異步收發(fā)傳輸器UART和藍牙模塊向終端發(fā)送“錯誤”提示,繼續等待命令。得到有效的地址后,初始化串行外設接口SPI,產(chǎn)生串行外設接口SPI時(shí)序和發(fā)送讀命令,根據flash程序區的有效地址拷貝程序到內存模塊DDR2中,直到程序大小等于程序大小變量sizeword的值,最后執行跳轉命令,將處理器指向內存模塊DDR2的起始位置,實(shí)現系統的自啟動(dòng)。程序流程圖如圖4所示。
4 仿真與下板測試
OR1200處理器是OpenRisc家族中的一員,在軟件編譯的時(shí)候我們需要安裝OpenRisc交叉編譯工具鏈;采用Xilinx的Virtex-5開(kāi)發(fā)板,同時(shí)需要安裝ISE等EDA工具。
編譯工具鏈把前面設計的加載啟動(dòng)代碼(bootloader)從匯編語(yǔ)言編譯成硬件描述語(yǔ)言,并實(shí)例化到SoC系統頂層中。然后進(jìn)行flash存儲器的分區并燒錄程序,本文通過(guò)readmemh命令向程序區Ⅰ、程序區Ⅱ和程序區Ⅲ依次燒錄hellowa.c、hellowb.c和hellowc.c。這幾個(gè)測試程序會(huì )通過(guò)串口分別打印出“Hello word A”、“Hello word B”和“Hello word C”。這樣我們就可以很直觀(guān)地判斷系統在執行哪個(gè)程序。
將板子上電,并利用Xilinx ISE中的impact工具將編譯好的SoC系統bit文件燒錄至flash存儲器0x100000到0x1c0000區域,當編譯綜合通過(guò),下板成功后,我們就可以抓取波形和串口打印判斷結果。其波形圖和串口打印如圖5和圖6所示。從波形圖中我們可以看出串口控制器輸出14個(gè)字符,正好是“Hello World A/B/C”,放大波形我們可以看到第一個(gè)數據為0x48,正好是字符“H”的ASCLL碼。而從窗口上打印的輸出更為明顯。給串口發(fā)送命令“0”,選擇flash程序區1 hellowa.c,從0x100000開(kāi)始拷貝程序,仿真測試結果輸出“Hello word A!”。給串口發(fā)送命令“1”,選擇flash程序區Ⅱ hellowb.c,從0x130001開(kāi)始拷貝程序,仿真測試結果輸出“Hello word B!”。給串口發(fā)送命令“2”,選擇flash程序區Ⅲ hellowc.c,從0x160001開(kāi)始拷貝程序,仿真測試結果輸出“Hello word C!”。
5 結論
本發(fā)明基于SoC的無(wú)線(xiàn)智能程序加載方法中,首先將flash存儲器劃分成若干個(gè)程序區,并通過(guò)加載指令把不同的程序分別加載到不同的程序區,然后運行加載啟動(dòng)代碼,初始化串行外設接口并監測串口接收到的命令,從flash存儲器中選擇相應程序區,實(shí)現程序到內存模塊的拷貝,最后執行跳轉命令,將處理器指向內存模塊的起始位置,實(shí)現系統的自啟動(dòng);整個(gè)加載過(guò)程簡(jiǎn)單,不需要接線(xiàn)和留出程序加載接口,也不需要相應的IDE軟件來(lái)加載程序,通過(guò)手機或帶有藍牙模塊的終端就可以加載不同的程序,適用范圍廣。
參考文獻:
[1]唐明華,黃誠,劉新,等. 一種基于SoC的無(wú)線(xiàn)智能程序加載方法及系統. 國家發(fā)明專(zhuān)利. 專(zhuān)利申請號: 201610139229.2. 中國,2015.
[2]蘇紀娟,孟祥玲,朱慶明.系統芯片技術(shù)國內外發(fā)展現狀[J]. 軍民兩用技術(shù)與產(chǎn)品. 2015(13).
[3]王龍興.集成電路的過(guò)去、現在和將來(lái)(一)世界集成電路的發(fā)展歷史[J].集成電路應用. 2014(01).
[4]李爭,李范鳴,陳捷,等.基于Wishbone SoC總線(xiàn)接口的高性能SDRAM控制器[J].科學(xué)技術(shù)與工程. 2008(12).
[5]鄭文靜,李明強,舒繼武. Flash存儲技術(shù)[J]. 計算機研究與發(fā)展. 2010(04).
[6]陳光武,范多旺,于超,等.基于Wishbone片上總線(xiàn)的IP核的互聯(lián)[J].微計算機信息. 2009(20).
本文來(lái)源于《電子產(chǎn)品世界》2017年第9期第54頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。
評論