0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SoC芯片設(shè)計(jì)系列-ARM CPU子系統(tǒng)組件介紹

SoC芯片 ? 來(lái)源:SoC芯片 ? 2024-05-31 10:56 ? 次閱讀

ARM CPU子系統(tǒng)組件介紹

1、概述

在A(yíng)RM架構(gòu)的CPU子系統(tǒng)中,組件設(shè)計(jì)旨在高效地整合了多種功能模塊,以支持處理器核心的運(yùn)行、內(nèi)存管理、中斷處理、數(shù)據(jù)交換以及與外部設(shè)備的交互等。以下是ARM CPU子系統(tǒng)中的一些關(guān)鍵組件:

1. CPU Cores (處理器核心): 包括多個(gè)處理單元,如高性能的Cortex-A系列核心或高效能效核心,負(fù)責(zé)執(zhí)行指令。

2. GIC (Generic Interrupt Controller): 管理中斷請(qǐng)求,確保系統(tǒng)對(duì)事件做出快速響應(yīng),支持多級(jí)中斷處理和虛擬化。

3. DSU (DynamIQ Shared Unit): 在具備DynamIQ技術(shù)的SoC中,DSU管理共享資源,如L3緩存,優(yōu)化多核通信和數(shù)據(jù)一致性。

4. Cache System: 包括L1 Cache(靠近核心的高速緩存,分指令和數(shù)據(jù)緩存),L2 Cache(更大,有時(shí)是多核共享)。

5. Memory Controller: 控制內(nèi)存訪(fǎng)問(wèn),如DDR控制器,管理與主存交互。6. AMBA總線(xiàn): 如AMBA總線(xiàn)架構(gòu),提供系統(tǒng)內(nèi)部組件間的通信,包括常見(jiàn)的AXI(Advanced eXtensible Interface)協(xié)議。

7. System Control Block: 負(fù)理系統(tǒng)復(fù)位、時(shí)鐘、電源管理等初始化配置。

8. Security Features: 如TrustZone、加密引擎,確保系統(tǒng)安全。

9. Debugging and Trace: CoreSight、JTAGC等,方便調(diào)試和性能分析。

10. Connectivity and Peripherals: 包括USB、Ethernet控制器、顯示接口、I2C、SPI等,以支持與外設(shè)別交互。

這些組件共同構(gòu)成了復(fù)雜且高度集成的CPU子系統(tǒng),支持現(xiàn)代計(jì)算平臺(tái)的高效、低功耗、安全性以及可擴(kuò)展性需求。

以下是一張比較早期的經(jīng)典的bit-LITTLE的架構(gòu)圖。

ba1c1472-1e70-11ef-91d2-92fbcf53809c.png

2、CPU Cores

2.1終端芯片處理器

Arm架構(gòu)是當(dāng)今世界上最受歡迎的處理器架構(gòu)之一,經(jīng)過(guò)多年的發(fā)展和經(jīng)營(yíng),ARM在經(jīng)典處理器,嵌入式處理器和應(yīng)用型處理器方面研發(fā)設(shè)計(jì)出了多個(gè)系列的產(chǎn)品。ARM Cortex系列是經(jīng)典處理器ARM11以后產(chǎn)品的新的命名系列,只在各種不同的市場(chǎng)提供服務(wù),采用的是ARMv7或者ARMv8體系結(jié)構(gòu),并分為三個(gè)系列,分別是Cortex-A,Cortex-R,Cortex-M。

ba42a376-1e70-11ef-91d2-92fbcf53809c.jpg ? ?

ba725f62-1e70-11ef-91d2-92fbcf53809c.jpg

2.2服務(wù)器芯片處理器

2024年2月,Arm 推出了新的 Neoverse N3 和 V3 內(nèi)核以及針對(duì)這兩個(gè)內(nèi)核的 CSS 產(chǎn)品。正如人們所期望的那樣,Neoverse N3 更新了 N2,Neoverse V3 更新了 V2。CSS 是 Arm 的計(jì)算子系統(tǒng),可提供更多預(yù)封裝 IP,幫助公司更快地開(kāi)發(fā)芯片或小芯片。

ba92651e-1e70-11ef-91d2-92fbcf53809c.jpg

3、DynamIQ Shared Unit (DSU)

bab72084-1e70-11ef-91d2-92fbcf53809c.png

DynamIQ Shared Unit (DSU) 是ARM Cortex-A 系列列處理器中引入的一個(gè)關(guān)鍵組件,尤其是那些采用DynamIQ技術(shù)的高端多核設(shè)計(jì)中,如Cortex-A57、Cortex-A53、Cortex-A72、Cortex-A73等。DSU在SoC(System-on-Chip)架構(gòu)中扮演著至關(guān)重要的角色,其主要功能和特點(diǎn)包括:

1. L3緩存控制器:DSU集成L3緩存控制器,為整個(gè)CPU集群提供共享的、大容量的高速緩存,以減少對(duì)更慢速主存的依賴(lài),提高數(shù)據(jù)交換效率。

2. 一致性管理:在多核處理器系統(tǒng)中,DSU負(fù)責(zé)維護(hù)緩存一致性,確保所有核心看到的數(shù)據(jù)是一致的,通過(guò)實(shí)施緩存一致性協(xié)議(如MESI、MOESI)來(lái)協(xié)調(diào)數(shù)據(jù)更新。

3. 數(shù)據(jù)共享與分配:DSU優(yōu)化多核間的數(shù)據(jù)分配和共享,通過(guò)有效的緩存分配策略和傳輸機(jī)制,減少數(shù)據(jù)復(fù)制,提高數(shù)據(jù)訪(fǎng)問(wèn)效率。

4. 能效管理:作為SoC的一部分,DSU還可能集成能效管理機(jī)制,支持動(dòng)態(tài)調(diào)整頻率和電源狀態(tài),以平衡性能與能耗。

5. 系統(tǒng)互聯(lián):DSU通過(guò)高帶寬、低延遲的內(nèi)部總線(xiàn)與CPU核心、外設(shè)別、內(nèi)存控制器等SoC組件相連,確保數(shù)據(jù)快速流動(dòng)。

