《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于NiosII的SOPC多處理器系統設計方法
基于NiosII的SOPC多處理器系統設計方法
單片機及嵌入式系統應用
李蘭英 李霄燕
摘要: 本文將對基于NiosII的SOPC多處理器系統的實現原理、設計流程和方法進行詳細的討論。
關鍵詞: SoPC NiosII 多處理器
Abstract:
Key words :

    兩個或多個微處理器一起工作來完成某個任務的系統稱為“多處理器系統”。傳統基于單片機的多處理器系統結構復雜,可靠性差;而基于32位的嵌入式軟核處理器NiosIISOPC(可編程片上系統)多處理器系統解決方案,從根本上改變了多處理器系統的設計理念和方法。使用Altera公司的NiosII軟核處理器和SOPC Builder工具,可以快速地設計和建立共享資源的多處理器系統。多處理器系統一般用于工作站和使用分載(load-sharing)的復雜算法(稱為“對稱多處理器SMP”)的高端PC計算。對于大部分嵌入式系統,當SMP的開銷太大時,使用多個處理器執行不同的任務,實現不同的功能正引起越來越多的關注。Altera公司的FPGA為開發非對稱的嵌入式多處理器系統提供了一個理想的平臺。為了提供理想的系統性能,使用SOPC Builder工具可以很容易地對硬件進行修改和調整,從而很快完成不同配置系統的設計、編譯和評估[1]。

本文將對基于NiosII的SOPC多處理器系統的實現原理、設計流程和方法進行詳細的討論。

1 NiosIl多處理器系統硬件設計

QuartusII 5.0及以上版本支持多處理器系統的創建和調試。多個NiosII處理器能夠有效地共享系統資源。由于SOPC Builder允許用戶輕松添加多個處理器到系統中,因此建立多處理器系統的難點已不再是硬件的排列和連接,而在于多個處理器的軟件設計,使它們正常操作,相互之間不產生沖突。NiosII多處理器系統分為2類:一類是共享資源的多處理器系統;另一類處理器相互獨立,之間不進行信息交換。

2 Niosll多處理器系統的資源共享

資源共享是多處理器系統的強大功能,但必須仔細考慮所要共享的資源,以及不同處理器如何使用共享資源。

2.1 共享存儲器

在多處理器系統中最普遍的共享資源是存儲器。共享存儲器用于存放任何數據,從指示處理器間通信狀態的簡單標志,到被多個處理器同時進行計算的復雜數據結構。

如果存儲器中包含不只一個處理器的程序代碼,那么每個處理器需要有不同的存儲地址。對于程序空間,處理器不能共享存儲器的同一區域。如果共享數據存儲器,則存儲器的數據需要從端口與共享存儲器的處理器的數據主端口連接。多處理器之間共享數據存儲器比共享指令存儲器困難,原因是數據存儲器可讀/寫。如果某一處理器正在對共享存儲器的特定區域進行寫操作,而同時另一個處理器正在對同一區域進行讀或寫操作,則很可能出現數據錯誤,至少使應用程序出錯,甚至使系統崩潰。

共享存儲器的處理器需要一個機制來通知其他處理器何時正在使用共享資源,以便不受其他處理器的干擾。

2.2 硬件互斥核

NiosII處理器允許使用其硬件互斥核部件對共享資源進行保護處理。這個硬件互斥核不是一個NioslI處理器內部的部件,而是一個稱為Mutex的SOPC Builder組件。

互斥核也可看作一種共享資源,提供一個原子的“測試和置位”操作,處理器測試Mutex是否可行。如果可行,就在某個操作中獲取它。當處理器結束與Mutex相關的共享資源使用時,釋放該Mutex;此時,另一個處理器可能獲取了Mutex,使用共享資源?;コ夂嗽谖锢砩喜⒉荒芊乐官Y源同時被多個處理器訪問。運行在處理器上的軟件必須被設計為在訪問相關共享資源之前總是獲取Mutex的。

