本公開大體涉及集成電路(IC),并且具體涉及存儲器的虛擬化。
背景技術(shù):
可編程集成電路(IC)是可以被編程以執(zhí)行指定邏輯功能的設(shè)備。一種類型的可編程IC——現(xiàn)場可編程門陣列(FPGA)通常包括可編程片(tile)的陣列。這些可編程片包括各種類型的邏輯塊,其可以包括例如輸入/輸出模塊(IOB)、可配置邏輯模塊(CLB)、專用隨機(jī)存取存儲器模塊(BRAM)、乘法器、數(shù)字信號處理模塊(DSP)、處理器、時鐘管理器、延遲鎖定環(huán)(DLL)、總線或網(wǎng)絡(luò)接口(如快速外圍組件互連(PCIe)和以太網(wǎng)等)等。
每個可編程片可以包括可編程互連和可編程邏輯。可編程互連通常包括通過可編程互連點(diǎn)(PIP)互連的不同長度的大量互連線??删幊踢壿嬍褂每删幊淘?shí)現(xiàn)用戶設(shè)計(jì)的邏輯,可編程元件可以包括例如函數(shù)發(fā)生器、寄存器、算術(shù)邏輯等。
可編程互連和可編程邏輯通常通過將配置數(shù)據(jù)流加載到定義可編程元件的配置方式的內(nèi)部配置存儲器單元中來實(shí)現(xiàn)編程。配置數(shù)據(jù)可以從存儲器(例如,從外部PROM)讀取或通過外部設(shè)備寫入FPGA。然后,各個存儲器單元的集合狀態(tài)確定FPGA的功能。
一些可編程IC包括能夠執(zhí)行程序代碼的嵌入式處理器。處理器可以被制造成包括可編程邏輯電路和可編程互連電路(也被統(tǒng)稱為IC的“可編程電路”)的同一裸片的一部分。應(yīng)當(dāng)理解,執(zhí)行處理器內(nèi)的程序代碼與在IC上可用的對可編程電路進(jìn)行“編程”或“配置”是不同的。編程或配置IC的可編程電路的行為會導(dǎo)致可編程電路內(nèi)由配置數(shù)據(jù)指定的不同物理電路的實(shí)現(xiàn)。
在一些實(shí)現(xiàn)中,可編程IC的處理器可以利用存儲器虛擬化來向程序提供更多可用的存儲器。在處理器上執(zhí)行的每個程序運(yùn)行就好像它可以訪問大部分連續(xù)的計(jì)算機(jī)存儲器(例如隨機(jī)存取存儲器(RAM))一樣。即使一個程序使用的物理存儲器可能是碎片化的和/或溢出到磁盤存儲器上,該程序也可以使用虛擬存儲器地址來操作,就像它正在訪問存儲器地址的連續(xù)集合一樣。虛擬存儲器還允許每個正在執(zhí)行的程序運(yùn)行就像它可以在任何給定時間都可以訪問主機(jī)計(jì)算機(jī)的整個物理存儲器一樣,盡管其只能訪問物理存儲器的一部分。
虛擬存儲器的實(shí)現(xiàn)需要硬件組件,其幫助處理器將由程序使用的虛擬存儲器地址(虛擬地址)轉(zhuǎn)換成由硬件使用以用于代表程序讀取和寫入存儲器的物理存儲器地址(物理地址)。存儲器管理單元負(fù)責(zé)將虛擬存儲器地址轉(zhuǎn)換為物理存儲器地址。存儲器管理單元處理由處理器請求的存儲器訪問。
技術(shù)實(shí)現(xiàn)要素:
本申請公開了一種系統(tǒng),其包括處理子系統(tǒng)和可編程邏輯子系統(tǒng)。處理子系統(tǒng)被配置為執(zhí)行程序,所述程序使用一組虛擬存儲器地址以引用用于存儲所述程序的變量的存儲器位置??删幊踢壿嬜酉到y(tǒng)被配置為實(shí)現(xiàn)配置數(shù)據(jù)流中指定的一組電路。該組電路中的每一個都包括多個輸入/輸出(I/O)電路,每個電路具有相應(yīng)的標(biāo)識符(ID)并且被配置為訪問變量中一個相應(yīng)的變量。該系統(tǒng)還包括存儲器和存儲器管理電路,存儲器管理電路被配置為將該組虛擬存儲器地址映射到存儲器的物理存儲器地址。對于所述多個I/O電路中的每一個,存儲器管理電路還將I/O電路的ID映射到物理存儲器地址,其被映射到I/O電路被配置以訪問的相應(yīng)變量的虛擬存儲器地址。該系統(tǒng)還包括耦接到至少一個I/O電路的至少一個轉(zhuǎn)換后備緩沖器(“translation look-aside buffer”,TLB)。響應(yīng)于接收到指示ID的存儲器訪問請求,TLB被配置為向存儲器提供指示映射到ID的物理存儲器地址的存儲器訪問請求。
本申請還公開了一種用于操作具有處理子系統(tǒng)和可編程邏輯子系統(tǒng)的可編程IC的方法。在處理子系統(tǒng)上執(zhí)行程序,該程序使用一組虛擬存儲器地址來引用用于儲存所述程序的變量的存儲器的位置??删幊踢壿嬜酉到y(tǒng)被編程以實(shí)現(xiàn)配置數(shù)據(jù)流中指定的一組電路。該組電路包括多個I/O電路,每個I/O電路具有相應(yīng)的ID并且被配置為訪問變量中一個相應(yīng)的變量。對于每個I/O電路,通過從輸入/輸出電路向連接到存儲器的多個TLB中的一個提供指示I/O電路的ID和虛擬存儲器地址的存儲器訪問請求,來訪問相應(yīng)的變量。通過使用所述TLB中的一個,基于ID和虛擬存儲器地址來確定存儲對應(yīng)變量的物理存儲器地址。將包括所確定的物理存儲器地址的存儲器訪問請求從所述TLB中的一個提供到存儲器。
通過考慮具體實(shí)施方式和權(quán)利要求將認(rèn)識到其它特征。
附圖說明
所公開的方法和電路的各個方面和特征將在閱讀下面的詳細(xì)描述并參考附圖時變得顯而易見,其中:
圖1示出根據(jù)一個或多個實(shí)施例的被配置為對處理子系統(tǒng)和可編程邏輯子系統(tǒng)執(zhí)行地址轉(zhuǎn)換的示例可編程IC;
圖2示出根據(jù)一個或多個實(shí)施例的用于在可編程IC啟動時配置處理子系統(tǒng)和可編程邏輯子系統(tǒng)的過程;
圖3示出根據(jù)一個或多個實(shí)施例的用于轉(zhuǎn)換包括在由可編程邏輯子系統(tǒng)發(fā)出的存儲器訪問請求中的虛擬存儲器地址的過程;
圖4示出根據(jù)一個或多個實(shí)施例的被配置為對處理子系統(tǒng)和可編程邏輯子系統(tǒng)執(zhí)行地址轉(zhuǎn)換的另一示例性可編程IC;并且
圖5示出了可以根據(jù)一個或多個實(shí)施例配置的另一可編程IC。
具體實(shí)施方式
虛擬存儲器地址的使用可能對在可編程集成電路的處理子系統(tǒng)中執(zhí)行的電路設(shè)計(jì)的軟件部分和在可編程邏輯子系統(tǒng)中實(shí)現(xiàn)的電路設(shè)計(jì)的硬件部分之間的數(shù)據(jù)通信構(gòu)成挑戰(zhàn)。例如,通過訪問存儲變量的存儲器地址,在處理子系統(tǒng)中執(zhí)行的程序的變量可以被可編程邏輯訪問。但是,當(dāng)處理子系統(tǒng)使用虛擬存儲器地址時,可編程邏輯子系統(tǒng)難以確定哪些物理地址對應(yīng)于要訪問的變量。在某些方法中,可以在處理子系統(tǒng)上執(zhí)行軟件來執(zhí)行虛擬存儲器地址的轉(zhuǎn)換。然而,這種方法可能會很低效,增加了軟件的復(fù)雜性,并降低了軟件的可移植性。
本申請公開了有效地將可編程邏輯子系統(tǒng)發(fā)出的存儲器訪問請求映射和路由到與要訪問的程序變量對應(yīng)的物理存儲器地址的方法和電路。在一些實(shí)施例中,可編程IC包括處理子系統(tǒng),其被配置為執(zhí)行程序,該程序使用一組虛擬存儲器地址以引用用于存儲程序的變量的存儲器位置。可編程IC還包括可編程邏輯子系統(tǒng),其被配置為實(shí)現(xiàn)配置數(shù)據(jù)流中指定的一組電路,該組電路通過訪問程序的一個或多個變量與該程序交互操作。例如,該組電路可以包括多個輸入/輸出(I/O)電路,每個I/O電路具有相應(yīng)的標(biāo)識符(ID)并被配置為讀取和/或修改多個程序變量中一個相應(yīng)的程序變量。
可編程IC包括存儲器管理電路,其被配置為當(dāng)處理子系統(tǒng)被初始化以執(zhí)行該程序時將該組虛擬存儲器地址映射到存儲器的物理存儲器地址。存儲器管理電路還將I/O電路的ID映射到與要訪問的變量對應(yīng)的物理存儲器基地址(base physical memory address)。在對可編程IC的后續(xù)操作過程中,從可編程邏輯子系統(tǒng)向用于地址轉(zhuǎn)換的一個或多個轉(zhuǎn)換后備緩沖器(TLB)提供存儲器訪問請求。每個TLB被配置為確定與接收的存儲器訪問請求中指示的ID和/或虛擬存儲器地址對應(yīng)的物理存儲器地址。在確定物理存儲器地址后,TLB代表I/O電路,向存儲器提供指示物理存儲器地址的存儲器訪問請求。
在一些實(shí)施例中,TLB被配置為響應(yīng)于指示ID和/或虛擬存儲器地址的存儲器訪問請求的第一實(shí)例,檢索ID和/或虛擬存儲器地址到物理存儲器地址的映射。例如,可以從存儲器管理電路請求該映射。TLB可緩存被檢索到的ID和/或虛擬存儲器地址到物理存儲器地址的映射,以供以后使用。緩存地址映射有助于減少存儲器管理電路必須執(zhí)行的地址轉(zhuǎn)換的負(fù)擔(dān)。在一些其它的實(shí)施例中,在可編程邏輯子系統(tǒng)生成存儲器地址請求之前,存儲器管理電路可以被配置為于啟動時向每個TLB提供地址映射表。
TLB可以使用各種電路實(shí)現(xiàn)。在一些實(shí)施例中,TLB可以使用內(nèi)容可尋址存儲器(CAM)來緩存地址映射條目(address mapping entry)。與使用存儲器地址訪問數(shù)據(jù)的隨機(jī)存取存儲器(RAM)不同,CAM可以搜索存儲數(shù)據(jù)以尋找包括指定的虛擬存儲器地址和/或ID的條目。如果在CAM內(nèi)未找到指定的ID和/或虛擬存儲器地址,則可以生成導(dǎo)致從存儲器映射電路中檢索物理存儲器地址的異常(exception)。
在一些實(shí)施例中,TLB是被耦接到可編程IC上的可編程邏輯和存儲器的硬連線電路??蛇x地或另外地,可編程邏輯子系統(tǒng)中的可編程資源可被編程以形成一些或所有TLB。使用可編程資源來實(shí)現(xiàn)TLB可以允許設(shè)計(jì)者專門配置可編程IC以滿足用戶設(shè)計(jì)的要求。例如,對于一些應(yīng)用,可以僅生成少量的存儲器訪問請求以在處理和可編程邏輯子系統(tǒng)之間交換數(shù)據(jù)。對于這樣的應(yīng)用,可以使用單個TLB來執(zhí)行用于存儲器訪問請求的地址轉(zhuǎn)換。對于其它一些應(yīng)用,可能需要大量的TLB來為更大數(shù)量的存儲器訪問請求執(zhí)行地址轉(zhuǎn)換。
現(xiàn)在轉(zhuǎn)到附圖,圖1示出了根據(jù)一個或多個實(shí)施例的被配置為執(zhí)行地址轉(zhuǎn)換的示例性可編程IC??删幊蘄C 100包括處理子系統(tǒng)110,可編程邏輯子系統(tǒng)120和存儲器190。處理子系統(tǒng)110可以被配置為執(zhí)行程序112,程序112使用一組虛擬存儲器地址來引用用于存儲軟件程序的變量的存儲器190的位置??删幊踢壿嬜酉到y(tǒng)120還可以被配置為實(shí)現(xiàn)包括多個I/O電路124和126的電路設(shè)計(jì)122,I/O電路124和126被配置為通過訪問用于存儲程序變量的存儲器190的物理位置與程序112交換數(shù)據(jù)。
可編程IC包括存儲器管理電路170,其被配置為將程序使用的虛擬存儲器地址映射到存儲器190的存儲程序變量的物理存儲器地址。存儲器管理電路170還被配置為將I/O電路124和126的ID映射到與要訪問的變量對應(yīng)的物理存儲器地址。
在操作過程中,I/O電路124和126使用存儲器訪問請求(如讀請求或?qū)懻埱?來訪問存儲在存儲器190中的變量。存儲器訪問請求可以指示例如作為源地址的I/O電路的ID和與作為目標(biāo)地址的對應(yīng)于程序變量的虛擬存儲器地址。由I/O電路124和126發(fā)出的存儲器訪問請求被提供給TLB 144和146以用于地址轉(zhuǎn)換。在該示例中,可編程IC還包括TLB 140,其被配置為在程序112執(zhí)行期間,轉(zhuǎn)換虛擬存儲器地址以用于處理子系統(tǒng)110發(fā)出的存儲器訪問請求。
當(dāng)接收到存儲器訪問請求時,TLB 140、144和146確定與存儲器訪問請求中指示的虛擬存儲器地址和/或ID對應(yīng)的物理存儲器地址。例如,可以從存儲器管理電路請求對應(yīng)于虛擬存儲器地址和/或ID的物理存儲器地址。在各種實(shí)施例中,物理存儲器地址可以被確定為ID、虛擬存儲器地址或這兩者的函數(shù)。然后使用所確定的物理存儲器地址作為目標(biāo)地址將存儲器訪問請求提供給存儲器。如上所述,在確定用于ID和虛擬存儲器地址的物理存儲器地址之后,TLB可以緩存指示物理存儲器地址到ID和/或虛擬存儲器地址的映射的條目。被緩存的條目稍后可以用于確定與ID和/或虛擬存儲器地址對應(yīng)的物理存儲器地址,而不用聯(lián)系存儲器管理電路170。
圖2示出根據(jù)一個或多個實(shí)施例的用于在可編程IC啟動時配置處理子系統(tǒng)和可編程邏輯子系統(tǒng)的過程。在可編程IC的啟動202時,在框204處操作系統(tǒng)(OS)被載入處理子系統(tǒng)。在框206處,可編程邏輯子系統(tǒng)被編程以實(shí)現(xiàn)在配置數(shù)據(jù)流中指定的電路。在框208,將程序的實(shí)例加載到OS中。作為程序?qū)嵗募虞d的一部分,被程序使用以用于執(zhí)行的虛擬存儲器地址被映射到物理存儲器地址。在框210,該過程確定被實(shí)現(xiàn)在可編程邏輯子系統(tǒng)中的電路所訪問的程序變量。在一些實(shí)施例中,例如,配置數(shù)據(jù)流可以指定被在可編程邏輯子系統(tǒng)中形成的電路訪問的變量或虛擬存儲器地址。在框212,訪問變量的電路的ID被映射到存儲變量的對應(yīng)的物理存儲器基地址。
圖3示出根據(jù)一個或多個實(shí)施方式的用于轉(zhuǎn)換包括在由可編程邏輯子系統(tǒng)發(fā)出的存儲器訪問請求中的虛擬存儲器地址的過程。當(dāng)TLB接收到存儲器訪問請求302時該過程啟動。如果用于存儲器訪問請求302中指示的ID和/或虛擬存儲器地址的物理存儲器地址被緩存,則判定塊304將過程引導(dǎo)框塊306。在框306,使用緩存的物理存儲器地址作為目標(biāo)地址,將存儲器訪問請求提供給存儲器。否則,在框308處將轉(zhuǎn)換請求發(fā)送到存儲器管理電路。一旦從存儲器管理電路接收到物理存儲器地址,則過程進(jìn)行到框310,其中物理存儲器地址到虛擬存儲器地址以及ID的映射被緩存。在框312,使用緩存的物理存儲器地址作為目標(biāo)地址,將存儲器訪問請求提供給存儲器。
圖4示出根據(jù)一個或多個實(shí)施例的被配置為對處理子系統(tǒng)和可編程邏輯子系統(tǒng)執(zhí)行地址轉(zhuǎn)換的另一示例性可編程IC。可編程IC 400包括處理子系統(tǒng)410,其可以被配置為執(zhí)行用戶程序414,用戶程序414使用一組虛擬存儲器地址來以引用用于存儲軟件程序的變量的存儲器490的位置。如該示例所示,處理子系統(tǒng)410可以包括用于執(zhí)行程序414的一個或多個處理器412。在該示例中,處理子系統(tǒng)410還包括緩存416,用于存儲由程序414使用的存儲器位置的本地副本。在一些實(shí)施例中,可編程IC 400包括緩存一致性互連(cache coherent interconnect)450,其被配置為維持存儲在緩存416中的被緩存的存儲器位置的值與存儲在存儲器490中的被緩存的存儲器位置的值之間的一致性。
可編程IC 400還包括可編程邏輯子系統(tǒng)420,其可以被配置為實(shí)現(xiàn)電路設(shè)計(jì)424。電路設(shè)計(jì)424包括多個I/O電路426和428,其通過訪問用于存儲程序的變量的存儲器490的位置與程序414交換數(shù)據(jù)。
類似于圖1所示的可編程IC,IC 400包括存儲器管理電路470,其被配置為將程序使用的虛擬存儲器地址映射到存儲程序變量的存儲器490的物理存儲器地址。存儲器管理電路470還將I/O電路426和428的ID映射到與要訪問的變量相對應(yīng)的物理存儲器基地址。在操作期間,I/O電路426和428使用存儲器訪問請求(如讀取請求或?qū)懭胝埱?來訪問存儲在存儲器490中的變量。
在該示例中,可編程邏輯子系統(tǒng)420包括一組接口電路430、432、434和436。接口電路430、432、434和436中的每一個都可以被配置為通過交換網(wǎng)絡(luò)460或其它數(shù)據(jù)總線將數(shù)據(jù)傳送到一個或多個I/O電路426和428和/或從一個或多個I/O電路426和428接收數(shù)據(jù)。作為一個示例,接口電路可以是AXI Fabric接口(AFI),其被配置為根據(jù)AXI通信協(xié)議緩沖和傳送數(shù)據(jù)。
在一些實(shí)施例中,I/O電路426和428的ID還可以標(biāo)識接口電路430、432、434和436中的哪一個被用于傳送數(shù)據(jù)。在一個示例性實(shí)施例中,可以使用10位ID(xxxxyyyyyy),其中4個最高有效比特(xxxx)唯一地標(biāo)識接口電路。6個最低有效比特(yyyyyy)可以唯一地標(biāo)識經(jīng)由每個接口電路通信的用戶設(shè)計(jì)的多達(dá)64個不同的電路。這種ID還可以用于標(biāo)識可編程IC中的其他電路。例如,4個最高有效標(biāo)識(xxxx)可以用于唯一地標(biāo)識包括在處理子系統(tǒng)中的處理器(例如,412)。6個最低有效比特(yyyyyy)可以被用于區(qū)分在處理器上執(zhí)行的不同程序?qū)嵗?/p>
在該示例中,接口電路430、432、434和436通過TLB 442、444和446連接到交換網(wǎng)絡(luò)。參考前面圖1中的TLB 144和146所描述的,TLB 442、444和446被配置為對從接口電路430、432、434和436接收的存儲器訪問請求執(zhí)行地址轉(zhuǎn)換。地址轉(zhuǎn)換可以與TLB和存儲器管理電路470一起執(zhí)行(例如,使用圖3所示的過程)。在通過地址轉(zhuǎn)換為存儲器訪問請求確定了物理存儲器地址之后,TLB 442、444或446修改存儲器訪問請求以使用所確定的物理存儲器地址作為目標(biāo)地址。TLB 442、444或446向存儲器490(經(jīng)由交換網(wǎng)絡(luò)460)和/或緩存一致性互連450提供修改后的存儲器訪問請求,以訪問期望的存儲器位置。如上所述,在一些實(shí)施例中,可以使用可編程邏輯子系統(tǒng)420的可編程資源來實(shí)現(xiàn)一個或多個TLB(例如,422)。
在該示例中,可編程IC 400還包括一個或多個外部I/O電路480,其可以用于經(jīng)由可編程IC 400的一個或多個外部數(shù)據(jù)端口來傳送數(shù)據(jù)。數(shù)據(jù)可以在處理子系統(tǒng)410和/或可編程邏輯子系統(tǒng)420之間經(jīng)由核心交換網(wǎng)絡(luò)(core switching network)462通信。在一些實(shí)施例中,外部I/O電路480還可以通過使用指示虛擬存儲器地址的存儲器訪問請求訪問程序的變量,來與處理子系統(tǒng)410通信。TLB 440被配置為對這種存儲器訪問請求執(zhí)行地址轉(zhuǎn)換,如參考TLB 442、444和446所描述的。
圖5示出了可以根據(jù)一個或多個實(shí)施例配置的可編程IC 502??删幊蘄C還可以被稱為片上系統(tǒng)(SOC),其包括處理子系統(tǒng)510和可編程邏輯子系統(tǒng)530。處理子系統(tǒng)510可以被編程以通過執(zhí)行用戶程序?qū)崿F(xiàn)用戶設(shè)計(jì)的軟件部分。程序可以被指定為配置數(shù)據(jù)流的一部分,或者可以從片上或片外數(shù)據(jù)存儲設(shè)備取回。處理子系統(tǒng)510可以包括用于執(zhí)行一個或多個軟件程序的各種電路512、514、516和518。電路512、514、516和518可以包括例如一個或多個處理器核、浮點(diǎn)單元(FPU)、中斷處理單元、片上存儲器、存儲器緩存和/或緩存一致性互連。
可編程IC 502的可編程邏輯子系統(tǒng)530可以被編程以實(shí)現(xiàn)用戶設(shè)計(jì)的硬件部分。例如,可編程邏輯子系統(tǒng)可以包括多個可編程資源532,其可以被編程以實(shí)現(xiàn)配置數(shù)據(jù)流中指定的一組電路??删幊藤Y源532包括可編程互連電路,可編程邏輯電路和配置存儲器單元。可編程邏輯使用可編程元件實(shí)現(xiàn)用戶設(shè)計(jì)的邏輯,可編程元件可以包括例如函數(shù)發(fā)生器、寄存器、算術(shù)邏輯等??删幊袒ミB電路可以包括通過可編程互連點(diǎn)(PIP)互連的不同長度的大量互連線。
可編程資源532可以通過將配置數(shù)據(jù)流加載到配置存儲器單元中被編程,配置存儲器單元定義可編程互連電路和可編程邏輯電路的配置方式。然后,各個存儲器單元的集體狀態(tài)確定可編程資源532的功能。配置數(shù)據(jù)可以從存儲器(例如,從外部PROM)讀取,或者通過外部設(shè)備寫入可編程IC 502。在一些實(shí)施例中,配置數(shù)據(jù)可由包括在可編程邏輯子系統(tǒng)530中的配置控制器534加載到配置存儲器單元中。在其它一些實(shí)施例中,可通過處理子系統(tǒng)510執(zhí)行的啟動過程將配置數(shù)據(jù)加載到配置存儲器單元中。
可編程IC 502可以包括各種電路以將處理子系統(tǒng)510與在可編程邏輯子系統(tǒng)530內(nèi)實(shí)現(xiàn)的電路互連。在該示例中,可編程IC 502包括核心交換器526,其可以在處理子系統(tǒng)510和可編程邏輯子系統(tǒng)530的各種數(shù)據(jù)端口之間路由數(shù)據(jù)信號。核心交換器526還可以在可編程邏輯或處理子系統(tǒng)510和530中的任一個與可編程IC的各種其它電路(例如內(nèi)部數(shù)據(jù)總線)之間路由數(shù)據(jù)信號。可選地或另外地,處理子系統(tǒng)510可以包括直接與可編程邏輯子系統(tǒng)連接的接口——繞過核心交換器526。這樣的接口可以使用例如由ARM公布的AMBA AXI協(xié)議規(guī)范(AXI)來實(shí)現(xiàn)。
在一些實(shí)施例中,處理子系統(tǒng)510和可編程邏輯子系統(tǒng)530還可以經(jīng)由存儲器控制器521讀取或?qū)懭肫洗鎯ζ?22或片外存儲器(未示出)的存儲器位置。存儲器控制器521可以被實(shí)現(xiàn)為與一個或多個不同類型的存儲器電路通信,包括但不限于雙倍數(shù)據(jù)速率(DDR)2、DDR3、低功率(LP)DDR2存儲器類型,無論是16比特、32比特還是具有ECC的16比特等。能夠與存儲器控制器521通信的不同存儲器類型的列表僅是為了說明的目的而提供,而不旨在作為限制或窮舉。如圖5中所示,可編程IC 502可以包括存儲器管理單元520和轉(zhuǎn)換后備緩沖器524,以將子系統(tǒng)510和530所使用的虛擬存儲器地址轉(zhuǎn)換為由存儲器控制器521使用的物理存儲器地址以訪問特定存儲器位置。
可編程IC可以包括用于與外部電路進(jìn)行數(shù)據(jù)通信的輸入/輸出(I/O)子系統(tǒng)550。I/O子系統(tǒng)550可以包括各種類型的I/O設(shè)備或接口,包括例如閃存(flash memory)類型I/O設(shè)備、高性能I/O設(shè)備、低性能接口、調(diào)試I/O設(shè)備和/或RAM I/O設(shè)備。
I/O子系統(tǒng)550可以包括被示為560A和560B的一個或多個閃存接口560。例如,一個或多個閃存接口560可以被實(shí)現(xiàn)為四串行外設(shè)接口(QSPI),其被配置用于4比特通信。一個或多個閃存接口560可以被實(shí)現(xiàn)為并行8比特NOR/SRAM類型的接口。一個或多個閃存接口560可以被實(shí)現(xiàn)為NAND接口,其被配置用于8比特和/或16比特通信。應(yīng)當(dāng)理解,所描述的特定接口是出于說明而非限制的目的提供的。具有不同比特寬度的其他接口也可以被使用。
I/O子系統(tǒng)550可以包括提供比存儲器接口560更高級別性能的接口562中的一個或多個。接口562A-562C中的每一個可以分別耦接到DMA控制器564A-564C。例如,接口562中的一個或多個可以被實(shí)現(xiàn)為通用串行總線(USB)類型的接口。接口562中的一個或多個可以實(shí)現(xiàn)為千兆以太網(wǎng)類型的接口。接口562中的一個或多個可以實(shí)現(xiàn)為安全數(shù)字(SD)類型的接口。
I/O子系統(tǒng)550還可以包括提供比接口562更低級別性能的一個或多個接口566,例如接口566A-566D。例如,接口566中的一個或多個可以被實(shí)現(xiàn)為通用I/O(GPIO)類型的接口。接口566中的一個或多個可以被實(shí)現(xiàn)為通用異步接收器/發(fā)射器(UART)類型的接口。接口566中的一個或多個可以被實(shí)現(xiàn)為串行外圍接口(SPI)總線類型的接口。接口566中的一個或多個可以被實(shí)現(xiàn)為控制器局域網(wǎng)(CAN)類型的接口和/或I2C類型的接口的形式。接口566中的一個或多個還可以被實(shí)現(xiàn)為三重定時器計(jì)數(shù)器(Triple Timer Counter,TTC)和/或看門狗定時器(WDT)類型的接口。
I/O子系統(tǒng)550可以包括一個或多個調(diào)試接口568,例如處理器JTAG(PJTAG)接口568A和跟蹤接口568B。PJTAG接口568A可以為可編程IC 502提供外部調(diào)試接口。跟蹤接口568B可以提供端口以從處理子系統(tǒng)510或可編程邏輯子系統(tǒng)530接收調(diào)試(例如跟蹤)信息。
如圖所示,接口560、562、566和568中的每一個都可以耦接到多路復(fù)用器570。多路復(fù)用器570提供多個輸出,這些輸出可以被直接路由或耦接到可編程IC 502的外部引腳,例如,其中布置有可編程IC 502的封裝的焊球。例如,可編程IC 502的I/O引腳可以在接口560、562、566和568之間共享。用戶可以通過配置數(shù)據(jù)流配置多路復(fù)用器570,以選擇使用接口560-568中的哪一個,以及,因此經(jīng)由多路復(fù)用器570將其耦接到可編程IC 502的I/O引腳。I/O子系統(tǒng)550還可以包括結(jié)構(gòu)多路復(fù)用I/O(fabric multiplexer I/O,FMIO)接口(未示出),用于將接口562-568連接到可編程邏輯子系統(tǒng)的可編程邏輯電路。附加地或替代地,可編程邏輯子系統(tǒng)530可以被配置為實(shí)現(xiàn)可編程邏輯內(nèi)的一個或多個I/O電路。在一些實(shí)施例中,可編程IC 502還可以包括具有用于電源和/或安全管理的各種電路的子系統(tǒng)540。例如,子系統(tǒng)540可以包括電源管理單元546,其被配置為監(jiān)控和維持用于為可編程IC 502的各個子系統(tǒng)供電的一個或多個電壓域。在一些實(shí)施例中,電源管理單元546在可以禁止單個子系統(tǒng)在空閑時的供電,以減少功率消耗,而不禁用對正在使用的子系統(tǒng)的供電。
子系統(tǒng)540還可以包括安全電路以監(jiān)視子系統(tǒng)的狀態(tài),以確保正確的運(yùn)行。例如,子系統(tǒng)540可以包括被配置為監(jiān)視各種子系統(tǒng)的狀態(tài)(例如,如狀態(tài)寄存器544中所指示的)的一個或多個實(shí)時處理器542。實(shí)時處理器542可以被配置為響應(yīng)于檢測到錯誤而執(zhí)行多個任務(wù)。例如,對于一些錯誤,實(shí)時處理器542可以響應(yīng)于檢測到錯誤而生成警報(bào)。作為另一示例,實(shí)時處理器542可以重置子系統(tǒng)以嘗試恢復(fù)子系統(tǒng)以校正操作。子系統(tǒng)540包括可用于互連各種子系統(tǒng)的交換網(wǎng)絡(luò)548。例如,交換網(wǎng)絡(luò)548可以被配置為將各種子系統(tǒng)510、530和540連接到I/O子系統(tǒng)550的各種接口。在一些應(yīng)用中,交換網(wǎng)絡(luò)548還可以用于將實(shí)時處理器542與要被監(jiān)視的子系統(tǒng)隔離。這種隔離可能是某些應(yīng)用標(biāo)準(zhǔn)(例如,IEC-61508SIL3或ISO-26262標(biāo)準(zhǔn))所要求的,以確保實(shí)時處理器542不受在其它子系統(tǒng)中發(fā)生的錯誤的影響。
這些方法和電路被認(rèn)為可應(yīng)用于各種系統(tǒng)和應(yīng)用中??紤]本說明書,其他方面和特征對于本領(lǐng)域技術(shù)人員將是顯而易見的。例如,雖然在一些情況下一些方面和特征可以在單個附圖中被描述,但是應(yīng)當(dāng)理解,來自一個附圖的特征也可以與另一個附圖的特征組合,即使該組合沒有被明確地示出或明確地描述為組合。本說明書和附圖僅旨在作為示例,本發(fā)明的真實(shí)范圍由所附權(quán)利要求書指示。