簡(jiǎn)言之,DynamIQ Shared Unit是DynamIQ架構(gòu)中的一個(gè)核心組件,它通過(guò)提供共享緩存、緩存一致性管理、數(shù)據(jù)高效共享和能效優(yōu)化,支持高性能、多核處理器系統(tǒng)中復(fù)雜數(shù)據(jù)處理和高效協(xié)作。

bae2a51a-1e70-11ef-91d2-92fbcf53809c.png

4、Snoop Control Unit(SCU)

Snoop Control Unit(SCU)是多處理器系統(tǒng)中的一個(gè)關(guān)鍵組件,特別是在包含緩存一致性設(shè)計(jì)中,如對(duì)稱(chēng)多處理機(jī)群集(SMP)或片上系統(tǒng)(SoC)中。其主要作用是維護(hù)緩存一致性,確保所有處理器核心對(duì)共享緩存的內(nèi)容有統(tǒng)一的視圖景,從而保證數(shù)據(jù)的一致性和正確性。SCU的工作機(jī)制通常包括以下方面:

1. 監(jiān)聽(tīng)(Snooping): SCU監(jiān)聽(tīng)所有處理器核心對(duì)共享緩存的訪(fǎng)問(wèn)請(qǐng)求,包括讀取和寫(xiě)入操作。當(dāng)一個(gè)核心試圖修改緩存中的數(shù)據(jù)時(shí),SCU介入以確保其他核心對(duì)該數(shù)據(jù)的緩存副本不會(huì)變得陳舊。

2. 緩存更新: 如果一個(gè)核心請(qǐng)求的數(shù)據(jù)在另一個(gè)核心的緩存中是臟(已修改但未回寫(xiě)回主存),SCU會(huì)促使持有該臟數(shù)據(jù)的核心將其寫(xiě)回到共享緩存或主存,然后更新請(qǐng)求核心的緩存,保證數(shù)據(jù)最新。

3. 一致性協(xié)議: SCU遵循一定的緩存一致性協(xié)議,如MESI(Modified, Exclusive, Shared, Invalid)、MOESI(Modified, Owner, Exclusive, Shared, Invalid)或其他協(xié)議,來(lái)決定如何響應(yīng)緩存訪(fǎng)問(wèn)并維護(hù)一致性。

4. 廣播與仲裁: 在多核系統(tǒng)中,SCU可能需要廣播某些緩存操作,比如寫(xiě)操作,給所有核心,或仲裁緩存訪(fǎng)問(wèn)沖突,決定哪個(gè)核心優(yōu)先級(jí)次序。

5. 目錄管理: 在大型系統(tǒng)中,SCU可能配合緩存目錄使用,目錄存儲(chǔ)哪個(gè)緩存行位于哪些地方,其狀態(tài),減少?gòu)V播范圍和提高效率。

綜上所述,Snoop Control Unit是多處理器緩存一致性機(jī)制中的重要一環(huán),通過(guò)監(jiān)聽(tīng)和協(xié)調(diào)處理器間的緩存操作,確保數(shù)據(jù)的一致性,從而支持高效、可靠并行計(jì)算。

baf3eff0-1e70-11ef-91d2-92fbcf53809c.png

5、Coresight system

CoreSight架構(gòu)是ARM公司為復(fù)雜系統(tǒng)級(jí)芯片(SoC)設(shè)計(jì)的調(diào)試和追蹤解決方案,它提供了一個(gè)高度集成且可擴(kuò)展的框架,用于系統(tǒng)級(jí)的調(diào)試、性能分析和優(yōu)化。CoreSight架構(gòu)旨在支持多核和多處理器環(huán)境,尤其是在面對(duì)現(xiàn)代嵌入式系統(tǒng)和高性能計(jì)算領(lǐng)域,其功能強(qiáng)大且靈活的特性能夠顯著提升開(kāi)發(fā)效率和系統(tǒng)性能。以下是CoreSight架構(gòu)的一些關(guān)鍵組成部分和功能:

1. 調(diào)試和追蹤IP模塊:?包括嵌入式追蹤宏單元(ETM, Embedded Trace Macrocell, ETM)、系統(tǒng)追蹤宏單元(STM, System Trace Macrocell, STM)、數(shù)據(jù)觀(guān)看點(diǎn)單元(Data Watchpoint Unit, DWT)等,這些模塊負(fù)責(zé)捕獲程序執(zhí)行時(shí)的指令流、數(shù)據(jù)訪(fǎng)問(wèn)、系統(tǒng)事件、性能計(jì)數(shù)等信息。

2. 跨觸發(fā)接口 - CTI(Cross Trigger Interface, CTI):允許不同調(diào)試和追蹤組件之間同步事件,支持復(fù)雜的系統(tǒng)級(jí)調(diào)試和性能分析。

3. 調(diào)試訪(fǎng)問(wèn)點(diǎn) - DAP(Debug Access Port, DAP)和DP(Debug Port):提供調(diào)試接口,允許調(diào)試器通過(guò)串行線(xiàn)調(diào)試協(xié)議(如JTAG, SWD)訪(fǎng)問(wèn)系統(tǒng)。

4. 電源管理:支持系統(tǒng)級(jí)的動(dòng)態(tài)電壓和頻率調(diào)整(DVFS),優(yōu)化能效。

bb217682-1e70-11ef-91d2-92fbcf53809c.jpg ? ?

CoreSight架構(gòu)的組件可按需組合,根據(jù)SoC的具體需求定制化集成,以達(dá)到最佳的調(diào)試、性能監(jiān)控和系統(tǒng)優(yōu)化效果,支持從簡(jiǎn)單的單核微控制器到復(fù)雜的多核服務(wù)器芯片的廣泛應(yīng)用。

6、System Memory Management Unit(SMMU)

ARM SMMU指的是ARM架構(gòu)中的System Memory Management Unit,它是一種系統(tǒng)級(jí)的內(nèi)存管理單元,主要負(fù)責(zé)地址轉(zhuǎn)換和內(nèi)存訪(fǎng)問(wèn)權(quán)限控制。在A(yíng)RM架構(gòu)中,SMMU主要用于處理非CPU核心的內(nèi)存管理,尤其是外設(shè)別和硬件加速器的內(nèi)存訪(fǎng)問(wèn)。與CPU核心中的MMU(管理虛擬地址到物理地址轉(zhuǎn)換)類(lèi)似,SMMU提供了對(duì)系統(tǒng)其他組件的內(nèi)存訪(fǎng)問(wèn)控制,確保安全和高效的數(shù)據(jù)交互。特別地,ARM SMMU在不同場(chǎng)景下的應(yīng)用和功能包括:

1. 外設(shè)別DMA訪(fǎng)問(wèn)隔離:SMMU通過(guò)配置映射表管理外設(shè)別DMA請(qǐng)求,確保其只能訪(fǎng)問(wèn)被授權(quán)的內(nèi)存區(qū)域,防止非法或越界訪(fǎng)問(wèn),增強(qiáng)了系統(tǒng)安全性。

2. 硬件加速器訪(fǎng)問(wèn)控制:對(duì)于硬件加速器(如GPU、網(wǎng)絡(luò)加速器、加密加速器等),SMMU確保它們僅訪(fǎng)問(wèn)指定的內(nèi)存區(qū)域,避免對(duì)系統(tǒng)關(guān)鍵數(shù)據(jù)的干擾,同時(shí)優(yōu)化訪(fǎng)問(wèn)效率。

3. 虛擬化支持:在虛擬化環(huán)境中,SMMU為每個(gè)虛擬機(jī)提供獨(dú)立的地址空間映射表,實(shí)現(xiàn)內(nèi)存的隔離,保障虛擬機(jī)間不能互相干擾,提升了虛擬化平臺(tái)的安全性和穩(wěn)定性。

4. 中斷處理:SMMU在某些實(shí)現(xiàn)中,如GICv3,可能間接參與中斷路由和管理,特別是與中斷的虛擬化處理,確保中斷能被正確、高效地路由至目標(biāo)處理器。

5. 內(nèi)存屬性管理:SMMU還可以控制內(nèi)存訪(fǎng)問(wèn)屬性,如是否緩存、共享與否、訪(fǎng)問(wèn)權(quán)限等,進(jìn)一步細(xì)化內(nèi)存管理,提升系統(tǒng)整體性能和安全性。組件與實(shí)現(xiàn):?Stream Table:根表基地址寄存于寄存器中,是SMMU查找中斷或DMA請(qǐng)求映射的起點(diǎn)。?Context Descriptor:描述符定義了第一階段映射表的基地址,與第二階段配置相關(guān)聯(lián)。?Translation Tables:用于實(shí)際的地址轉(zhuǎn)換,依據(jù)不同階段的映射表結(jié)構(gòu),完成從虛擬到物理地址的映射。

綜上,ARM SMMU是系統(tǒng)中一個(gè)關(guān)鍵的組件,它對(duì)內(nèi)存訪(fǎng)問(wèn)的高效、安全控制和虛擬化支持至關(guān)重要,特別是在高性能、多核和異構(gòu)計(jì)算系統(tǒng)中。

6.1. 什么是SMMU?

SMMU(system mmu),是I/O device與總線(xiàn)之間的地址轉(zhuǎn)換橋。

它在系統(tǒng)的位置如下圖:

bb438984-1e70-11ef-91d2-92fbcf53809c.jpg

它與mmu的功能類(lèi)似,可以實(shí)現(xiàn)地址轉(zhuǎn)換,內(nèi)存屬性轉(zhuǎn)換,權(quán)限檢查等功能。

6.2. 為什么需要SMMU?

了解SMMU出現(xiàn)的背景,需要知道系統(tǒng)中的兩個(gè)概念:DMA和虛擬化。

DMA:((Direct Memory Access),直接內(nèi)存存取, 是一種外部設(shè)備不通過(guò)CPU而直接與系統(tǒng)內(nèi)存交換數(shù)據(jù)的接口技術(shù) 。外設(shè)可以通過(guò)DMA,將數(shù)據(jù)批量傳輸?shù)絻?nèi)存,然后再發(fā)送一個(gè)中斷通知CPU取,其傳輸過(guò)程并不經(jīng)過(guò)CPU, 減輕了CPU的負(fù)擔(dān)。但由于DMA不能像CPU一樣通過(guò)MMU操作虛擬地址,所以DMA需要連續(xù)的物理地址。

虛擬化:在虛擬化場(chǎng)景, 所有的VM都運(yùn)行在中間層hypervisor上,每一個(gè)VM獨(dú)立運(yùn)行自己的OS(guest OS),Hypervisor完成硬件資源的共享, 隔離和切換。

bb60a03c-1e70-11ef-91d2-92fbcf53809c.png

但對(duì)于Hypervisor + GuestOS的虛擬化系統(tǒng)來(lái)說(shuō), guest VM使用的物理地址是GPA, 看到的內(nèi)存并非實(shí)際的物理地址(也就是HPA),因此Guest OS無(wú)法正常的將連續(xù)的物理地址分給硬件。

因此,為了支持I/O透?jìng)鳈C(jī)制中的DMA設(shè)備傳輸,而引入了IOMMU技術(shù)(ARM稱(chēng)作SMMU)。

總而言之,SMMU可以為ARM架構(gòu)下實(shí)現(xiàn)虛擬化擴(kuò)展提供支持。它可以和MMU一樣,提供stage1轉(zhuǎn)換(VA->PA), 或者stage2轉(zhuǎn)換(IPA->PA),或者stage1 + stage2轉(zhuǎn)換(VA->IPA->PA)的靈活配置。

*[VA:虛擬地址;IPA: 中間物理地址;PA:物理地址]

6.3. SMMU常用概念

術(shù)語(yǔ) 概念

StreamID 一個(gè)平臺(tái)上可以有多個(gè)SMMU設(shè)備,每個(gè)SMMU設(shè)備下面可能連接著多個(gè)Endpoint, 多個(gè)設(shè)備互相之間可能不會(huì)復(fù)用同一個(gè)頁(yè)表,需要加以區(qū)分,SMMU用StreamID來(lái)做這個(gè)區(qū)分( SubstreamID的概念和PCIe PASID是等效的)

STE Stream Table Entry, STE里面包含一個(gè)指向stage2地址翻譯表的指針,并且同時(shí)還包含一個(gè)指向CD(Context Descriptor)的指針.