在大部分情況下,多個處理器之間應該使用互斥核來保護共享資源。然而,也有一些不需要互斥核的,例如對于單方向或循環的消息緩沖隊列,此時只有一個處理器往存儲器的某個特殊位置寫數據。

一般地,NiosII不支持多個處理器之間非存儲器外設的共享,NiosII硬件抽象層(HAL)庫也不支持。NiosIIHAL提供訪問Mutex核的API函數如表1所列。

2.3 多處理器地址空間的重疊

在單處理器系統中,不允許多于一個的從外設具有相同的地址空間,原因是這將引起矛盾。然而,在多處理器系統中,只要外設被不同的處理器控制,那么不同的從外設就可以具有相同的基地址。

3 Niosll多處理器系統軟件設計

3.1 程序存儲器

在多處理器系統中,多個處理器可能使用同一個程序存儲器,每個處理器的程序必須存放在不同的位置。Ni-osII和SOPC Builder提供一個簡單的存儲器分區模式,允許多個處理器在同一存儲器的不同區域運行各自的軟件。分區模式使用處理器的異常地址,可以在SOPC Builder中進行設置。NiosII IDE負責根據異常地址計算出不同代碼段鏈接的位置。如果2個不同的處理器被鏈接到同一存儲器,那么每個處理器的異常地址用來決定處理器軟件存放的基地址,其末地址由下一個異常地址或者存儲器的末地址決定。對于每個處理器,軟件有5個主要的代碼段需要被鏈接到存儲器中的固定地址,分別是:

·text 實際的可執行代碼;

·rodata代碼段執行時所使用的常量數據;

·rwdata讀/寫變量和指針;

·heap 動態分配的存儲器;

·stack 函數調用參數和其他臨時數據。

在多處理器系統中,對于每個處理器,都希望使用連續的存儲區域存儲其所有的代碼段。在這種情況下,異常地址用來定義2個處理器之間代碼存放的分界。

值得注意的是,異常地址的低6位總是設置為0x20,因為偏移量0x0是NiosII的復位地址,所以異常地址必須位于其他位置。偏移量選擇為0x20,原因是它與一條指令的緩存行有關。0x20字節的復位代碼初始化指令緩存行,然后跳轉到系統的起始代碼處。

3.2 啟動地址

在多處理器系統中,每個處理器必須從自己的存儲區域啟動。為了從同一個非易失性存儲器中的不同區域啟動多處理器,簡單地設置每個處理器的復位地址為所期望的啟動地址。在啟動地址之間要留出足夠的空間存放啟動代碼。

NiosII Flash Programmer能夠將多個處理器的啟動代碼編程到一個Flash器件中。Flash Programmer根據每個處理器的復位地址計算Flash內的編程地址。

3.3 NiosII IDE中多處理器系統的運行和調試

NiosII IDE中包含許多幫助開發多處理器系統軟件的工具,最重要的是具有對多處理器同時進行在片涮試的能力。在多處理器系統上,多個debug(調試)可同時運行;每個處理器可以單獨暫停和恢復,也可以單獨設置每個處理器的斷點。某個處理器停在一個斷點處,并不影響其他處理器的操作。每個debug通道也可以單獨打開和停止。在NiosII IDE中,利用一項稱為“處理器集合(mul-tiprocessor collections)”的功能,一個操作就可以打開多個處理器的debug通道。multiprocessor collections是被連接在一個配置名字下的每個處理器的debug配置組。使用multiprocessol collections的好處是無論何時打開collections,NiosII IDE都可以打開每個debug通道,而不用手動打開。也可以用一個操作停止multiprocessor col-lections,但是同時暫停和恢復multiprocessor collections目前不支持。

multiprocessor collections的打開和停止不是同時的,這意味著在collections中的處理器不能在同一個時鐘周期開始執行代碼。事實上,不同處理器的啟動可能有幾秒的延遲。multiprocessor collections的目的是方便打開多處理器系統的debug通道,而不是為了同步處理器。如果需要在較短的時間內啟動多個處理器,則需要構建單獨的硬件和軟件機制。

