




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第十四章Intel網(wǎng)絡(luò)處理器概述前面我們討論了網(wǎng)絡(luò)處理器的一般問題,從本章開始我們將深入討論一個特定的網(wǎng)絡(luò)處 理器-Intel網(wǎng)絡(luò)處理器,以便對前面介紹的一般概念提供一個具體的說明。(1)IXA術(shù)語IXA(Internet eXchange Architecture)泛指Intel網(wǎng)絡(luò)處理器體系結(jié)構(gòu)以及相關(guān)的支 持芯片。盡管IXA主要集中在網(wǎng)絡(luò)處理器硬件,它也包括軟件體系結(jié)構(gòu),因為如果不預(yù)想 使用硬件的軟件,可編程硬件是無法定義的。IXA包括控制面(慢路徑)和數(shù)據(jù)面(快路徑) 處理,定義了硬件抽象、應(yīng)用編程接口和互連機制,但是沒有給出細(xì)節(jié),IXA只是給出了概 念組織。IXA中有如下三個重要組成
2、部分:微引擎(Microengine,ME):微引擎是Intel網(wǎng)絡(luò)處理器的核心部件,也是Intel處 理器取得線速處理性能的關(guān)鍵,在其它功能單元的支持下執(zhí)行快路徑上的包處理。XScale Core:XScale核是Intel網(wǎng)絡(luò)處理器的高層控制和管理單元,是與Strong ARM 兼容的一種微處理器,負(fù)責(zé)控制面的處理任務(wù)以及異常數(shù)據(jù)包的處理,上面運行 VxWorks、嵌入式 Linux等實時操作系統(tǒng)。IXA可移植框架(IXA Portability Framework):為基于Intel網(wǎng)絡(luò)處理器的軟件開發(fā) 提供應(yīng)用編程接口和硬件抽象,使得運行在XScale核和微引擎上的軟件具有良好 的可移
3、植性和可重用性。開發(fā)者對新一代網(wǎng)絡(luò)處理器的要求包括四個方面:靈活性,高性能,可擴展性和可移植 性。IXA能夠滿足這四個方面的要求。靈活性:在IXA架構(gòu)的網(wǎng)絡(luò)處理器中,微引擎完全可編程,在低層硬件設(shè)備的支 持下可實現(xiàn)許多復(fù)雜的網(wǎng)絡(luò)處理功能,具有較好的功能靈活性。高性能:IXA架構(gòu)的網(wǎng)絡(luò)處理器使用多個可并行操作的微引擎,通過增加微引擎的 數(shù)目、提高微引擎和XScale核的時鐘頻率、采用新技術(shù)減小存儲器訪問延時以及 增加專用硬件功能單元,可使網(wǎng)絡(luò)處理器線速處理高達(dá)OC-192的網(wǎng)絡(luò)數(shù)據(jù),具備 了網(wǎng)絡(luò)寬帶化所要求的高性能。可擴展性:通過增加微引擎的數(shù)目以及提高微引擎和XScale核的時鐘頻率,可使 網(wǎng)
4、絡(luò)處理器達(dá)到OC-192的高端處理速率,具有良好的可擴展性??梢浦残裕篒XA可移植框架提供了應(yīng)用編程接口和硬件抽象,使得基于該框架開發(fā) 的軟件與底層硬件實現(xiàn)松耦合,具有良好的可移植性和重用性。(2)IXP術(shù)語IXP(Internet eXchange Processor)指實現(xiàn)了 IXA架構(gòu)的網(wǎng)絡(luò)處理器芯片。盡管每 一種IXP設(shè)計必須遵循IXA架構(gòu),但是不同的IXP可以定義自己的細(xì)節(jié),比如片上功能單 元的數(shù)量和種類、處理器的并行程度、存儲器的大小以及內(nèi)部數(shù)據(jù)帶寬等。IXP網(wǎng)絡(luò)處理器 典型地包括一個XScale核、多個微引擎、存儲器、若干硬件功能單元、與各種外部連接的 接口、內(nèi)部總線等。Inte
5、l提供了多種IXP網(wǎng)絡(luò)處理器芯片,目前已是第二代產(chǎn)品。第一代產(chǎn)品與第二代產(chǎn) 品的區(qū)別包括并行程度(即片上處理器的數(shù)量)、物理接口、芯片封裝、功率消耗、硬件功 能特性(如用于加密的硬件加速器)等方面的差異。圖14-1列出了三款第二代IXP網(wǎng)絡(luò)處 理器。IXP2400主要面向OC-12到OC-48/2.5Gbps的網(wǎng)絡(luò)接入和邊緣網(wǎng)應(yīng)用,有8個微引擎, 每秒可完成超過50億次的操作,可應(yīng)用于WAN多服務(wù)交換、DSLAM、基站控制器和網(wǎng)關(guān)、 4-7層交換、VoIP網(wǎng)關(guān)、多服務(wù)接入平臺、高端路由器和VPN等。IXP2800主要面向OC-48 么OC-192/10Gbps的邊緣網(wǎng)和核心網(wǎng)應(yīng)用,有16個微引
6、擎,每秒可完成超過250億次的操 作,可應(yīng)用于骨干網(wǎng)的路由與交換、無線設(shè)備、IPSec和VPN、10Gbps的企業(yè)交換和路由 等。IXP2850在IXP2800的基礎(chǔ)上增加了加密單元,可達(dá)到10Gbit/s的加/解密速度,可用 于IPSec、VPN、QoS Router等場合。通常用IXP2xxx泛指其中的任何一款網(wǎng)絡(luò)處理器芯片。Model NumberIntendedUseTypical InputDataRateSupport For cryptographyIXP2400Access & edgeOC-12to OC-482.5 GbpsnoIXP2800Edge & coreOC-48
7、 to OC-19210.0 GbpsnoIXP2850Edge & coreOC-48 to OC-19210.0 Gbpsyes圖14-1 Intel第二代IXP網(wǎng)絡(luò)處理器(3)IXP2xxx的主要部件一個IXP網(wǎng)絡(luò)處理器是一塊獨立的芯片,它包含了一組復(fù)雜的可編程及不可編程的處 理器和功能單元。以下是IXP2xxx芯片中的主要部件:一個嵌入式RISC處理器8到16個可編程包處理器多條獨立的片上總線:提供芯片內(nèi)部各功能單元之間的高速通道,包括多組單向高 速數(shù)據(jù)總線和命令總線;處理器同步機制共享和不共享的片上存儲器:每個微引擎內(nèi)部有專用的本地存儲器,芯片內(nèi)部還有 共享的Scratchpad存儲
8、器;一個低速串行接口:連接到XScale核,主要用于控制和管理;多個外部存儲器接口:連接外部SRAM、DRAM及ROM (或Flash ROM)等;多個外部I/O總線接口: PCI總線接口及MSF接口;計算哈希和加密的協(xié)處理器其它功能單元(4)外部連接圖14-2給出了 IXP2xxx支持的主要外部連接。IXP2xxx有四類外部連接:一個串行接 口,三個外部I/O總線接口,兩個外部存儲總線接口,一個低速設(shè)備接口。圖14-3列出了 IXP2400主要連接的速度。每個IXP2xxx芯片包含一個通用異步收發(fā)器(UART)硬件,提供到傳統(tǒng)串行線路的接 口,串行線連接到嵌入式RISC處理器。由于串口主要用
9、于控制和管理功能,因此它并不像 其它I/O接口那樣運行在高速度。所以,盡管程序員可以選擇通過它傳輸數(shù)據(jù),串口并不適 合用于快路徑。IXP2xxx芯片中的PCI(Peripheral Component Interconnect)總線提供兩個主要功能。第 一,允許一個IXP2xxx連接到I/O設(shè)備(如磁盤);第二,允許設(shè)計者使用傳統(tǒng)的CPU作為 通用控制處理器。由于PCI技術(shù)非常流行,許多I/O設(shè)備遵循這個標(biāo)準(zhǔn)。盡管PCI技術(shù)非常流行,但是其整體的吞吐量限制在大約2.2Gbps。為處理更高的數(shù)據(jù) 速率,IXP2xxx 使用了一個媒體或交換結(jié)構(gòu)(Media or Switch Fabric Int
10、erface, MSF)接口。 MSF是IXP2xxx與外部物理層設(shè)備(PHY)及交換結(jié)構(gòu)的接口單元,是數(shù)據(jù)出入IXP2xxx 的窗口。MSF通過Utopia、SPI協(xié)議與PHY接口,通過CSIX與交換結(jié)構(gòu)接口。Utopia、SPI和CSIX都是標(biāo)準(zhǔn)化協(xié)議,Utopia用于接收ATM格式的包,SPI用于接收POS格式的包, CSIX是IXP2xxx與交換結(jié)構(gòu)進行數(shù)據(jù)接收/發(fā)送時使用的接口協(xié)議,其數(shù)據(jù)包格式為 Cframe。通過這些標(biāo)準(zhǔn)協(xié)議MSF能夠方便地與其它廠家的產(chǎn)品進行接口。usesoyouc;? host comiectiori *PCI busSRAM buses z7DRAM bus
11、serial linereceive bustransmit busIXP2xxx chipusesoyouc;? host comiectiori *PCI busSRAM buses z7DRAM busserial linereceive bustransmit busIXP2xxx chipFLASHSRAMcoprocessorSlopovtDRAM圖14-2 IXP2xxx的主要外部連接圖14-3 IXP2400外部連接的速度MSF接口有兩個主要目的。第一,它構(gòu)成了 IXP2xxx與高速網(wǎng)絡(luò)接口之間的快路徑; 第二,MSF接口提供了一種通信機制,允許兩個或多個IXP2xxx芯片互連
12、。第二個目的非 常重要,因為可以將兩個芯片連接起來處理較高的吞吐量。MSF接口的關(guān)鍵特性是可配置, 可配置性使得MSF接口的靈活性足以連接幾乎任何物理硬件。像圖14-2指示的那樣,MSF 接口有兩個外部連接:一個用于輸入,另一個用于輸出。這兩個外部連接使用不同的管腳, 并且可以被獨立配置,因此可以配置輸入和輸出使用不同的接口標(biāo)準(zhǔn)。比如配置輸入使用 SPI協(xié)議,而輸出使用CSIX協(xié)議。DRAM總線的任務(wù)只有一個,提供對外部DRAM的訪問。IXP2400使用一條總線訪問 DRAM,W IXP28x0使用多條總線來獲得較高的吞吐量。在IXP中,DRAM提供低成本、 高帶寬的存儲,主要用于存儲塊數(shù)據(jù)(
13、如完整的包或幀)。除了 64位數(shù)據(jù)線,DRAM總線還包括傳輸?shù)刂?、控制?取操作、以及傳輸時鐘信號的線路。存儲器使用時鐘信號來使取 或存操作與處理器時鐘同步。訪問SRAM的接口與訪問DRAM的接口是完全分開的。盡管圖14-2中只畫出一條 SRAM總線,事實上,IXP2xxx使用多條SRAM總線以獲得較高的吞吐量。SRAM總線除 了提供對外部SRAM的訪問以外,與協(xié)處理器的交互也是通過SRAM總線進行的。除了存儲器總線,IXP2xxx還有一個慢端口(Slowport)連接。與存儲器總線不同,慢 端口連接是共享的,連接提供了對若干個外部硬件單元的訪問。比如,在啟動過程中慢端口 總線提供對ROM或F
14、lashROM的訪問。正像名字指示的一樣,慢端口總線不是為高速數(shù)據(jù) 傳輸而設(shè)計的。(5)內(nèi)部組件IXP2xxx的內(nèi)部結(jié)構(gòu)很復(fù)雜,因為芯片包含了總線、存儲器、處理器、接口和其它功能單元。下面列出了主要的功能單元。數(shù)量組件單元。下面列出了主要的功能單元。數(shù)量組件1嵌入式RISC處理器8/16包處理引擎1+SRAM訪問單元1+DRAM訪問單元1MSF訪問單元1PCI總線訪問單元1SHaC單元1加密單元1系統(tǒng)底盤(chassis)目的控制、高層協(xié)議和例外I/O、基本包處理和包轉(zhuǎn)發(fā)協(xié)調(diào)對外部SRAM總線的訪問 協(xié)調(diào)對外部DRAM總線的訪問 協(xié)調(diào)對外部I/O設(shè)備的訪問 協(xié)調(diào)對外部PCI總線的訪問 存儲中間
15、結(jié)果、計算哈希值等 加解密操作提供內(nèi)部控制和數(shù)據(jù)傳輸?shù)耐ǖ狼度胧絉ISC處理器負(fù)責(zé)執(zhí)行網(wǎng)絡(luò)處理器中的控制面處理任務(wù),如進行芯片初始化配置、 芯片控制/管理、運行路由協(xié)議、更新路由表等,另外還負(fù)責(zé)對異常數(shù)據(jù)包的處理。包處理引擎是IXP的核心部件,能夠訪問IXP中的所有共享資源,負(fù)責(zé)絕大部分的包 處理任務(wù),是IXP取得線速處理性能的關(guān)鍵。IXP2400中包含8個32位包處理引擎,IXP28x0 包含16個32位包處理引擎。SRAM訪問單元用于和外部SRAM接口,控制和管理IXP中其它功能單元對外部SRAM 的訪問。SRAM訪問單元還可用于和符合相應(yīng)接口規(guī)范的協(xié)處理器接口,執(zhí)行特定的包處 理操作。I
16、XP2400中有兩個SRAM訪問單元,IXP28x0中有四個SRAM訪問單元。不同的 SRAM訪問單元相互獨立,可并行工作。DRAM訪問單元用于和外部DRAM接口,控制和管理IXP中其它功能單元對DRAM 的訪問。IXP2400有一個DRAM訪問單元,而IXP28x0有三個DRAM訪問單元。PCI總線訪問單元用于和主控CPU、其它IXP網(wǎng)絡(luò)處理器以及PCI以太網(wǎng)卡等符合PCI 規(guī)范的設(shè)備接口。SHaC單元其實包括了三個部分:用于存放中間結(jié)果的片上Scratchpad存儲器,支持48 比特、64比特及128比特哈希運算的哈希單元,以及用于對IXP中的控制和狀態(tài)寄存器進 行訪問操作的單元(稱為CA
17、P)。加密單元是IXP2850特有的,負(fù)責(zé)進行加解密操作。系統(tǒng)底盤是IXP中各功能單元之間的內(nèi)部高速通道,由多組單向高速數(shù)據(jù)總線、命令 總線以及相應(yīng)的總線仲裁單元組成。正是由于系統(tǒng)底盤的分立式多總線結(jié)構(gòu)和高帶寬的數(shù)據(jù) 總線,使得IXP的并行處理優(yōu)勢得以充分發(fā)揮,取得較高的性能指標(biāo)。圖14-4是IXP2xxx的高層結(jié)構(gòu)視圖,給出了內(nèi)部組件和外部單元之間的連接。圖14-4 Intel IXP2xxx的概念組織圖14-5 IXP2400硬件結(jié)構(gòu)框圖圖14-5是IXP2400的內(nèi)部硬件結(jié)構(gòu)圖??傮w上來看,IXP采用了多主控+系統(tǒng)底盤+多 目標(biāo)的硬件體系結(jié)構(gòu)。多主控是指IXP的多個主控單元,包括XSca
18、le核、微引擎、PCI控 制單元等硬件功能單元。多目標(biāo)是指IXP中的多個從屬單元,包括存儲訪問單元、MSF、 SHaC等。主控單元發(fā)起和控制對多個目標(biāo)的操作,目標(biāo)執(zhí)行主控單元規(guī)定的操作,而底盤 提供了主控單元與目標(biāo)之間的數(shù)據(jù)傳輸通道和命令傳輸通道。具體而言,IXP的硬件體系結(jié) 構(gòu)具有如下主要特征:1)采用分立的內(nèi)部總線結(jié)構(gòu),將不同存儲單元的數(shù)據(jù)總線、數(shù)據(jù)讀寫總線分開,可以 同時對不同存儲單元進行讀/寫操作,大大提高了 IXP的并行處理能力。2)引入命令總線仲裁器對各主控單元發(fā)出的命令進行排隊判優(yōu),保證了指令的優(yōu)先級, 避免了指令的沖突和擁塞。3)采用分布式的硬件結(jié)構(gòu),即多主控+多目標(biāo)結(jié)構(gòu)。不同
19、的硬件功能單元在高速內(nèi)部 總線的支持下各司其職,負(fù)責(zé)專門的數(shù)據(jù)處理操作,大大增強了IXP的并行處理能力。4)采用多微引擎并行的硬件結(jié)構(gòu),所有微引擎可同時工作,大大增強YIXP的并行處 理能力。IXP2400進一步將8個微引擎分為2組(Cluster0和Clusterl),并使用獨立的SRAM 數(shù)據(jù)總線,有效地緩解了總線沖突,進一步增強了 IXP2400的并行處理能力。(6)IXP2xxx處理器體系IXP2xxx使用一個五層的處理器體系,其中三層在芯片中,另外兩層由外部硬件提供。 以下是處理器類型及每種處理器的特性。處理器類型是否在芯片上?是否可編程?通用處理器否是嵌處式RISC處理器是是I/O
20、處理器是是協(xié)處理器是否物理接口否否位于最高層的通用處理器(GPP)不是IXP2xxx芯片的一部分。在許多系統(tǒng)中,需要一 個外部通用處理器執(zhí)行整體控制和管理功能。GPP不是快路徑的一部分。比如,考慮一個 在每個接口都使用一個網(wǎng)絡(luò)處理器的系統(tǒng)。在這種情況下,網(wǎng)絡(luò)處理器不需要涉及全局路由 決策,路由決策可被分配給一個與所有網(wǎng)絡(luò)處理器有交互作用的通用處理器。通用處理器收 集路由信息,選擇最佳路由,并通知每個網(wǎng)絡(luò)處理器。Intel用術(shù)語核心處理器指代嵌入式RISC處理器。IXP2xxx上的RISC處理器是與ARM 結(jié)構(gòu)兼容的一種處理器,稱為XScale。運行在常規(guī)操作系統(tǒng)(如Linux)上的XScale
21、核作 為一個控制點管理微引擎并提供一個可以下載程序和配置芯片的接口。另外,XScale處理 高層協(xié)議以及例外的包。因此,嵌入式處理器不是用于執(zhí)行常規(guī)的快路徑處理。Intel使用術(shù)語微引擎(microengine)指代包處理器。IXP2xxx包含多個微引擎(IXP2400 包含8個,IXP28x0包含16個)。與嵌入式RISC處理器不同,微引擎是一種只提供少量基 本指令的低級設(shè)備,微引擎構(gòu)成了快路徑處理的基礎(chǔ),主要用來處理I/O設(shè)備與存儲器之間 的低層數(shù)據(jù)傳輸以及基本包處理任務(wù)。與嵌入式處理器不同,微引擎不運行操作系統(tǒng)。IXP2xxx包含幾種協(xié)處理器和功能單元,其中一些構(gòu)成了快路徑的一部分。比如
22、,芯片 包含一個哈希單元,可用來高速計算一個48比特、64比特或128比特的自適應(yīng)多項式哈希 函數(shù)。IXP2xxx還包含4個與實時時鐘一起工作的定時器。IXP2850還包含了對幾種加密算 法(如三重DES、AES)、檢查和累加以及安全哈希函數(shù)的硬件支持。物理接口硬件不是IXP2xxx的一部分,因此需要另外的芯片來實現(xiàn)第一層和第二層的 處理。Intel提供處理POS-PHY以及傳統(tǒng)以太網(wǎng)組幀的接口芯片。由于MSF接口是可配置 的,IXP2xxx上的每個高速物理接口可以遵循任何一種眾所周知的標(biāo)準(zhǔn)(如SPI-3、SPI-4.2 或Utopia)。Utopia是IXP2xxx接收/發(fā)送ATM格式的數(shù)據(jù)
23、包時采用的接口協(xié)議,IXP2400 支持Utopia L1/L2/L3三個速率等級,速率分別為OC-3、OC-12和OC-48。POS-PHY是 IXP2xxx接收/發(fā)送POS (Packet Over SONET)格式的數(shù)據(jù)包時采用的接口協(xié)議。POS-PHY L3 和 POS-PHY L4 規(guī)范分別被 Optical Internetworking Forum 批準(zhǔn)為 SPI-3 和 SPI-4.2,速率 分別為OC-48和OC-192。POS是利用點對點協(xié)議(PPP)實現(xiàn)IP包到SONET幀有效載荷 映射的系列協(xié)議,標(biāo)準(zhǔn)的POS映射為IP/PPP/HDLC/SONET。IP包被封裝到PPP
24、分組中, PPP提供了多種協(xié)議封裝、錯誤控制和鏈路初始化等功能。然后,PPP分組利用HDLC協(xié) 議成幀,以提供分組分界和錯誤控制。(7)IXP2xxx的存儲器IXP2xxx使用多種存儲器。下面列出了各種存儲器的大小和用途。存儲器類型最大容量是否在芯片上?典型用途GP Registers256 (2 banks)是中間運算Inst. Cache32Kbytes是最近使用過的指令Data Cache32Kbytes是最近使用過的數(shù)據(jù)Mini Cache2Kbytes是重用過一次的數(shù)據(jù)Write buffer未規(guī)定是寫緩沖區(qū)Local memory25606丫1$/微引擎是本地緩存Scratchpa
25、d16Kbytes是進程間通信和同步Inst. Store4Kbytes/微引擎是存放微引擎指令FlashROM未規(guī)定否用于啟動SRAM64Mbytes否存放表或包頭DRAM2Gbytes否存儲包程序員需要關(guān)注存儲器體系中的某些存儲器,其余的可以忽略。比如,盡管cache提供 了性能改進,但是大多數(shù)cache對于程序員是透明的(即程序員不需要分配cache中的空間)。 程序員主要關(guān)注四種存儲器:SRAM、DRAM、本地存儲器和Scratchpad,程序員必須明確 決定如何使用它們。也就是說,對于每一個數(shù)據(jù)項,程序員必須選擇其中的一種存儲器來存 放。上表列出了選擇存儲器的標(biāo)準(zhǔn)之一:最大容量,下表
26、列出了各種存儲器的其它特性。存儲器類型訪問單位 (字節(jié))相對訪問延時特性Local41用LM_ADDR寄存器訪問Scratchpad410通過原子讀-修改-寫進行同步 支持進程間通信push/pull reflector modeSRAM414遵循QDR規(guī)范,原子操作 支持隊列和環(huán),比特操作DRAM820連接到XScale、微引擎和PCI總線控制器從上表可以看出,每種存儲器都有一些特性,使其適合某些任務(wù)。比如,盡管本地存儲 容量很小,但是它提供了最小的訪存時間。Scratch和SRAM都提供原子操作,如讀-修改- 寫,因此Scratch和SRAM都可以用來同步并行處理器(如微引擎)。SRAM的
27、訪存時間比 Scratch長,但比DRAM小;此外,SRAM具有操作隊列和環(huán)的機制。因此,SRAM適合于 存放包頭或包鏈表。最后,由于DRAM有到I/O設(shè)備的直接傳輸路徑、容量大并有較高的 帶寬,DRAM適合于存放輸出或輸出的包。程序員需要注意的是,存儲訪問時間可能比指令執(zhí)行時間長很多。比如,一次DRAM 訪存需要幾十個時鐘周期,其中每個時鐘周期可以執(zhí)行一條微引擎指令。因此,在等待從 DRAM讀取一個數(shù)值的時候,微引擎可以執(zhí)行許多條指令。我們在后面將會討論訪存時間 和指令執(zhí)行時間之間的差異,以及程序員應(yīng)采取的措施。(8)字和長字訪問除了訪存時間和存儲器特性以外,程序員還必須了解底層物理存儲系統(tǒng)
28、是如何組織存儲 器訪問的。每種物理存儲器都定義了訪問單位的長度,有時稱為可尋址數(shù)據(jù)單位。一個兩字 節(jié)的單位(即16比特)稱為一個字,一個四字節(jié)的單位(即32比特)稱為一個長字(longword), 而一個八字節(jié)的單位(64比特)稱為一個四倍長字(quadword)。為理解長度大于一個字節(jié)的可尋址數(shù)據(jù)單位帶來的后果,考慮按長字組織的Scratch存 儲器。盡管微引擎和XScale處理器可為每一個字節(jié)產(chǎn)生地址,但是底層機制并不提供對單 個字節(jié)的訪問。事實上,每次存儲器訪問讀或存四個字節(jié)。因此,如果程序員要訪問地址為 2的字節(jié),則底層存儲器硬件會取地址0地址3的存儲單元(即第一個長字)。將存儲器組織
29、為字或長字意味著程序員必須仔細(xì)規(guī)劃數(shù)據(jù)的布局。假設(shè)程序員定義了兩 個數(shù)據(jù)項,每個數(shù)據(jù)項長16比特,存放在存儲器中相鄰的位置。如果每個數(shù)據(jù)項被分配在 一個字中,則這兩個數(shù)據(jù)項通過一次存儲器訪問就可全部讀出。如果存放時跨越了字邊界, 則底層存儲器硬件需要訪問存儲器兩次。因此,為獲得最佳的性能,程序員必須了解存儲器 組織,并且要合理安排數(shù)據(jù)布局以最小化訪存時間。某些網(wǎng)絡(luò)處理器體系結(jié)構(gòu)特征(如底層物理存儲系統(tǒng)的組織)對于程序員編寫高質(zhì)量的 代碼是非常重要的。程序員必須理解競爭、同步和時序這樣的問題,因此程序員必須重點理 解各功能部件之間的連接、共享的資源以及按照特定順序發(fā)射指令帶來的結(jié)果。(9)基于I
30、XP2xxx的典型系統(tǒng)結(jié)構(gòu)圖14-6是一個基于IXP2xxx的典型的Ingress/Egress系統(tǒng)結(jié)構(gòu)。在該結(jié)構(gòu)中使用了兩個 IXP2xxx進行包處理,其中Ingress IXP2xxx通過 MACs或Framers從以太網(wǎng)接收數(shù)據(jù)包, 對所接收的包進行處理后通過交換結(jié)構(gòu)接口芯片將包發(fā)送到交換結(jié)構(gòu);Egress IXP2xxx從交 換結(jié)構(gòu)接收包,對包進行處理后發(fā)送到以太網(wǎng)。Ingress IXP2xxx與外部網(wǎng)絡(luò)之間的MSF接 口配置為SPI或Utopia協(xié)議模式,與交換結(jié)構(gòu)之間的MSF接口配置為CSIX協(xié)議模式。同 理,Egress IXP2xxx與交換結(jié)構(gòu)之間的MSF接口配置為CSIX協(xié)
31、議模式,與外部網(wǎng)絡(luò)之間 的MSF接口配置為SPI或Utopia協(xié)議模式。Ingress/Egress模式是一種典型的基于IXP2xxx的系統(tǒng)架構(gòu)模式。在實際應(yīng)用中,當(dāng)處 理功能較簡單時,可以采用單片IXP2xxx的系統(tǒng)架構(gòu)模式,見圖14-7;當(dāng)處理功能較復(fù)雜 時,也可以采用多個IXP2xxx串連的系統(tǒng)架構(gòu)模式。Rece veis UTOPIA,PCS-PHY.Transmit mods is CSiX.Ingress IXP2400RXDATAT:DATAFramingMAC Dev ce ipHYjUTOPIA or POS-PHY Proiti doISwitch FabricCSIX P
32、rotocolCBjs1Optional 1IGasketi4Egress IXP2400 TXCAT,R/DATA口 Receive mode s CSEX.Transit mode s UTOPIA.FOS-PHY.圖14-6基于IXP2400的典型系統(tǒng)架構(gòu)方案圖14-7使用一個IXP2800的全雙工架構(gòu)方案第十五章 嵌入式RISC處理器(XScale核)前一章概要介紹了 Intel IXP2xxx網(wǎng)絡(luò)處理器的體系結(jié)構(gòu),這一章討論稱為XScale核的 嵌入式RISC處理器。本章將不會給出所有的硬件細(xì)節(jié),而是主要關(guān)注它的作用以及軟件可 以使用的設(shè)施。(1)嵌入式處理器的用途Intel IXP
33、2xxx中包含一個嵌入式RISC處理器。為理解嵌入式處理器的用途,我們需要 考慮一個IXP2xxx是如何在一個網(wǎng)絡(luò)系統(tǒng)中使用的。在一個只有少量低速接口的網(wǎng)絡(luò)系統(tǒng) 中,一片IXP2xxx能夠處理幾個接口;而在一個具有高速網(wǎng)絡(luò)接口的系統(tǒng)中,每個接口必 須使用一個IXP2xxx。整個網(wǎng)絡(luò)系統(tǒng)的結(jié)構(gòu)決定了嵌入式處理器的作用,因為包含多個IXP2xxx芯片的系統(tǒng)通常包括一個通用處理器,用于在多個IXP2xxx間進行控制和協(xié)調(diào)。圖 15-1說明了這兩種方法。圖15-1兩種可能的網(wǎng)絡(luò)系統(tǒng)設(shè)計方法在使用一片IXP2xxx芯片處理所有網(wǎng)絡(luò)接口的設(shè)計中,片上RISC處理器執(zhí)行整個系統(tǒng) 的管理任務(wù)。在包括一個通用處
34、理器的系統(tǒng)中,與整個系統(tǒng)相關(guān)的任務(wù)由通用處理器執(zhí)行, 芯片中的嵌入式處理器只處理與芯片相關(guān)的任務(wù)。因此,嵌入式RISC處理器可以被分配以 下一些或全部的任務(wù):自舉異常處理高層協(xié)議處理交互程序調(diào)試(Interactive debugging)診斷和日志內(nèi)存分配應(yīng)用程序(需要的話)用戶接口和/或到通用處理器的接口控制包處理器其它管理功能以上大部分任務(wù)都不言自明。管理和控制功能包括:啟動和停止包處理,創(chuàng)建或修改由 包處理引擎使用的數(shù)據(jù)結(jié)構(gòu),描述配置細(xì)節(jié)(如每個網(wǎng)絡(luò)接口的地址等)。自舉包括片上存 儲器和處理器的初始化。比如,當(dāng)系統(tǒng)啟動時,嵌入式RISC處理器首先引導(dǎo),然后將微引 擎代碼裝入微引擎的指令
35、存儲區(qū),啟動微引擎。如果系統(tǒng)包括多個IXP2xxx芯片,通用處理器必須執(zhí)行整個系統(tǒng)的管理任務(wù),為此通 用處理器必須與每個IXP2xxx上的嵌入式RISC處理器通信。比如,通用處理器運行路由協(xié) 議軟件;一旦計算出全局路由表后,通用處理器將信息傳遞給每個IXP2xxx上的嵌入式處 理器;每個嵌入式RISC處理器從GPP接收路由信息,修改本地的轉(zhuǎn)發(fā)表。轉(zhuǎn)發(fā)表存放在 嵌入式處理器和微引擎共享的內(nèi)存中,嵌入式處理器維護轉(zhuǎn)發(fā)表,微引擎使用轉(zhuǎn)發(fā)表查找每 個數(shù)據(jù)包的下一跳地址。盡管嵌入式RISC處理器并不用于快路徑,但它確實要處理一些數(shù)據(jù)包。首先,它要處 理異常,如不匹配任何分類規(guī)則的包或產(chǎn)生出錯消息的包(如
36、目的地址不可達(dá)的包),因此嵌入式RISC處理器通常要負(fù)責(zé)產(chǎn)生ICMP錯誤消息。其次,嵌入式RISC處理器負(fù)責(zé)處理 發(fā)給本地系統(tǒng)的包。比如,在一個小型系統(tǒng)中,嵌入式RISC處理器實現(xiàn)高層協(xié)議(如TCP); 在一個較大的系統(tǒng)中,嵌入式RISC處理器將TCP包轉(zhuǎn)發(fā)給通用處理器。(2)XScale 架構(gòu)IXP2xxx上的嵌入式RISC處理器由一個XScale處理器組成,XScale實現(xiàn)了 ARM的一 個變化版本(實現(xiàn)了 ARM V5TE指令集,但不包括浮點指令集)。其主要特性包括:精簡指令集計算(RISC)可配置大端/小端模式的的32位算術(shù)運算由協(xié)處理器提供的矢量浮點運算字節(jié)可尋址內(nèi)存虛擬存儲支持內(nèi)置
37、串口支持內(nèi)核化操作系統(tǒng)的硬件設(shè)施性能監(jiān)視單元(3)RISC指令集和寄存器遵循RISC模式,XScale指令集包含了相對較少的指令,而且為保證每個時鐘周期能夠 完成一條指令,指令被設(shè)計為能夠很快執(zhí)行。因此,XScale不提供執(zhí)行時間依賴于操作數(shù) 長度的指令,比如沒有串拷貝或串比較等對一個內(nèi)存塊操作的指令。和大多數(shù)RISC處理器一樣,XScale依賴寄存器來獲得高速度。指令執(zhí)行前操作數(shù)必須 先取到寄存器中。在一個典型的指令中,處理器從兩個寄存器中取操作數(shù),執(zhí)行一個操作, 結(jié)果放到第三個寄存器中。如果操作數(shù)都準(zhǔn)備就緒的話,處理器每個時鐘周期能夠完成一條 指令。性能監(jiān)視單元能夠在不降低處理器運行速度的
38、情況下測量程序的運行性能,監(jiān)視的內(nèi)容 包括:指令cache不命中率Translation Lookaside Buffer(TLB)不命中率指令流水線中的停頓由軟件發(fā)起的分支指令數(shù)目(4)XScale存儲器組織XScale是一個32位處理器,它的寄存器及add、shift、load、store等操作均是32位的。 對于算術(shù)運算采用大端還是小端的問題,ARM結(jié)構(gòu)采用的方法是不預(yù)先確定采用什么模式, 而是在處理器引導(dǎo)時進行配置。Intel提供的IXP2xxx引導(dǎo)代碼將XScale配置為大端模式。XScale允許運行程序?qū)γ總€字節(jié)尋址。前面我們介紹過,IXP2xxx提供了訪問QDR-SRAM和DDR
39、-DRAM的機制,而這兩種存儲器分別定義了 4字節(jié)或8字節(jié)的數(shù)據(jù)訪 問單元。如果底層存儲系統(tǒng)使用長字或四倍長字的尋址能力,那么XScale如何提供字節(jié)尋 址呢?答案在于接口硬件:在處理器和存儲器之間使用不同的指令cache和數(shù)據(jù)cache。當(dāng) 數(shù)據(jù)cache存/取一個值時,它按照底層存儲器的訪問單元長度進行存/取;當(dāng)它與處理器通 信時,只傳輸需要的字節(jié)。因此,如果XScale上的一個程序要從DRAM中讀入一個字節(jié), 數(shù)據(jù)cache取8個字節(jié)單元,取出需要的字節(jié)傳給處理器。類似地,當(dāng)程序要將一個字節(jié)存 入DRAM時,數(shù)據(jù)cache必須先取出8字節(jié)單元,修改要存儲的那個字節(jié),然后把整個8 字節(jié)單元
40、寫回DRAM。XScale定義了一個大小為232字節(jié)的線性地址空間,所有的外部存儲器及部分片上存儲 器、PCI總線、其它存儲器映射的I/O設(shè)備等都被映射到這個空間。圖15-2說明外部存儲器 和硬件設(shè)備是如何映射到地址空間的,從高地址到低地址依次是PCI存儲器、Scratchpad和 CSRs (控制與狀態(tài)寄存器)、外部SRAM、DRAM和Slowport。從0開始的地址映射到 Slowport,這一點非常重要。因為低地址用于引導(dǎo)處理器,將從0開始的地址映射到Slowport 意味著XScale用于引導(dǎo)的代碼來自Flash ROM。圖15-2 XScale使用的地址空間XScale硬件包括了一個
41、提供虛存的存儲管理單元。存儲管理單元允許程序運行在一個 虛地址空間,硬件將部分虛空間映射到物理地址上。也就是說,系統(tǒng)可以被配置成允許一個 運行程序訪問部分或全部的物理地址空間。XScale和包處理器是緊密結(jié)合在一起的,它們都執(zhí)行某些包處理任務(wù)。共享存儲是處 理器用來高效交換數(shù)據(jù)的最重要機制之一,可以用來在XScale和包處理器之間傳遞數(shù)據(jù)。 比如,包處理器統(tǒng)計包流量,當(dāng)數(shù)據(jù)包到來或離開時更新共享內(nèi)存中的一個計數(shù)器,XScale 從共享內(nèi)存中取計數(shù)值,根據(jù)網(wǎng)絡(luò)管理的要求計算統(tǒng)計數(shù)據(jù)。類似地,XScale可以使用共 享內(nèi)存創(chuàng)建和維護包處理器使用的轉(zhuǎn)發(fā)表。然而包處理器不使用XScale的地址空間,因
42、此當(dāng)需要在XScale和微引擎之間傳遞一個 指針時,必須將指針從一個地址空間轉(zhuǎn)換到另一個地址空間。一般由XScale處理所有的地 址轉(zhuǎn)換。因此,當(dāng)XScale創(chuàng)建一個轉(zhuǎn)發(fā)表時,它將所有指針轉(zhuǎn)換成微引擎能夠理解的地址。 類似地,當(dāng)XScale從一個微引擎接收一個指針時,它將微引擎的本地地址轉(zhuǎn)換成XScale地 址空間中的一個等價的值。(5)其它I/O用于I/O設(shè)備的控制與狀態(tài)寄存器(CSR)出現(xiàn)在XScale的物理地址空間,因此,除了使用總線來執(zhí)行數(shù)據(jù)訪問和傳輸操作以外,運行在XScale上的設(shè)備驅(qū)動程序還可以訪問 設(shè)備的CSR。另外,由于XScale可以訪問外部PCI總線,因此XScale可以
43、訪問和控制PCI 總線上的任何一個設(shè)備。(6)內(nèi)部外設(shè)單元IXP2xxx中有四種機制只能被XScale處理器訪問,即它們不能被微引擎所訪問。這四 種機制是:一個UART,四個32位的倒計數(shù)定時器,八個通用I/O管腳,一個Slowport接 。這些機制被稱為內(nèi)部外設(shè),因為它們在IXP2xxx的內(nèi)部,但對于XScale來說是外設(shè)。UART硬件提供符合EIA RS-232C標(biāo)準(zhǔn)的串行線路,只有XScale能夠訪問作為控制臺 設(shè)備的串行線。四個倒計數(shù)定時器可以被配置為在計數(shù)值到達(dá)0時中斷XScale。其中一個定時器可以 用做系統(tǒng)看門狗,當(dāng)定時器值到達(dá)0時,XScale重啟動。定時器的計數(shù)速率是可配置的
44、: 可以運行在XScale的時鐘頻率、XScale時鐘頻率的1/16或XScale時鐘頻率的1/256。只有 XScale能夠使用這些定時器,這意味著XScale必須處理所有涉及超時的協(xié)議處理任務(wù)。XScale可以通過MSF接口訪問四個通用I/O管腳,這四個管腳提供了一個外部連接, 可以連接到了另外的硬件或用于調(diào)試。(7)用戶模式和內(nèi)核模式操作和許多處理器一樣,XScale提供了多種帶有保護級的操作模式。特別是,XScale提供 了對內(nèi)核化操作系統(tǒng)的硬件支持。操作系統(tǒng)內(nèi)核運行在最高優(yōu)先級,能夠訪問整個地址空間 和控制所有的I/O。運行在操作系統(tǒng)下的應(yīng)用程序作為用戶級進程執(zhí)行,應(yīng)用沒有優(yōu)先級,不
45、能直接控制 I/O設(shè)備,不能訪問整個地址空間。應(yīng)用程序運行在一個不能被其它應(yīng)用程序訪問的受保護 的虛地址空間。內(nèi)核提供所有的服務(wù),當(dāng)應(yīng)用程序需要執(zhí)行I/O時,必須請求內(nèi)核執(zhí)行操作 和返回結(jié)果。(8)協(xié)處理器15Intel芯片包含一個協(xié)處理器,它允許XScale配置和控制IXP2xxx上的幾個硬件單元。 這個協(xié)處理器稱為系統(tǒng)控制協(xié)處理器15 (CP15),只能由XScale訪問。XScale調(diào)用CP15 配置MMU、讀/寫緩沖器、時鐘功能和高速緩存。另外,在測試代碼時CP15可以用來設(shè)置 斷點。第十六章包處理硬件(微引擎)(1)微引擎的用途在IXP2xxx的處理器體系中,微引擎構(gòu)成了最低層的可編
46、程處理器,因此使用微引擎 執(zhí)行協(xié)議處理比使用較高等級的處理器執(zhí)行相同的任務(wù)獲得的吞吐量要高。特別是,微引擎 被設(shè)計用來執(zhí)行快路徑上的處理。為進一步提高快路徑的處理,IXP2xxx包含多個可并行執(zhí)行的微引擎。盡管允許并行微 引擎可以獲得比XScale處理器高得多的集合速率,但實際上要獲得高速度是很困難的,因 為必須將微引擎合理地分配給特定的任務(wù)。微引擎被設(shè)計來執(zhí)行ingress和egress協(xié)議處理任務(wù)。典型地,微引擎要負(fù)責(zé):從物理層硬件接收包校驗和檢查包頭處理和分類包緩存查表和轉(zhuǎn)發(fā)包頭修改校驗和計算從物理層硬件發(fā)送包后面我們將會看到,微引擎不直接執(zhí)行操作,而是依靠各種輔助功能單元執(zhí)行操作。(2
47、)微引擎架構(gòu)S_Push 一 :frani SRAMIntel: XScale Arch tscture Scratch oad, MF, Hash.CAP)M -_upeF3ndControl StoreNKDafciJn _:fnoni previous ME :T_lndexM -_upeF3ndControl StoreNKDafciJn _:fnoni previous ME :T_lndexNN.GetExecutionDatapath(Shift, Add. Subtract. Multiply Logicsis.Find First Bit, CAM)ilo next f/ E
48、微引擎具有以下的一般特性:可編程微控制器采用RISC設(shè)計本地控制存儲器 執(zhí)行數(shù)據(jù)通道:一個算術(shù)邏輯單元ALU,一個16入口的CAM(每個入口 32比特),8個線程和上下文切換的硬件支持;數(shù)據(jù)通道寄存器:256個通用寄存器,512個傳輸寄存器,128個Next Neighbor寄 存器,640個字的本地內(nèi)存。一個CRC計算單元可直接訪問片上各種功能單元(3)微序列的概念從以上微引擎的特性可以看到,微引擎不是一個傳統(tǒng)的CPU,而是一個作為微序列器 的低級設(shè)備。也就是說,微引擎不包含每一種操作的本地指令,大多數(shù)指令只是調(diào)用芯片中 的其它功能單元。有兩個例子可以來解釋這個概念。首先,考慮像加或減這樣的
49、算術(shù)運算。在一個傳統(tǒng)的 CPU中,每個算術(shù)操作被賦以一個唯一的操作碼,程序?qū)τ诿總€希望的指令給出操作碼。 比如,運行在傳統(tǒng)CPU上的程序可能包含一條指令:AddR2, R3,說明寄存器3中的整數(shù)值 應(yīng)當(dāng)被加到寄存器2的數(shù)值上。然而,微引擎上的算術(shù)操作被合并到一個引用ALU單元的 操作碼中。如為了將兩個整數(shù)值相加,運行在微引擎上的程序調(diào)用alu操作,并聲明add為 一個操作數(shù)。Alu指令的格式為:aludest, A_op, alu_op, B_op,其中dest為目的寄存器,用 于存放指令的運算結(jié)果;A_op和B_op為源操作數(shù)寄存器;alu_op為ALU運算,包括12 種運算符(+、+16、
50、+8、+carry、B-A、B、B、AND、AND、AND、OR、XOR)。作為微引擎指令的第二個例子,考慮內(nèi)存引用。在一個傳統(tǒng)的CPU上,硬件將一個尋 址模式關(guān)聯(lián)到每個操作數(shù),尋址模式說明操作數(shù)是常數(shù)(立即數(shù))還是對內(nèi)存中一個值的引 用。因此,程序中可能包含如下的指令:LoadR3, X,說明將內(nèi)存位置X的當(dāng)前值拷貝到寄 存器3。和傳統(tǒng)CPU (如XScale)不同的是,微引擎不提供任何引用內(nèi)存的尋址模式,微 引擎也沒有一個本地的10ad指令。程序員必須發(fā)射一條指令說明存儲器接口、存儲器中的 地址和一個操作(即取或存)。如 sramcmd, xfer, src_op1, src_op2, r
51、e/_ct, opt_to于在微 引擎和SRAM之間傳輸數(shù)據(jù),其中cmd指明是read還是write; xfer指明使用的傳輸寄存器; src_op1+src_opt2指明SRAM中的一個位置;ref_cnt指明數(shù)據(jù)個數(shù)(18,以長字為單位); opt_tok是一個可選的令牌,可以用來改變訪存的粒度、控制線程同步等。對于一個取操作, 微引擎必須等待存儲器接口硬件完成操作,然后將數(shù)值移到寄存器中被程序使用。由此可見,微引擎不提供算術(shù)操作的本地硬件指令,也不提供直接訪問內(nèi)存的尋址模式。 運行在微引擎上的程序控制和使用芯片上的功能單元來訪問內(nèi)存和執(zhí)行操作。(4)微引擎指令集微引擎指令集的操作碼不到6
52、4個,圖16-2和圖16-3總結(jié)了微引擎的指令集,并列出 了每種指令的用途。1 nstructionDescriptioimGeneral instructions (Arithmetic! Rotatej Andi ShiftyALUA_L_SHFASR日LE_4LIGN_mE.日廠三_AJJGN_ECRC_LE, CRC_日三DBL_SHFMUL_STEPFFSPOP-COUN-IMMEDIMME一日 D rougn 1MME3_E2IMMEDJTO. IMMEDJI LD_=IE_D, LD_FIE_D_ALC_RLOAD_ADDRLOCAL_C:SR_RD. LCKAL-CSRJMNC
53、 =Perform an ALU operationPerform an ALU operation and shift Perform an arithmetiD right shift ConcatenatE registers and select bytes Compute CRC (big or little endian) Concatenate and shift 1wo longwcrds Multiply two unsigned intagwz Find positk3nl of LSB in register Count 1 bits in a registerLoad
54、immediale 16-bh value to registEr Lead immediale byte to a field Load immediale 16-bil word 1d a field Load bytes to specified fields Load instruclian addressRead or write local microengine CSRs No aperalionBranch nd Jump Instructions日cc 日R日 R_BCLR. BR_BSET日=日三日:?!=BT三ER=CTK 日 R!=CJXB=?_INP_STA_E. B
55、R_!nP_STA-E 日SIGNA一日RIGNALJUMPRTN日ranch on condition code日ranch unconditionaJly日ranch if bit dear or see日ranch if byte equal or not equal Id literal日nanch on current canl&xi日ranch on ewm state日ranch if signal deassertedJump to labelReturn from branch or jumpContent Addressable Memory (CAM) Instmctio
56、nsCAM_C_EAR CAM_WRITE_STATE QAM_REA3_AG CAM_REA3_STATE CAM_LOOKUP CAM_WRITEClear all entries in local CAMWrite Etate bits inis speafie-d CAM EntryRead 境 for specifiedi CAM entryRead state bits far specified CAW entrySearch local CAM for 1 ag valueWrite tag value for specif ted CAM entry圖16-2 一部分微引擎指
57、令I(lǐng)nstructionDescriptionI/O And Context Swap InstructionsDRAM (read and write) DRAM (RBUF and TBUFj CAP (CSR addressing) CAP (calculated addressing) CAP (reflect) CTX_ARBHALTHASHMSFPCISCRATCH (read and write) SCRATCH (atomic operation) SCRATCH (ring operation) SRAM (read and write) SRAM (atomic opera
58、tion) SRAM (CSR)SRAM (read queue descriptor) SRAM (write queue descriptor;1 SRAM (enqueue) SRAM (dequeue) SRAM (ring operation) SRAM (journal operation)Perform an ALU operationPerform an ALU operation and shift Perform an arithmetic right shift Concatenate registers and select bytes Compute CRC (big
59、 or little endian) Concatenate and shift two longwords Multiply t-wo unsigned integers Find position of LSB in register Count 1 bits in a registerLoad immediate 16-bit value to register Load immediate byte to n field Load immediate 16-bit word to a field Load bytes to specified fields Load instructi
60、on addressRead or write local microengine CSRs Load or store values in CSR registers Access queue in SRAM Change queue in SRAM Enqueue item in SRAM queue Dequeue item from SRAM queue Manipulate a communication ring in SRAM perform atomic operation in SRAM圖16-3微引擎的另一部分指令(5)分離的存儲器地址空間微引擎架構(gòu)不同于XScale的另一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)用工勞動合同
- 2025年婁底考貨運從業(yè)資格證
- 2025年隴南貨運從業(yè)資格仿真考題
- 2025年揭陽貨運從業(yè)資格證考試內(nèi)容
- 2023年全國乙卷高考真題生物試卷解析
- 高壓水流清洗機產(chǎn)業(yè)分析報告
- 煙草、鹽加工機械市場分析及競爭策略分析報告
- 浸漬、涂布或包覆處理紡織物競爭策略分析報告
- 《天然藥物化學(xué)成分提取與分離》課程標(biāo)準(zhǔn)
- 上海市裝修設(shè)計合同范本
- 大樹移栽合同范本
- 柔性印刷技術(shù)探索-深度研究
- 【正版授權(quán)】 IEC 63310:2025 EN Functional performance criteria for AAL robots used in connected home environment
- 最終版附件1:“跨學(xué)科主題學(xué)習(xí)”教學(xué)設(shè)計(2025年版)
- 2025年度環(huán)保咨詢與評估服務(wù)合同范本模板
- (2024)云南省公務(wù)員考試《行測》真題及答案解析
- 2022年“正確認(rèn)識新疆四史”《民族團結(jié)鑄牢中華民族共同體意識》全文解讀
- 靜脈治療護理技術(shù)操作標(biāo)準(zhǔn)解讀
- 附件25:戶口登記非主項變更、更正告知承諾書
- 學(xué)校中層干部民主測評表(一)
- 中國農(nóng)業(yè)銀行資金證明模板
評論
0/150
提交評論