CD Context Descriptor, 是一個(gè)特定格式的數(shù)據(jù)結(jié)構(gòu),包含了指向stage1地址翻譯表的基地址指針

4. SMMU數(shù)據(jù)結(jié)構(gòu)查找

SMMU翻譯過(guò)程需要使用多種數(shù)據(jù)結(jié)構(gòu),如STE, CD,PTW等。

4.1 SID查找STE

Stream Table是存放在內(nèi)存中的一張表,在SMMU驅(qū)動(dòng)初始化時(shí)由驅(qū)動(dòng)程序創(chuàng)建好。

Stream table有兩種格式,一種是Linear Stream Table, 一種是2-level Stream Table.

1. Linear Stream Table

bb9ff958-1e70-11ef-91d2-92fbcf53809c.png

Linear Stream Table是將整個(gè)stream table在內(nèi)存中線(xiàn)性展開(kāi)成一個(gè)數(shù)組, 用Stream Id作為索引進(jìn)行查找.

Linear Stream Table 實(shí)現(xiàn)簡(jiǎn)單,只需要一次索引,速度快;但是平臺(tái)上外設(shè)較少時(shí),浪費(fèi)連續(xù)的內(nèi)存空間。

2. 2-level Stream Table

bbc5f9d2-1e70-11ef-91d2-92fbcf53809c.png

2-level Stream Table, 顧名思義,就是包含2級(jí)table, 第一級(jí)table, 即STD,包含了指向二級(jí)STE的基地址STD。第二級(jí)STE是Linear stream Table. 2-level Stream Table的優(yōu)點(diǎn)是更加節(jié)省內(nèi)存。

SMMU根據(jù)寄存器配置的STRTAB_BASE地址找到STE, STRTAB_BASE定義了STE的基地值, Stream id定義了STE的偏移。如果使用linear 查找, 通過(guò)STRTAB_BASE + sid * 64(一個(gè)STE的大小為64B)找到STE;若使用2-level查找, 則先通過(guò)sid的高位找到L1_STD(STRTAB_BASE + sid[9:8] * 8, 一個(gè)L1_STD的大小為8B), L1_STD定義了下一級(jí)查找的基地址,然后通過(guò)sid 找到具體的STE(l2ptr + sid[7:0] * 64).

最終找到的STE如下所示,表中的信息包含屬性相關(guān)信息, 翻譯模式信息(是否 stream bypass, 若否,選擇stage1, stage2或者stage1 + stage2翻譯模式)。

bbf0872e-1e70-11ef-91d2-92fbcf53809c.png

.2 SSID查找CD

CD包含了指向stage1地址翻譯表的基地址指針.

如下圖所示, STE指明了CD數(shù)據(jù)結(jié)構(gòu)在DDR中的基地址S1ContextPTR, SSID(substream id)指明了CD數(shù)據(jù)結(jié)構(gòu)的偏移,如果SMMU選擇進(jìn)行l(wèi)inear, 則使用S1ContextPTR + 64 * ssid 找到CD。如果SMMU選擇2-level, 則使用ssid進(jìn)行二級(jí)查找獲得CD(與上節(jié)STE的方式一致)。

bc0b9f5a-1e70-11ef-91d2-92fbcf53809c.png

最終找到的CD如下所示:

bc3bc2de-1e70-11ef-91d2-92fbcf53809c.png ? ?

表中信息包含memory屬性,翻譯控制信息,異??刂菩畔⒁约癙age table walk(PTW)的起始地址TTB0, TTB1, 找到TTBx后,就可以PTW了。

5. SMMU地址轉(zhuǎn)換

5.1 單stage的地址轉(zhuǎn)換:

bc56f892-1e70-11ef-91d2-92fbcf53809c.png

TTB 和 VA[47:39]組成獲取Level0頁(yè)表的地址PA;

Level0頁(yè)表中的next-level table address 和 VA[38:30]組成獲取Level1的頁(yè)表地址PA;

Level1頁(yè)表中的next-level table address 和 VA[29:21]組成獲取Level2的頁(yè)表地址PA;

Level2頁(yè)表中的next-level table address 和 VA[20:12]組成獲取Leve3的頁(yè)表地址PA;

level3頁(yè)表中的output address和va[12:0]組成獲取組后的鉆換地址

在stage1地址翻譯階段:硬件先通過(guò)StreamID索引到STE,然后用SubstreamID索引到CD, CD里面包含了stage1地址翻譯(把進(jìn)程的GVA/IOVA翻譯成IPA)過(guò)程中需要的頁(yè)表基地址信息、per-stream的配置信息以及ASID。在stage1翻譯的過(guò)程中,多個(gè)CD對(duì)應(yīng)著多個(gè)stage1的地址翻譯,通過(guò)Substream去確定對(duì)應(yīng)的stage1地址翻譯頁(yè)表。所以,Stage1地址翻譯其實(shí)是一個(gè)(RequestID, PASID) => GPA的映射查找過(guò)程。

5.2 stage1+stage2的地址轉(zhuǎn)換:

bc7f51ca-1e70-11ef-91d2-92fbcf53809c.png

在使能SMMU兩階段地址翻譯的情況下,stage1負(fù)責(zé)將設(shè)備DMA請(qǐng)求發(fā)出的VA翻譯為IPA并作為stage2的輸入, stage2則利用stage1輸出的IPA再次進(jìn)行翻譯得到PA,從而DMA請(qǐng)求正確地訪(fǎng)問(wèn)到Guest的要操作的地址空間上。

在stage2地址翻譯階段:STE里面包含了stage2地址翻譯的頁(yè)表基地址(IPA->HPA)和VMID信息。如果多個(gè)設(shè)備被直通給同一個(gè)虛擬機(jī),那么意味著他們共享同一個(gè)stage2地址翻譯頁(yè)表。

在兩階段地址翻譯場(chǎng)景下, 地址轉(zhuǎn)換流程步驟:

1.Guest驅(qū)動(dòng)發(fā)起DMA請(qǐng)求,這個(gè)DMA請(qǐng)求包含VA + SID前綴

2.DMA請(qǐng)求到達(dá)SMMU,SMMU提取DMA請(qǐng)求中的SID就知道這個(gè)請(qǐng)求是哪個(gè)設(shè)備發(fā)來(lái)的,然后去StreamTable索引對(duì)應(yīng)的STE