4 NiosII多處理器系統設計實例

下面將利用SOPC Builder建立一個基于標準模板的3處理器、共享片上存儲器的NiosII系統,之后在NiosII IDE中為每個處理器建立一個軟件工程。系統功能是:3個CPU的軟件將產生要顯示的消息。使用硬件?;コ夂藢⑺a生的不同消息放在共享的消息緩沖區中。cpul將連續檢查緩沖區中的新消息,如果發現新消息,就通過jtag_uart顯示出來。

實例的開發環境是QuartuslI 5.0或以上版本[2],開發套件CycloneII Edition和nioslI_cycloneII_2c35開發板。

4.1 創建硬件系統

在標準硬件實例standard.qp的設計基礎上,增加2個處理器、2個定時器和1個硬件互斥核組件;另外增加1個消息緩存區message_buffer_ram(片上RAM),用作3個處理器的消息緩存區。按如下步驟連接共享資源:

① 使用連接矩陣,將SDRAM連接到每個處理器的指令和數據主端口。允許3個處理器訪問SDRAM。

② 將ext_ram_bus蓮接到每個處理器的指令和數據主端口。允許3個處理器訪問外部RAM和Flash。

③ 將message_buffer_ram連接到每個處理器數據主端口。允許3個處理器訪問該存儲器。

④ 去除在message_buffer_ram和cpul指令主端口之間的缺省連接。

⑤ 選擇System→Auto-Assign Base Addresses,為每個外設分配一個唯一的基地址。

完成以上操作后,系統配置如圖1所示。3個處理器的數據主端口與共享存儲器的同一從端口連接。因為cpul、cpu2和cpu3在物理上能夠同時將數據寫到共享存儲器中,軟件必須仔細設計以保證存儲在共享存儲器上數據的完整性。注意:圖1所示的系統配置中,只有cpul的數據主端口與jtag_uart相連。

最后,為3個CPU設置復位和異常地址,創建和編譯系統,并下載FPGA的設計文件.sof文件到開發板。

4.2 為多處理器系統創建軟件

在NiosII IDE[3]環境下,為3個處理器系統分別創建6個軟件工程,為每個處理器創建一個應用工程和一個系統庫工程。之后對軟件工程進行編譯、運行和調試。

軟件使用硬件Mutex共享一個消息緩存區。3個處理器分別寫消息到消息緩存區(count)且循環加1。cpul讀消息且通過jtag_uart顯示消息。每個處理器運行同樣的C文件,但處理器的操作稍有不同。這是通過使用Ni-osII的cpuid實現的。在NioslI處理器系統中,某個處理器通過寫其cpuid控制寄存器的值到Mutex寄存器的OWNER域來對Mutex加鎖。cpuid寄存器保持一個靜態值,在多處理器系統中,該值唯一地識別一個處理器,且在系統創建時確定。軟件執行某個處理器的函數時,首先檢查處理器的cpuid,如果cpuid正確,則執行相應函數。工程中的文件為hello_world_multi.c,其中將信息寫入緩沖區的功能由以下程序段實現:


如果將信息從jtag_uart輸出,那么程序首先判斷id是否等于3。因為硬件設計時,只有cpul與jtag_uart相連,而cpul的id的值為3(在系統創建時確定),cpu2、cpu3的id分別為1和2,且id的值等于cpuid控制寄存器的值加1,可在NiosII IDE環境下讀取cpuid控制寄存器的內容。其信息輸出的程序如下:


在System Library屬性中,第1個工程選擇jtag_uart為stdin、stderr和stdout,選擇cpul_timer為the Systemclock timer;第2個工程選擇cpu2_timer為System clocktimer,驗證stdin、stderr和stdout為null,因為這個處理器不與jtag_uart連接;第3個工程選擇cpu3_timer為Systemclock timer,其余同工程2。驗證這3個工程的SDRAM被選擇為Program memory、Read-only data memory、Read/write data memory、Heap memory和Stack memory。