3.從對(duì)應(yīng)的STE表中查找到對(duì)應(yīng)的CD,然后用ssid到CD中進(jìn)行索引找到對(duì)應(yīng)的S1 Page Table

4.IOMMU進(jìn)行S1 Page Table Walk,將VA翻譯成IPA并作為S2的輸入

5.IOMMU執(zhí)行S2 Page Table Walk,將IPA翻譯成PA,地址轉(zhuǎn)化結(jié)束。

6. SMMU command queue 與 event queue

系統(tǒng)軟件通過(guò)Command Queue和Event Queue來(lái)和SMMU打交道,這2個(gè)Queue都是循環(huán)隊(duì)列。

Command queue用于軟件與SMMU的硬件交互,軟件寫(xiě)命令到command queue, SMMU從command queue中 地區(qū)命令處理。

Event Queue用于SMMU發(fā)生軟件配置錯(cuò)誤的狀態(tài)信息記錄,SMMU將配置錯(cuò)誤信息寫(xiě)到Event queue中,軟件通過(guò)讀取Event queue獲得配置錯(cuò)誤信息并進(jìn)行配置錯(cuò)誤處理。

bcb6ca4c-1e70-11ef-91d2-92fbcf53809c.png ? ?

7、 GIC Controller

6.1 gic的版本號(hào)

§gic400,支持gicv2架構(gòu)版本。

§gic500,支持gicv3架構(gòu)版本。

§gic600,支持gicv3架構(gòu)版本

§gic700, 支持gicv4.1架構(gòu)版本

6.2 gic中斷類(lèi)型

GIC 分為不同類(lèi)型的中斷源:

§Shared Peripheral Interrupt (SPI) : 共享中斷

§Private Peripheral Interrupt (PPI) : 私有中斷

§Software Generated Interrupt (SGI) : 軟件產(chǎn)生中斷

§Locality-specific Peripheral Interrupt (LPI)

每個(gè)中斷源都由一個(gè) ID 號(hào)標(biāo)識(shí),稱(chēng)為 INTID。 前面列表中介紹的中斷類(lèi)型就是根據(jù) INTID 的范圍定義的:

bcdb25d6-1e70-11ef-91d2-92fbcf53809c.png

6.3 LPI介紹

bd12b1cc-1e70-11ef-91d2-92fbcf53809c.png

Locality Specific Interrupts(LPI),這是一個(gè)與GICv3及之后版本相關(guān)的概念。LPI中斷是GIC架構(gòu)中用來(lái)優(yōu)化中斷管理的一部分,特別是針對(duì)PCI Express (PCIe) 設(shè)備的中斷處理,它與傳統(tǒng)的共享中斷線(xiàn)方法不同,提供了更高效的中斷處理機(jī)制。以下是LPI的主要特點(diǎn)和工作原理

1. 基于消息的中斷:LPI中斷不同于傳統(tǒng)的硬件中斷線(xiàn)機(jī)制,它基于消息傳遞,即中斷信號(hào)通過(guò)寫(xiě)入內(nèi)存中的特定地址(中斷向量寄存器)來(lái)觸發(fā),而非通過(guò)物理線(xiàn)路。

2. 中斷優(yōu)化:LPI機(jī)制設(shè)計(jì)用于優(yōu)化了中斷處理,減少中斷延遲和提高吞吐量,特別是在多核和虛擬化環(huán)境中。它避免了物理中斷線(xiàn)的限制,簡(jiǎn)化了系統(tǒng)設(shè)計(jì)和擴(kuò)展性。

3. 中斷狀態(tài)表:LPI中斷的狀態(tài)信息存儲(chǔ)在內(nèi)存中,GIC通過(guò)配置的中斷狀態(tài)表(Pending狀態(tài)表)來(lái)跟蹤這些中斷,這允許快速查詢(xún)和處理狀態(tài),減少了硬件開(kāi)銷(xiāo)耗。

4. GICv3及以后支持:GICv3開(kāi)始引入了對(duì)LPI中斷的直接注入支持,包括了中斷狀態(tài)表和中斷配置寄存取址等,而GICv4在此基礎(chǔ)上進(jìn)一步優(yōu)化,如支持虛擬中斷直接注入到虛擬機(jī)。

5. 中斷路由與優(yōu)先級(jí):LPI中斷也涉及到中斷的路由和優(yōu)先級(jí)管理,GIC的Distributor組件會(huì)根據(jù)中斷的屬性和系統(tǒng)策略,決定如何路由到適當(dāng)?shù)腃PU核心,以及處理的優(yōu)先級(jí)。

綜上所述,LPI在GIC框架下是針對(duì)高性能和高效中斷處理的一個(gè)設(shè)計(jì),特別是在現(xiàn)代的多核處理器和虛擬化系統(tǒng)中,它利用內(nèi)存消息機(jī)制替代傳統(tǒng)的硬件中斷線(xiàn),優(yōu)化中斷管理,提升了系統(tǒng)響應(yīng)速度和效率。

bd21fa88-1e70-11ef-91d2-92fbcf53809c.jpg

LPI,和SPI,PPI,SGI有些差別,LPI的中斷的配置,以及中斷的狀態(tài),是保存在memory的表中,而不是保存在gic的寄存器中的。

·GICR_PROPBASER:保存LPI中斷配置表的基地址

·GICR_PENDBASER: 保存LPI中斷狀態(tài)表的基地址

這里,就涉及到兩個(gè)表:

6.3.1 LPI中斷配置表

該表,保存在memory中?;刂?,由GICR_PROPBASER寄存器決定。

bd5005ae-1e70-11ef-91d2-92fbcf53809c.jpg

該寄存器描述如下:

bd766d84-1e70-11ef-91d2-92fbcf53809c.png

其中的Physical_Address字段,指定了LPI中斷配置表的基地址。

對(duì)于LPI配置表,每個(gè)LPI中斷,占用1個(gè)字節(jié),指定了該中斷的使能和中斷優(yōu)先級(jí)。

bd90d282-1e70-11ef-91d2-92fbcf53809c.jpg

當(dāng)外部發(fā)送LPI中斷給redistributor,redistributor首先要查該表,也就是要訪(fǎng)問(wèn)memory來(lái)獲取LPI中斷的配置。為了加速這過(guò)程,redistributor中可以配置cache,用來(lái)緩存LPI中斷的配置信息。

因?yàn)橛辛薱ache,所以L(fǎng)PI中斷的配置信息,就有了2份拷貝,一份在memory中,一份在redistributor的cache中。如果軟件修改了memory中的LPI中斷的配置信息,需要將redistributor中的cache信息給無(wú)效掉。

6.3.2 LPI中斷狀態(tài)表

該表,處于memory中,保存了LPI中斷的狀態(tài),是否pending狀態(tài)。

LPI中斷的狀態(tài),不是保存在寄存器中,而是保存在memory中的pending表中。該狀態(tài)表,由redistributor來(lái)進(jìn)行更改。而該table的基地址,是由軟件來(lái)設(shè)置的。

軟件通過(guò)設(shè)置 GICR_PENDBASER 寄存器來(lái)設(shè)置。

bdb82148-1e70-11ef-91d2-92fbcf53809c.jpg

該寄存器,設(shè)置LPI狀態(tài)表的基地址,該狀態(tài)表的memory的屬性,如shareability,cache屬性等。

bdcf4030-1e70-11ef-91d2-92fbcf53809c.png

每個(gè)LPI中斷,占用一個(gè)bit空間

·0: 該LPI中斷,沒(méi)有處于pending狀態(tài)

·1: 該LPI中斷,處于pending狀態(tài)

該狀態(tài)表,由redistributor來(lái)設(shè)置。軟件如果修改該表,會(huì)引發(fā)unpredictable行為。

6.4 LPI的實(shí)現(xiàn)方式

為了實(shí)現(xiàn)LPI,gicv3定義了以下兩種方法來(lái)實(shí)現(xiàn):

·使用ITS,將外設(shè)發(fā)送到eventID,轉(zhuǎn)換成LPI 中斷號(hào)

·forwarding方式,直接訪(fǎng)問(wèn)redistributor的寄存器GICR_SERLPIR,直接發(fā)送LPI中斷

6.4.1、forwarding方式

這種方式,比較簡(jiǎn)單,主要由下面幾個(gè)寄存器來(lái)實(shí)現(xiàn):

·GICR_SERLPIR

·GICR_CLRLPIR

·GICR_INVLPIR

·GICR_INVALLR

·GICR_SYNCR

其gic框圖如下所示:

bdebed84-1e70-11ef-91d2-92fbcf53809c.png

GICR_SERLPIR,將指定的LPI中斷,設(shè)置為pending狀態(tài)。

be1616ea-1e70-11ef-91d2-92fbcf53809c.png

GICR_INVLPIR,將指定的LPI中斷,清除pending狀態(tài)。寄存器內(nèi)容和GICR_SERLPIR一致。

be31967c-1e70-11ef-91d2-92fbcf53809c.png

GICR_INVLPIR,將緩存中,指定LPI的緩存給無(wú)效掉,使GIC重新從memory中載入LPI的配置。

be549d70-1e70-11ef-91d2-92fbcf53809c.jpg

GICR_INVALLR,將緩存中,所有LPI的緩存給無(wú)效掉,使GIC重新從memory中,載入LPI中斷的配置。

be5eb5ee-1e70-11ef-91d2-92fbcf53809c.jpg

GICR_SYNCR,對(duì)redistributor的操作是否完成。

be7ffc9a-1e70-11ef-91d2-92fbcf53809c.png

寄存器,只有第0bit是有效的。如果為0,表示當(dāng)前對(duì)redistributor的操作是完成的,如果為1,那么是沒(méi)有完成的。

bea562a0-1e70-11ef-91d2-92fbcf53809c.png

6.4.2、使用ITS方式

理解了forwarding方式,那么理解ITS方式,就要容易了。forwarding方式,是直接得到了LPI的中斷號(hào)。

但是對(duì)于ITS方式,是不知道LPI的中斷號(hào)的。需要將外設(shè)發(fā)送的DeviceID,eventID,通過(guò)一系列查表,得到LPI的中斷號(hào)以及該中斷對(duì)應(yīng)的target redistributor,然后將LPI中斷,發(fā)送給對(duì)應(yīng)的redistributor。

下圖是帶有ITS的gic框圖:

bec3a9b8-1e70-11ef-91d2-92fbcf53809c.png

外設(shè),通過(guò)寫(xiě)GITS_TRANSLATER寄存器,發(fā)起LPI中斷。寫(xiě)操作,給ITS提供2個(gè)信息:

·EventID:值保存在GITS_TRANSLATER寄存器中,表示外設(shè)發(fā)送中斷的事件類(lèi)型

·DeviceID:表示哪一個(gè)外設(shè)發(fā)起LPI中斷。該值的傳遞,是實(shí)現(xiàn)自定義,例如,可以使用AXI的user信號(hào)來(lái)傳遞。

ITS將DeviceID和eventID,通過(guò)一系列查表,得到LPI中斷號(hào),再使用LPI中斷號(hào)查表,得到該中斷的目標(biāo)cpu。

ITS將LPI中斷號(hào),LPI中斷對(duì)應(yīng)的目標(biāo)cpu,發(fā)送給對(duì)應(yīng)的redistributor。redistributor再將該中斷信息,發(fā)送給CPU。

6.5 ITS組件

beebc786-1e70-11ef-91d2-92fbcf53809c.png

ITS(Interrupt Translation Service)是GICv3及之后版本中引入的一項(xiàng)高級(jí)特性,特別針對(duì)PCI Express (PCIe) 系統(tǒng)的中斷處理進(jìn)行了優(yōu)化。以下是GIC的ITS的主要工作原理和功能:

1. 中斷轉(zhuǎn)換與路由優(yōu)化:ITS的主要職責(zé)是將PCIe的Message Signaled Interrupts (MSI) 轉(zhuǎn)換為系統(tǒng)內(nèi)部中斷ID,進(jìn)而路由到適當(dāng)?shù)腃PU核心。這一轉(zhuǎn)換過(guò)程優(yōu)化了中斷的分配,尤其是對(duì)于多核處理器和虛擬化環(huán)境中的中斷路由。