分別經編譯、下載、運行后,在終端上顯示這3個處理器產生的消息,如圖2所示。

結 語

結果表明,3處理器系統通過硬件互斥核,實現了存儲器的共享。在此實例的基礎上,按同樣的方法添加處理器及相應的硬件組件,并開發相關應用軟件,即可實現滿足不同需求的多處理器系統。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          亚洲免费av网站| 国产精品一区亚洲| 欧美一区二区国产| 麻豆精品国产91久久久久久| 久久青草福利网站| 欧美精品在线视频观看| 久久久久久久999精品视频| 国产精品狠色婷| 性感少妇一区| 欧美在线观看天堂一区二区三区| 亚洲精品一二区| 欧美日韩亚洲在线| 欧美www视频| 又紧又大又爽精品一区二区| 一区二区三区在线免费播放| 国产精品国产自产拍高清av| 久久精品欧美日韩精品| 国产精品你懂的在线欣赏| 玉米视频成人免费看| 久久亚洲国产成人| 国产精品久久久久秋霞鲁丝| 久久久免费av| 亚洲美女精品成人在线视频| 樱桃成人精品视频在线播放| 国产一区二区三区成人欧美日韩在线观看| 这里只有精品电影| 免费亚洲网站| 在线成人av| 在线一区二区日韩| 国产一区二区中文| 久久午夜色播影院免费高清| 亚洲欧美日韩精品久久久| 国产农村妇女精品| 久久国产色av| 亚洲先锋成人| 久久精品一区二区三区中文字幕| 欧美精品一区在线播放| 亚洲一级黄色| 一区二区三区欧美激情| 美女网站在线免费欧美精品| 另类天堂视频在线观看| 蜜桃久久精品乱码一区二区| 亚洲欧美综合一区| 欧美性猛交xxxx乱大交蜜桃| 欧美国产日韩一区二区三区| 国产一区二区三区在线观看精品| 揄拍成人国产精品视频| 亚洲女性喷水在线观看一区| 9l视频自拍蝌蚪9l视频成人| 欧美一区二区精品| 欧美乱人伦中文字幕在线| 一区二区三区在线视频观看| 亚洲手机视频| 欧美亚韩一区| 亚洲久久一区| 美女露胸一区二区三区| 国产一区二区三区视频在线观看| 亚洲三级性片| 亚洲视频香蕉人妖| 久久综合伊人77777尤物| 欧美在线免费观看亚洲| 国产精品一区一区三区| 久久伊人一区二区| 亚洲黄色小视频| 欧美第一黄色网| 欧美日韩成人一区二区| 国产精品美女久久久久久2018| 欧美高清hd18日本| 欧美色欧美亚洲另类七区| 欧美一区二区三区四区高清| 亚洲一本视频| 国产精品爱久久久久久久| 国产精品劲爆视频| 国产精品久久中文| 一片黄亚洲嫩模| 欧美日韩天堂| 欧美激情网友自拍| 国产日产欧美精品| 亚洲专区一区二区三区| 亚洲国产一成人久久精品| 国产欧美一区二区三区久久| av成人黄色| 一区二区三区.www| 国产精品www色诱视频| 久久国产日韩欧美| 国产精品高清一区二区三区| 亚洲乱码国产乱码精品精可以看| 欧美理论电影在线观看| 亚洲一二区在线| 欧美视频在线观看免费| 亚洲香蕉成视频在线观看| 亚洲欧美中文字幕| 国产精品永久免费视频| 亚洲高清毛片| 欧美日韩精品中文字幕| 国产精品久久二区二区| 极品中文字幕一区| 欧美 日韩 国产在线| 国产精品无码专区在线观看| 国产精品国产三级国产专播品爱网| 亚洲国产欧美国产综合一区| 国产亚洲精品bt天堂精选| 亚洲精品国产品国语在线app| 亚洲欧美一区二区激情| 美国十次成人| 亚洲肉体裸体xxxx137| 亚洲国产人成综合网站| 亚洲精品国产精品国自产在线| 欧美午夜电影在线| 国产日韩专区| 欧美视频中文在线看| 久久久久女教师免费一区| 欧美久久久久| 欧美在线www| 一区二区三区在线观看视频| 麻豆久久久9性大片| 欧美小视频在线| 亚洲精品社区| 国产一区二区三区久久悠悠色av| 99在线|亚洲一区二区| 国产精品久久久久9999吃药| 国产精品一区二区你懂得| 欧美乱妇高清无乱码| 欧美综合77777色婷婷| 亚洲美女免费精品视频在线观看| 欧美日韩亚洲另类| 亚洲成色www久久网站| 欧美日韩在线高清| 亚洲视频中文字幕| 国产精品日韩一区| 91久久精品视频| 国内成+人亚洲| 欧美欧美午夜aⅴ在线观看| 国产精品高清一区二区三区| 久久成人免费网| 国产精品入口日韩视频大尺度| 一区二区三区高清不卡| 亚洲夜晚福利在线观看| 国产有码一区二区| 欧美在线影院在线视频| 又紧又大又爽精品一区二区| 久久精品久久综合| 亚洲一区二区三区高清| 亚洲福利视频免费观看| 亚洲一区二区三区四区五区黄| 国产亚洲精品久久久久婷婷瑜伽| 亚洲一区二区三区国产| 国产在线视频欧美| 一区二区三区福利| 欧美视频网址| 午夜视频一区二区| 欧美成人精品一区二区三区| 久久av资源网站| 亚洲综合电影一区二区三区| 久久成人羞羞网站| 欧美另类极品videosbest最新版本| 欧美涩涩视频| 欧美黄色小视频| 妖精成人www高清在线观看| 国产精品国产三级国产专播品爱网| 亚洲国产天堂久久综合| 国产午夜精品久久久久久久| 影音先锋国产精品| 亚洲手机视频| 欧美国产视频在线| 免费人成网站在线观看欧美高清| 欧美色欧美亚洲另类二区| 国产精品日本一区二区| 一本色道**综合亚洲精品蜜桃冫| 亚洲欧美日韩国产成人| 99精品欧美一区二区三区综合在线| 国产女人水真多18毛片18精品视频| 一区二区三区欧美在线观看| 另类欧美日韩国产在线| 欧美激情第一页xxx| 国产精品永久免费在线| 久久亚洲高清| 亚洲一品av免费观看| 日韩亚洲精品在线| 国产欧美日韩亚洲一区二区三区| 欧美片在线观看| 一区二区三区在线高清| 国产精品地址| 日韩视频免费在线| 翔田千里一区二区| 午夜精品国产精品大乳美女| 亚洲激情在线观看视频免费| 永久免费毛片在线播放不卡| 激情成人av在线| 在线观看一区二区视频| 又紧又大又爽精品一区二区| 国产亚洲欧洲一区高清在线观看| 欧美视频在线观看免费| 免费人成网站在线观看欧美高清| 欧美精品色一区二区三区| 久久亚洲美女| 国产一区二区三区在线观看网站| 欧美大学生性色视频| 午夜精品视频网站| 欧美三级日本三级少妇99| 欧美三级中文字幕在线观看| 亚洲欧美日韩天堂一区二区| 久久综合久久久| 欧美成ee人免费视频| 亚洲精品国产精品乱码不99按摩| 久久综合导航| 国产日韩亚洲欧美| 一区二区三区毛片| 欧美伊人精品成人久久综合97| 亚洲国产综合在线看不卡| 久热成人在线视频| 国产精品久久波多野结衣| 极品尤物av久久免费看| 国产日韩一区二区三区在线播放| 久久久午夜视频| 亚洲在线网站| 免费精品99久久国产综合精品| 欧美日韩高清不卡| 亚洲成色999久久网站| 久久免费视频网站| 在线观看三级视频欧美| 女人天堂亚洲aⅴ在线观看| 亚洲国产精品久久久| 欧美激情综合五月色丁香小说| 欧美日韩久久不卡| 一区二区在线视频| 亚洲国产精品女人久久久| 一区视频在线播放| 欧美日韩国产一区二区三区| 国产一区二区三区免费在线观看| 亚洲一区日韩在线| 伊人伊人伊人久久| 国产精品试看| 欧美精品在线看| 亚洲欧美清纯在线制服| 欧美日韩精品免费观看视一区二区| 国产精品久久久久久亚洲毛片| 国产欧美日韩在线观看| 日韩视频在线观看| 国产精品porn| 欧美美女喷水视频| 久久精品99国产精品酒店日本| 久久国产直播| 亚洲欧美日本在线| 亚洲乱码国产乱码精品精98午夜| 午夜精彩国产免费不卡不顿大片| 欧美成人dvd在线视频| 久久不射电影网| 国内外成人在线视频| 欧美福利电影在线观看| 99re热这里只有精品免费视频| 亚洲欧美日韩另类精品一区二区三区| 亚洲二区在线视频| 亚洲一区在线观看免费观看电影高清| 国产精品男女猛烈高潮激情| 亚洲激情在线视频| 欧美日韩一区不卡| 国产一区二区三区精品久久久| 欧美精品一区二区三区在线看午夜| 日韩一级精品视频在线观看| 国产精品欧美一区二区三区奶水| 中文精品在线| 91久久国产自产拍夜夜嗨| 欧美三级视频在线观看| 国产精品一区免费视频| 亚洲第一精品福利| 国内成人精品一区| 亚洲人成网站精品片在线观看| 亚洲精品日韩激情在线电影| 欧美日韩国产一区二区三区| 国产日产亚洲精品系列| 国产亚洲欧美一区二区三区| 欧美精品久久天天躁| 激情成人亚洲| 国内精品99| 国产免费一区二区三区香蕉精| 亚洲欧美激情在线视频| 国产免费观看久久| 国产日韩欧美综合精品| 亚洲乱码久久| 久久嫩草精品久久久精品| 欧美视频1区| 久久激情五月激情| 亚洲天堂成人在线观看| 亚洲国产一区二区a毛片| 亚洲欧美日本国产有色| 国产精品久久波多野结衣| 欧美激情综合色| 男女激情视频一区| 久久免费精品日本久久中文字幕| 一本大道久久a久久综合婷婷| 久久精品一区蜜桃臀影院| 久久久久久久尹人综合网亚洲| 亚洲国产成人精品久久久国产成人一区| 日韩亚洲一区在线播放| 一区二区三区日韩欧美| 欧美精品网站| 国产欧美在线视频| 亚洲电影av在线| 亚洲欧美在线免费| 亚洲一区免费看| 欧美成人tv| 亚洲欧美在线另类| 欧美色道久久88综合亚洲精品| 亚洲美女淫视频| 激情视频一区| 久久久亚洲人| 亚洲人屁股眼子交8| 黄色成人在线观看| 亚洲三级国产| 伊人久久男人天堂| 99re66热这里只有精品3直播| 午夜精品99久久免费| 国内精品嫩模av私拍在线观看| 麻豆av一区二区三区| 亚洲影院高清在线| 另类综合日韩欧美亚洲| 亚洲一区二区三区影院| 亚洲免费在线精品一区| 国产精品久久国产精麻豆99网站| 在线欧美视频| 国产精品一区二区久久| 亚洲免费观看高清在线观看| 久久久久一区二区三区四区| 欧美乱人伦中文字幕在线| 国产伦精品一区二区三区| 亚洲每日更新| 欧美女同在线视频|