2. 高效中斷處理:通過(guò)硬件加速中斷的翻譯和路由,ITS降低了中斷處理延遲,提高了系統(tǒng)響應(yīng)速度,特別是在處理大量中斷的場(chǎng)景下,如數(shù)據(jù)中心、高性能計(jì)算和網(wǎng)絡(luò)設(shè)備。

3. 中斷虛擬化支持:在虛擬化環(huán)境中,ITS可以更高效地重定向中斷到正確的虛擬機(jī),支持中斷隔離和虛擬中斷的靈活管理,增強(qiáng)虛擬化平臺(tái)的性能和可擴(kuò)展性。

4. 中斷表管理:ITS維護(hù)一個(gè)中斷轉(zhuǎn)換表,存儲(chǔ)了中斷源到中斷ID的映射關(guān)系,以及相關(guān)的優(yōu)先級(jí)和路由信息。這個(gè)表支持動(dòng)態(tài)更新,允許系統(tǒng)根據(jù)需要調(diào)整中斷配置。

5. 硬件輔助的中斷分配:GIC的Distributor組件與ITS協(xié)同工作,確保中斷被高效地分配給CPU Interface,而CPU Interface負(fù)責(zé)中斷的發(fā)送EOI(End of Interrupt)信號(hào),告知中斷已處理完畢,完成循環(huán)。

GIC的ITS特性是現(xiàn)代中斷處理技術(shù)的一個(gè)重要進(jìn)展,它提高了中斷處理的效率、靈活性和可擴(kuò)展性,特別是在復(fù)雜的多核處理器和虛擬化系統(tǒng)中,確保了中斷處理的高效和及時(shí)響應(yīng)。

6.5.1、ITS處理流程

ITS使用三類(lèi)表格,實(shí)現(xiàn)LPI的轉(zhuǎn)換和映射:

·device table: 映射deviceID到中斷轉(zhuǎn)換表

·interrupt translation table:映射EventID到INTID。以及INTID屬于的collection組

·collection table:映射collection到redistributor

bf025f64-1e70-11ef-91d2-92fbcf53809c.jpg

當(dāng)外設(shè)往GITS_TRANSLATER寄存器中寫(xiě)數(shù)據(jù)后,ITS做如下操作:

·使用DeviceID,從設(shè)備表(device table)中選擇索引為DeviceID的表項(xiàng)。從該表項(xiàng)中,得到中斷映射表的位置

·使用EventID,從中斷映射表中選擇索引為EventID的表項(xiàng)。得到中斷號(hào),以及中斷所屬的collection號(hào)

·使用collection號(hào),從collection表格中,選擇索引為collection號(hào)的表項(xiàng)。得到redistributor的映射信息

·根據(jù)collection表項(xiàng)的映射信息,將中斷信息,發(fā)送給對(duì)應(yīng)的redistributor

以上是物理LPI中斷的ITS流程。虛擬LPI中斷的ITS流程與之類(lèi)似。以下是處理流程圖:

bf236542-1e70-11ef-91d2-92fbcf53809c.png

6.5.2、ITS命令

ITS操作,會(huì)涉及到很多表,而這些表的創(chuàng)建,維護(hù)是通過(guò)ITS命令,來(lái)實(shí)現(xiàn)的。雖然這些表,是在內(nèi)存中的,但是GICv3和GICv4,不支持直接訪(fǎng)問(wèn)這些表,而是要通過(guò)ITS命令,來(lái)配置這些表。

ITS的操作,是通過(guò)命令,來(lái)控制的。外部通過(guò)發(fā)送命令給ITS,ITS然后去執(zhí)行命令,每個(gè)命令,占32字節(jié)。

ITS有command隊(duì)列,命令寫(xiě)在這個(gè)隊(duì)列里面。ITS會(huì)自動(dòng)的按照隊(duì)列順序,一一執(zhí)行。

bf47fdda-1e70-11ef-91d2-92fbcf53809c.jpg

每個(gè)命令占32個(gè)字節(jié)。

命令,存放在內(nèi)存中,GITS_CBASE,保存命令的首地址。GITS_CREADR,是由ITS控制,表示下一個(gè)命令的地址。GITS_CWRITER,是下一個(gè)待寫(xiě)命令的地址。軟件往GITS_CWRITER地址處,寫(xiě)入命令,之后ITS就會(huì)執(zhí)行這個(gè)命令。

ITS提供的命令,有很多,可以查閱GIC手冊(cè)獲取更多。

以下是CLEAR命令。

bf6940f8-1e70-11ef-91d2-92fbcf53809c.png ? ?

6.5.3、ITS table

ITS包括很多個(gè)表,這些表均處于 non-secure區(qū)域。

GITS_BASER,指定ITS表的基地址和大小。軟件,在使用ITS之前,必須要配置。

bf8602d8-1e70-11ef-91d2-92fbcf53809c.png

其中的Physical_Address字段,就指定了表的基地址所在位置。

以下是各個(gè)表的基地址,對(duì)應(yīng)的寄存器。

bf949c94-1e70-11ef-91d2-92fbcf53809c.jpg




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    16960

    瀏覽量

    182876
  • DDR
    DDR
    +關(guān)注

    關(guān)注

    11

    文章

    731

    瀏覽量

    66369
  • ARM處理器
    +關(guān)注

    關(guān)注

    6

    文章

    361

    瀏覽量

    42434
  • SoC芯片
    +關(guān)注

    關(guān)注

    1

    文章

    636

    瀏覽量

    35648
  • Cortex-A
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    34521

原文標(biāo)題:SoC芯片設(shè)計(jì)系列---ARM CPU子系統(tǒng)組件介紹

文章出處:【微信號(hào):gh_9d9a609c9302,微信公眾號(hào):SoC芯片】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 1人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于ARM7的SOC系統(tǒng)的設(shè)計(jì)

      本文通過(guò)對(duì)基于ARM7的SOC系統(tǒng)的設(shè)計(jì),介紹了一種Flash結(jié)構(gòu)的FPGA器件及其片上系統(tǒng)的設(shè)計(jì)方法,進(jìn)而給出了兩種驗(yàn)證該片上
    發(fā)表于 02-05 07:52

    ARM系列之PCSA資料介紹

    1、介紹一個(gè)帶SCP的手機(jī)SoC系統(tǒng)方案在大規(guī)模的 SoC 設(shè)計(jì)中,可以設(shè)計(jì)一個(gè)硬件模塊來(lái)完成頂層的功耗控制邏輯,好處是可以針對(duì)芯片的應(yīng)用領(lǐng)
    發(fā)表于 04-01 10:48

    ARM GIC(一)之ARM soc中斷的處理介紹

    ,是為了實(shí)現(xiàn)虛擬化而加入的,在這個(gè)系列中,不討論虛擬中斷,只介紹物理中斷的相關(guān)知識(shí)。在armsoc系統(tǒng)中,會(huì)有多個(gè)外設(shè),均有可能會(huì)產(chǎn)生中斷
    發(fā)表于 04-06 10:12

    如何可靠識(shí)別ARM SOC內(nèi)所使用的ARM CPU內(nèi)核IP型號(hào)呢

    請(qǐng)問(wèn)下:對(duì)市面上的ARM SOC芯片,如何可靠識(shí)別ARM SOC內(nèi)所使用的ARM
    發(fā)表于 08-01 14:14

    基于ARM處理器的SOC系統(tǒng)講解

    關(guān)鍵部件集成在一塊芯片上; 從廣義角度講, SoC是一個(gè)微小型系統(tǒng),如果說(shuō)中央處理器(CPU)是大腦,那么SoC就是包括大腦、心臟、眼睛和手
    發(fā)表于 08-17 15:20

    Arm Corstone SSE-700子系統(tǒng)技術(shù)參考手冊(cè)

    和外圍設(shè)備擴(kuò)展的SoC需要超出最低子系統(tǒng)組件的額外內(nèi)存和外圍組件。例如,閃存沒(méi)有SSE-700,但可以通過(guò)實(shí)現(xiàn)的接口添加。 傳感器和執(zhí)行器參考設(shè)計(jì)可以通過(guò)添加傳感器或執(zhí)行器邏輯來(lái)擴(kuò)展,
    發(fā)表于 08-02 07:46

    Arm Corstone SSE-123子系統(tǒng)技術(shù)參考手冊(cè)

    SSE?123示例子系統(tǒng)集成了關(guān)鍵Arm組件子系統(tǒng),實(shí)現(xiàn)針對(duì)物聯(lián)網(wǎng)(IoT)片上系統(tǒng)SoC
    發(fā)表于 08-09 06:00

    Arm Corstone? SSE?123子系統(tǒng)技術(shù)概述

    SSE?123示例子系統(tǒng)集成了一個(gè)由關(guān)鍵Arm組件組成的子系統(tǒng),這些組件實(shí)現(xiàn)了針對(duì)物聯(lián)網(wǎng)(IoT)片上
    發(fā)表于 08-10 07:40

    Arm Corstone SSE-710子系統(tǒng)技術(shù)參考手冊(cè)

    支持的Cortex?-A處理器)和ARM?GIC-400集成示例。 ·一套文件,包括安全飛地的PSA L2認(rèn)證指導(dǎo)文件。 要?jiǎng)?chuàng)建SoC,必須擴(kuò)展SSE-710子系統(tǒng)。 一個(gè)完整的系統(tǒng)
    發(fā)表于 08-17 08:00

    Arm CoreLink? SSE-200嵌入式子系統(tǒng)技術(shù)概述

    SSE-200子系統(tǒng)用于嵌入式驅(qū)動(dòng)器系統(tǒng)架構(gòu)和軟件標(biāo)準(zhǔn)化,旨在提供包含前沿Cortex M和TrustZone技術(shù)的高性能計(jì)算子系統(tǒng)。 該解決方案由硬件、軟件和軟件工具組成,可實(shí)現(xiàn)物聯(lián)網(wǎng)系統(tǒng)
    發(fā)表于 08-28 06:30

    基于ARM7TDMI的SoC中MP3子系統(tǒng)的設(shè)計(jì)

    以信息系統(tǒng)作為目標(biāo)直接優(yōu)化軟、硬件的片上系統(tǒng)(SoC)將大大節(jié)省軟件和芯片資源,大大提高系統(tǒng)的集成度和性?xún)r(jià)比。文中主要
    發(fā)表于 12-01 14:08 ?25次下載

    32位RISC CPU ARM芯片的應(yīng)用和選型

    32位RISC CPU ARM芯片的應(yīng)用和選型 ARM公司以及ARM芯片的現(xiàn)狀和發(fā)展,從應(yīng)用的
    發(fā)表于 02-09 17:37 ?55次下載

    ARM是什么意思,armcpu是什么關(guān)系

    ARM首先是一個(gè)公司,這家公司設(shè)計(jì)CPU并向各個(gè)CPU制造商授權(quán)許可,所以ARM公司是一家CPU設(shè)計(jì)公司。同時(shí),
    的頭像 發(fā)表于 03-14 10:28 ?5.3w次閱讀
    <b class='flag-5'>ARM</b>是什么意思,<b class='flag-5'>arm</b>與<b class='flag-5'>cpu</b>是什么關(guān)系

    ARM Architecture, Core, CPU,SOC概念簡(jiǎn)明介紹資料下載

    電子發(fā)燒友網(wǎng)為你提供ARM Architecture, Core, CPU,SOC概念簡(jiǎn)明介紹資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)
    發(fā)表于 03-29 16:49 ?10次下載
    <b class='flag-5'>ARM</b> Architecture, Core, <b class='flag-5'>CPU</b>,<b class='flag-5'>SOC</b>概念簡(jiǎn)明<b class='flag-5'>介紹</b>資料下載

    手機(jī)處理器叫soc還是cpu soc包含哪些模塊 中端芯soc和中端soc區(qū)別

    CPU核和內(nèi)存子系統(tǒng)SoC芯片需要內(nèi)置處理器和內(nèi)存子系統(tǒng)。處理器主要負(fù)責(zé)計(jì)算和控制各種運(yùn)算和任務(wù),內(nèi)存則用于存儲(chǔ)數(shù)據(jù)和程序代碼。
    發(fā)表于 05-03 08:23 ?6503次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品