專(zhuān)利名稱(chēng):包括將處理器與內(nèi)部存儲(chǔ)器連接的交叉切換器的用于閃存的存儲(chǔ)控制器的制作方法
技術(shù)領(lǐng)域:
這里所描述的發(fā)明涉及數(shù)據(jù)存儲(chǔ)領(lǐng)域,特別涉及使用固態(tài)非易失性存儲(chǔ)器件的數(shù) 據(jù)存儲(chǔ)應(yīng)用。該技術(shù)特別相關(guān)于包含部署在大型數(shù)據(jù)中心的多用戶(hù)計(jì)算和存儲(chǔ)平臺(tái)的高性 能企業(yè)系統(tǒng),但其也可應(yīng)用于較小規(guī)模的企業(yè)應(yīng)用和最終用戶(hù)大容量存儲(chǔ)。
背景技術(shù):
目前企業(yè)級(jí)的大容量存儲(chǔ)依靠硬盤(pán)驅(qū)動(dòng)器,所述硬盤(pán)驅(qū)動(dòng)器的典型特征為3. 5英 寸形狀因子,15000rpm的轉(zhuǎn)軸馬達(dá)、以及73GB和450GB之間的存儲(chǔ)容量。該機(jī)械設(shè)計(jì)與帶 有單個(gè)致動(dòng)器與橫穿8個(gè)表面移動(dòng)的8個(gè)讀/寫(xiě)頭的傳統(tǒng)硬盤(pán)驅(qū)動(dòng)器相同。頭(head)/介 質(zhì)技術(shù)的約束將讀/寫(xiě)能力限制為每次僅一個(gè)有效頭。發(fā)送到該驅(qū)動(dòng)器的所有數(shù)據(jù)請(qǐng)求被 以串行的方式處理,這在每個(gè)如致動(dòng)器將讀/寫(xiě)頭移動(dòng)到所需位置、以及介質(zhì)旋轉(zhuǎn)以將數(shù) 據(jù)置于讀/寫(xiě)頭下的操作之間導(dǎo)致很長(zhǎng)的延遲。由于等待致動(dòng)器的請(qǐng)求隊(duì)列,系統(tǒng)觀察到響應(yīng)時(shí)間增加到用戶(hù)不可忍受的程度。 大容量存儲(chǔ)系統(tǒng)已經(jīng)通過(guò)限制對(duì)每個(gè)驅(qū)動(dòng)器的未決請(qǐng)求的數(shù)量來(lái)適應(yīng)該問(wèn)題。這具有這樣 的效果即使這些驅(qū)動(dòng)器具有高至450GB的容量,也將每個(gè)驅(qū)動(dòng)器的有效和可用的容量降 低到每個(gè)驅(qū)動(dòng)器12GB。隨之,該較低的容量惡化了分層空間、冷卻與功率的問(wèn)題,對(duì)企業(yè)級(jí) 的大容量存儲(chǔ)系統(tǒng),所有這些都變得極為成問(wèn)題。為了試圖減輕這些問(wèn)題,該行業(yè)轉(zhuǎn)向2. 5英寸的驅(qū)動(dòng)器。然而,雖然較小的形狀因 子在相同空間中允許更多數(shù)量的驅(qū)動(dòng)器,但硬盤(pán)驅(qū)動(dòng)器操作的串行性質(zhì)意味著即使較小形 狀因子的驅(qū)動(dòng)器也存在嚴(yán)重的空間、冷卻與功率的問(wèn)題。因?yàn)殚W存系統(tǒng)沒(méi)有與硬盤(pán)驅(qū)動(dòng)器關(guān)聯(lián)的機(jī)械延遲,從而允許更高的性能以及相當(dāng) 低的成本、功率、發(fā)熱與空間使用,所以在企業(yè)級(jí)存儲(chǔ)環(huán)境中,閃存很有吸引力。然而,傳統(tǒng) 上,由于某些技術(shù)限制,閃存未被用于這樣的環(huán)境中。第一個(gè)技術(shù)問(wèn)題是寫(xiě)速度,其可以低至機(jī)械硬盤(pán)驅(qū)動(dòng)器的寫(xiě)速度的十分之一。這 是由于這樣的事實(shí)如果在寫(xiě)之前沒(méi)有很長(zhǎng)的擦除周期,數(shù)據(jù)就不能被覆寫(xiě)在NAND閃存 上。因?yàn)椴脸芷谥苯佑绊憣?xiě)性能,所以,大多數(shù)閃存設(shè)計(jì)將寫(xiě)數(shù)據(jù)移動(dòng)到新位置,并將擦 除延遲到以后。在繁忙的系統(tǒng)中,所延遲的擦除周期可逐步增大,直到處理器耗盡了空閑閃 存頁(yè)面而不得不停下來(lái)創(chuàng)建新頁(yè)面為止,因此非常影響系統(tǒng)的性能。第二個(gè)技術(shù)問(wèn)題是對(duì)于每個(gè)閃存頁(yè)面的特定限制對(duì)“單層單元”(“SLC”)器件 來(lái)說(shuō),100000個(gè)擦除周期;對(duì)“多層單元”(“MLC”)器件來(lái)說(shuō),10000個(gè)周期。這些對(duì)以不 可預(yù)見(jiàn)的數(shù)據(jù)流操作的數(shù)據(jù)中心造成可以引起“熱點(diǎn)”的特殊問(wèn)題,產(chǎn)生存儲(chǔ)器中某些遭受 大量次數(shù)的擦除而被高度使用的區(qū)域。第三個(gè)問(wèn)題是數(shù)據(jù)丟失,其可以由于各種影響閃存的因素而發(fā)生,所述因素包括 讀干擾或程序干擾,它們導(dǎo)致由與被干擾的單元相鄰的存儲(chǔ)器單元的讀或?qū)懸鸬臄?shù)據(jù)比 特的丟失。由于時(shí)間的流逝,閃存單元的狀態(tài)可能也以不可預(yù)見(jiàn)的方式改變。這些技術(shù)問(wèn)題對(duì)閃存在高容量、高性能的存儲(chǔ)應(yīng)用中的使用產(chǎn)生嚴(yán)重的問(wèn)題。在 每種情況中,存在技術(shù)解決方案,但這些解決方案對(duì)通常包括單個(gè)處理器的標(biāo)準(zhǔn)閃存控制 器中可用的處理能力施加了很大的壓力。該壓力使得很難克服這些環(huán)境中的技術(shù)問(wèn)題。
發(fā)明內(nèi)容
在一個(gè)實(shí)施例中,所描述的對(duì)閃存的性能限制的解決方案包括在控制器設(shè)計(jì)中使 用多個(gè)微處理器,由此創(chuàng)建多個(gè)并行的獨(dú)立流水線(xiàn),每個(gè)流水線(xiàn)都能夠處理單個(gè)事務(wù)的一 部分。該設(shè)計(jì)最大化主機(jī)和閃存接口的使用,并允許單個(gè)事務(wù)被分解為許多小部分,這些小 部分可以被重新排序并被并行地處理,以提高性能。設(shè)計(jì)該結(jié)構(gòu)來(lái)允許多個(gè)處理器在不使用代價(jià)高且無(wú)效率的中斷的情況下執(zhí)行它們的功能。并行流水線(xiàn)的使用允許控制器有效地掩蓋閃存的使用中固有的寫(xiě)等待時(shí)間。此 外,多個(gè)獨(dú)立處理器的使用提供足夠的處理能力來(lái)處理由解決上述壽命和錯(cuò)誤問(wèn)題所施加 的系統(tǒng)開(kāi)銷(xiāo)。通過(guò)將主機(jī)發(fā)起的事務(wù)分解為大量獨(dú)立閃存讀寫(xiě),這里所描述的控制器結(jié)構(gòu) 允許在使用傳統(tǒng)控制器設(shè)計(jì)中不可能的高水平性能。
圖1圖示包含SSD( “固態(tài)驅(qū)動(dòng)器”)控制器和閃存的系統(tǒng)。圖2圖示用于將主機(jī)命令轉(zhuǎn)換為閃存讀和寫(xiě)的數(shù)據(jù)結(jié)構(gòu)的分級(jí)結(jié)構(gòu)。圖3更詳細(xì)地圖示了圖1的系統(tǒng)。圖4以高級(jí)別圖示了主機(jī)讀操作。圖5以高級(jí)別圖示了主機(jī)寫(xiě)操作。圖6圖示閃存的組織。圖7圖示閃存組和閃存端口之間的關(guān)系。圖8圖示對(duì)閃存器件的輸入和輸出信號(hào)。圖9圖示對(duì)閃存HEMi塊的輸入和輸出信號(hào)。圖10圖示閃存端口與閃存子組(bank)之間的連接。圖11圖示將CS和RB信號(hào)復(fù)用到單個(gè)引腳上。圖12圖示閃存分級(jí)結(jié)構(gòu)。圖13圖示S頁(yè)面區(qū)段的組織。圖14圖示閃存頁(yè)面的構(gòu)在。圖15圖示超級(jí)塊(SuperBlock)內(nèi)的數(shù)據(jù)的組織。圖16圖示數(shù)據(jù)的分條(stripe)組織。圖17圖示穿過(guò)主機(jī)端口的數(shù)據(jù)和控制流。圖18圖示主機(jī)端口。圖19圖示基元(primitive)匹配邏輯。圖20圖示命令解析器塊。圖21圖示命令分布?jí)K。圖22圖示HEMi和共享RAM數(shù)據(jù)結(jié)構(gòu)之間通過(guò)交叉切換器的連接。圖23圖示RAM控制器。圖24圖示共享RAM控制器與共享RAM子組之間的關(guān)系。圖25圖示DRAM信道。圖 26 圖示 HEMi 級(jí)。圖27圖示閃存HEMi及其緊密耦接的邏輯塊。圖28圖示接收HEMi和傳送HEMi唯一寄存器。圖29圖示閃存HEMi mRAM的內(nèi)容。圖30圖示從共享RAM的數(shù)據(jù)塊傳輸。圖31圖示ECC邏輯。圖32圖示數(shù)據(jù)路徑DRAM的內(nèi)容。
8
圖33圖示轉(zhuǎn)發(fā)表。圖34圖示反轉(zhuǎn)表。圖35圖示超級(jí)塊元數(shù)據(jù)表。圖36圖示IOP數(shù)據(jù)緩沖器。圖 37 圖示 CDBinfo。圖 38 圖示 IOP。圖39圖示傳輸請(qǐng)求。圖40圖示頁(yè)面請(qǐng)求。圖41圖示共享RAM塊的內(nèi)容。圖42圖示啟動(dòng)器信息。圖43圖示SLC閃存寫(xiě)定時(shí)。圖44圖示MLC閃存寫(xiě)定時(shí)。圖45圖示當(dāng)接收到主機(jī)命令時(shí)主機(jī)端口遵循的步驟。圖46圖示⑶B的處理的初始階段。圖47圖示特殊情況的⑶B處理。圖48圖示基于⑶Binfo設(shè)立IOP和傳輸請(qǐng)求的方式。圖49圖示閃存HEMi設(shè)立頁(yè)面請(qǐng)求的方式。圖50圖示閃存HEMi的執(zhí)行循環(huán)。圖51圖示頁(yè)面請(qǐng)求讀的處理程序。圖52更詳細(xì)地圖示閃存讀操作。圖53圖示頁(yè)面請(qǐng)求寫(xiě)處理程序的執(zhí)行。圖54圖示向頁(yè)面請(qǐng)求分配超級(jí)頁(yè)面。圖55圖示完成的事務(wù)的清理。圖56圖示垃圾收集處理。圖57圖示巡邏功能處理。圖58圖示重建處理。
具體實(shí)施例方式I.概述A.系統(tǒng)概述在當(dāng)前的優(yōu)選實(shí)施例中,這里所描述的系統(tǒng)被設(shè)計(jì)來(lái)以各種企業(yè)級(jí)大容量存儲(chǔ)協(xié) 議操作,所述企業(yè)級(jí)大容量存儲(chǔ)協(xié)議包括SAS( “串行附接SCSI”)、FC( “光纖信道”)以 及FC-AL( “光纖信道仲裁環(huán)”),所有這些都基于小型計(jì)算機(jī)系統(tǒng)接口( “SCSI”)與串行 ATA( “SATA”)協(xié)議。本領(lǐng)域的技術(shù)人員對(duì)這些協(xié)議都非常熟悉,因此這里不再描述。除了 特定協(xié)議被調(diào)用的情況之外,這里所公開(kāi)的系統(tǒng)和方法不依賴(lài)于使用的特定協(xié)議,而是被 設(shè)計(jì)來(lái)以所有這些協(xié)議正確地操作。此外,這些系統(tǒng)和方法可以適應(yīng)以其它現(xiàn)用的或還未 開(kāi)發(fā)的類(lèi)似協(xié)議的使用,包括為企業(yè)級(jí)應(yīng)用設(shè)計(jì)的協(xié)議、以及為其它應(yīng)用(諸如最終用戶(hù)) 設(shè)計(jì)的協(xié)議。為了方便,這里的相關(guān)協(xié)議時(shí)常被統(tǒng)稱(chēng)為“SCSI協(xié)議”,但應(yīng)該理解,它包括非SCSI協(xié)議,而不包括不相關(guān)的SCSI協(xié)議。這里所描述的系統(tǒng)包括用于控制包括閃存芯片的大容量存儲(chǔ)模塊的新穎結(jié)構(gòu)。在 圖1中以高度概述的形式示出了整個(gè)系統(tǒng)。與這里的其它框圖一樣,圖1所示的元件本質(zhì) 上是概念性的,它們示出了這些功能塊之間的互相關(guān)系的性質(zhì),而不意在表示實(shí)際的物理 電路級(jí)實(shí)施。主機(jī)101和102是傳統(tǒng)主機(jī)設(shè)備,例如使用大容量存儲(chǔ)資源的兩個(gè)服務(wù)器或?yàn)橐?個(gè)這樣的服務(wù)器服務(wù)的兩個(gè)總線(xiàn)適配器。在某些協(xié)議中,每個(gè)主機(jī)可以支持多個(gè)啟動(dòng)器 (initiator)。在基于SCSI的系統(tǒng)中,啟動(dòng)器是主機(jī)側(cè)的用于數(shù)據(jù)傳輸?shù)亩它c(diǎn),并且可以構(gòu) 成單獨(dú)的物理設(shè)備或處理。板103 (由虛線(xiàn)表示)表示一個(gè)或多個(gè)PCB。例如,其可以包括單個(gè)PCB板或以母 子結(jié)構(gòu)連接在一起的多個(gè)板。在當(dāng)前的優(yōu)選實(shí)施例中,板103被設(shè)計(jì)為使得從主機(jī)101和 102的角度,板103呈現(xiàn)為構(gòu)成傳統(tǒng)的旋轉(zhuǎn)盤(pán)大容量存儲(chǔ)裝置。這需要主機(jī)端口 104和105 被設(shè)計(jì)為它們?cè)谖锢砗瓦壿嬌吓c傳統(tǒng)大容量存儲(chǔ)接口不可區(qū)分,其中已經(jīng)為該傳統(tǒng)大容量 存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)了主機(jī)101和102。由此,在當(dāng)前的優(yōu)選實(shí)施例中,板103的使用不需要主機(jī) 101和102的任何重新設(shè)計(jì)。在當(dāng)前的優(yōu)選實(shí)施例中,SSD控制器106表示附接到板103的以200MHz運(yùn)行的單 個(gè)集成電路器件。在替代實(shí)施例中,SSD控制器106可以由多于一個(gè)集成電路器件構(gòu)成,而 不偏離這里描述的發(fā)明的原理。時(shí)鐘速度當(dāng)然表示一個(gè)實(shí)施選擇,并將可以在實(shí)施中變化。在當(dāng)前的優(yōu)選實(shí)施例中,數(shù)據(jù)路徑DRAM 107是64位寬的、256M字節(jié)的、具有 200MHz時(shí)鐘速度的DDR SDRAM,該DDR SDRAM由愛(ài)達(dá)荷州博伊西的Micron技術(shù)公司出售, 產(chǎn)品型號(hào)為MT47H16M16BC-5E。它提供了每周期128位的數(shù)據(jù)傳輸?shù)挠行俣?,由兩個(gè)每 周期64位的傳輸構(gòu)成。為了簡(jiǎn)化的目的,這里將其描述為128位接口。該器件自動(dòng)檢查所 有傳輸上的ECC。在涉及更大的總存儲(chǔ)容量的替代實(shí)施例中,可以替代使用512M字節(jié)的、型 號(hào)為Micron MT47H32M16CC-5E的DDR SDRAM。應(yīng)該理解,許多不同選擇可以被用于數(shù)據(jù)路 徑DRAM,包括使用不是DRAM的類(lèi)型的存儲(chǔ)器,并且,這里所識(shí)別的特定產(chǎn)品并非這里所公 開(kāi)的發(fā)明的必要部分。如圖1中所示,數(shù)據(jù)路徑DRAM 107與SSD控制器106通信,但其不 具有與系統(tǒng)中任何其它元件的任何直接連接。閃存模塊108表示許多閃存芯片。在當(dāng)前的優(yōu)選實(shí)施例中,閃存模塊108包括192 個(gè)2G字節(jié)的NAND閃存芯片,每個(gè)芯片以40MHz運(yùn)行。如以下所解釋?zhuān)撆渲锰峁?00G字節(jié) 的用戶(hù)數(shù)據(jù)容量。應(yīng)該理解,所描述的系統(tǒng)可以以更大或更小的總?cè)萘?、具有?G字節(jié)多 或少的容量的閃存芯片、以及以比當(dāng)前優(yōu)選的速度快或慢的速度操作的閃存芯片操作。此 外,閃存模塊108可以包括多個(gè)疊放在一起的“子板”。閃存模塊108與SSD控制器106通信,但其不具有與系統(tǒng)中任何其它元件的任何連接。如圖1中所示,因?yàn)镾SD控制器106與系統(tǒng)中的所有其它元件通信,而所述其它元 件互相都不通信,所以SSD控制器106占據(jù)了中心位置。下文將詳細(xì)描述作為板103的部 分示出的每個(gè)元件的設(shè)計(jì)和操作。B.數(shù)據(jù)結(jié)構(gòu)概述SSD控制器106通過(guò)從主機(jī)接收命令并將這些命令分解為最終導(dǎo)致閃存模塊108中的讀寫(xiě)序列的更小的任務(wù)而操作。圖2在以高級(jí)別圖示了該處理。當(dāng)SSD控制器106接收到主機(jī)發(fā)起的讀或?qū)懨顣r(shí),其創(chuàng)建被稱(chēng)為“⑶Binfo”的 數(shù)據(jù)結(jié)構(gòu)(例如,CDBinfo 201),該數(shù)據(jù)結(jié)構(gòu)包含命令描述符塊(“CDB”)或其它相應(yīng)的來(lái) 自主機(jī)的命令相關(guān)的信息。在其它信息之中,⑶Binfo在邏輯塊地址(“LBA”)中指定了要 從中讀取或?qū)懭氲狡渲械牡刂贩秶??;冖荁info,SSD控制器106創(chuàng)建被稱(chēng)為“輸入輸出處理”(“Ι0Ρ”)的數(shù)據(jù)結(jié)構(gòu) (例如,IOP 202)。在大多數(shù)情況下,單個(gè)IOP控制由主機(jī)請(qǐng)求的整個(gè)事務(wù)。每個(gè)IOP可以調(diào)用最多七個(gè)被稱(chēng)為“傳輸請(qǐng)求”的數(shù)據(jù)結(jié)構(gòu)(例如傳輸請(qǐng)求 203-209)。每個(gè)傳輸請(qǐng)求被設(shè)計(jì)來(lái)處理由IOP指定的LBA范圍的一部分。每個(gè)傳輸請(qǐng)求可以調(diào)用最多三個(gè)被稱(chēng)為“頁(yè)面請(qǐng)求”的數(shù)據(jù)結(jié)構(gòu)(例如,由傳輸請(qǐng) 求206調(diào)用的頁(yè)面請(qǐng)求210、211和212 ;由其它傳輸請(qǐng)求調(diào)用的頁(yè)面請(qǐng)求未在圖2中示出)。 每個(gè)頁(yè)面請(qǐng)求被設(shè)計(jì)來(lái)從或向?qū)?yīng)于由傳輸請(qǐng)求指定的LBA范圍的部分的閃存模塊108的 段讀或?qū)憽H鐖D2所示,三個(gè)說(shuō)明性的頁(yè)面請(qǐng)求各自訪(fǎng)問(wèn)閃存模塊108的被稱(chēng)為“超級(jí)頁(yè)面 (SuperPage) ”的區(qū)域(例如,超級(jí)頁(yè)面213、214和215)。如下面進(jìn)一步描述的,每個(gè)超級(jí) 頁(yè)面包括四個(gè)閃存頁(yè)面,每個(gè)閃存頁(yè)面被存儲(chǔ)在不同的閃存電路小片(Die)中。下文將更詳細(xì)地描述這些數(shù)據(jù)結(jié)構(gòu)中的每個(gè)。C.詳細(xì)的系統(tǒng)概述圖3提供了圖1所示的整個(gè)系統(tǒng)設(shè)計(jì)的額外細(xì)節(jié),但,與前面一樣,為了清楚,省略 了大量的元素和細(xì)節(jié)。圖3示出了連接到板103的主機(jī)101和102,板103包括SSD控制器 106、數(shù)據(jù)路徑DRAM 107以及閃存模塊108。閃存模塊108被分為八個(gè)閃存組,被指定為閃存組0-7。在這些之中,圖中示出了 三個(gè)閃存組0、1和7,被指定為301、302和303。在當(dāng)前的優(yōu)選實(shí)施例中,閃存模塊108可 以保持有八至十二個(gè)之間的閃存組。SSD控制器106還包含與存儲(chǔ)模塊108中包含的閃存組的數(shù)量相同數(shù)量的閃存端 口,例如閃存端口 304、305和306。每個(gè)閃存端口與一個(gè)閃存組通信(例如,閃存端口 0 304 與閃存組0 301通信)。與閃存組相同,在當(dāng)前的優(yōu)選實(shí)施例中,SSD控制器106可以具有 最少八個(gè)至最多十二個(gè)閃存端口,并且所示的實(shí)施例包含八個(gè),其中示出了三個(gè)。如以下所 述,每個(gè)閃存端口獨(dú)立地操作,由此支持閃存組中的并行操作。每個(gè)閃存端口包括閃存HEMi和級(jí)緩沖器(Stage Buffer)(例如,閃存端口 0 304 包括閃存HEMi 0 307和閃存級(jí)緩沖器0 308)?!癏EMi ”代表硬件執(zhí)行機(jī)器。HEMi是作為專(zhuān) 用的、特定目的的微處理器操作的邏輯塊。下文將更詳細(xì)地描述HEMi的設(shè)計(jì)和功能。每個(gè) 閃存HEMi控制針對(duì)單個(gè)閃存組的傳輸操作(例如,閃存HEMi 0 307控制閃存組0 301,閃 存HEMi 1 309控制閃存組1 302等)。閃存級(jí)緩沖器(例如,閃存級(jí)緩沖器0 308)被用來(lái)緩沖數(shù)據(jù)路徑DRAM107和閃存 組之間的數(shù)據(jù)傳輸。在當(dāng)前的優(yōu)選實(shí)施例中,每個(gè)閃存級(jí)緩沖器是可以同時(shí)處理一次讀和 一次寫(xiě)的雙端口 SRAM,并且都能夠保存表示四個(gè)閃存頁(yè)面的16K字節(jié)數(shù)據(jù)。如下面所解釋?zhuān)?它構(gòu)成數(shù)據(jù)的“超級(jí)頁(yè)面”。如下面所描述,在當(dāng)前的優(yōu)選實(shí)施例中,來(lái)自每個(gè)閃存組的數(shù)據(jù)接口能夠一次傳送32位(一個(gè)雙字),然而,數(shù)據(jù)路徑DRAM 107能夠一次發(fā)送或接收128位的數(shù)據(jù)(如上 所述,在當(dāng)前的實(shí)施例中,數(shù)據(jù)路徑DRAM以64位組塊為單位傳送和接收數(shù)據(jù),但在每時(shí)鐘 進(jìn)行該操作兩次,由此提供128位的有效的數(shù)據(jù)速率)。閃存級(jí)緩沖器緩沖閃存組和數(shù)據(jù)路徑DRAM之間的通信,并因此允許傳輸在不需 要DRAM的部分上的等待狀態(tài)的情況下發(fā)生。在當(dāng)前的優(yōu)選實(shí)施例中,在從閃存組向DRAM 傳送的情況中,閃存級(jí)緩沖器以雙字組塊為單位接受數(shù)據(jù)。一旦接收了足夠的數(shù)據(jù)量(優(yōu) 選地,整個(gè)超級(jí)頁(yè)面),閃存級(jí)緩沖器隨后便在使用整個(gè)數(shù)據(jù)路徑DRAM數(shù)據(jù)總線(xiàn)的DMA傳輸 中向數(shù)據(jù)路徑DRAM突發(fā)(burst)傳輸數(shù)據(jù)。由處理向和從DRAM的DMA傳送的DMA邏輯控 制閃存級(jí)緩沖器(見(jiàn)下文圖10的討論)。如圖3所示,主機(jī)101和102與主機(jī)接口 310通信,應(yīng)該理解,主機(jī)接口 310包括 主機(jī)端口 104和105 (未示出)。一般地,主機(jī)發(fā)出命令,提供要向大容量存儲(chǔ)裝置寫(xiě)入的數(shù) 據(jù),并且從大容量存儲(chǔ)裝置請(qǐng)求數(shù)據(jù)。如本領(lǐng)域的普通技術(shù)人員所理解的,主機(jī)與大容量存 儲(chǔ)通信的方式的細(xì)節(jié)是協(xié)議相關(guān)的。然而(且沒(méi)有限制),典型地,主機(jī)使用包括命令和/ 或數(shù)據(jù)的“幀”與大容量存儲(chǔ)裝置通信。典型地,命令被包含在命令描述符塊(“CDB”)中, 本領(lǐng)域的普通技術(shù)人員很熟悉CDB。主機(jī)接口 310被設(shè)計(jì)來(lái)以對(duì)主機(jī)透明的方式響應(yīng)⑶B,這意味著從主機(jī)101的角 度,主機(jī)接口 310呈現(xiàn)為構(gòu)成對(duì)傳統(tǒng)大容量存儲(chǔ)設(shè)備的接口。控制流如下進(jìn)行(下文更詳細(xì)地解釋所提及的邏輯塊和元數(shù)據(jù)結(jié)構(gòu)中的每個(gè)) 在接收到請(qǐng)求讀或?qū)懙蘑荁時(shí),主機(jī)接口 310產(chǎn)生用來(lái)處理操作的⑶Binfο (例如,⑶Binfo 201)。該CDBinfo接著被傳遞給命令解析器塊(Command Parser Block) 311。在接收到⑶Binfo時(shí),命令解析器塊311執(zhí)行一致性(coherency)與其它類(lèi)型 的檢查(將在下文描述),然后將⑶Binfo傳遞給命令分布?jí)K(Command Distribution Block)312。命令分布?jí)K312評(píng)估CDBinfo,并創(chuàng)建IOP (例如,IOP 202),來(lái)執(zhí)行所請(qǐng)求的傳輸。 命令分布?jí)K312接著產(chǎn)生一個(gè)或多個(gè)傳輸請(qǐng)求(例如,傳輸請(qǐng)求203-209),每個(gè)傳輸請(qǐng)求用 來(lái)執(zhí)行被IOP請(qǐng)求的傳輸?shù)牟糠?。?duì)于每個(gè)傳輸請(qǐng)求,命令分布?jí)K312接著確定哪個(gè)閃存 組包括要被讀取的數(shù)據(jù),或者要寫(xiě)入的地址位置。命令分布?jí)K312接著將傳輸請(qǐng)求傳遞給對(duì)應(yīng)于包含相關(guān)閃存地址的閃存組的閃 存端口,例如閃存端口 0 304、閃存端口 1 305以及閃存端口 7 306。當(dāng)閃存端口從命令分布?jí)K312接收到傳輸請(qǐng)求時(shí),用于該閃存端口的閃存HEMi將 傳輸請(qǐng)求分解為頁(yè)面請(qǐng)求(例如頁(yè)面請(qǐng)求210、211和212),并且使用頁(yè)面請(qǐng)求來(lái)控制相關(guān) 聯(lián)的閃存組中的實(shí)際的讀和寫(xiě)操作,其中,每個(gè)頁(yè)面請(qǐng)求最多訪(fǎng)問(wèn)超級(jí)頁(yè)面的數(shù)據(jù)。因此,圖3中用于閃存組0的讀或?qū)懖僮鞯牡目刂屏魅缦逻M(jìn)行。主機(jī)101 —主機(jī) 接口 310 —命令解析器塊311 —命令分布?jí)K312 —閃存HEMi 0 307 —閃存組0 301。數(shù)據(jù)流不同地進(jìn)行。在讀的情況下,從閃存組向包含在所連接的閃存端口中的閃 存級(jí)緩沖器返回?cái)?shù)據(jù)。例如,閃存級(jí)緩沖器0 308連接到閃存組0 301,閃存級(jí)緩沖器1 314 連接到閃存組1 302,以及閃存級(jí)緩沖器7 315連接到閃存組7 303。通過(guò)閃存級(jí)緩沖器,從閃存組獲得的數(shù)據(jù)被通過(guò)總線(xiàn)316寫(xiě)入數(shù)據(jù)路徑DRAM 107。從數(shù)據(jù)路徑DRAM 107,數(shù)據(jù)經(jīng)過(guò)主機(jī)接口 310到達(dá)主機(jī)101。寫(xiě)操作在相反的方向上進(jìn)行主機(jī)101 —主機(jī)接口 310 —數(shù)據(jù)路徑DRAM 107 —閃存級(jí)緩沖器0 308 —閃存組0 301。通過(guò)圖3中連接各種元件的線(xiàn)圖示控制流和數(shù)據(jù)流沿著不同的路徑的事實(shí)。因 此,將閃存HEMi與閃存組連接的箭頭象征了這些元件之間的控制流,而將閃存組與級(jí)緩沖 器連接的箭頭指示了數(shù)據(jù)流。圖3還示出了 RAM控制器317以及共享RAM塊318,下文將更詳細(xì)地描述它們中的 每一個(gè)。一般地,共享RAM塊318包括被HEMi使用的存儲(chǔ)器,RAM控制器317包含控制數(shù) 據(jù)路徑DRAM 107和共享RAM塊318的邏輯,并對(duì)這兩個(gè)資源任意訪(fǎng)問(wèn)。D.讀和寫(xiě)概述圖4圖示了用于由SSD控制器106處理的讀操作的高級(jí)別數(shù)據(jù)流。在步驟401中,主機(jī)(例如,主機(jī)101)發(fā)出讀命令,包括數(shù)據(jù)的LBA。在步驟402中,SSD控制器106在閃存模塊108中識(shí)別所請(qǐng)求的LBA的位置,并向 閃存模塊發(fā)出一個(gè)或多個(gè)讀命令。在步驟403中,閃存模塊108執(zhí)行讀操作,并將數(shù)據(jù)返回給SSD控制器106。在步驟404中,所返回的數(shù)據(jù)通過(guò)SSD控制器106,并被存儲(chǔ)在數(shù)據(jù)路徑DRAM 107中。在步驟405中,進(jìn)行檢查來(lái)確定是否已獲得主機(jī)101所請(qǐng)求的所有數(shù)據(jù)。如果沒(méi) 有(步驟405的“否”結(jié)果),則控制返回到步驟403,以便可以從閃存模塊獲得額外的數(shù)據(jù), 并將其存儲(chǔ)在數(shù)據(jù)路徑DRAM中。一旦已經(jīng)從閃存模塊獲得主機(jī)所請(qǐng)求的所有數(shù)據(jù),并且這些數(shù)據(jù)都已經(jīng)被存儲(chǔ)在 數(shù)據(jù)路徑DRAM中(步驟405的“是”結(jié)果),則在步驟406中,數(shù)據(jù)被從數(shù)據(jù)路徑DRAM 107 讀出到SSD控制器106中。在步驟407中,從SSD控制器106向主機(jī)101傳送數(shù)據(jù),由主機(jī)101請(qǐng)求的讀操作結(jié)束。應(yīng)該理解,圖4使用高級(jí)別概念性的步驟描述了讀操作,下文將解釋它的細(xì)節(jié)。圖5使用類(lèi)似的高級(jí)別概念性的步驟來(lái)圖示寫(xiě)操作,其中,主機(jī)101尋求在存儲(chǔ)器 中存儲(chǔ)數(shù)據(jù)。在步驟501中,主機(jī)101發(fā)出帶有LBA的寫(xiě)命令,并且向SSD控制器106提供數(shù)據(jù)。在步驟502中,SSD控制器106在數(shù)據(jù)路徑DRAM 107中存儲(chǔ)要被寫(xiě)入的數(shù)據(jù)。在步驟503中,SSD控制器106在閃存模塊108中識(shí)別LBA的位置。在步驟504中,SSD控制器106向閃存模塊108發(fā)出足夠讀取包含LBA的超級(jí)頁(yè) 面的讀命令。該讀命令不將數(shù)據(jù)存儲(chǔ)到DRAM中,因此從圖4的步驟403跳過(guò)步驟404向步 驟405進(jìn)行,并且在這兩個(gè)步驟之間循環(huán)直到接收到所有數(shù)據(jù)。在步驟505中,來(lái)自數(shù)據(jù)路徑DRAM 107的數(shù)據(jù)被傳輸?shù)娇刂破?,并與從閃存模塊 讀取的數(shù)據(jù)集成。由于該集成,控制器現(xiàn)在保持一超級(jí)頁(yè)面,在該超級(jí)頁(yè)面中,新數(shù)據(jù)覆寫(xiě) 了在所述LBA處存儲(chǔ)的舊數(shù)據(jù),但該超級(jí)頁(yè)面中的所有其它LBA不變。在步驟506中,SSD控制器106向閃存模塊108發(fā)出寫(xiě)命令。在步驟507中,閃存模塊108執(zhí)行寫(xiě)操作。在步驟508中,進(jìn)行檢查,來(lái)確定是否已將所有信息寫(xiě)入閃存模塊108中。
如果需要額外的寫(xiě)操作(來(lái)自步驟508的“否”結(jié)果),則控制返回到步驟507。如果所有數(shù)據(jù)都已被寫(xiě)入閃存模塊108 (來(lái)自步驟508的“是”),則在步驟509中, SSD控制器106為所寫(xiě)入的LBA更新位置信息。如下文將詳細(xì)解釋的,由于閃存的性質(zhì), 寫(xiě)操作并不物理地覆寫(xiě)現(xiàn)有的超級(jí)頁(yè)面,而是將更新的超級(jí)頁(yè)面寫(xiě)入閃存模塊108的新地 址,從而需要對(duì)與存儲(chǔ)在該超級(jí)頁(yè)面中的LBA關(guān)聯(lián)的地址轉(zhuǎn)換信息的更新。然后,寫(xiě)操作完成。II.閃存結(jié)構(gòu)A.物理存儲(chǔ)器結(jié)構(gòu)圖6圖示了一個(gè)閃存組(例如,閃存組0 301)的組織、以及其與所關(guān)聯(lián)的閃存端 口(例如,閃存端口 0 304)的關(guān)系。應(yīng)該理解,該組織的細(xì)節(jié)在不同的實(shí)施例中可以不同。閃存組301包括八個(gè)閃存芯片,指定為601-608。每個(gè)閃存芯片包括兩個(gè)電路小 片;例如,閃存芯片601包含電路小片609和610。在一個(gè)實(shí)施例中,每個(gè)電路小片(例如,電路小片609)具有約1. IlG字節(jié)的原 始容量(raw capacity),包括8224個(gè)塊,每個(gè)塊包括64個(gè)頁(yè)面,每個(gè)頁(yè)面包括2212個(gè)字 節(jié)。當(dāng)去除了系統(tǒng)和備用(spare)存儲(chǔ)空間后,留給用戶(hù)約每個(gè)電路小片IG字節(jié)的數(shù)據(jù)容 量,或每個(gè)NAND閃存芯片2G字節(jié)的容量。在包括十二個(gè)閃存組以及每個(gè)閃存組八個(gè)子組 (bank)的系統(tǒng)中,提供了約384G字節(jié)的原始用戶(hù)存儲(chǔ)空間,但對(duì)于用戶(hù)數(shù)據(jù)總共可用的空 間約為300G字節(jié),這是因?yàn)槟承┛臻g被用于備用和系統(tǒng)功能,它們不落入用戶(hù)可用的LBA 地址空間內(nèi)。系統(tǒng)空間存儲(chǔ)各種類(lèi)型的系統(tǒng)元數(shù)據(jù),包括SCSI模式頁(yè)面,系統(tǒng)空間還含有 空閑空間。各自包含兩個(gè)IG字節(jié)的電路小片的2G字節(jié)的NAND閃存芯片的使用,是可用閃存 技術(shù)的現(xiàn)有技術(shù)狀態(tài)的反映。所描述的系統(tǒng)以其它閃存大小和配置可以同樣好地操作,包 括在一個(gè)閃存芯片中包含四個(gè)電路小片,或每芯片一個(gè)電路小片。因?yàn)橄乱淮腘AND閃存 芯片將每芯片合并四個(gè)電路小片,所以,很可能閃存組301將使用這種芯片。這里所描述的 原理可以簡(jiǎn)單地應(yīng)用于四電路小片的設(shè)計(jì)。例如,如果四電路小片芯片中的每個(gè)電路小片 具有自己的CE和RB引腳,但所有四個(gè)電路小片共享公共地址/命令/數(shù)據(jù)引腳,則每個(gè)電 路小片可以被合并到單獨(dú)的子組中。另一方面,如果每個(gè)四電路小片芯片具有兩個(gè)CE和RB 引腳,其中兩個(gè)電路小片共享每個(gè)引腳,則從SSD控制器106的角度,共享公共CS和RB引 腳的兩個(gè)電路小片將表現(xiàn)得與上述的單個(gè)電路小片(例如,電路小片609)不可分辨。當(dāng)前的優(yōu)選實(shí)施例采用IG字節(jié)的NAND閃存芯片也同樣好地操作,每個(gè)所述NAND 閃存芯片包含2個(gè)半G字節(jié)的電路小片。在該配置中,每個(gè)電路小片僅包含4112個(gè)塊。除 容量外,該配置與上述配置相同地操作。注意,閃存芯片自身是傳統(tǒng)設(shè)計(jì),并且,圖6中的圖示并不意在傳達(dá)這些芯片的內(nèi) 部設(shè)計(jì)的細(xì)節(jié),而是考慮對(duì)芯片的組織以及電路小片與系統(tǒng)其余部分接口方式的理解。閃存組301被分為四個(gè)子組(611、612、613以及614),每個(gè)子組包括四個(gè)電路小 片。因此,子組611包括來(lái)自閃存601的電路小片609、來(lái)自閃存602的電路小片615、來(lái)自 閃存603的電路小片616以及來(lái)自閃存604的電路小片617。子組612包括來(lái)自閃存601 的電路小片610、來(lái)自閃存602的電路小片618、來(lái)自閃存603的電路小片619以及來(lái)自閃 存604的電路小片620。子組613和614在其它閃存和電路小片中被類(lèi)似地組織。
14
圖6示出了四個(gè)子組。在當(dāng)前的優(yōu)選實(shí)施例中,取決于用戶(hù)所期望的容量,每個(gè)閃 存組包括四至八個(gè)子組。圖7提供關(guān)于閃存模塊108、SSD控制器106與數(shù)據(jù)路徑DRAM 107之間的互聯(lián)的 額外細(xì)節(jié)。雖然圖7示出了閃存組0 301與閃存端口 0 304,但相同的互聯(lián)存在于所有閃存 組與它們伴隨的閃存端口和數(shù)據(jù)路徑DRAM 107之間。如圖7所示,閃存組0 301通過(guò)兩個(gè)總線(xiàn)(閃存總線(xiàn)701與CS/RB總線(xiàn)702)連接 到閃存端口 0 304。CS/RB總線(xiàn)702包括將閃存HEMi 307連接到每個(gè)閃存組301的子組的單獨(dú)的線(xiàn)。 在所示的具有四個(gè)子組的實(shí)施例中,CS/RB總線(xiàn)702包括四條線(xiàn)線(xiàn)703,將閃存HEMi 307 與子組614連接;線(xiàn)704,將閃存HEMi 307與子組613連接;線(xiàn)705,將閃存HEMi 307與子 組612連接;以及線(xiàn)706,將閃存HEMi 307與子組611連接。在包括更多數(shù)量的子組(例 如,八個(gè))的實(shí)施例中,CS/RB總線(xiàn)702將包括相應(yīng)的更多數(shù)量的信號(hào)。應(yīng)該理解,來(lái)自閃 存HEMi307的信號(hào)通過(guò)SSD控制器106上的引腳傳播。圖7不意在示出傳送路徑的物理細(xì) 節(jié),而是圖示數(shù)據(jù)和控制信號(hào)流。CS/RB總線(xiàn)702的線(xiàn)攜帶從閃存組301向閃存HEMi 307的準(zhǔn)備好-忙碌(“RB”) 信號(hào)、以及從閃存HEMi 307向閃存組301的芯片選擇(“CS”)信號(hào)。在任何給定時(shí)間,CS/RB總線(xiàn)702上攜帶的CS信號(hào)中的僅一個(gè)是有效的。連接到 當(dāng)前有效的CS信號(hào)上的子組連接到閃存總線(xiàn)701,并且所有其它子組從該總線(xiàn)斷開(kāi)(再次, 這是邏輯或者非物理概念;根據(jù)該實(shí)施,“連接的”子組可以與閃存總線(xiàn)通信,而所有其它子 組忽略閃存總線(xiàn),即使閃存總線(xiàn)和所有子組之間存在物理連接也是如此)。在閃存總線(xiàn)701上將來(lái)自閃存HEMi 307的地址和控制信息傳送到每個(gè)子組。其 包括控制信號(hào)708 (下文結(jié)合圖8描述)與地址/命令信號(hào)709 (下文結(jié)合圖9描述)。類(lèi) 似地,總線(xiàn)707將閃存級(jí)緩沖器308連接到閃存總線(xiàn)701。在總線(xiàn)707上,從級(jí)緩沖器308 沿著閃存總線(xiàn)701向子組傳送數(shù)據(jù)。在相反方向從子組向級(jí)緩沖器308傳送數(shù)據(jù)。如圖7進(jìn)一步所示,數(shù)據(jù)路徑DRAM 107連接到級(jí)緩沖器308。因此,數(shù)據(jù)從數(shù)據(jù)路 徑DRAM 107向級(jí)緩沖器308傳遞,然后被沿著總線(xiàn)701向具有當(dāng)前有效的CS信號(hào)的子組 發(fā)送。來(lái)自閃存組301的數(shù)據(jù)被沿著相反路徑傳送到數(shù)據(jù)路徑DRAM 107。圖8示出單個(gè)閃存芯片(例如,包括電路小片609和610的閃存芯片601)的引腳 輸出部分。在當(dāng)前的優(yōu)選實(shí)施例中,閃存芯片使用標(biāo)準(zhǔn)的NAND閃存接口,典型地在相關(guān)部 分(in relevant part)包括8位的地址/數(shù)據(jù)(801),4位的控制(地址鎖存使能(“ALE”) 信號(hào)802、命令鎖存使能(“CLE”)信號(hào)803、寫(xiě)使能(“TO”)信號(hào)804以及讀使能(“RE”) 信號(hào)805,它們被統(tǒng)稱(chēng)為控制信號(hào)708),每電路小片一個(gè)芯片使能引腳(其連接到來(lái)自控制 器的CS信號(hào),并且有時(shí)將可以互換地使用標(biāo)示“芯片使能”和“芯片選擇”),以及每電路小 片一個(gè)準(zhǔn)備好/忙碌線(xiàn)。如所示的,A/D信號(hào)801與ALE、CLE、WE和RE信號(hào)全連接到閃存 總線(xiàn)701,然而它們不是僅有的連接到該總線(xiàn)的信號(hào)。如圖8所示,ALE、CLE、TO、RE與兩個(gè)芯片使能信號(hào)是向閃存601的輸入。A/D總 線(xiàn)801由八個(gè)雙向信號(hào)構(gòu)成。所述兩個(gè)RB信號(hào)是輸出。除了兩個(gè)CE和兩個(gè)RB信號(hào)之外,圖8中所示的所有信號(hào)都被所述兩個(gè)電路小片 共享。因此,電路小片609與610共享相同的八個(gè)A/D弓丨腳801。從圖6的討論應(yīng)該理解,這些電路小片每個(gè)都在單獨(dú)的子組中。因此原因,引腳的共享不產(chǎn)生沖突,因?yàn)檫@些信號(hào)絕 不可能同時(shí)對(duì)于多個(gè)子組有效。作為閃存所典型的,每個(gè)電路小片具有所關(guān)聯(lián)的閃存頁(yè)面緩沖器,該緩沖器可以 保持正被寫(xiě)入相應(yīng)電路小片或從相應(yīng)電路小片讀出的一頁(yè)面數(shù)據(jù)。圖8將它們示出為頁(yè)面 緩沖器806和807。圖9圖示了閃存HEMi (例如,閃存HEMi 307)專(zhuān)用于閃存端口(例如,閃存端口 0 304)的信號(hào)輸出的部分。應(yīng)該理解,閃存HEMi 307還具有額外的專(zhuān)用于其它功能的輸入 和輸出。如上所解釋?zhuān)ㄟ^(guò)SSD控制器106的引腳,來(lái)路由將閃存HEMi 307與閃存組連接 的信號(hào)。這些引腳與處理該路由的邏輯都未被示出。如其它示出信號(hào)路由的圖中確切的那 樣,圖9意在作為概念性闡述,而不意在示出實(shí)際物理布局的細(xì)節(jié)。閃存HEMi 307的接口的該部分由專(zhuān)用于以下功能的信號(hào)構(gòu)成1.控制信號(hào)708,其由四條控制線(xiàn)構(gòu)成ALE信號(hào)802、CLE信號(hào)803、TO信號(hào)804 以及RE信號(hào)805。這些信號(hào)是從閃存HEMi 307的輸出。2. CS/RB總線(xiàn)702,其由CS/RB線(xiàn)703-706構(gòu)成。如以上所解釋?zhuān)總€(gè)閃存HEMi可 以每連接的CS/RB線(xiàn)控制一個(gè)閃存子組。因此,在圖9所示的實(shí)施例中,閃存HEMi 307控 制四個(gè)閃存子組(例如,圖6中所示的子組611、612、613、614)。在每閃存組包括八個(gè)子組 的系統(tǒng)中,每個(gè)閃存HEMi將具有八個(gè)專(zhuān)用于該目的的信號(hào)(注意,支持額外四個(gè)信號(hào)所必 需的邏輯即使在這些信號(hào)實(shí)際上不被使用的情況下也存在)。CS/RB總線(xiàn)702從HEMi 307向閃存子組傳送CS信號(hào),并且從閃存子組向HEMi 307 傳送RB信號(hào)。因?yàn)樾盘?hào)以這種方式被復(fù)用,所以,每個(gè)這樣的線(xiàn)一次僅可以傳送一種類(lèi)型 的信號(hào)。CS/RB信號(hào)是“一個(gè)熱(one hot) ”信號(hào),S卩,在任何給定時(shí)間點(diǎn),這些信號(hào)中的一 個(gè)且僅有一個(gè)可以是有效的。為CS和RB目的兩者使用相同的信號(hào)在SSD控制器106上節(jié)約了引腳,并因此降 低了 SSD控制器的成本與復(fù)雜度。然而,這限制了可以由閃存HEMi307控制的子組的數(shù)量, 這是因?yàn)槊總€(gè)子組需要一個(gè)RB信號(hào)以及因此的一個(gè)引腳。因?yàn)樵诋?dāng)前實(shí)施例中,SSD控制 器106對(duì)于每個(gè)閃存端口包括八個(gè)CS/RB引腳,所以在該實(shí)施例中,每個(gè)閃存HEMi最多可 以控制八個(gè)子組。3.構(gòu)成地址/命令信號(hào)709的31個(gè)信號(hào)。連接到閃存總線(xiàn)701的該總線(xiàn)以與閃 存芯片相同的40MHz的速度運(yùn)行,并且攜帶從閃存HEMi 0 307向閃存組0 301的地址和命 令。地址/命令信號(hào)709可以被認(rèn)為作為四個(gè)單獨(dú)的八位總線(xiàn)(包括線(xiàn)0-7、8-15、16-23 以及24-31),所述八位總線(xiàn)中的每個(gè)向閃存子組中的單獨(dú)電路小片路由八位有效載荷。因 此,來(lái)自地址/命令總線(xiàn)709的八條線(xiàn)連接到A/D信號(hào)801,如圖8所示。根據(jù)前文應(yīng)該清楚,SSD控制器106的44個(gè)引腳被專(zhuān)用于每個(gè)閃存端口(記住, 每個(gè)閃存端口可以支持最多八個(gè)子組,并因此需要八個(gè)CS/RB引腳,雖然圖9中僅示出了四 個(gè)這樣的信號(hào))。因?yàn)镾SD控制器106可以支持最多12個(gè)閃存端口,所以SSD控制器106 的528個(gè)引腳被專(zhuān)用于閃存接口,然而如果使用少于12個(gè)的閃存端口,則這些引腳中的某 些可以是無(wú)連接的。注意,如果需要單獨(dú)的CS和RB引腳,則對(duì)于閃存接口還將需要額外的 96個(gè)引腳(每個(gè)子組1個(gè)引腳X 8個(gè)子組X 12個(gè)閃存端口 )。因此,將CS和RB信號(hào)組合 到單個(gè)引腳上在所需引腳的數(shù)目上提供了顯著的節(jié)約。
雖然圖9所示的實(shí)施例是當(dāng)前優(yōu)選的,但各種其它實(shí)施例也是可能的。在不同的 實(shí)施例中,當(dāng)前專(zhuān)用于特定閃存組的八個(gè)CS/RB引腳連接到位于閃存組中的復(fù)用器或其它 類(lèi)似邏輯器件。該復(fù)用器隨之具有一組連接到子組中的所有閃存電路小片的CE輸入的輸 出信號(hào),其中每個(gè)信號(hào)引起對(duì)特定子組的CE輸入的選擇。因?yàn)樵摪藗€(gè)SSD控制器CS/RB引 腳在理論上能夠傳送256個(gè)單獨(dú)狀態(tài),所以,可以通過(guò)設(shè)計(jì)該復(fù)用器或其它邏輯、以便為所 述256個(gè)可能的輸入狀態(tài)中的每個(gè)產(chǎn)生沿著不同輸出線(xiàn)的信號(hào),使用這些引腳在256個(gè)單 獨(dú)子組之中選擇。然而,因?yàn)樵诋?dāng)前實(shí)施例中,所有子組共享同一 A/D總線(xiàn),所以加入這么 大數(shù)量的子組將沒(méi)有或幾乎沒(méi)有益處。替代地,在更期望的實(shí)施例中,這種復(fù)用器或其它類(lèi) 似邏輯可以被用于加入中等數(shù)量的子組(例如八個(gè)),或被用于降低每子組的CS/RB引腳的 數(shù)量(例如,從八個(gè)到四個(gè))。注意,在該替代實(shí)施例中,因?yàn)镃S/RB引腳的數(shù)目比子組的數(shù)目少,所以CS/RB引 腳不可以再為每個(gè)子組處理RB信號(hào)。因此,在該實(shí)施例中,SSD控制器CS/RB引腳不再處 理RB輸入。然而,因?yàn)闃?biāo)準(zhǔn)閃存芯片支持RB狀態(tài)的僅軟件狀態(tài)檢查,所以每個(gè)閃存HEMi 可以使用A/D總線(xiàn)檢查子組的RB狀態(tài)。因此,該替代實(shí)施例允許SSD控制器106將更少的引腳專(zhuān)用于閃存接口或利用相 同數(shù)量的引腳支持更大數(shù)量的子組,然而,代價(jià)為某個(gè)附加的邏輯復(fù)雜度。圖10圖示了單個(gè)子組中的電路小片(例如,子組611中的電路小片609、615、616 和617)連接在一起、并連接到所關(guān)聯(lián)的閃存端口(例如,閃存端口 0 304,包含閃存HEMi 307和級(jí)緩沖器308)的方式。如圖6所示,電路小片609是閃存芯片601中的兩個(gè)電路小片之一,電路小片615 是閃存芯片602中的兩個(gè)電路小片之一,電路小片616是閃存芯片603中的兩個(gè)電路小片 之一,以及電路小片617是閃存芯片604中的兩個(gè)電路小片之一。為了圖示的簡(jiǎn)單,圖10 僅示出了每個(gè)閃存芯片中的兩個(gè)電路小片之一(如上所述,存儲(chǔ)模塊108可以很好地合并 具有四個(gè)(或更多)電路小片的閃存芯片,而這里所公開(kāi)的設(shè)計(jì)的原理將保持相同)。如所示,線(xiàn)706構(gòu)成閃存HEMi 307與子組611之間的CS/RB信號(hào)接口。該線(xiàn)攜帶 從閃存HEMi 307向子組611的CS信號(hào),以及從子組611向閃存HEMi 307的RB信號(hào)。圖 10通過(guò)顯示在閃存HEMi 307向線(xiàn)706上的點(diǎn)1001之間的雙向上前進(jìn)的箭頭圖示了這一 點(diǎn)。從點(diǎn)1001,信號(hào)路徑分路,并且攜帶CS信號(hào)作為向電路小片的輸入(由指向每個(gè)電路 小片的、帶有標(biāo)記“Cs”的箭頭示出),以及攜帶RB信號(hào)作為從每個(gè)電路小片的輸出(由從 每個(gè)電路小片指出的、帶有標(biāo)記“RB”的箭頭示出)。應(yīng)該理解,點(diǎn)1001本質(zhì)上是象征性的, 并且,不論是它還是該圖的其余部分都不意在作為物理實(shí)施的直接圖示。如所示,來(lái)自子組中的每個(gè)電路小片的RB輸出信號(hào)一起被進(jìn)行邏輯“或”(或其它 類(lèi)似地組合),從而,如果子組中的四個(gè)電路小片中的任何一個(gè)輸出“繁忙”,則從子組611 沿著線(xiàn)706向HEMi 307發(fā)送繁忙信號(hào)。線(xiàn)706還攜帶從閃存HEMi 307向子組中的每個(gè)電 路小片的CS信號(hào)。當(dāng)專(zhuān)用于子組的CS信號(hào)被通過(guò)閃存HEMi 307設(shè)置時(shí),該信號(hào)被同時(shí)發(fā) 送到子組中的每個(gè)電路小片的CE引腳,由此,同時(shí)選擇每個(gè)這樣的電路小片。圖10還示出地址/命令總線(xiàn)709,其表示閃存芯片601-604的A/D引腳與HEMi 307的地址/命令信號(hào)之間的連接。如所示,32位的總線(xiàn)709攜帶從閃存HEMi 307向總線(xiàn) 切換器1002的信號(hào)??偩€(xiàn)切換器1002表示如所述地組合、分路和路由信號(hào)的邏輯,并且不一定構(gòu)成單個(gè)物理切換器??偩€(xiàn)切換器1002將來(lái)自總線(xiàn)709的信號(hào)分路為子總線(xiàn)。使用8位的總線(xiàn)801將 信號(hào)0-7傳送到閃存芯片601的A/D引腳(還如圖8所示),使用8位的總線(xiàn)1003將信號(hào) 8-15傳送到閃存芯片602的A/D引腳,使用8位的總線(xiàn)1004將信號(hào)16-23傳送到閃存芯 片603的A/D引腳,以及使用8位的總線(xiàn)1005將信號(hào)24-31傳送到閃存芯片604的A/D引 腳。注意,A/D引腳被閃存芯片中的所述兩個(gè)電路小片共享,從而將可以由合適的電路小片 以對(duì)閃存芯片的內(nèi)部設(shè)計(jì)特定的方式接收傳送到閃存芯片引腳的信號(hào)。圖10還示出了閃存HEMi 307的控制信號(hào)708與每個(gè)電路小片之間的連接。如上 所示,這些控制信號(hào)包括ALE、CLE、RE與TO,并且它們被從閃存HEMi 307傳送到閃存電路 小片??刂菩盘?hào)708被從閃存HEMi 307發(fā)送到總線(xiàn)切換器1002。從總線(xiàn)切換器1002,控 制信號(hào)(在每個(gè)情況中都被標(biāo)記為708)的相同集合被傳送到每個(gè)閃存芯片。與A/D引腳 一樣,ALE、CLE、RE與TO引腳被每個(gè)閃存芯片中的兩個(gè)電路小片共享。圖10還示出閃存緩沖器308,其通過(guò)32位的總線(xiàn)707連接到總線(xiàn)切換器1002。與 總線(xiàn)709不同,總線(xiàn)707是雙向的,并因此在雙向上傳送數(shù)據(jù)。在級(jí)緩沖器308與電路小片之間的傳輸在級(jí)緩沖器DMA控制器1006的控制下發(fā)生。注意,閃存級(jí)緩沖器308還連接到閃存芯片的RE和TO輸入。這些連接被用于控 制DMA操作,為了清楚,圖中未示出這些連接??偩€(xiàn)切換器1002將來(lái)自總線(xiàn)707的信號(hào)分路為八位信號(hào)的四個(gè)集合,并且使用8 位總線(xiàn)801、1003、1004和1005將這些信號(hào)傳送到電路小片609,615,616和617。類(lèi)似地, 總線(xiàn)切換器1002在8為總線(xiàn)801、1003、1004和1005上從電路小片609,615,616和617接 收數(shù)據(jù),然后在總線(xiàn)707上將整個(gè)32位值傳送到級(jí)緩沖器308。因此,切換器1002在相同的8位總線(xiàn)上復(fù)用來(lái)自閃存HEMi 307的信號(hào),以及去向 和來(lái)自級(jí)緩沖器308的信號(hào)。切換器1002根據(jù)讀或?qū)懼芷诘奶囟A段,利用來(lái)自在所述周 期的一個(gè)階段中連接到電路小片的閃存HEMi 307的地址信息,確定哪個(gè)集合的信號(hào)通過(guò) 到8位總線(xiàn),然而,去向或來(lái)自級(jí)緩沖器308的數(shù)據(jù)在所述周期的不同階段連接到該8位總 線(xiàn)(再次,如上所述,切換器1002本質(zhì)上是概念性的,并且不一定構(gòu)成單個(gè)專(zhuān)用切換器。此 外,也可以在其它邏輯塊中發(fā)現(xiàn)所描述的與切換器1002聯(lián)系的功能的方面)。圖10僅示出單個(gè)閃存子組611。在實(shí)際的實(shí)施例中,總線(xiàn)切換器1002可以與閃 存組中的每個(gè)閃存子組接口,并且每個(gè)接口都可以復(fù)制除信號(hào)706外的所有從總線(xiàn)切換器 1002向子組611輸出的信號(hào)(如圖10中所示),如上文所解釋?zhuān)盘?hào)706專(zhuān)用于子組611。 還如上文所解釋?zhuān)W存切換器1002將總線(xiàn)707、708和709連接到每個(gè)閃存子組,但僅響應(yīng) 的子組是與來(lái)自閃存HEMi 307的當(dāng)前有效CS信號(hào)關(guān)聯(lián)的子組。注意,閃存總線(xiàn)701包括總線(xiàn)708、801、1003、1004和1005。圖11更詳細(xì)地示出了與線(xiàn)706相關(guān)的CS和RB邏輯。如所示,SSD控制器CS/RB 引腳1101連接到與閃存電路小片609和615關(guān)聯(lián)的RB和CE引腳上。如上聯(lián)系圖6所述, 電路小片609和615是子組611的四個(gè)電路小片中的兩個(gè)。為了圖示的目的,未示出子組 中的其它兩個(gè)電路小片,但其以與電路小片609和615相同的方式連接。SSD控制器106將CS/RB引腳1101驅(qū)動(dòng)到高來(lái)選擇子組611。該信號(hào)被反轉(zhuǎn)器
181102反轉(zhuǎn),并被子組中的電路小片的CE引腳接收為低。這些引腳是以低為有效的。當(dāng)SSD控制器106將相同閃存組中的另一 CS引腳驅(qū)動(dòng)為高(由此選擇該閃存組 中的另一子組)時(shí),CS/RB引腳1101被SSD控制器106驅(qū)動(dòng)為低。當(dāng)閃存HEMi 307想要讀子組611的準(zhǔn)備好-繁忙狀態(tài)時(shí),SSD控制器106浮接CS/ RB引腳1101。當(dāng)CS/RB引腳被SSD控制器浮接時(shí),如果閃存電路小片RB引腳的任何一個(gè) 正在驅(qū)動(dòng)指示該子組繁忙的低信號(hào),則CS/RB引腳將接收低輸入,這是因?yàn)槿魏坞娐沸∑?RB引腳上的低輸出將優(yōu)先于上拉1103。另一方面,如果子組在準(zhǔn)備好的狀態(tài)中,則閃存電 路小片允許PB引腳浮接。因?yàn)樯侠?103連接到RB引腳,所以,當(dāng)所有這些引腳都浮接時(shí), 并且當(dāng)CS/RB引腳1101被浮接時(shí),該CS/RB引腳接收到高輸入信號(hào),這指示該子組已準(zhǔn)備 好。因此,該電路以“或”結(jié)構(gòu)將子組的R/B引腳連接在一起,這是因?yàn)?,為?CS/RB引 腳1101接收到準(zhǔn)備好的信號(hào),所有引腳都必須在準(zhǔn)備好的狀態(tài)(浮接),從而該電路有效地 將這些引腳的繁忙狀態(tài)一起進(jìn)行“或”操作。反轉(zhuǎn)器1102的使用允許SSD控制器106驅(qū)動(dòng) CS信號(hào)為高來(lái)選擇子組,即使該子組的CE引腳是以低為有效的。因?yàn)楸仨殞S信號(hào)驅(qū)動(dòng) 為高、以便優(yōu)先于傳入的RB信號(hào),所以,這是必要的。以該方式,向SSD控制器106的RB輸 入可以是以高為有效的,但是,因?yàn)楦逤S輸出將優(yōu)先于由上拉1103生成的高RB輸入,所以 CS/RB引腳1101上的高輸出仍然可以?xún)?yōu)先于其。B.邏輯存儲(chǔ)結(jié)構(gòu)諸如101和102的主機(jī)典型地以邏輯塊地址(或“LBA”)組織存儲(chǔ)器。當(dāng)主機(jī)向 大容量存儲(chǔ)裝置寫(xiě)入數(shù)據(jù)時(shí),雖然主機(jī)通信的細(xì)節(jié)根據(jù)主機(jī)所使用的特定協(xié)議而變化,但 主機(jī)典型地傳送包含寫(xiě)命令和LBA的CDB。當(dāng)主機(jī)隨后希望讀數(shù)據(jù)時(shí),它發(fā)出使用相同LBA 的讀命令。典型地,主機(jī)的存儲(chǔ)結(jié)構(gòu)將數(shù)據(jù)分為數(shù)百萬(wàn)個(gè)LBA,每個(gè)LBA被從LBAO開(kāi)始順序 編號(hào)。如本領(lǐng)域的技術(shù)人員所熟悉的,主機(jī)將經(jīng)常與大量大容量存儲(chǔ)控制器通信,并將主機(jī) 整個(gè)LBA范圍的子集分配給每個(gè)控制器。在當(dāng)前的實(shí)施例中,SSD控制器106響應(yīng)于從LBA 0開(kāi)始、以該控制器可尋址的最高LBA結(jié)束的LBA范圍。將LBA序列映射到更大的主機(jī)LBA 地址空間上是主機(jī)或主機(jī)總線(xiàn)適配器的責(zé)任,并且對(duì)SSD控制器106是透明的。圖12圖示了當(dāng)前優(yōu)選實(shí)施例中、在閃存模塊108中使用的存儲(chǔ)器分級(jí)結(jié)構(gòu)。每個(gè)閃存組由許多子組(例如,子組611)構(gòu)成。每個(gè)子組包括許多塊,標(biāo)記為塊 0-塊η(例如,塊0 1201)。如閃存系統(tǒng)中所普遍的,塊表示能夠以單次操作擦除的閃存段。子組中所存儲(chǔ)的塊的確切數(shù)量與實(shí)施相關(guān)。例如,在提供300G字節(jié)可用用戶(hù)數(shù)據(jù) 的系統(tǒng)中,根據(jù)各種因素,包括缺陷管理與留為空閑空間的存儲(chǔ)量,每個(gè)子組的塊的數(shù)量一 般將在7000-9000的范圍中。如圖12中所示,每個(gè)塊包括64個(gè)超級(jí)頁(yè)面,標(biāo)記為超級(jí)頁(yè)面0-63。如以上所解釋 的,每個(gè)超級(jí)頁(yè)面包括四個(gè)閃存頁(yè)面(例如,超級(jí)頁(yè)面30包括頁(yè)面30 1202、頁(yè)面30 1203、 頁(yè)面30 1204以及頁(yè)面30 1205)。頁(yè)面1202、1203、1204與1205被存儲(chǔ)在相同閃存子組 中的四個(gè)不同閃存電路小片上的相同地址位置。因此,超級(jí)頁(yè)面30橫跨四個(gè)單獨(dú)的電路小 片。如閃存系統(tǒng)中作為標(biāo)準(zhǔn)的,每個(gè)頁(yè)面表示可以從其讀出或?qū)懭氲狡涞拈W存的最小增量。如圖12所示,每個(gè)頁(yè)面存儲(chǔ)十五個(gè)被稱(chēng)為P區(qū)段(PSector)的存儲(chǔ)段,標(biāo)記為P區(qū)段0-14。圖12還示出額外的存儲(chǔ)結(jié)構(gòu)S頁(yè)面(SPage)區(qū)段01206。如所示,S頁(yè)面區(qū)段0 包括四個(gè)P區(qū)段0,每個(gè)頁(yè)面上一個(gè)。S頁(yè)面區(qū)段0 —般對(duì)應(yīng)于經(jīng)典的大容量存儲(chǔ)區(qū)段,但物理上橫跨四個(gè)P區(qū)段,其中 每個(gè)被存儲(chǔ)在相同子組上不同電路小片的相同地址中。當(dāng)前的優(yōu)選實(shí)施例還使用圖12中未示出的額外存儲(chǔ)結(jié)構(gòu)超級(jí)塊(SuperBlock), 其由閃存組中的每個(gè)子組上的相同塊構(gòu)成(例如,塊0 1201是閃存組的超級(jí)塊0的部分)。在所描述的實(shí)施例中,與特定LBA關(guān)聯(lián)的數(shù)據(jù)和元數(shù)據(jù)被存儲(chǔ)在單個(gè)S頁(yè)面區(qū)段 中(例如,S頁(yè)面區(qū)段1206),并且在這里被稱(chēng)為區(qū)段內(nèi)容,由區(qū)段數(shù)據(jù)和區(qū)段元數(shù)據(jù)構(gòu)成。圖13圖示超級(jí)頁(yè)面區(qū)段的組織,例如,S頁(yè)面區(qū)段1206。整個(gè)S頁(yè)面區(qū)段在閃存 中包括556個(gè)字節(jié)。每個(gè)S頁(yè)面區(qū)段被分為四個(gè)P區(qū)段,每個(gè)包括139個(gè)字節(jié),每個(gè)在不同 的閃存電路小片上。在所示的例子中,S頁(yè)面區(qū)段1206的528個(gè)字節(jié)被分配給數(shù)據(jù),如區(qū)段數(shù)據(jù)字段 1301所示。不同的主機(jī)協(xié)議將不同數(shù)量的數(shù)據(jù)與單個(gè)地址關(guān)聯(lián),從而,根據(jù)所使用的協(xié)議, 區(qū)段數(shù)據(jù)字段1301可以小至512字節(jié)。如圖13中所示,在當(dāng)前的優(yōu)選實(shí)施例中,每個(gè)S頁(yè)面區(qū)段還包括8字節(jié)的端到端 (“E2E”)信息(字段1302)和20字節(jié)的ECC信息(字段1303)。這些字段共同組成區(qū)段 元數(shù)據(jù)。通過(guò)SCSI協(xié)議的較新的版本指定E2E信息。該信息可以被啟動(dòng)器用來(lái)追蹤數(shù)據(jù) 和確保由大容量存儲(chǔ)設(shè)備返回的數(shù)據(jù)與所請(qǐng)求的數(shù)據(jù)匹配。ECC信息被用于錯(cuò)誤校正的目 的。E2E字段1302進(jìn)一步被分為參考標(biāo)簽(RefTag)字段1304、應(yīng)用標(biāo)簽(AppTag)字 段1305以及CRC字段1306。參考標(biāo)簽字段1304包括四個(gè)字節(jié)并包含可以被啟動(dòng)器與區(qū)段數(shù)據(jù)關(guān)聯(lián)的地址。 SCSI協(xié)議不需要參考標(biāo)簽支持(并且,參考標(biāo)簽支持不是該協(xié)議較早版本的一部分),因此 啟動(dòng)器可以使用也可以不使用參考標(biāo)簽。如果啟動(dòng)器確實(shí)使用參考標(biāo)簽,則與參考標(biāo)簽字 段1304關(guān)聯(lián)的值被從CDB中取得,該CDB觸發(fā)了區(qū)段內(nèi)容的原始寫(xiě)入。典型地,該值與LBA 相同,然而,啟動(dòng)器可以分配不同的參考標(biāo)簽。啟動(dòng)器可以選擇使為在相同寫(xiě)入中的每個(gè)后 續(xù)區(qū)段的參考標(biāo)簽值遞增,或者為與單個(gè)寫(xiě)入關(guān)聯(lián)的所有區(qū)段分配單個(gè)參考標(biāo)簽值。如果 選擇遞增選項(xiàng),則SSD控制器106基于初始參考標(biāo)簽值與所接收的區(qū)段的數(shù)量來(lái)執(zhí)行該操 作。如果啟動(dòng)器不支持參考標(biāo)簽的使用,則SSD控制器106在參考標(biāo)簽字段1304中填 充LBA地址。不論啟動(dòng)器是否請(qǐng)求參考標(biāo)簽的使用,該字段都被SSD控制器106用于內(nèi)部 錯(cuò)誤檢查的目的。存儲(chǔ)在參考標(biāo)簽字段1304中的值應(yīng)該匹配任何引起后續(xù)的向分配給該S頁(yè)面區(qū) 段的任何LBA讀或?qū)懙蘑荁的參考標(biāo)簽值(如果啟動(dòng)器未分配參考標(biāo)簽,則參考標(biāo)簽值應(yīng) 該匹配基于CDB的LBA)。如果兩個(gè)值不匹配,則其指示某種類(lèi)型的錯(cuò)誤,該錯(cuò)誤可以源自 所接收的參考標(biāo)簽中的錯(cuò)誤、參考標(biāo)簽字段1304中的數(shù)據(jù)破壞、或者由SSD控制器106用 來(lái)選擇S頁(yè)面區(qū)段1206作為用于讀或?qū)懙暮线m的目標(biāo)的地址轉(zhuǎn)換表中的問(wèn)題。如果檢測(cè)到,則這樣的情形導(dǎo)致向主機(jī)發(fā)出合適的SCSI感測(cè)碼(sense code),其指示事務(wù)失敗(或 其它類(lèi)似的通信,取決于所使用的協(xié)議)。應(yīng)用標(biāo)簽字段1305包括兩個(gè)字節(jié),并被用于啟動(dòng)器指定的、與創(chuàng)建所關(guān)聯(lián)的區(qū)段 數(shù)據(jù)的特定應(yīng)用相關(guān)的信息。SCSI協(xié)議支持應(yīng)用標(biāo)簽信息,但并不需要它。如果啟動(dòng)器未 提供該信息,則用所選擇的缺省值填充應(yīng)用標(biāo)簽字段1305,以便該缺省值將不重疊任何由 確實(shí)支持使用應(yīng)用標(biāo)簽的啟動(dòng)器分配的有效應(yīng)用標(biāo)簽值。如與參考標(biāo)簽值一樣,可以相對(duì)由啟動(dòng)器提供的作為部分讀命令的應(yīng)用標(biāo)簽來(lái)檢 查關(guān)于從閃存接收的數(shù)據(jù)的應(yīng)用標(biāo)簽信息,其中失配指示錯(cuò)誤。CRC字段1306包括兩個(gè)字節(jié),并包含循環(huán)冗余校驗(yàn)(“CRC”)數(shù)據(jù),CRC數(shù)據(jù)被用 于檢查存儲(chǔ)在S頁(yè)面區(qū)段1206中的數(shù)據(jù)和元數(shù)據(jù)的完整性。如與參考標(biāo)簽和應(yīng)用標(biāo)簽信 息一樣,可以相對(duì)從啟動(dòng)器接收的值檢查CRC標(biāo)簽,以確定該數(shù)據(jù)與元數(shù)據(jù)是否正確。SCSI協(xié)議允許啟動(dòng)器請(qǐng)求對(duì)任何或所有三個(gè)E2E的值的檢查。ECC字段1303包含錯(cuò)誤校正碼(“ECC” )信息,ECC信息可以被用于校正LBA數(shù) 據(jù)和區(qū)段元數(shù)據(jù)中的錯(cuò)誤。下面聯(lián)系圖31描述在優(yōu)選實(shí)施例中使用的ECC檢查。返回圖12,在當(dāng)前的優(yōu)選實(shí)施例中,每個(gè)頁(yè)面(例如,頁(yè)面1202)包括2212個(gè)字節(jié) 的閃存空間,并包括15個(gè)P區(qū)段(每個(gè)情況下都被標(biāo)記為P區(qū)段0-14)以及元數(shù)據(jù)(未示 出)。在當(dāng)前的優(yōu)選實(shí)施例中,構(gòu)成S頁(yè)面區(qū)段的四個(gè)P區(qū)段中的每個(gè)都存儲(chǔ)在所述S 頁(yè)面區(qū)段中存儲(chǔ)的區(qū)段內(nèi)容的四分之一。以字節(jié)交錯(cuò)為基礎(chǔ)在P區(qū)段之間分配數(shù)據(jù)。因此, 區(qū)段內(nèi)容的第一個(gè)雙字的第一個(gè)字節(jié)被寫(xiě)入頁(yè)面1202的P區(qū)段0的第一個(gè)字節(jié),第一個(gè)雙 字的第二個(gè)字節(jié)被寫(xiě)入頁(yè)面1203的P區(qū)段0的第一個(gè)字節(jié),第一個(gè)雙字的第三個(gè)字節(jié)被寫(xiě) 入頁(yè)面1204的P區(qū)段0的第一個(gè)字節(jié),第一個(gè)雙字的第四個(gè)字節(jié)被寫(xiě)入頁(yè)面1205的P區(qū) 段0的第一個(gè)字節(jié),第二個(gè)雙字的第一個(gè)字節(jié)被寫(xiě)入頁(yè)面1202的P區(qū)段0的第二個(gè)字節(jié),寸寸。根據(jù)該解釋?xiě)?yīng)該理解,存儲(chǔ)在S頁(yè)面區(qū)段0中的區(qū)段內(nèi)容在四個(gè)P區(qū)段0中展開(kāi)。 因此,所述四個(gè)頁(yè)面中的每個(gè)存儲(chǔ)區(qū)段內(nèi)容的四分之一,或139個(gè)字節(jié)(556/4)。圖14以額外的細(xì)節(jié)圖示了閃存頁(yè)面1202,示出了圖12中未示出的元素。在典型 的閃存結(jié)構(gòu)中,閃存頁(yè)面包括2048個(gè)字節(jié)的數(shù)據(jù)和/或元數(shù)據(jù)、以及額外的用于其它目的 的64個(gè)“備用”字節(jié),加起來(lái)一共2212個(gè)字節(jié)。在當(dāng)前的優(yōu)選實(shí)施例中,另一方面,雖然每 個(gè)頁(yè)面包括2212個(gè)字節(jié),但這些字節(jié)中的2085個(gè)被用于區(qū)段內(nèi)容(15 X 139),而額外的27 個(gè)字節(jié)存儲(chǔ)與超級(jí)頁(yè)面關(guān)聯(lián)的元數(shù)據(jù)。圖14示出了包括2085個(gè)字節(jié)的P區(qū)段0-14,以及 包括每閃存頁(yè)面27個(gè)字節(jié)的超級(jí)頁(yè)面元數(shù)據(jù)1401。如與P區(qū)段一樣,超級(jí)頁(yè)面元數(shù)據(jù)橫跨 構(gòu)成超級(jí)頁(yè)面的所有四個(gè)閃存頁(yè)面展開(kāi),從而超級(jí)頁(yè)面元數(shù)據(jù)字段1401存儲(chǔ)與該超級(jí)頁(yè) 面關(guān)聯(lián)的元數(shù)據(jù)的四分之一。超級(jí)頁(yè)面元數(shù)據(jù)1401包括S頁(yè)面索引(index) 1402與時(shí)間戳1403。S頁(yè)面索引 1402將索引存儲(chǔ)到被稱(chēng)為“轉(zhuǎn)發(fā)表(Forward Table) ”的表,該表包含用于LBA的物理位置 信息。下文聯(lián)系圖33描述轉(zhuǎn)發(fā)表。時(shí)間戳1403包含表示超級(jí)頁(yè)面被寫(xiě)入的時(shí)間的時(shí)間戳。S頁(yè)面索引和時(shí)間戳被冗余地寫(xiě)入構(gòu)成超級(jí)頁(yè)面的四個(gè)閃存頁(yè)面的每個(gè)中。因?yàn)?br>
21該元數(shù)據(jù)不被保護(hù)其它信息的ECC機(jī)制保護(hù),所以該冗余是必需的。當(dāng)寫(xiě)入超級(jí)頁(yè)面時(shí),由閃存HEMi填入超級(jí)頁(yè)面元數(shù)據(jù)1401。閃存HEMi從發(fā)起該 寫(xiě)入的頁(yè)面請(qǐng)求中獲取S頁(yè)面索引,并且從內(nèi)部時(shí)鐘獲取時(shí)間戳信息。超級(jí)頁(yè)面元數(shù)據(jù)被 用于在不可預(yù)見(jiàn)的掉電(power loss)之后重構(gòu)開(kāi)放的超級(jí)塊。下文聯(lián)系圖58描述掉電重 構(gòu)。圖15圖示了在子組的塊0和塊1之間組織區(qū)段內(nèi)容的方式。應(yīng)該理解,對(duì)于存儲(chǔ) 在子組中的所有剩余塊,遵循相同的組織。每個(gè)S頁(yè)面區(qū)段存儲(chǔ)與單個(gè)LBA關(guān)聯(lián)的區(qū)段內(nèi)容,并且,超級(jí)頁(yè)面的S頁(yè)面區(qū)段存 儲(chǔ)與十五個(gè)連續(xù)的LBA關(guān)聯(lián)的區(qū)段內(nèi)容。然而,如下文所解釋?zhuān)c一個(gè)超級(jí)頁(yè)面關(guān)聯(lián)的十五 個(gè)連續(xù)LBA可以和與下一個(gè)超級(jí)頁(yè)面關(guān)聯(lián)的十五個(gè)連續(xù)LBA沒(méi)有關(guān)系。通過(guò)由字母識(shí)別LBA來(lái)圖示該組織。因此,LBA㈧指示特定地址,并且LBA (A+14) 指示比LBA (A)高14個(gè)LBA的地址(例如,如果LBA (A)是LBA (0),則LBA (A+14)將是 LBA(14))。然而,在LBA㈧和LBA⑶之間沒(méi)有關(guān)系,例如,除了每個(gè)將可以被15整除。因 此,LBA (A)可以表示 LBA (9000),而 LBA (B)可以表示 LBA (60)。注意,存儲(chǔ)在每個(gè)超級(jí)頁(yè)面中的LBA將在操作期間變化。例如,在一個(gè)點(diǎn)上,子組0 的超級(jí)頁(yè)面1的S頁(yè)面區(qū)段0可以存儲(chǔ)與LBA(O) (B = 0)關(guān)聯(lián)的區(qū)段內(nèi)容,而在另一點(diǎn)上, 其可以存儲(chǔ)與LBA(900) (B = 900)關(guān)聯(lián)的區(qū)段內(nèi)容。下文描述LBA與超級(jí)頁(yè)面和子組的關(guān) 聯(lián)在使用中變化的方式。圖16圖示在初始化期間主機(jī)地址空間被映射到閃存模塊108上的方式。如以上 所述,主機(jī)典型地使用LBA發(fā)出讀和寫(xiě),LBA將主機(jī)與物理存儲(chǔ)器組織的細(xì)節(jié)隔離。在當(dāng)前的優(yōu)選實(shí)施例中,每個(gè)閃存組具有相同的大小,并且每個(gè)存儲(chǔ)對(duì)應(yīng)于相同 數(shù)量的LBA(或其它主機(jī)尋址方案)的數(shù)據(jù)。在當(dāng)前的實(shí)施例中,因?yàn)槿缦旅嫠枋觯?5個(gè) LBA是單個(gè)傳輸請(qǐng)求所能處理的最大數(shù)量,所以在閃存組之間以45的倍數(shù)的集合分布LBA。 當(dāng)前的優(yōu)選實(shí)施例使用90個(gè)LBA的分條(stripe)大小,從而LBA 0_89被分配給閃存組0, 90-179被分配給閃存組1,LBA 180-269被分配給閃存組2等,直到到達(dá)最后的閃存組為止, 在該點(diǎn)上,LBA分配循環(huán)回到閃存組0。各種其它分條算法是可能的。在可選實(shí)施例中,可 以允許用戶(hù)指定分條大小,然而,優(yōu)選以傳輸請(qǐng)求能處理的LBA的數(shù)量的倍數(shù)進(jìn)行其。圖16示出閃存空間的簡(jiǎn)化版本。該簡(jiǎn)化版本由三個(gè)閃存組(標(biāo)記為0-2)構(gòu)成。 在該簡(jiǎn)化示例中,一個(gè)塊包括兩個(gè)超級(jí)頁(yè)面,標(biāo)記為SPO和SPl。因此,閃存組0的子組0的 塊0包括寫(xiě)入標(biāo)記為1601的存取位置(slot)的數(shù)據(jù)。可以看出,在該簡(jiǎn)化示例中,每個(gè)子 組僅包含單個(gè)塊。如上所述,超級(jí)塊包括每個(gè)子組上相同的塊。因此,在圖16所示的簡(jiǎn)化結(jié)構(gòu)中,閃 存組0的超級(jí)塊0包括來(lái)自每個(gè)子組的塊0,在圖16中標(biāo)記為1602 (在該簡(jiǎn)化示例中,即整 個(gè)閃存組)。如下所述,每個(gè)超級(jí)塊的塊0的超級(jí)頁(yè)面0包含被稱(chēng)為超級(jí)塊元數(shù)據(jù)表 (SuperBlock Metadata Table)的數(shù)據(jù)結(jié)構(gòu)。在每個(gè)閃存組的子組0的SPO中將其示為 "SMT "ο表中所有其它方格表示存儲(chǔ)在特定超級(jí)頁(yè)面中的LBA范圍。因此,閃存組0的子 組1的超級(jí)頁(yè)面0包含LBA 0-14,閃存組0的子組1的超級(jí)頁(yè)面1包含LBA 300-314,等。
可以看出,LBA被分配在各自有90個(gè)LBA的“分條”中。第一個(gè)這樣的分條(LBA 0-89)被分配給閃存組0的子組1-6上的超級(jí)頁(yè)面0。下一個(gè)90個(gè)LBA (90-179)的分條被 分配給閃存組1的子組1-6上的超級(jí)頁(yè)面0。下一個(gè)分條(LBA 180-269)被分配給閃存組 2的子組1-6上的超級(jí)頁(yè)面0。在該點(diǎn),因?yàn)橐呀?jīng)到達(dá)最后一個(gè)的閃存組(在該簡(jiǎn)化示例中),所以下一分條被寫(xiě) 入閃存組0,在前一分條停止的地方開(kāi)始。因此,LBA 270-284被寫(xiě)入閃存組0的子組7的 超級(jí)頁(yè)面0。因?yàn)樵陂W存組0中不再有超級(jí)頁(yè)面0可用,所以分條的分配以子組0的超級(jí)頁(yè) 面1繼續(xù),并繼續(xù)到子組4的超級(jí)頁(yè)面1。除了當(dāng)?shù)竭_(dá)超級(jí)塊的末端時(shí)的邊界情況外,從該點(diǎn)的分配是直接易懂的。例如,新 分條從閃存組0的子組5的超級(jí)頁(yè)面1開(kāi)始。因?yàn)樵诔?jí)塊中僅剩三個(gè)超級(jí)頁(yè)面,所以該 分條在閃存組1的子組5的超級(jí)頁(yè)面1上繼續(xù)。在該方法中,盡管超級(jí)塊不保持相同數(shù)量 的分條,但LBA仍被分配給每個(gè)超級(jí)塊中的每一個(gè)超級(jí)頁(yè)面。分配LBA的該方法傾向于最大化閃存的并行性。因?yàn)槊總€(gè)閃存組獨(dú)立地操作,所 以,橫跨閃存組來(lái)對(duì)LBA進(jìn)行分條具有優(yōu)勢(shì),因?yàn)槠渥畲蠡瘑蝹€(gè)事務(wù)將尋址在多于一個(gè)閃 存組中保持的數(shù)據(jù)的可能性,由此允許與事務(wù)相關(guān)的多個(gè)閃存讀或?qū)懲瑫r(shí)發(fā)生。因?yàn)閭鬏?請(qǐng)求僅可以在單個(gè)閃存組上尋址LBA,所以,以45 (可以被傳輸請(qǐng)求尋址的LBA的最大數(shù) 量)的增量指定分條大小,從而最小化事務(wù)所需要的傳輸請(qǐng)求的數(shù)量是合理的。在當(dāng)前的 實(shí)施例中,由兩個(gè)這樣的45-LBA增量構(gòu)成分條,這是因?yàn)槠浔硎玖鶄€(gè)超級(jí)頁(yè)面。如下所述, 閃存組可以處理五個(gè)單獨(dú)子組上的五個(gè)同時(shí)的寫(xiě)操作。由于大的傳輸可以在每個(gè)閃存端口 執(zhí)行五個(gè)同時(shí)的寫(xiě),并且可以并行地在多個(gè)閃存端口上執(zhí)行,所以,使用90個(gè)LBA的分條大 小傾向于最大化閃存接口的并行使用。因此,該組織貢獻(xiàn)了 SSD控制器106使用高度并行 性快速處理主機(jī)發(fā)起的大的讀或?qū)懙哪芰?。因此,如圖16中所示的涉及LBA 0-190的假想傳輸可以使用一個(gè)IOP和五個(gè)傳輸 請(qǐng)求發(fā)生。第一個(gè)傳輸請(qǐng)求可以處理LBA 0-44,第二個(gè)傳輸請(qǐng)求可以處理LBA 45-89,第三 個(gè)傳輸請(qǐng)求可以處理LBA 90-134,第四個(gè)傳輸請(qǐng)求可以處理LBA 135-179,第五個(gè)傳輸請(qǐng) 求可以處理LBA 180-190。注意,該傳輸涉及三個(gè)不同的閃存組,由此允許高度的并行性。 此外,因?yàn)?如下文所解釋)目標(biāo)為不同子組的頁(yè)面請(qǐng)求可以并行地甚至在相同的閃存組 上操作,所以,在該示例中,因?yàn)槊總€(gè)頁(yè)面請(qǐng)求目標(biāo)為不同的子組,所以,由每個(gè)傳輸請(qǐng)求發(fā) 出的頁(yè)面請(qǐng)求也可以并行地操作。LBA向閃存組的分配是永久性的。然而,向閃存組內(nèi)的子組的分配可隨著時(shí)間變 化。如下文所解釋?zhuān)?dāng)對(duì)某個(gè)LBA接收到主機(jī)寫(xiě)、因此需要包含該LBA的超級(jí)頁(yè)面失效并且 將新數(shù)據(jù)(以及來(lái)自該超級(jí)頁(yè)面的任何未被覆寫(xiě)的舊數(shù)據(jù))寫(xiě)入新超級(jí)頁(yè)面時(shí),閃存HEMi 嘗試使用來(lái)自與舊超級(jí)頁(yè)面相同的子組的新超級(jí)頁(yè)面。然而,有時(shí)這不可能,并且,閃存 HEMi將把LBA移動(dòng)到另一子組上的超級(jí)頁(yè)面。這將傾向于影響閃存系統(tǒng)的性能,因?yàn)?,如?足夠的這種轉(zhuǎn)變發(fā)生,則數(shù)據(jù)的分條可能被集中在單個(gè)或相對(duì)小數(shù)量的子組上,因此,降低 并行操作的機(jī)會(huì)。然而,實(shí)際中,從子組向子組的轉(zhuǎn)換傾向于以無(wú)規(guī)則(patternless)的方 式發(fā)生,從而,即使在重大操作之后,在給定分條中的LBA組也傾向于橫跨這些子組,從而 可以保持高度的并行性。III.硬件細(xì)節(jié)
A.主機(jī)接口圖17比圖3中所示更詳細(xì)地示出了主機(jī)接口 310。主機(jī)接口 310包括物理接口 1701以及兩個(gè)單獨(dú)的主機(jī)端口,被標(biāo)記為主機(jī)端口 0 104和主機(jī)端口 1 105。下文進(jìn)一步 描述物理接口 1701,但為了當(dāng)前目的,理解其在主機(jī)101和102以及主機(jī)端口 104和105之 間路由信號(hào)就足夠了。每個(gè)主機(jī)端口能夠與單獨(dú)主機(jī)對(duì)接。一般地,主機(jī)接口 310在接收側(cè)執(zhí)行以下功能接收幀將幀解構(gòu)為要素特征將命令信息傳遞到下一級(jí)將數(shù)據(jù)傳遞到數(shù)據(jù)路徑DRAM一般地,主機(jī)接口 310在傳送側(cè)執(zhí)行以下功能從數(shù)據(jù)路徑DRAM 107接收數(shù)據(jù),并組織用于向主機(jī)傳送的數(shù)據(jù)產(chǎn)生用于向主機(jī)傳送的幀向主機(jī)傳送包括數(shù)據(jù)幀的幀每個(gè)主機(jī)端口包括接收HEMi (1702和1703)、傳送HEMi (1704、1705)、接收級(jí)緩沖 器(1706、1707)以及傳送級(jí)緩沖器(1708、1709)。如所示,每個(gè)接收HEMi從一個(gè)主機(jī)通過(guò)物理接口 1701接收控制信息,并向SSD控 制器106的其它元件傳遞控制信息。在該上下文中,“控制”信息意味著命令、控制信號(hào)以 及地址,但不包括數(shù)據(jù)。注意,被每個(gè)接收HEMi從主機(jī)接收的控制信息可以與由接收HEMi 傳遞的控制信息不同。每個(gè)傳送HEMi從其它SSD控制器元件接收控制信息,并通過(guò)物理接口 1701向一 個(gè)主機(jī)傳遞控制信息。再次,由傳送HEMi向主機(jī)傳送的控制信息可以與由傳送HEMi接收 的控制信息不同。每個(gè)接收級(jí)緩沖器通過(guò)物理接口 1701從一個(gè)主機(jī)接收數(shù)據(jù),并且向數(shù)據(jù)路徑 DRAM 107傳送該數(shù)據(jù)。接收級(jí)緩沖器是16K字節(jié),其允許它們接收最多4個(gè)FC_AL( “光纖 信道仲裁環(huán)”)數(shù)據(jù)幀。每個(gè)傳送級(jí)緩沖器從數(shù)據(jù)路徑DRAM 107接收數(shù)據(jù),并且通過(guò)物理接口 1701將該 數(shù)據(jù)傳送到一個(gè)主機(jī)上。傳送級(jí)緩沖器是4K字節(jié),其允許它們存儲(chǔ)一個(gè)流出幀與一個(gè)來(lái)自 數(shù)據(jù)路徑DRAM 107的流入幀。圖18示出有關(guān)主機(jī)端口 0 104的某些額外細(xì)節(jié)。如本領(lǐng)域的普通技術(shù)人員所理 解的,根據(jù)主機(jī)所使用的特定協(xié)議的規(guī)定組織SSD控制器106與主機(jī)101之間的通信。一 般地,相關(guān)協(xié)議(例如,SAS、SATA、光纖信道)指定向和從主機(jī)的通信使用幀發(fā)生,所述幀包 括命令和數(shù)據(jù)的定義組。因?yàn)樵诟鞣N相關(guān)的協(xié)議之中使用的精確的幀格式不同,所以必須為每個(gè)協(xié)議修改 SSD控制器106。然而,SSD控制器106已經(jīng)被設(shè)計(jì)為使得所述修改很小,總共(amount to) 是用于接收和傳送HEMi的不同固件、以及不同的物理連接器。SSD控制器106的所有其它 方面對(duì)于各種協(xié)議來(lái)說(shuō)不變。這是SSD控制器106的流水線(xiàn)化和模塊化設(shè)計(jì)、以及主機(jī)接 口 310的設(shè)計(jì)的重大優(yōu)點(diǎn)。雖然幀組織的具體細(xì)節(jié)隨著協(xié)議的不同而不同,但SATA協(xié)議的某些方面將被用于闡述主機(jī)端口 0 104的設(shè)計(jì)和操作。在該協(xié)議中,幀包括幀開(kāi)始(“S0F”)基元、幀頭 (由協(xié)議指定的元數(shù)據(jù)、但一般包括識(shí)別有效載荷與可能的啟動(dòng)器所必需的信息)、有效載 荷(例如,數(shù)據(jù)、命令等)、用于整個(gè)幀的驗(yàn)證的CRC值、以及幀結(jié)束(“EOF”)基元。主機(jī)端 0 104的接收側(cè)負(fù)責(zé)接收幀,將其分為它的構(gòu)成部分,以及執(zhí)行將數(shù)據(jù)路由到它預(yù)期的目的 地和/或建立事務(wù)所需要的任何動(dòng)作。主機(jī)端口的傳送側(cè)負(fù)責(zé)從SSD控制器106的其它元 件接收相關(guān)數(shù)據(jù)和命令信息,并且將該信息包裝到幀中用于向主機(jī)101傳送。由GigaBlaze 1801處理與主機(jī)的直接通信,其是可從LSI公司獲得的、型號(hào)為 0. 11微米的GigaBlaze Gflx xl Core的收發(fā)器核,LSI公司總部在加州的米爾皮塔斯。 該核包含8b/10b編碼器、串行器/解串行器以及phy,其執(zhí)行所接收的比特與電壓電平之 間的物理轉(zhuǎn)換。GigaBlaze 1801具有兩個(gè)能夠附接到3G SATA、3G SAS、4g FC_AL與4G FC 總線(xiàn)的串行端口。除了其處理到主機(jī)的物理接口外,這里不涉及GigaBlaze 1801內(nèi)部操 作的細(xì)節(jié)。在所示的實(shí)施例中,GigaBlaze 1801連接到主機(jī)101。注意,雖然圖18僅示出 了 SSD控制器106上的兩個(gè)主機(jī)端口之一,但另一主機(jī)端口完全相同,并且包含它自己的 GigaBlaze0如圖18 所示,GigaBlaze 1801 連接到基元匹配邏輯 1802 (Primitive Match Logic)?;ヅ溥壿嫳辉O(shè)計(jì)來(lái)允許相同的物理層協(xié)議與不同地處理幀和基元的各種不同 的邏輯層協(xié)議進(jìn)行接口。當(dāng)GigaBlaze 1801從主機(jī)101接收基元時(shí),GigaBlaze 1801將 該基元路由到基元匹配邏輯,下文聯(lián)系圖19詳細(xì)描述基元匹配邏輯?;ヅ溥壿嬁刂茙酚善?803,幀路由器1803從GigaBlaze 1801接收幀,并在 基元匹配邏輯的控制下路由這些幀的部分。數(shù)據(jù)被路由到接收級(jí)緩沖器0 1706,頭部被路 由到非數(shù)據(jù)有效載荷FIFO 1804,以及基元被路由到進(jìn)站(Inbound)基元FIFO 1808。接收HEMi 0 1702使用頭部和基元FIFO中的信息來(lái)識(shí)別要執(zhí)行的動(dòng)作。路由到 接收級(jí)緩沖器的數(shù)據(jù)經(jīng)由DMA傳輸被發(fā)送到數(shù)據(jù)路徑DRAM 107。接收HEMi 1702產(chǎn)生基元,并將它們路由到出站(outbound)基元FIF01805。這些 產(chǎn)生的基元包括ACK(確認(rèn)幀的正確接收)、NAK(指示未正確接收到幀)、以及RRDY(向啟 動(dòng)器報(bào)告幀信用(credit))。出站基元FIFO 1805上的基元被立即插入到向主機(jī)101的傳 送,并且可以被插在其它事務(wù)(例如,出站數(shù)據(jù)幀)中間。圖18中所示的主機(jī)端口的傳送側(cè)由傳送HEMi 1704、傳送級(jí)緩沖器01708與傳送 幀緩沖器1806構(gòu)成。傳送級(jí)緩沖器0 1708包含從數(shù)據(jù)路徑DRAM107接收的數(shù)據(jù),其要被 傳送到主機(jī)101作為響應(yīng)于讀命令的幀的一部分。傳送幀緩沖器1806包括一個(gè)或多個(gè)保 持用于構(gòu)建幀的元數(shù)據(jù)的緩沖器。傳送幀緩沖器與接收側(cè)緩沖器類(lèi)似地操作,然而,應(yīng)該理 解,它們被用于構(gòu)建幀而不是解構(gòu)幀。直通(Cut-Through)邏輯1807幫助將SSD控制器106接口到光纖信道網(wǎng)路。如 果SSD控制器106連接到光纖信道網(wǎng)絡(luò),則基元匹配邏輯1802評(píng)估接收的基元,來(lái)確定這 些基元是否意在用于SSD控制器106。確定不意在用于SSD控制器的基元被發(fā)送到直通邏 輯1807。直通邏輯接著將這些基元傳遞到GigaBlaze,以返回到光纖信道網(wǎng)絡(luò),用于傳送到 網(wǎng)絡(luò)中的下一個(gè)節(jié)點(diǎn)。各種不同協(xié)議(SAS、SATA與光纖信道)所需要的物理連接器不兼容。在當(dāng)前的優(yōu) 選實(shí)施例中,SSD控制器106的不同版本將為每個(gè)協(xié)議存在。然而,因?yàn)榛ヅ溥壿嬂?br>
25這些協(xié)議中的每個(gè)都正確地操作(見(jiàn)下),所以對(duì)于每個(gè)協(xié)議所需要的僅有的不同是使用 不同的物理連接器,然而,對(duì)于接收和傳送HEMi來(lái)說(shuō)也可能需要不同的固件。在不同的實(shí) 施例中,SSD控制器106可以合并三個(gè)不同的物理連接器,每個(gè)協(xié)議一個(gè),并因此允許利用 任何協(xié)議使用相同的物理控制器。圖19中更詳細(xì)地示出了基元匹配邏輯1802。該邏輯包括狀態(tài)機(jī),其匹配接收的基 元,并基于所匹配的基元與當(dāng)前狀態(tài)識(shí)別要執(zhí)行的動(dòng)作。從Gigablaze 1801向基元鎖存器(Primitive Latch) 1901傳送從主機(jī)接收的基 元。接著,針對(duì)包含在基元匹配寄存器1902中的位模式(bit pattern)來(lái)匹配基元,基元 匹配寄存器1902包括十六個(gè)寄存器。如果未發(fā)現(xiàn)匹配,則來(lái)自基元鎖存器1901的值被直 接路由到進(jìn)站基元FIFO 1808上?;ヅ淇刂萍拇嫫?903包括十六個(gè)寄存器,每個(gè)基元匹配寄存器一個(gè)。基元匹 配控制寄存器包含指示為了發(fā)現(xiàn)全面匹配,所關(guān)聯(lián)的基元匹配寄存器中的哪些位必須與基 元鎖存器1901中的值匹配的位。例如,這些位可能需要第一個(gè)字節(jié)匹配,而不需要任何其 它位匹配。因此,來(lái)自基元匹配控制寄存器的這些位擔(dān)當(dāng)掩碼(mask),允許多個(gè)接收的基元 匹配單個(gè)基元匹配寄存器。這在要為一類(lèi)接收的基元執(zhí)行相同的動(dòng)作的情況中有用,也在 篩選表示除了命令之外的數(shù)據(jù)的部分基元時(shí)有用。如果基元匹配寄存器1902的相應(yīng)寄存器中的值匹配基元鎖存寄存器1901,則基 元匹配控制寄存器1903中的其它位指示要執(zhí)行的動(dòng)作。例如,這些位可以控制幀路由器 1803,以便跟隨基元的某些數(shù)據(jù)移動(dòng)到非數(shù)據(jù)有效載荷FIFO 1804中,并且,跟隨該數(shù)據(jù)的 數(shù)據(jù)被移動(dòng)到接收級(jí)緩沖器1706中。通常,這會(huì)發(fā)生在連同數(shù)據(jù)幀一起接收SOF基元的情 況下?;ヅ淇刂萍拇嫫髯鳛闋顟B(tài)機(jī)操作。例如,某些位可以設(shè)置可以引起一定數(shù)目 的后續(xù)基元被當(dāng)前控制寄存器而不是通過(guò)基元匹配寄存器選擇的控制寄存器操作的計(jì)數(shù) 器(未示出)。此外,基元匹配控制寄存器可以改變包含在各種其它未示出的寄存器中的值。應(yīng)該理解,基元匹配邏輯1802包含這樣的邏輯執(zhí)行基元鎖存器1901與基元匹配 寄存器1902之間的比較,以及實(shí)施基元匹配控制寄存器1903所需要的控制功能。如下文聯(lián)系圖28所解釋?zhuān)褂脭?shù)據(jù)覆蓋(overlay),通過(guò)關(guān)聯(lián)的接收HEMi加載基 元匹配寄存器1902與基元匹配控制寄存器1903。因?yàn)槊總€(gè)協(xié)議具有其自身的基元集,所 以,這些覆蓋被用于對(duì)不同協(xié)議(例如,SAS、SATA)定制(customize)基元匹配邏輯1802。 此外,覆蓋可以被用于在單個(gè)協(xié)議內(nèi)處理不同的基元集、或不同的狀態(tài)。從初始化固件代碼 載入(firmware code load)中獲取被接收HEMi用于加載基元匹配和基元匹配控制寄存器 的值。因此,在許多情況下,可以為新協(xié)議或通過(guò)對(duì)接收HEMi固件的修改而對(duì)現(xiàn)有協(xié)議的 修改,來(lái)更新基元匹配邏輯1802,而對(duì)硬件沒(méi)有任何改變。因此,基元匹配邏輯中不同覆蓋的使用允許SSD控制器106響應(yīng)于不同的協(xié)議,而 不需要用于每個(gè)協(xié)議的個(gè)別化邏輯?;ヅ溥壿?802還包含幀破解邏輯(Frame Cracking Logic) 1904。該邏輯塊 接收幀中的初始雙字,并評(píng)估該雙字來(lái)確定幀的性質(zhì)(例如,數(shù)據(jù)、命令)?;趲念?lèi)型, 幀破解邏輯將該幀合適地路由。例如,如果該幀是命令幀,則幀破解邏輯向非數(shù)據(jù)有效載荷
26FIFO 1804路由整個(gè)幀,而如果該幀是數(shù)據(jù)幀,則幀破解邏輯向非數(shù)據(jù)有效載荷FIFO路由 頭部部分,并且向合適的接收級(jí)緩沖器路由數(shù)據(jù)部分。如上所述,基元匹配邏輯的有利之處在于在不需要軟件或重大的硬件改變的情 況下,其允許SSD控制器106處理不同的協(xié)議,所述不同的協(xié)議涉及不同的幀編碼。此外, 在元數(shù)據(jù)和命令信息被路由到不同的FIFO(例如,非數(shù)據(jù)有效載荷FIFO 1804以及進(jìn)站基 元FIFO 1808)的同時(shí),通過(guò)向包含在接收級(jí)緩沖器中的專(zhuān)門(mén)的數(shù)據(jù)FIFO路由數(shù)據(jù),接收主 機(jī)端口設(shè)計(jì)允許更有效率的數(shù)據(jù)傳輸,這是因?yàn)椋瑪?shù)據(jù)FIFO僅包含數(shù)據(jù)而不包含命令或元 數(shù)據(jù),并允許與頭部和基元元數(shù)據(jù)上的接收HEMi操作并行地,經(jīng)由DMA傳輸將數(shù)據(jù)傳輸?shù)?數(shù)據(jù)路徑DRAM,由此提高整個(gè)系統(tǒng)性能。如上所述,SSD控制器106可以被用于多種不同的協(xié)議,僅需要對(duì)HEMi固件的修 改與不同的物理連接器。所有上述協(xié)議都相對(duì)類(lèi)似。還可以容易地使SSD控制器106適 用于與上述協(xié)議具有重大區(qū)別的協(xié)議。例如,在一個(gè)實(shí)施例中,SSD控制器106可以適用于 面向通道(lane-oriented)的協(xié)議,如PCI Express。如本領(lǐng)域的技術(shù)人員所理解,在PCI Express系統(tǒng)中,外部設(shè)備使用“通道”傳送和接收數(shù)據(jù)和元數(shù)據(jù),每個(gè)通道利用橫跨這些通 道被分條的雙字?jǐn)?shù)據(jù)來(lái)攜帶傳送的一部分。通道的數(shù)量是實(shí)施相關(guān)的,但SSD控制器可以 通過(guò)增加兩個(gè)額外的GigaBlaze (應(yīng)該理解,每個(gè)GigaBlaze將是為PCI Express接口設(shè)計(jì) 的版本)、兩個(gè)額外的接收HEMi和兩個(gè)額外的傳送HEMi而適用于4通道PCI EXPRESS系 統(tǒng)。一個(gè)GigaBlaze、一個(gè)接收HEMi和一個(gè)傳送HEMi專(zhuān)用于每個(gè)通道。在該實(shí)施例中,未 使用SCSI HEMi 2001 (見(jiàn)下)。該HEMi可以被替代地用作額外的RdWr HEMi。在該實(shí)施例中,在外部主機(jī)上操作的設(shè)備驅(qū)動(dòng)器負(fù)責(zé)將PCI EXPRESS傳送格式化 為Ι0Ρ。因此,大多數(shù)主機(jī)端口邏輯是不必要的(例如,基元匹配、各種FIFO等)。接收和 傳送HEMi分別負(fù)責(zé)對(duì)數(shù)據(jù)取消分條(destriping)和重新分條(restriping)。一旦所接收 的IOP已被取消分條,則其隨后可以被直接傳遞到RdWr HEMi (見(jiàn)下)。然后,處理根據(jù)如上 面描述的其它協(xié)議進(jìn)行。雖然帶有面向通道的協(xié)議(諸如PCI EXPRESS)的SSD控制器106的使用需要某些 額外的修改,但這些修改相對(duì)較小,并且,由于控制器的模塊化設(shè)計(jì),所述修改容易被接納。 HEMi的增加和減少相對(duì)簡(jiǎn)單,并且因?yàn)榭刂破髁魉€(xiàn)的不同級(jí)獨(dú)立操作,所以,一個(gè)級(jí)(例 如主機(jī)端口)處的改變不需要其它級(jí)(例如,閃存端口)處的改變。可以簡(jiǎn)單地設(shè)計(jì)SSD控制器106,以用于iSCSI協(xié)議,盡管這需要向主機(jī)端口增加 一個(gè)或多個(gè)TCP/IP棧,同時(shí),接收HEMi負(fù)責(zé)從所述棧中提?、荁,并且傳送HEMi負(fù)責(zé)編碼 TCP/IP協(xié)議所需要的幀信息。B.命令解析器圖20示出了關(guān)于來(lái)自圖3的命令解析器塊311的額外的細(xì)節(jié)。如聯(lián)系圖3所描 述,命令解析器塊311與主機(jī)接口 310和命令分布?jí)K312通信。命令解析器塊311 包括 SCSI HEMi 2001。SCSI HEMi 2001 從接收 HEMi 1702 和 1703接收主機(jī)命令。SCSI HEMi 2001確定主機(jī)命令是讀/寫(xiě)、還是某個(gè)其它類(lèi)型的命令。 如果命令不是讀/寫(xiě)命令,則SCSI HEMi 2001將該命令交給ARM處理器2002,其處理非讀 /寫(xiě)命令。下文進(jìn)一步描述ARM處理器2002。如果SCSI HEMi 2001確定命令是讀/寫(xiě)命令,則其驗(yàn)證該命令,以確保一致性,這意味著如果讀或?qū)懨钌婕芭c當(dāng)前正被命令分布?jí)K312處理的讀或?qū)懨钕嗤臄?shù)據(jù), 則第二個(gè)命令被延遲直到完成了第一個(gè)命令的特定處理。SCSI協(xié)議不需要讀/寫(xiě)一致性,該SCSI協(xié)議允許對(duì)讀和寫(xiě)重新排序。然而,如下 文所描述,SSD控制器106將主機(jī)發(fā)起的命令分解為多個(gè)子操作,并且,可以不按順序處理 這些子操作。如果SSD控制器106要允許多于一個(gè)命令同時(shí)在相同的數(shù)據(jù)上操作,則可能在第 一個(gè)命令已完成之前執(zhí)行第二個(gè)命令的部分。例如,如果SSD控制器106要接收到對(duì)特定 LBA塊的寫(xiě)命令,并且接著要接收到對(duì)重疊的LBA塊的讀命令,并且如果允許讀命令在寫(xiě)命 令已結(jié)束之前開(kāi)始操作,則可能讀命令導(dǎo)致返回某些已經(jīng)被寫(xiě)命令更新了的數(shù)據(jù)、以及某 些還未被更新的數(shù)據(jù)。為此原因,SSD控制器106在如下兩個(gè)位置上跟蹤當(dāng)前有效的命令在SCSI HEMi 2001中、以及在閃存HEMi (下文描述)中。存儲(chǔ)在被稱(chēng)為其mRAM(聯(lián)系圖26,見(jiàn)下文)的HEMi的內(nèi)部存儲(chǔ)器中的SCSI HEMi 命令表2003包含每個(gè)主機(jī)讀和寫(xiě)命令的LBA和傳輸長(zhǎng)度,該讀和寫(xiě)命令已經(jīng)被SCSI HEMi 2001向命令分布?jí)K312發(fā)送,但還沒(méi)有被發(fā)送到閃存HEMi上。如下文所述,命令分布?jí)K包含幾個(gè)被稱(chēng)為RdWr HEMi的HEMi。命令表2003包含處 理每個(gè)命令的RdWr HEMi的標(biāo)識(shí)符。SCSI HEMi 2001使用該信息在RdWr HEMi之間平衡工 作負(fù)荷,向帶有相對(duì)較少的當(dāng)前有效命令的RdWr HEMi發(fā)送新命令。當(dāng)接收到新命令時(shí),SCSI HEMi 2001檢查命令表2003,以確定被該命令影響的 LBA地址是否已經(jīng)存在。如果發(fā)現(xiàn)匹配,則SCSI HEMi 2001停止(stall)新命令的執(zhí)行直 到前一命令從表中被移除。一旦被分派了命令的RdWr HEMi報(bào)告其已經(jīng)創(chuàng)建和分派了對(duì)應(yīng) 于該命令的所有傳輸請(qǐng)求(下文描述RdWr HEMi分派這種傳輸請(qǐng)求的處理),就從命令表 2003中移除該命令。此時(shí),新命令不再被停止。應(yīng)該理解,此時(shí),較早的命令仍然在執(zhí)行,但 現(xiàn)在在閃存HEMi層對(duì)該命令進(jìn)行一致性檢查(下文描述)。因此,SSD控制器106在主機(jī)命令的流水線(xiàn)執(zhí)行中的兩點(diǎn)上增強(qiáng)了讀/寫(xiě)一致性 SCSI HEMi 2001停止與現(xiàn)有命令的LBA范圍沖突的新命令,直到現(xiàn)有命令已被發(fā)送到閃存 HEMi為止,以及每個(gè)閃存HEMi在其自身的操作上增強(qiáng)一致性,從而,其停止覆蓋與現(xiàn)有命 令相同的范圍的新命令的執(zhí)行,直到現(xiàn)有命令完成。一致性增強(qiáng)的所述兩級(jí)系統(tǒng)是有利的,這是因?yàn)?,只要沖突的命令在流水線(xiàn)的不 同級(jí)上,則允許繼續(xù)它們的處理。因此,RdWr HEMi可以在與第一沖突命令在閃存中操作的 同時(shí)設(shè)立第二沖突命令,由此提高整個(gè)系統(tǒng)性能。如上所述,命令解析器塊311還包含ARM處理器2002,其控制某些內(nèi)部管理操作, 并負(fù)責(zé)處理除了讀或?qū)懼獾闹鳈C(jī)發(fā)起的命令。在當(dāng)前的優(yōu)選實(shí)施例中,ARM處理器2002 是ARM7TDMi-s,其可以從英國(guó)劍橋的ARM持股公司獲得。然而,應(yīng)該理解,ARM處理器2002 的功能可以由多種邏輯器件處理。雖然由ARM處理器2002處理的主機(jī)命令的準(zhǔn)確性質(zhì)是協(xié)議相關(guān)的,但在一個(gè)實(shí)施 例中,這些命令包括測(cè)試單元準(zhǔn)備(TestUnit Ready)讀容量(Read Capacity)
28
模式選擇(ModeSelect)模式感測(cè)(Mode Sense)邏輯選擇(LogSelect)邏輯探測(cè)(LogSense)才艮告 Luns (Report Luns)發(fā)送診斷(SendDiagnostic)請(qǐng)求探測(cè)(Request Sense)寫(xiě)緩沖(WriteBuffer)讀緩沖(ReadBuffer)C.命令分布圖21詳細(xì)圖示了命令分布?jí)K312。如所示,命令分布?jí)K312構(gòu)成一組RdWr HEMi, 標(biāo)記為2101-2106。在當(dāng)前的優(yōu)選實(shí)施例中,命令分布?jí)K312包括六個(gè)RdWr HEMi0然而, 因?yàn)镾SD控制器106的模塊化設(shè)計(jì),所以RdWr HEMi的數(shù)量可以被增加或減少,而不需要控 制器的其余部分的重大重新設(shè)計(jì)。更大數(shù)量的RdWr HEMi提高性能,但具有昂貴且更復(fù)雜 的代價(jià)。如圖21所示,SCSI HEMi 2001向每個(gè)RdWr HEMi傳遞信息。一般地,所述信息包括 CDBinfo,基于該HEMi相對(duì)于其它RdWr HEMi的相對(duì)工作負(fù)荷,SCSI HEMi 2001將CDBinfo 分配給特定RdWr HEMi。Rdffr HEMi基于⑶Binfo產(chǎn)生Ι0Ρ,接著產(chǎn)生如IOP所需要的傳輸請(qǐng)求,并基于要 傳輸?shù)臄?shù)據(jù)的閃存地址將這些傳輸請(qǐng)求傳送到特定閃存端口。RdWr HEMI還與傳送HEMi通 信;在主機(jī)寫(xiě)的情況中,負(fù)責(zé)的RdWr HEMi向傳送HEMi發(fā)送通信,指示該傳送HEMi應(yīng)該向 主機(jī)通知控制器對(duì)于與寫(xiě)關(guān)聯(lián)的數(shù)據(jù)準(zhǔn)備好。D.交叉(Crossbar);共享 RAM ;DRAM前述圖已經(jīng)圖示了功能塊之間在數(shù)據(jù)和控制流方面的相互聯(lián)系,并且沒(méi)有試圖示 出物理細(xì)節(jié)。圖22圖示了當(dāng)前實(shí)施例中SSD控制器106的許多功能塊物理互聯(lián)的方式。圖22示出了交叉切換器2201。如本領(lǐng)域的普通技術(shù)人員所共同理解的,交叉切換 器操作,以便將切換器一側(cè)上的任意元件與切換器另一側(cè)上的任意元件連接。以下文將解 釋的方式,交叉切換器2201將其HEMi側(cè)上的元件與其共享RAM側(cè)上的元件連接。交叉切換器2201的HEMi側(cè)具有向包含在SSD控制器106中的每個(gè)HEMi的雙路 連接(圖22中所示的HEMi實(shí)際上是HEMi和與每個(gè)HEMi關(guān)聯(lián)的緊密耦接的邏輯的組合, 這里的其它地方將進(jìn)一步描述該邏輯)。如這里其它地方所述,HEMi的數(shù)量可以根據(jù)實(shí)施決定而不同(例如,控制器可以 包括八和十二之間的閃存HEMi)。在當(dāng)前的實(shí)施例中,交叉切換器2201的共享RAM側(cè)連接到十個(gè)RAM子組,標(biāo)記為 共享RAM子組0 (2202)至共享RAM子組7、全局寄存器2203以及PIO緩沖器2204,并且共 同標(biāo)記為共享RAM塊318。在當(dāng)前的優(yōu)選實(shí)施例中,每個(gè)共享RAM子組包括4K字節(jié)的RAM 存儲(chǔ)空間。交叉切換器2201被設(shè)計(jì)來(lái)連接到更多數(shù)量的共享RAM子組,因此支持模塊擴(kuò)展 性,如下文所解釋。雖然所有十個(gè)共享RAM子組共享地址空間,但如上文所解釋?zhuān)@些子組中的某些
29具有專(zhuān)門(mén)的功能。如圖22所示,交叉切換器2201對(duì)于每個(gè)共享RAM子組包括一個(gè)端口。每個(gè)共享 RAM子組包括四個(gè)FIFO和數(shù)據(jù)結(jié)構(gòu)段(section),并且,由關(guān)聯(lián)的FIFO寄存器塊控制每個(gè) FIFO (例如,寄存器塊2205控制FIFO 0,塊2206控制FIFO 1,等)。如連接共享RAM端口 0與共享RAM子組0的箭頭所示,共享的RAM端口 0僅是向 共享RAM子組0的FIFO 0-3或數(shù)據(jù)結(jié)構(gòu)段的輸入或輸出路徑,該路徑通過(guò)關(guān)聯(lián)的寄存器去 往和來(lái)自這些FIFO。如下文所解釋?zhuān)瑢?duì)FIFO的讀或?qū)懲ㄟ^(guò)關(guān)聯(lián)的寄存器塊發(fā)生,而對(duì)數(shù)據(jù) 結(jié)構(gòu)段的讀或?qū)懺诓煌ㄟ^(guò)關(guān)聯(lián)的寄存器的情況下訪(fǎng)問(wèn)該段。在當(dāng)前的優(yōu)選實(shí)施例中,實(shí)際上僅使用這些FIFO中的27個(gè)(23個(gè)用于HEMi工作 列表,四個(gè)用于空閑列表)。其余五個(gè)可用于擴(kuò)展系統(tǒng)所支持的HEMi的數(shù)量。交叉切換器2201的全局寄存器端口 2207連接到全局寄存器2203,其包括由執(zhí)行 多種功能的寄存器構(gòu)成的RAM子組,所述功能包括控制GigaBlazelSOl與設(shè)立DRAM控制器 2305 (下文聯(lián)系圖23描述)。交叉切換器DRAM端口 2208連接到PIO ( “編程的10”) DRAM緩沖器2204,其接著 連接到數(shù)據(jù)路徑DRAM 107。PIO DRAM緩沖器2204是包含在共享RAM的子組中的64個(gè)雙 字的FIFO,其被用于緩沖HEMi與數(shù)據(jù)路徑DRAM之間的通信。因?yàn)閿?shù)據(jù)路徑DRAM以更高的 時(shí)鐘速度運(yùn)行并且能夠同時(shí)讀或?qū)懰膫€(gè)雙字,而HEMi僅能夠同時(shí)讀和寫(xiě)單個(gè)雙字,所以需 要這種緩沖。為了避免減慢數(shù)據(jù)路徑DRAM的操作,PIO DRAM緩沖器2204緩沖向和從DRAM 的數(shù)據(jù)傳輸。當(dāng)HEMi正向數(shù)據(jù)路徑DRAM寫(xiě)入數(shù)據(jù)時(shí),PI0DRAM緩沖器2204存儲(chǔ)該數(shù)據(jù), 一次一個(gè)雙字,直到該寫(xiě)入完成或緩沖器滿(mǎn)了為止,此時(shí),其將數(shù)據(jù)突發(fā)發(fā)送(burst)給數(shù) 據(jù)路徑DRAM。當(dāng)HEMi正從數(shù)據(jù)路徑DRAM讀取數(shù)據(jù)時(shí),PIO DRAM緩沖器2204每次存儲(chǔ)來(lái) 自數(shù)據(jù)路徑DRAM的數(shù)據(jù)的四個(gè)雙字,并且,一旦所有必需的數(shù)據(jù)都可用(或者PIO緩沖器 滿(mǎn)了)JljHEMi以突發(fā)方式讀取數(shù)據(jù),一次一個(gè)雙字。再次,應(yīng)該理解,實(shí)際上,在DRAM與大 量緩沖器中的一個(gè)之間傳輸數(shù)據(jù)。注意,從交叉切換器2201到PIO緩沖器2204的連接不被用于數(shù)據(jù)路徑DRAM與閃 存端口級(jí)緩沖器之間、或者主機(jī)接口傳送與接收級(jí)緩沖器之間的數(shù)據(jù)傳輸,而替代地,其僅 用于與HEMi的通信。向和從各種級(jí)緩沖器的傳輸不通過(guò)交叉切換器2201。交叉切換器調(diào)試端口 2209連接到調(diào)試FIFO 2210。調(diào)試FIFO 2210是擔(dān)當(dāng)用于調(diào) 試來(lái)自HEMi的信息的FIFO的大SRAM子組。調(diào)試FIFO 2210接受來(lái)自HEMi的信息,每次 一個(gè)雙字,并且將該信息存入4個(gè)雙字寬的FIFO結(jié)構(gòu)中。一旦調(diào)試FIFO 2210達(dá)到設(shè)置的 容量閾值,則其仲裁(arbitrate)訪(fǎng)問(wèn)DRAM端口,并且,一旦其已獲得了這樣的訪(fǎng)問(wèn),其將 調(diào)試信息突發(fā)地寫(xiě)入DRAM 107中,一次4個(gè)雙字。如交叉切換器所慣例的,交叉切換器2201可以同時(shí)將來(lái)自HEMi側(cè)的多個(gè)元件與 共享RAM側(cè)的多個(gè)元件連接,其僅由每側(cè)的端口數(shù)量限制。交叉切換器2201能夠?qū)⒚總€(gè)HEMi連接到每個(gè)共享的RAM子組、以及切換器的共 享RAM側(cè)上的其它資源。然而,應(yīng)該理解,切換器不將HEMi彼此直接連接,也不將共享RAM 子組彼此直接連接。通過(guò)使用交叉切換器2201將信息留在共享RAM子組中,間接地完成 HEMi之間的通信。因此,當(dāng)(如下所述),作為所接收的⑶B的結(jié)果,SCSI HEMi 2001產(chǎn)生Ι0Ρ,并且,將該IOP傳遞到RdWr HEMi,這被通過(guò)SCSI HEMi 2001將指向IOP位置的指針存儲(chǔ)在用于 Rdffr HEMi的工作列表中而處理,所述工作列表還可以被存儲(chǔ)在共享RAM子組的一個(gè)FIFO 中。然后,Rdffr HEMi通過(guò)檢查工作列表、識(shí)別包含IOP的位置、以及從所述位置將IOP復(fù) 制到它自身的內(nèi)部存儲(chǔ)器中,接收Ι0Ρ。在其它HEMi之間的通信以類(lèi)似的方式進(jìn)行。下文 描述包含在共享RAM子組中的數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié)、以及HEMi使用這些數(shù)據(jù)結(jié)構(gòu)傳輸信息的方 式。DRAM訪(fǎng)問(wèn)寄存器塊2211控制對(duì)數(shù)據(jù)路徑DRAM 107的訪(fǎng)問(wèn)。如上文所解釋?zhuān)琀EMi 不直接訪(fǎng)問(wèn)數(shù)據(jù)路徑DRAM 107,而是替代地,使用PIO緩沖器2204用于此目的。這些是DMA 傳輸,其需要HEMi僅提供起始地址和傳輸?shù)拇笮?。地址寄存?212在用于該傳輸?shù)臄?shù)據(jù)路徑DRAM中存儲(chǔ)起始位置。傳輸計(jì)數(shù) (count)寄存器2213存儲(chǔ)所需要傳輸?shù)臄?shù)量。數(shù)據(jù)寄存器2214存儲(chǔ)要被發(fā)送到PIO緩沖 器2204或從PIO緩沖器接收的數(shù)據(jù)。從數(shù)據(jù)路徑DRAM 107的讀以HEMi在寄存器2212中放置DRAM地址以及將傳輸?shù)?大小(以四個(gè)雙字的形式)放入傳輸計(jì)數(shù)寄存器2213中開(kāi)始。這些動(dòng)作引起DRAM DMA引 擎2302 (見(jiàn)下文)以四個(gè)雙字組塊的形式將數(shù)據(jù)傳輸?shù)絇IO緩沖器2204中。當(dāng)每個(gè)傳輸 發(fā)生時(shí),DRAM DMA引擎遞減傳輸計(jì)數(shù)寄存器2213,并且,當(dāng)傳輸計(jì)數(shù)寄存器2213達(dá)到0時(shí), DMA傳輸結(jié)束。在DMA傳輸完成之后,以雙字的增量,自動(dòng)從PIO緩沖器向數(shù)據(jù)寄存器2214讀取 數(shù)據(jù)。從HEMi向數(shù)據(jù)路徑DRAM 107的寫(xiě)類(lèi)似地操作。注意,每次傳輸計(jì)數(shù)寄存器2213遞減時(shí),地址寄存器2212遞增。這對(duì)于當(dāng)前發(fā)生 的傳輸來(lái)說(shuō)不必要,這是因?yàn)椋珼RAM DMA引擎僅需要初始地址加上傳輸計(jì)數(shù)。然而,遞增地 址寄存器2212導(dǎo)致一旦傳輸完成,用于傳輸?shù)慕Y(jié)束地址被保持在所述寄存器中,而且這可 以在設(shè)定未來(lái)的傳輸中有用。在圖23中圖示RAM控制器317。一般地,RAM控制器控制和仲裁對(duì)共享RAM塊318 和數(shù)據(jù)路徑DRAM 107的訪(fǎng)問(wèn)。RAM控制器317包括以下邏輯塊(應(yīng)該理解,并且如這里其它硬件圖也是正確的, 圖23中的圖示本質(zhì)上是概念性的并且不意在傳達(dá)實(shí)際物理布局的細(xì)節(jié))共享RAM控制器1201。交叉切換器2201。DRAM控制器2305,包括從加利福尼亞州帕洛阿爾托的Denali軟件公司購(gòu)買(mǎi)的邏 輯,其管理進(jìn)入數(shù)據(jù)路徑DRAM 107的物理接口。DRAM控制器2305包括DRAM DMA引擎2302。DMA引擎2302處理數(shù)據(jù)路徑DRAM 107和與DRAM通信的各種緩沖器(例如,接收緩沖器1706、傳送緩沖器1708、閃存級(jí)緩沖器 308、PI0緩沖器2204、調(diào)試FIFO 2210)之間的DMA傳輸。DMA引擎2303從HEMi接收起始 地址和DMA傳輸?shù)膫鬏斢?jì)數(shù),并且控制從那里的傳輸,而不需要來(lái)自HEMi的附加信息。E2E邏輯2303執(zhí)行三種涉及E2E標(biāo)簽的任務(wù),上文聯(lián)系圖13描述了 E2E標(biāo)簽(a) 將E2E標(biāo)簽附接到正被發(fā)送到閃存的數(shù)據(jù)的每個(gè)區(qū)段;(b)相對(duì)期望值檢查標(biāo)簽值,并且, 如果所述值不匹配,產(chǎn)生錯(cuò)誤情形;以及(c)如果啟動(dòng)器未使用這些值(并因此不期望它
31們),則從正被傳送到主機(jī)的數(shù)據(jù)中剝離E2E標(biāo)簽。附接到數(shù)據(jù)的每個(gè)區(qū)段的E2E標(biāo)簽是參考標(biāo)簽1304、應(yīng)用標(biāo)簽1305以及CRC 1306。如上文所解釋?zhuān)瑢?duì)于從支持E2E的啟動(dòng)器接收的數(shù)據(jù),從自啟動(dòng)器接收的信息中獲取 這些值,或基于從啟動(dòng)器接收的信息計(jì)算這些值,而對(duì)于從不支持E2E的啟動(dòng)器接收的數(shù) 據(jù),這些值被內(nèi)部產(chǎn)生。E2E邏輯2303能夠檢查參考標(biāo)簽、應(yīng)用標(biāo)簽或CRC值。上文聯(lián)系圖13描述了這些 檢查。只要當(dāng)在數(shù)據(jù)路徑DRAM 107與閃存級(jí)緩沖器之間傳輸數(shù)據(jù)或在數(shù)據(jù)路徑DRAM 107 與接收緩沖器或傳送緩沖器之間傳輸數(shù)據(jù)時(shí),E2E邏輯2303便執(zhí)行這些檢查。除非啟動(dòng)器 不支持E2E,否則啟動(dòng)器指定要檢查這些字段中的哪些。如果啟動(dòng)器不支持E2E,則基于由 用戶(hù)在初始化時(shí)選擇的參數(shù)執(zhí)行檢查。注意,為了內(nèi)部錯(cuò)誤檢查的目的,始終檢查參考標(biāo)簽 值,即使啟動(dòng)器不支持E2E且用戶(hù)不要求進(jìn)行該檢查的情況下也是如此。E2E邏輯2303將E2E標(biāo)簽附接到從數(shù)據(jù)路徑DRAM 107向閃存級(jí)緩沖器傳遞的數(shù) 據(jù)的每個(gè)區(qū)段。如上文聯(lián)系圖13所解釋?zhuān)绻麊?dòng)器支持E2E,則從由啟動(dòng)器提供的信息中 獲取參考標(biāo)簽信息。啟動(dòng)器可能需要為每個(gè)數(shù)據(jù)區(qū)段遞增參考標(biāo)簽,其中,E2E邏輯2303在 附接參考標(biāo)簽前執(zhí)行遞增操作。如果啟動(dòng)器不支持E2E,則E2E邏輯2303將LBA插入?yún)⒖?標(biāo)簽字段1304中。如果啟動(dòng)器支持E2E,則應(yīng)用標(biāo)簽和CRC字段被填入由啟動(dòng)器提供的信 息。如果啟動(dòng)器不支持E2E,則應(yīng)用標(biāo)簽被填入缺省值,并且,根據(jù)用戶(hù)在初始化時(shí)的選擇, CRC字段被填入缺省值或內(nèi)部計(jì)算的CRC值之一。DRAM調(diào)度器2304包括可以訪(fǎng)問(wèn)數(shù)據(jù)路徑DRAM 107的每個(gè)信道的排序列表。下文 聯(lián)系圖25描述這些信道。因?yàn)镈RAM僅具有單個(gè)輸入/輸出端口,所以同時(shí)僅一個(gè)信道可 以訪(fǎng)問(wèn)DRAM端口。DRAM調(diào)度器2304輪換(rotate)經(jīng)過(guò)每個(gè)信道,檢查該信道是否需要訪(fǎng) 問(wèn)DRAM,如果需要,則允許該信道連接到DRAM端口。一旦所述訪(fǎng)問(wèn)完成,DRAM調(diào)度器2304 移動(dòng)到列表中的下一信道。以該方法,DRAM調(diào)度器2304以循環(huán)的方式仲裁對(duì)DRAM端口的 訪(fǎng)問(wèn)ο圖24示出共享RAM控制器2301、以及包含在共享RAM控制器2301中的寄存器塊 和包含在共享RAM中的FIFO之間的關(guān)系的某些方面。特別地,圖24示出FIFO指針寄存器 2205、2206、2401和2402,其與包含在共享RAM子組0 2202中的FIFO 0_3相關(guān)。共享RAM 控制器2301每個(gè)共享RAM子組包含4個(gè)指針寄存器塊,總共32個(gè),不過(guò)它們中的某些可能 未被使用。注意,為了清楚的目的,未示出控制除子組0之外的共享RAM子組的共享RAM控 制器2301的部分。如圖23所示,F(xiàn)IFO 0指針寄存器2205與包含在共享RAM子組0 2202中的 FIFO(2403)關(guān)聯(lián)。指針寄存器2205包括以下寄存器基址(base)寄存器2404包含指向共享RAM子組2202內(nèi)的地址位置的指針,所 述地址位置構(gòu)成共享RAM子組2202中的專(zhuān)用于FIFO 2403的部分的一個(gè)邊界。上限地址 (ceiling)寄存器2405包含指向共享RAM子組0內(nèi)的地址位置的指針,所述地址位置構(gòu)成 共享RAM子組2202中的專(zhuān)用于FIFO 2403的部分的另一邊界。這些寄存器定義FIFO 0的 位置和大小。在當(dāng)前的優(yōu)選實(shí)施例中,在初始化時(shí)設(shè)置它們,并且在操作期間中不改變。在 替代實(shí)施例中,可以動(dòng)態(tài)地重新設(shè)置這些值,由此允許在共享RAM子組2202內(nèi)更有效率的 空間分配,但具有增加的復(fù)雜性的代價(jià)。
FIFO 2403是先進(jìn)先出存儲(chǔ)器結(jié)構(gòu)。如此,其具有頂部(top),表示最近插入的條 目(entry);以及底部(bottom),表示最舊的條目。FIFO 2403是回卷的(wraps around), 并且當(dāng)前頂部和當(dāng)前底部的位置將在使用期間改變。頂部寄存器2406包含指向共享RAM子組2202內(nèi)的構(gòu)成FIFO 2403的當(dāng)前頂部的 地址位置的指針。底部寄存器2407包含指向共享RAM子組2202內(nèi)的構(gòu)成FIFO 2403的當(dāng) 前底部的地址位置的指針。計(jì)數(shù)寄存器2408包含表示FIFO 2403中當(dāng)前有效的元件的數(shù)目的值??梢酝ㄟ^(guò) 比較頂部寄存器2406與底部寄存器2407來(lái)獲取相同的信息,但是,由于不需要計(jì)算就使該 信息可用,所以得到性能優(yōu)勢(shì)。只要有數(shù)據(jù)項(xiàng)(item)加入FIFO 2403時(shí),就自動(dòng)遞增計(jì)數(shù) 寄存器2408,并且,只要數(shù)據(jù)項(xiàng)被移除時(shí),就自動(dòng)遞減計(jì)數(shù)寄存器2408。如圖24所示,盡管未示出下述各個(gè)寄存器,但共享RAM控制器2301還包含對(duì)應(yīng)于 FIFO 1-3 的 FIFO 指針寄存器 2206,2401 和 2402。共享RAM子組0還包含數(shù)據(jù)結(jié)構(gòu)2409。如聯(lián)系圖41所解釋的,在共享RAM中存儲(chǔ) 了多種非FIFO數(shù)據(jù)結(jié)構(gòu),包括啟動(dòng)器表、⑶Binfo表、IOP表、傳輸請(qǐng)求表、以及全局變量。注意,每個(gè)空閑列表與其關(guān)聯(lián)的表必須被存儲(chǔ)在相同的共享RAM子組上(見(jiàn)下文, 聯(lián)系圖41)。共享RAM控制器2301還包含交叉仲裁邏輯2410。如上所述,交叉切換器2201對(duì)于 每個(gè)HEMi具有一個(gè)端口,并且將這些端口與八個(gè)共享RAM端口(每個(gè)共享RAM子組一個(gè))、 全局寄存器、調(diào)試FIFO r以及數(shù)據(jù)路徑DRAM連接。這需要一些手段來(lái)在這些HEMi (在當(dāng) 前實(shí)施例中的23個(gè))之間仲裁訪(fǎng)問(wèn)共享的RAM和DRAM端口。由交叉仲裁邏輯2410處理該仲裁。該邏輯使用公平的仲裁算法,以在多于一個(gè) HEMi需要訪(fǎng)問(wèn)相同端口的情況下在這些HEMi之間仲裁。在當(dāng)前的優(yōu)選實(shí)施例中,該仲裁以 循環(huán)的方式進(jìn)行,從最近獲得對(duì)該端口的訪(fǎng)問(wèn)的HEMi開(kāi)始,通過(guò)所述HEMi向上計(jì)數(shù)直到到 達(dá)期望訪(fǎng)問(wèn)的第一個(gè)HEMi為止,從最大編號(hào)的HEMi (在當(dāng)前實(shí)施例中的HEMi 22)回卷到 HEMi 0。因此,如果HEMi 5和10需要訪(fǎng)問(wèn)特定共享RAM端口,并且最近訪(fǎng)問(wèn)該端口的HEMi 是HEMi 15,則將準(zhǔn)許HEMi 5訪(fǎng)問(wèn),這是因?yàn)?,交叉仲裁邏?410將從15起向上計(jì)數(shù),在 22后回卷,并且HEMi 5將是需要訪(fǎng)問(wèn)該端口之中的其第一個(gè)到達(dá)的HEMi。應(yīng)該理解,可以 使用多種其它的仲裁算法。交叉仲裁邏輯2410還包含這樣的機(jī)制在已經(jīng)獲得對(duì)端口的訪(fǎng)問(wèn)的HEMi的請(qǐng)求 時(shí),在端口上放置保留(hold)。這允許HEMi完成不應(yīng)被中斷的事務(wù)。注意,圖24中所示的設(shè)計(jì)允許模塊的可擴(kuò)展性,這是因?yàn)槊看渭尤雴蝹€(gè)閃存端口 可以提高系統(tǒng)的容量。這么做需要加入閃存端口、閃存、以及閃存HEMi,并為每四個(gè)被加入 的HEMi加入一個(gè)共享RAM(以保持HEMi工作列表(見(jiàn)下文)),再對(duì)于每個(gè)共享RAM加上四 組FIFO指針寄存器。加入共享RAM還添加了可以被分配到附加⑶Binfo、IOP以及傳輸請(qǐng) 求的空間。此外,向交叉切換器2201加入新共享RAM端口相對(duì)容易。該類(lèi)型的擴(kuò)展需要共享RAM子組的布局的很小的重新設(shè)計(jì),從而將數(shù)據(jù)跨越新加 入的子組分散,但可以通過(guò)修改用于初始化共享RAM子組的數(shù)據(jù)來(lái)處理它。不需要對(duì)HEMi 或HEMi固件的改變。該模塊化設(shè)計(jì)允許從包含兩到三個(gè)閃存端口的簡(jiǎn)單系統(tǒng)向包含至多23個(gè)閃存端口的大得多的系統(tǒng)擴(kuò)展,而不需要任何軟件或主要的硬件改變。因此,可以將相同的結(jié)構(gòu)用 于僅包括兩到三個(gè)HEMi的便宜的工作站設(shè)計(jì),或大得多的系統(tǒng)。共享RAM控制器2301還包括共享RAM訪(fǎng)問(wèn)寄存器塊2411,其被HEMi用于訪(fǎng)問(wèn)共 享RAM塊318。塊2411包括以下寄存器共享RAM地址寄存器2412包含雙字形式的共享RAM中的地址,該雙字是訪(fǎng)問(wèn)的對(duì) 象。該地址的高位指示要選擇的特定共享RAM子組,低位指示該子組中的位置。共享RAM數(shù)據(jù)自動(dòng)遞增(Autoinc)寄存器2413保持從存儲(chǔ)在地址寄存器中的地 址讀取或要向其寫(xiě)入的雙字?jǐn)?shù)據(jù)。共享RAM數(shù)據(jù)自動(dòng)遞增寄存器的使用導(dǎo)致地址寄存器 2412中的值自動(dòng)遞增。在讀時(shí),一旦數(shù)據(jù)被復(fù)制進(jìn)寄存器2413,地址寄存器2412就遞增。 在寫(xiě)時(shí),一旦從寄存器2413向外寫(xiě)數(shù)據(jù),地址寄存器2412就遞減。與重復(fù)計(jì)數(shù)(Itepeat Count)寄存器2702 (見(jiàn)下文,聯(lián)系圖27) —起使用該自動(dòng)遞 增寄存器,用于數(shù)據(jù)的DMA型塊傳輸。所需的傳輸次數(shù)被寫(xiě)入重復(fù)計(jì)數(shù)寄存器2702,并且初 始地址被寫(xiě)入地址寄存器2412。然后,數(shù)據(jù)自動(dòng)遞增寄存器2413隨后將重復(fù)讀或?qū)懺谥貜?fù) 計(jì)數(shù)寄存器中指示的重復(fù)次數(shù),其中每次重復(fù)導(dǎo)致地址寄存器2412遞增,從而下一訪(fǎng)問(wèn)針 對(duì)共享RAM中的下一雙字。共享RAM數(shù)據(jù)寄存器2414執(zhí)行與數(shù)據(jù)自動(dòng)遞增寄存器相同的功能,但不引起地址 寄存器2412遞增。寄存器2414被用于對(duì)相同存儲(chǔ)位置的多次訪(fǎng)問(wèn),例如,讀取變量然后修 改它。映射號(hào)(Mapnum)寄存器2415被用于選擇共享RAM塊318中的一個(gè)FIFO。頂部(top)寄存器2416、添附(Append)寄存器2417、推入(Push)寄存器2418、 以及彈出(Pop)寄存器2419各自保持雙字?jǐn)?shù)據(jù)。這些寄存器被用于對(duì)由數(shù)據(jù)映射寄存器 2415選擇的FIFO的四個(gè)不同類(lèi)型的訪(fǎng)問(wèn)。HEMi可以從FIFO的頂部讀值而不修改FIFO中 的頂部值的位置,或者,其可以使頂部值從FIFO中“彈出”,由此引起FIFO頂部指向FIFO中 的下一值。這些操作導(dǎo)致返回值被分別寫(xiě)入頂部寄存器2416或彈出寄存器2419中。HEMi還可以將值“推入”到FIFO的頂部,從而該新值變成FIFO的新頂部,或者將 值添加到FIFO的底部。對(duì)于這些操作,由HEMi將要被寫(xiě)入的數(shù)據(jù)分別放置到推入寄存器 2418或添附寄存器2417中。在FIFO的頂部或底部放置信息的能力提供了額外的靈活性。例如,這允許將更重 要的任務(wù)放置在工作列表的頂部,而將較不重要的任務(wù)放置在底部。圖25圖示了向和從數(shù)據(jù)路徑DRAM 107的輸入和輸出路徑。在當(dāng)前的實(shí)施例中, SSD控制器106可以包括需要訪(fǎng)問(wèn)DRAM的18個(gè)資源(取決于結(jié)構(gòu))至多12個(gè)閃存級(jí)緩 沖器(示出為FSB 0 308,FSB 1 314以及FSB 11 2501,為了清楚的目的,未示出1和11之 間的閃存級(jí)緩沖器;如上所解釋?zhuān)琒SD控制器106的特定實(shí)施可以具有少于12個(gè)閃存端口, 并因此具有少于12個(gè)閃存級(jí)緩沖器)、PIO緩沖器2204、調(diào)試FIFO 2210、接收級(jí)緩沖器0 1706、傳送級(jí)緩沖器0 1708、接收級(jí)緩沖器1 1707以及傳送級(jí)緩沖器1 1709。這些資源與數(shù)據(jù)路徑DRAM之間的路徑在這里被稱(chēng)為“信道”。應(yīng)該理解,雖然每個(gè) 資源都有必要通過(guò)物理傳送路徑連接到DRAM,但信道本質(zhì)上是概念性的,且其不一定反映 實(shí)際的總線(xiàn)結(jié)構(gòu)。在當(dāng)前的實(shí)施例中,數(shù)據(jù)路徑DRAM 107具有標(biāo)記為DRAM端口 2502的單個(gè)輸入/輸出端口,然而,用于此目的的其它存儲(chǔ)器可以具有更多數(shù)量的端口。如上所解釋?zhuān)珼RAM調(diào) 度器2304在這些信道之間以循環(huán)方式仲裁向需要訪(fǎng)問(wèn)DRAM端口 2502的信道分配訪(fǎng)問(wèn)。在 替代實(shí)施例中,可以使用其它仲裁方案。例如,可以根據(jù)被傳輸?shù)臄?shù)據(jù)類(lèi)型將訪(fǎng)問(wèn)按優(yōu)先級(jí) 排序,或者可以讓尋求訪(fǎng)問(wèn)DRAM的資源(例如,調(diào)試FIFO 2210)的優(yōu)先級(jí)低于閃存級(jí)緩沖 器訪(fǎng)問(wèn)。圖25圖示了信道與DRAM端口 2502之間通過(guò)切換器2503的連接。通過(guò)在DRAM調(diào) 度器2304的控制下操作,切換器2503每次將一個(gè)信道連接到DRAM端口 2502。圖25中所 示的箭頭圖示了所允許的連接的方向性,例如,閃存級(jí)緩沖器308可以從DRAM讀、或向DRAM 寫(xiě),調(diào)試FIFO 2210可以向DRAM中寫(xiě),但不可以從DRAM讀,而傳送緩沖器1708可以從DRAM 讀,但不能向DRAM寫(xiě)。切換器2503本質(zhì)上是概念性的,且不一定表示單個(gè)大切換器。相反,此功能性 (functionality)可以包括大量部署在不同位置的邏輯門(mén)。該功能性的準(zhǔn)確物理設(shè)計(jì)是實(shí) 施特定的。當(dāng)信道獲得對(duì)DRAM端口 2502的訪(fǎng)問(wèn)時(shí),數(shù)據(jù)在該信道與DRAM之間的移動(dòng)以突發(fā) 包的方式發(fā)生,其由各自包括四個(gè)雙字的傳輸構(gòu)成。該突發(fā)包繼續(xù),直到讀或?qū)懲瓿?,或?直到連接到該信道的資源滿(mǎn)了(對(duì)于來(lái)自DRAM的傳輸)或空了(對(duì)于向DRAM的傳輸)為 止。一旦突發(fā)包被中止,該信道便失去其通過(guò)切換器2503的訪(fǎng)問(wèn),并且,DRAM調(diào)度器2304 將訪(fǎng)問(wèn)賦予需要該訪(fǎng)問(wèn)的下一個(gè)信道。E. HEMi如上所述,SSD控制器106包含在這里稱(chēng)為HEMi的大量處理器。如這里所使用的, 詞匯“處理器”或“微處理器”指代包括能夠執(zhí)行至少基本算數(shù)和/或邏輯操作的ALU、處理 器專(zhuān)用的保持?jǐn)?shù)據(jù)的存儲(chǔ)器、以及控制ALU的操作的控制邏輯(所述控制邏輯包括硬件、軟 件和/或固件)的任何分立的邏輯塊。如這里所使用的,“HEMi”指代在當(dāng)前優(yōu)選實(shí)施例中 使用的特定處理器,然而,應(yīng)該理解,內(nèi)部HEMi設(shè)計(jì)的大量細(xì)節(jié)在這里是無(wú)關(guān)的,并且,為 了清楚而將它們忽略。此外,雖然HEMi設(shè)計(jì)構(gòu)成當(dāng)前的優(yōu)選處理器實(shí)施例,但如本領(lǐng)域的 普通技術(shù)人員所理解的,也可以使用許多其它的處理器設(shè)計(jì)。在當(dāng)前實(shí)施例中,SSD控制器106可以包含至多23個(gè)HEMi,標(biāo)記為如下(注意,在 該實(shí)施例中,編號(hào)系統(tǒng)包括間隙)HEMi 0 用于主機(jī)端口 0的接收HEMi (1702)HEMi 1 用于主機(jī)端口 0的傳送HEMi (1704)HEMi 2 用于主機(jī)端口 1的接收HEMi (1703)HEMi 3 用于主機(jī)端口 1的傳送HEMi (1705)HEMi 8 SCSI HEMi (2001)HEMi 9-14 =Rdffr HEMi (2101-2106)HEMi 15-26 閃存 HEMi (例如,307、309、313)。圖26圖示了 HEMi的內(nèi)部功能的某些方面。在當(dāng)前的優(yōu)選實(shí)施例中,所有HEMi共 享相同的硬件元件,但其通過(guò)使用不同的固件布局、以及通過(guò)連接到不同的緊密耦接的元 件而被定制用于不同的功能,下文更詳細(xì)地描述這兩點(diǎn)。每個(gè)HEMi包括iRAM 2601,其是能夠保持實(shí)施1000個(gè)56位VLIW指令的固件的指令RAM。這些指令每個(gè)都能夠讀1-2個(gè)共享RAM或寄存器位置、執(zhí)行ALU操作、以及按結(jié)果 寫(xiě)回或分支。如下所述,數(shù)據(jù)路徑DRAM 107為每個(gè)類(lèi)型的HEMi存儲(chǔ)最多八個(gè)不同的固件覆蓋, 并且,當(dāng)基于執(zhí)行的功能而需要時(shí),將這些覆蓋復(fù)制到iRAM2601中。這允許每個(gè)HEMi實(shí)施 比在將固件限制于iRAM的大小的情況下可能的指令多得多的指令?;?6位地址提取(fetch) HEMi指令。該地址的3位選擇固件覆蓋,并且,13位 構(gòu)成iRAM 2601中的指令的地址。如果被提取的指令的3個(gè)固件覆蓋位與當(dāng)前存儲(chǔ)在iRAM 2601中的覆蓋不匹配,則觸發(fā)固件交換。一般地,通過(guò)將支持需要執(zhí)行公共任務(wù)的指令的固件集合在一起而避免交換固件 覆蓋。例如,單個(gè)固件覆蓋可以處理讀和寫(xiě)所必需的大多數(shù)公共操作。其它固件覆蓋處理 例如初始化和錯(cuò)誤校正處理。每個(gè)HEMi還包括2K字節(jié)的mRAM 2602,其用作正被HEMi使用的數(shù)據(jù)的存儲(chǔ)空間。如圖26所示,每個(gè)HEMi包括六級(jí)流水線(xiàn),其由提取級(jí)2603、I緩沖器級(jí)2604、解 碼級(jí)2605、讀級(jí)2606、ALU級(jí)2607與寫(xiě)回級(jí)2608構(gòu)成。在當(dāng)前的優(yōu)選實(shí)施例中,每個(gè)這些 級(jí)在HEMi內(nèi)構(gòu)成邏輯塊,然而,在替代實(shí)施例中,這些可以表示HEMi狀態(tài),與用于產(chǎn)生狀態(tài) 的下層處理器硬件無(wú)關(guān)。提取級(jí)確定與要執(zhí)行的指令關(guān)聯(lián)的固件的iRAM地址。然后,將該地址傳遞到 iRAM,如提取級(jí)2603和iRAM 2601之間的箭頭所指示。然后,在該地址處的固件被載入緩沖器,如iRAM 2601和I緩沖器級(jí)2604之間的
箭頭所指示。然后,該固件被轉(zhuǎn)交給解碼級(jí)2605 (如I緩沖器級(jí)2604和解碼級(jí)2605之間的箭 頭所示)。解碼級(jí)解碼指令,并執(zhí)行跳轉(zhuǎn)和調(diào)用。其將跳轉(zhuǎn)和調(diào)用傳送回提取級(jí)2603 (如從 解碼級(jí)2605到提取級(jí)2603的箭頭所指示)。在直線(xiàn)指令執(zhí)行的情況下,解碼級(jí)2605將參 數(shù)傳遞到讀級(jí)2606。這些參數(shù)包括為所需要的操作檢索數(shù)據(jù)的位置。讀級(jí)2606讀指令所需要的1個(gè)或2個(gè)存儲(chǔ)器或寄存器位置。在讀兩個(gè)位置的情 況中,讀級(jí)2606重復(fù),如從讀級(jí)2606的輸出向其輸入循環(huán)回來(lái)的箭頭所指示。如從外部讀 2609到讀級(jí)2606的箭頭所指示,用于該信息的資源包括mRAM 2602與外部存儲(chǔ)器或寄存器 (由外部讀2609概念性地指示)。信息還可以來(lái)自圖26中未示出的內(nèi)部寄存器。讀級(jí)2606將獲得的信息傳遞到ALU級(jí)2607,用于由HEMi的ALU進(jìn)行的運(yùn)算。來(lái) 自運(yùn)算的結(jié)果被傳遞到提取級(jí)2603 (在條件分支的情況下)或?qū)懟丶?jí)2608。寫(xiě)回級(jí)2608將ALU運(yùn)算的結(jié)果寫(xiě)入由指令指定的位置。如從寫(xiě)回級(jí)2608向外指 向的箭頭所指示,結(jié)果可以被寫(xiě)入mRAM 2602或外部資源(由外部寫(xiě)2610概念性地指示)。圖27圖示了在圖26中未示出的HEMi設(shè)計(jì)的方面,包括用于訪(fǎng)問(wèn)各種存儲(chǔ)器范圍 的寄存器以及緊密耦接到HEMi的邏輯(緊密耦接的邏輯塊2701)。應(yīng)該理解,HEMi和緊密 耦接的邏輯兩者都可以包括寄存器和這里未示出的其它部件。此外,為了闡述的目的,寄存 器組自身已被簡(jiǎn)化。圖27圖示了閃存HEMi 307及其緊密耦接的邏輯塊2701。如上所述,HEMi的內(nèi)部 設(shè)計(jì)是相同的。然而,不同類(lèi)型的HEMi具有不同的密耦合的邏輯塊。塊2701專(zhuān)用于閃存 HEMi0下文描述用于其它類(lèi)型的HEMi的密耦合的邏輯的區(qū)別。
36
HEMi 307包括重復(fù)計(jì)數(shù)寄存器2702,其保持用于計(jì)算操作應(yīng)被重復(fù)的次數(shù)的值。 將值載入重復(fù)計(jì)數(shù)寄存器導(dǎo)致由HEMi執(zhí)行的下一個(gè)操作被重復(fù)特定次數(shù),其中每次重復(fù) 導(dǎo)致重復(fù)計(jì)數(shù)寄存器中的值遞減。在以下各種情況下,可以將值“ 1,,強(qiáng)制賦予重復(fù)計(jì)數(shù)寄存器2702,由此結(jié)束循環(huán)(a)如果條件分支指令由于重復(fù)計(jì)數(shù)寄存器而正在循環(huán),并且該條件發(fā)生,從而執(zhí) 行該分支,則重復(fù)計(jì)數(shù)寄存器被自動(dòng)強(qiáng)制為“1”,這具有導(dǎo)致下一指令出現(xiàn)一次的效果。應(yīng) 該理解,在條件分支的情況中,所述下一指令將是該分支中的第一個(gè)指令。(b)當(dāng)設(shè)置與重復(fù)計(jì)數(shù)寄存器關(guān)聯(lián)的標(biāo)志時(shí),任何將某些FIFO計(jì)數(shù)寄存器從0遞 增到1的動(dòng)作將值1強(qiáng)制賦予重復(fù)計(jì)數(shù)寄存器。FIFO計(jì)數(shù)寄存器是與用于HEMi的工作列 表關(guān)聯(lián)的寄存器(例如,聯(lián)系圖24所描述的計(jì)數(shù)寄存器2408)、以及接收緩沖器計(jì)數(shù)寄存器 (下文結(jié)合圖28描述)。當(dāng)HEMi有任務(wù)執(zhí)行時(shí),該能力被用于強(qiáng)制HEMi離開(kāi)休眠模式。當(dāng)HEMi沒(méi)有工作 執(zhí)行時(shí),其進(jìn)入休眠模式,在該模式中,空指令(nop)被重復(fù)設(shè)定的次數(shù),接著,HEMi喚醒, 檢查它的工作列表,并且,如果沒(méi)有任務(wù)出現(xiàn)在工作列表中,則恢復(fù)執(zhí)行空指令。這通過(guò)將 設(shè)定數(shù)載入重復(fù)計(jì)數(shù)寄存器2702中以及接著執(zhí)行空指令而完成。當(dāng)HEMi在休眠模式中時(shí),將任務(wù)寫(xiě)入HEMi的工作列表(見(jiàn)下文)中導(dǎo)致HEMi喚 醒。這通過(guò)來(lái)自相關(guān)計(jì)數(shù)寄存器的信號(hào)完成,該信號(hào)將“1”強(qiáng)制賦予重復(fù)計(jì)數(shù)寄存器2702, 由此導(dǎo)致HEMi喚醒并在執(zhí)行了下一空指令之后執(zhí)行合適的動(dòng)作。使用重復(fù)計(jì)數(shù)寄存器強(qiáng)制重復(fù)的空指令允許HEMi進(jìn)入低功率休眠模式,而不需 要任何專(zhuān)門(mén)的休眠模式邏輯。此外,這在HEMi將保持在休眠模式中多長(zhǎng)時(shí)間方面允許非常 細(xì)膩的顆粒度。例如,如果HEMi因?yàn)楫?dāng)前沒(méi)有要完成的工作而進(jìn)入休眠模式,則將最大值 寫(xiě)入重復(fù)計(jì)數(shù)寄存器。在當(dāng)前的優(yōu)選實(shí)施例中,該值略高于100萬(wàn),并引起HEMi保持在休 眠模式中(除非被提前喚醒)約4毫秒。在另一示例中,當(dāng)HEMi開(kāi)始乘法或除法運(yùn)算時(shí),重復(fù)計(jì)數(shù)寄存器可以被用于強(qiáng)制 32個(gè)空指令,因?yàn)檫@樣的運(yùn)算花費(fèi)32個(gè)HEMi周期。這允許HEMi進(jìn)入低功率休眠模式,同 時(shí)等待下文描述的乘法或除法的結(jié)果,并由可以與HEMi的其余部分的操作獨(dú)立地操作的 邏輯處理所述乘法或除法。注意,僅在執(zhí)行空指令的情況下使用上述標(biāo)志,以使得重復(fù)計(jì)數(shù)被強(qiáng)制為1,因?yàn)?在其它情況下可能中斷代碼循環(huán)。為此原因,當(dāng)空指令跟隨循環(huán)計(jì)數(shù)時(shí)設(shè)置該標(biāo)志,而對(duì)于 其它指令不設(shè)置該標(biāo)志。HEMi 307還包括局部寄存器模塊2703,其控制對(duì)HEMi的iRAM 2601和mRAM 2603 的訪(fǎng)問(wèn)。局部地址寄存器2704保持局部存儲(chǔ)器中的地址。根據(jù)地址的高位,該地址可以在 iRAM或mRAM中。局部數(shù)據(jù)自動(dòng)遞增寄存器2705保持從局部存儲(chǔ)器中讀取或?qū)懭刖植看?儲(chǔ)器的雙字?jǐn)?shù)據(jù)。從該寄存器的寫(xiě)導(dǎo)致局部地址寄存器2704遞增。通過(guò)將值寫(xiě)入局部地 址寄存器2704,將值載入重復(fù)計(jì)數(shù)寄存器2702、以及執(zhí)行從mRAM向寄存器2705與從寄存 器2705向另一位置的移動(dòng)(可以在一個(gè)指令中執(zhí)行這些移動(dòng)),HEMi可以從mRAM中的連 續(xù)地址執(zhí)行一系列雙字的如同DMA的移動(dòng)。每次循環(huán)引起寄存器2704自動(dòng)遞增、以及重復(fù) 計(jì)數(shù)寄存器2702自動(dòng)遞減,并且該移動(dòng)繼續(xù)到重復(fù)計(jì)數(shù)寄存器2702到達(dá)0為止。注意,如
37果目標(biāo)(target)類(lèi)似地使用數(shù)據(jù)自動(dòng)寄存器,則該移動(dòng)將再次被存儲(chǔ)在該目標(biāo)的連續(xù)的 地址中,而不需要額外的邏輯或指令。局部數(shù)據(jù)寄存器2706保持從局部存儲(chǔ)器中讀取的或?qū)懭肫渲械碾p字?jǐn)?shù)據(jù),但該 寄存器不引起地址遞增。ARM 2002與局部寄存器塊2703通過(guò)專(zhuān)用端口通信。ARM 2002是能夠?qū)⒌刂穼?xiě)入 對(duì)應(yīng)于iRAM 2601的局部地址寄存器2704的僅有資源。ARM2002使用該能力來(lái)控制將新固 件覆蓋到iRAM 2601中的處理。HEMi 307還包括窗口寄存器2707,其包括五個(gè)寄存器,每個(gè)都保持HEMi的mRAM 2602中的地址。四個(gè)這樣的寄存器被用于在mRAM中設(shè)立窗口,每個(gè)窗口包括128個(gè)雙字。 這些窗口被用于操縱數(shù)據(jù)結(jié)構(gòu),如傳輸請(qǐng)求和頁(yè)面請(qǐng)求。例如,如果需要閃存HEMi操作頁(yè) 面請(qǐng)求,則該頁(yè)面請(qǐng)求在iRAM中的地址可以被加載到一個(gè)窗口寄存器中。接著,對(duì)頁(yè)面請(qǐng) 求的特定區(qū)域的訪(fǎng)問(wèn)可以被處理為從窗口寄存器中的值的偏移,因此,當(dāng)需要對(duì)數(shù)據(jù)結(jié)構(gòu) 重復(fù)操作時(shí),簡(jiǎn)化了地址計(jì)算處理。第五窗口寄存器被用于mRAM棧,其存儲(chǔ)局部變量與函數(shù)自變量。棧窗口寄存器與 其它四個(gè)窗口寄存器類(lèi)似地操作,除了 HEMi具有特別的棧相關(guān)的指令之外,該指令自動(dòng)遞 增或遞減棧窗口寄存器中的值,并提供用于對(duì)棧窗口地址增加偏移的自動(dòng)化機(jī)制,由此允 許一個(gè)時(shí)鐘棧操縱。HEMi內(nèi)部寄存器(包括局部寄存器塊2703和窗口寄存器2707)被“危險(xiǎn)(hazard) 檢查”。因?yàn)镠EMi是流水線(xiàn)化的處理器,所以,如果寫(xiě)操作在沒(méi)有這種保護(hù)的情況下緊挨在 移動(dòng)操作之前,則寫(xiě)可能實(shí)際上在移動(dòng)之后發(fā)生。因此,如果寫(xiě)指令將值寫(xiě)入寄存器中,并 且緊挨的后續(xù)操作將寄存器內(nèi)容移動(dòng)到另一位置,則流水線(xiàn)可以導(dǎo)致在寫(xiě)之前移動(dòng)寄存器 的舊內(nèi)容。危險(xiǎn)檢查通過(guò)檢查這種情況并延遲后續(xù)指令直到已加載了合適的數(shù)據(jù)而避免這 種可能性。乘法/除法引擎2717被用于執(zhí)行乘法和除法運(yùn)算。因?yàn)槌朔?除法引擎可以與 HEMi的其余部分獨(dú)立地操作,所以,HEMi可以將要被運(yùn)算的值寫(xiě)入乘法/除法引擎2717中 的寄存器中,然后在運(yùn)算進(jìn)行的同時(shí)進(jìn)入休眠狀態(tài),從而省電。上文描述了該休眠模式。手動(dòng)CRC引擎2719產(chǎn)生針對(duì)通過(guò)關(guān)聯(lián)的HEMi寫(xiě)入的信息的CRC值。切換字節(jié)順序(Switch-Endian)引擎2720是自動(dòng)交換寫(xiě)入該寄存器的數(shù)據(jù)的字 節(jié)順序的32位寄存器。因?yàn)椴煌膮f(xié)議具有不同的字節(jié)排序,所以使用它。數(shù)據(jù)以小尾數(shù) 法(little-endian)格式存在在閃存中,但對(duì)于特定協(xié)議,其被以大尾數(shù)法(big-endian) 格式接收而且必須以大尾數(shù)法格式傳輸。每個(gè)HEMi還具有關(guān)聯(lián)的密耦合的邏輯塊,例如,密耦合的邏輯塊2701。密耦合的 邏輯塊2701圖示了密耦合到每個(gè)閃存HEMi的邏輯。如下所述,密耦合到其它類(lèi)型的HEMi 的邏輯塊在某些方面與密耦合的邏輯塊2701不同。因此,即使所有HEMi的內(nèi)部設(shè)計(jì)都相 同,不同密耦合的邏輯的使用加上不同固件的使用也允許每種類(lèi)型的HEMi針對(duì)特定的任 務(wù)而被定制。密耦合的邏輯塊2701包括“密耦合”到HEMi 307的資源,意味著HEMi307是可以 訪(fǎng)問(wèn)這些資源的僅有的HEMi,這些資源共享一個(gè)地址空間,并且對(duì)這些資源的訪(fǎng)問(wèn)在無(wú)等 待狀態(tài)的基礎(chǔ)上發(fā)生。
雖然在當(dāng)前的優(yōu)選實(shí)施例中,密耦合的邏輯在HEMi的外部,但在替代實(shí)施例中, 該邏輯中的某些或全部可以被合并到HEMi本身中。密耦合的邏輯塊2701包括級(jí)緩沖器訪(fǎng)問(wèn)寄存器塊2708,其控制對(duì)與閃存HEMi關(guān) 聯(lián)的閃存級(jí)緩沖器(例如,閃存級(jí)緩沖器308)的訪(fǎng)問(wèn)。地址寄存器2709、數(shù)據(jù)寄存器2710與數(shù)據(jù)自動(dòng)遞增寄存器2711與共享RAM訪(fǎng)問(wèn) 寄存器塊2411中的對(duì)應(yīng)寄存器類(lèi)似地操作。閃存HEMi使用對(duì)級(jí)緩沖器的此訪(fǎng)問(wèn)路徑,來(lái)修改存儲(chǔ)在通過(guò)級(jí)緩沖器的超級(jí)塊 元數(shù)據(jù)表中、且在意外的掉電之后的重建期間所需要的時(shí)間戳信息(下文聯(lián)系圖58描述該
重建處理)。閃存?zhèn)鬏斢?jì)數(shù)寄存器2712、閃存地址寄存器2713與閃存數(shù)據(jù)寄存器2714控制閃 存組與閃存級(jí)緩沖器之間的DMA操作。寄存器2713包含要訪(fǎng)問(wèn)的閃存地址。寄存器2712 包含以雙字形式的讀或?qū)憯?shù)量。寄存器2714包含從閃存中接收或要被發(fā)送到閃存的數(shù)據(jù)。DMA地址寄存器2715和DMA傳輸計(jì)數(shù)寄存器2716被用于控制數(shù)據(jù)路徑DRAM 107 與級(jí)緩沖器之間的DMA傳輸?shù)募?jí)緩沖器側(cè)。寄存器2715保持用于傳輸?shù)募?jí)緩沖器地址,并 且,寄存器2716保持要在級(jí)緩沖器與PIO緩沖器之間傳輸?shù)碾p字的數(shù)量。將值寫(xiě)入寄存器 2716中導(dǎo)致級(jí)緩沖器與PIO緩沖器之間的DMA傳輸?shù)拈_(kāi)始。一般地,HEMi可以使用內(nèi)部移動(dòng)命令來(lái)在內(nèi)部位置、密耦合的邏輯與某些外部位 置之間移動(dòng)數(shù)據(jù)。因此,例如,當(dāng)需要新固件覆蓋時(shí),ARM處理器2002在DRAM地址寄存器 2212中為覆蓋建立DRAM地址(如下文所述,固件覆蓋被存儲(chǔ)在DRAM中),在局部地址寄存 器2704中為覆蓋建立iRAM地址,在傳輸計(jì)數(shù)寄存器2213中放置來(lái)自DRAM傳輸?shù)臄?shù)量,并 且,在重復(fù)計(jì)數(shù)寄存器2702中放置傳輸所需要的雙字的數(shù)量。從DRAM通過(guò)PIO緩沖器到 數(shù)據(jù)寄存器2214的DMA傳輸如上所述進(jìn)行。內(nèi)部HEMi邏輯引起來(lái)自寄存器2214的數(shù)據(jù) 被寫(xiě)入局部數(shù)據(jù)自動(dòng)遞增寄存器2705,并且從其被寫(xiě)入到由局部地址寄存器2704所指向 的iRAM位置。接著,重復(fù)計(jì)數(shù)寄存器2702被遞減,局部地址寄存器遞增,并且該處理重復(fù)。 ARM 2002在系統(tǒng)引導(dǎo)時(shí)使用該能力將初始固件覆蓋加載到每個(gè)HEMi的iRAM中。為考慮另一示例,將IOP從共享RAM(見(jiàn)下文,聯(lián)系圖41)復(fù)制到HEMi的mRAM中 僅需要四個(gè)HEMi命令寫(xiě)共享RAM地址寄存器,共享RAM地址;這將共享RAM中的IOP的地址寫(xiě)入寄存器 2412 中。寫(xiě)局部地址寄存器,mRAM地址;這將IOP被存儲(chǔ)到的mRAM中的地址寫(xiě)入寄存器 2704 中。寫(xiě)重復(fù)計(jì)數(shù)寄存器,IOP中的#雙字;這將包含在IOP中的雙字的數(shù)量載入重復(fù)計(jì) 數(shù)寄存器2702。移動(dòng)局部數(shù)據(jù)自動(dòng)遞增寄存器,共享RAM數(shù)據(jù)自動(dòng)遞增寄存器;這將值從寄存器 2413移動(dòng)到寄存器2705。寄存器2413中的值是寄存器2412指向的共享RAM中的雙字。將 該值移動(dòng)到寄存器2705使其被傳輸?shù)降刂芳拇嫫?704所指向的mRAM位置。指定兩個(gè)數(shù) 據(jù)自動(dòng)遞增寄存器自動(dòng)引起所關(guān)聯(lián)的地址寄存器一旦發(fā)生移動(dòng)時(shí)便遞增。如上所述,該移 動(dòng)指令重復(fù),直到重復(fù)計(jì)數(shù)寄存器達(dá)到0為止。如此,HEMi可以完成自動(dòng)發(fā)生并利用最小數(shù)量的命令的DMA型的訪(fǎng)問(wèn)。
密耦合的邏輯塊2701還包括調(diào)試寄存器塊2718,其包括與向和從調(diào)試FIFO 2210 的傳輸有關(guān)的寄存器。如以上所指出,密耦合的邏輯塊2701專(zhuān)用于閃存HEMi。與其它HEMi關(guān)聯(lián)的密耦 合的邏輯塊不包括級(jí)緩沖訪(fǎng)問(wèn)寄存器塊2708。用于接收和傳送HEMi (例如,接收HEMi 0 1702和傳送HEMi 0 1704)的密耦合的 邏輯塊包括設(shè)計(jì)來(lái)支持主機(jī)端口操作的附加寄存器。在圖28中示出這些寄存器。用于接收HEMi的密耦合的邏輯塊包含用于與涉及主機(jī)端口的接收功能通信以及 對(duì)其控制的寄存器,包括以下接收緩沖訪(fǎng)問(wèn)寄存器塊2801 其用于設(shè)立從接收級(jí)緩沖器向數(shù)據(jù)路徑DRAM 107 的DMA傳輸。該塊包括保持用于該傳輸?shù)腄RAM地址的DMA地址寄存器2802、以及保持要進(jìn) 行的傳輸?shù)臄?shù)量的DAM傳輸計(jì)數(shù)寄存器2803。接收緩沖計(jì)數(shù)寄存器2804 其給出接收級(jí)緩沖器數(shù)據(jù)FIFO中的條目的數(shù)量。如 果接收HEMi處于休眠模式,則將值寫(xiě)入該寄存器引起接收HEMi喚醒。基元FIFO訪(fǎng)問(wèn)寄存器塊2805 該組寄存器與進(jìn)站基元FIFO 1808通信。這些寄存 器包括頂部寄存器2806 (從FIFO中讀,而不改變FIFO的頂部)、彈出寄存器2807 (從FIFO 中讀取頂部數(shù)據(jù)項(xiàng),并且將FIFO頂部移動(dòng)到下一數(shù)據(jù)項(xiàng))、計(jì)數(shù)寄存器2808 (包含F(xiàn)IFO中 的數(shù)據(jù)項(xiàng)的數(shù)量)以及添附寄存器2809 (將數(shù)據(jù)項(xiàng)加入到FIFO的末端)。非數(shù)據(jù)有效載荷訪(fǎng)問(wèn)寄存器塊2810 該組寄存器與非數(shù)據(jù)有效載荷FIF01804通 信。這些寄存器包括頂部寄存器2811、彈出寄存器2812、計(jì)數(shù)寄存器2813以及添附寄存器 2814,它們與基元FIFO訪(fǎng)問(wèn)寄存器塊中相似名稱(chēng)的寄存器相同地操作。頭部大小寄存器2815 其指示當(dāng)前頭部有多長(zhǎng)。該值允許接收HEMi在非數(shù)據(jù)有 效載荷FIFO上的一個(gè)頭部與下一個(gè)頭部之間不同?;ヅ浼拇嫫鲏K2816 這些寄存器被用于將值載入基元匹配邏輯1802,來(lái)針對(duì) 特定協(xié)議定制基元匹配邏輯。上文聯(lián)系圖19解釋了基元匹配邏輯1802的使用和定制。如上所述,基元匹配邏輯1802包含兩組寄存器基元匹配寄存器1902與基元匹配 控制寄存器1903。基元匹配#寄存器2817指向每組中十六個(gè)寄存器之一,導(dǎo)致存儲(chǔ)在基 元匹配加載寄存器2818中的值被載入基元匹配寄存器1902中對(duì)應(yīng)的寄存器中,并且存儲(chǔ) 在基元匹配控制加載寄存器2819中的值被載入基元匹配控制寄存器1903中對(duì)應(yīng)的寄存器 中。WffN散列(Hash)引擎2830被用于產(chǎn)生所接收的64位的全球(Worldwide)名稱(chēng)值 的24位散列。該散列被內(nèi)部使用,以便所接收的幀(其可以包含發(fā)送者的WffN的24位散 列值)可以與啟動(dòng)器表4108 (見(jiàn)下文)匹配,啟動(dòng)器表4108包含64位值。圖28還示出唯一的傳送HEMi密耦合的寄存器傳送緩沖訪(fǎng)問(wèn)寄存器塊2820 其被用于設(shè)立從數(shù)據(jù)路徑DRAM 107的DMA傳送的 傳送級(jí)寄存器側(cè)。該寄存器塊包括DMA地址寄存器2821和DAM傳輸計(jì)數(shù)寄存器2822。傳送幀緩沖FIFO訪(fǎng)問(wèn)寄存器塊2823 該組寄存器與作為傳送幀緩沖器1806的部 分的FIFO通信。這些寄存器包括彈出寄存器2824、計(jì)數(shù)寄存器2825與添附寄存器2826。命令FIFO訪(fǎng)問(wèn)寄存器塊2827 該組寄存器與作為傳送幀緩沖器1806的部分的 FIFO通信。這些寄存器包括計(jì)數(shù)寄存器2828與添附寄存器2829。
圖29圖示了閃存HEMi (例如,HEMi 307)的mRAM的內(nèi)容1.局部傳輸請(qǐng)求表2901。其包含用于保持最多六個(gè)傳輸請(qǐng)求的空間。這些傳輸 請(qǐng)求可以是從共享RAM復(fù)制到該閃存HEMi的mRAM中的傳輸請(qǐng)求與局部傳輸請(qǐng)求的組合, 局部傳輸請(qǐng)求被連同內(nèi)部操作(諸如垃圾收集(見(jiàn)下文))一起發(fā)出。例如,存取位置2902 可以存儲(chǔ)一個(gè)傳輸請(qǐng)求,存取位置2903可以存儲(chǔ)第二個(gè)傳輸請(qǐng)求。2.局部傳輸請(qǐng)求隊(duì)列2904。其是存儲(chǔ)在表2901中的傳輸請(qǐng)求的FIFO隊(duì)列,并且 排隊(duì)來(lái)被閃存HEMi操作。如下所解釋?zhuān)话愕?,?dāng)與傳輸請(qǐng)求關(guān)聯(lián)的頁(yè)面請(qǐng)求已經(jīng)完成并且傳輸請(qǐng)求本身 準(zhǔn)備好進(jìn)入完成狀態(tài)時(shí),傳輸請(qǐng)求被置于該隊(duì)列中。3.局部傳輸請(qǐng)求空閑列表2905。其保持指針列表,該指針指向局部傳輸請(qǐng)求列表 2901中的存取位置,該存取位置是空的,并因此能夠保持新傳輸請(qǐng)求。4.頁(yè)面請(qǐng)求表2906。其包含用于保持最多十八個(gè)頁(yè)面請(qǐng)求的空間。每個(gè)傳輸請(qǐng) 求可以調(diào)用三個(gè)頁(yè)面請(qǐng)求,于是,頁(yè)面請(qǐng)求表2906包含用于十八個(gè)頁(yè)面請(qǐng)求的空間,所述 十八個(gè)頁(yè)面請(qǐng)求可以由可以適合閃存HEMi傳輸請(qǐng)求表2901的六個(gè)傳輸請(qǐng)求調(diào)用。在所示 示例中,頁(yè)面請(qǐng)求表2906包括存取位置2907和2908中的頁(yè)面請(qǐng)求,存取位置2907和2908 保持用于閃存HEMi傳輸請(qǐng)求表2901的存取位置2902中的傳輸請(qǐng)求的頁(yè)面請(qǐng)求,并且,存 取位置2909中的頁(yè)面請(qǐng)求用于存取位置2903中的傳輸請(qǐng)求。在該示例中,其它頁(yè)面請(qǐng)求 存取位置是空的,意味著這些空間已被分配但當(dāng)前沒(méi)有被填入有效的頁(yè)面請(qǐng)求。5.頁(yè)面請(qǐng)求空閑列表2910。其是頁(yè)面請(qǐng)求表2906中的所有空閑頁(yè)面請(qǐng)求存取位 置的列表,意味著它們當(dāng)前未保持有效頁(yè)面請(qǐng)求。因此,該列表表示閃存HEMi可以發(fā)出的 新頁(yè)面請(qǐng)求。6.子組隊(duì)列2911。其是存儲(chǔ)在表2906中的頁(yè)面請(qǐng)求的一組FIFO隊(duì)列。閃存組 中的每個(gè)子組都有單獨(dú)的頁(yè)面請(qǐng)求隊(duì)列。一旦頁(yè)面請(qǐng)求準(zhǔn)備好被執(zhí)行,其被添附到用于保 持該頁(yè)面請(qǐng)求需要從中讀或向其寫(xiě)的地址的子組的子組隊(duì)列的末端。該閃存HEMi在子組 隊(duì)列之間依次輪換。當(dāng)其輪換到包含頁(yè)面請(qǐng)求的子組隊(duì)列時(shí),其評(píng)估該隊(duì)列上的頂部頁(yè)面 請(qǐng)求,以確定用于頁(yè)面請(qǐng)求的繼續(xù)執(zhí)行所必需的資源是否可用。如果所述資源可用,則閃存 HEMi執(zhí)行頁(yè)面請(qǐng)求所要求的在給定可用資源下可能的那些任務(wù),接著閃存HEMi輪換到下 一子組隊(duì)列。如此,閃存HEMi以循環(huán)的方式處理頁(yè)面請(qǐng)求,而不需要任何仲裁邏輯。從子 組隊(duì)列中移除已經(jīng)完成處理的頁(yè)面請(qǐng)求。聯(lián)系圖53更詳細(xì)地解釋該處理。在當(dāng)前實(shí)施例中,子組隊(duì)列是FIFO,并且以接收的順序處理頁(yè)面請(qǐng)求。在替代實(shí)施 例中,高優(yōu)先級(jí)的頁(yè)面請(qǐng)求被加入子組隊(duì)列的頂部,而不是被添附到底部。在該實(shí)施例中, 可以基于在調(diào)用傳輸請(qǐng)求中識(shí)別特別重要事務(wù)的優(yōu)先級(jí)位,在頁(yè)面請(qǐng)求中設(shè)置優(yōu)先級(jí)位。8.超級(jí)塊空閑列表2912。其包含用于包含在由該閃存HEMi控制的閃存組中的空 閑的并因此可以被寫(xiě)入的超級(jí)塊的標(biāo)識(shí)符。9.超級(jí)塊空閑列表計(jì)數(shù)器2913。其包含空閑列表2912上的超級(jí)塊的數(shù)量。該數(shù) 量被單獨(dú)地作為性能優(yōu)化而追蹤,從而根據(jù)需要而并不必須計(jì)算它。10.開(kāi)放超級(jí)塊指針2914。其保持用于當(dāng)前對(duì)寫(xiě)開(kāi)放的超級(jí)塊的編號(hào)。11.垃圾收集閾值2915。在當(dāng)前實(shí)施例中,其保持兩個(gè)變量,兩者都被用于垃圾收 集的目的臨界閾值與非臨界閾值。下文描述這些變量在垃圾收集中的使用。
41
12.局部變量2916。在當(dāng)前實(shí)施例中,其保持各種由HEMi使用的局部變量。13.??臻g2917。其保持由HEMi使用的用于處理任務(wù)的棧。14.命令表2918。其保持由當(dāng)前正被閃存HEMi處理的所有傳輸請(qǐng)求影響的命令 和LBA范圍的列表。如上所述,SSD控制器106增強(qiáng)了讀/寫(xiě)一致性,以確保操作不在次序混亂的情況 下完成。命令表2918被閃存HEMi用于增加閃存端口層的一致性。當(dāng)從閃存HEMi的工作 列表中將傳輸請(qǐng)求彈出、并將其復(fù)制到局部傳輸請(qǐng)求表2910中時(shí),相對(duì)命令列表2918檢查 由該傳輸請(qǐng)求影響的LBA范圍。如果重疊存在,則停止傳輸請(qǐng)求的執(zhí)行,直到在先傳輸請(qǐng)求 已經(jīng)完成,此時(shí),從命令表2918中移除在先傳輸請(qǐng)求的條目,并且移除對(duì)在后傳輸請(qǐng)求的 保持。一旦傳輸請(qǐng)求已準(zhǔn)備好在閃存HEMi中執(zhí)行,被該傳輸請(qǐng)求影響的LBA范圍被加入到 命令表2918。15.超級(jí)頁(yè)面指針列表2919。該列表對(duì)于閃存組中的每個(gè)子組而包含與該閃存 HEMi關(guān)聯(lián)的一個(gè)條目。對(duì)于每個(gè)子組,所關(guān)聯(lián)的條目指向當(dāng)前開(kāi)放的超級(jí)塊中的下一空閑 的超級(jí)頁(yè)面。當(dāng)超級(jí)塊初始是開(kāi)放的,且未包含數(shù)據(jù)時(shí),子組1-7指向超級(jí)頁(yè)面0,并且,子 組0指向超級(jí)頁(yè)面1 (每個(gè)超級(jí)塊的子組0的超級(jí)頁(yè)面0包含超級(jí)塊元數(shù)據(jù)表,并因此不可 用于常規(guī)寫(xiě)入)。閃存HEMi使用這些計(jì)數(shù)器將超級(jí)頁(yè)面分配到包括寫(xiě)命令并因此需要空閑超級(jí)頁(yè) 面的頁(yè)面請(qǐng)求。當(dāng)超級(jí)頁(yè)面已經(jīng)被分配給頁(yè)面請(qǐng)求時(shí)(這在頁(yè)面請(qǐng)求初始化期間發(fā)生),用 于包含該超級(jí)頁(yè)面的子組的超級(jí)頁(yè)面指針列表2919中的條目被遞增。注意,在一個(gè)實(shí)施例中,列表2919可以包含在與開(kāi)放超級(jí)塊2914信息相同的數(shù)據(jù) 結(jié)構(gòu)中。16.子組位圖2920。該表對(duì)于每個(gè)子組保持兩個(gè)比特。所述兩比特之一指示子組 隊(duì)列頂部的頁(yè)面請(qǐng)求是否需要該子組操作。第二位指示用于子組的R/B信號(hào)是否在準(zhǔn)備好 的狀態(tài)。閃存HEMi在確定是否開(kāi)始服務(wù)頁(yè)面請(qǐng)求時(shí)檢查該位圖。在圖30中圖示了使用共享RAM訪(fǎng)問(wèn)寄存器塊2411訪(fǎng)問(wèn)共享RAM,其示出了用于傳 輸來(lái)自共享RAM的數(shù)據(jù)塊(例如,傳輸請(qǐng)求)的步驟序列。在步驟3001中,共享RAM中所期望數(shù)據(jù)的地址被寫(xiě)入共享RAM地址寄存器2412 中。在該示例中,這是傳輸請(qǐng)求表4111中傳輸請(qǐng)求的地址(見(jiàn)下文)。在步驟3002中,數(shù)據(jù)要被傳輸?shù)降腍EMi mRAM地址被寫(xiě)入局部地址寄存器2704 中。在該情況中,該地址指向局部傳輸請(qǐng)求表2901中的空存取位置。在步驟3003中,對(duì)應(yīng)于將被需要來(lái)完成傳輸?shù)碾p字的數(shù)量的值被寫(xiě)入重復(fù)計(jì)數(shù) 寄存器2702中。在步驟3004中,HEMi執(zhí)行引起從共享RAM向共享RAM數(shù)據(jù)自動(dòng)遞增寄存器2413、 以及從那里向局部數(shù)據(jù)自動(dòng)遞增寄存器2705的讀的命令。從共享RAM的讀在共享RAM地址 寄存器2412中指定的地址處發(fā)生。向局部數(shù)據(jù)自動(dòng)遞增寄存器的讀導(dǎo)致數(shù)據(jù)被寫(xiě)入mRAM 中由局部地址寄存器2704指定的位置。兩個(gè)數(shù)據(jù)自動(dòng)遞增寄存器的使用引起各個(gè)地址寄 存器自動(dòng)遞增。命令的執(zhí)行引起重復(fù)計(jì)數(shù)寄存器2702遞減。注意,HEMi設(shè)計(jì)允許利用單 個(gè)指令處理該步驟。在步驟3005中,重復(fù)計(jì)數(shù)寄存器2702被檢查,以確定其是否包含值0。
如果重復(fù)計(jì)數(shù)寄存器2702具有值0 (步驟3005的“是”結(jié)果),則傳輸完成,并且
處理結(jié)束。如果重復(fù)計(jì)數(shù)寄存器2702具有超過(guò)0的值(步驟3005的“否”輸出),則其指示 需要額外的傳輸??刂品祷氐讲襟E3004用于下一雙字的傳輸。注意,在沒(méi)有閃存HEMi進(jìn)一步干擾的情況下,步驟3004和3005之間的循環(huán)繼續(xù)。 遞增的地址寄存器以及強(qiáng)制執(zhí)行指令的重復(fù)的重復(fù)計(jì)數(shù)寄存器允許HEMi在DMA型的突發(fā) 包中快速且有效率地傳輸數(shù)據(jù)。F. ECC 處理當(dāng)數(shù)據(jù)被寫(xiě)入閃存模塊108或從閃存模塊108被讀取時(shí),SSD控制器106產(chǎn)生和檢 查錯(cuò)誤校正碼(“ECC”)信息(如上所述,數(shù)據(jù)路徑DRAM 107還具有內(nèi)部ECC能力,但SSD 控制器106不控制該能力,并且,僅在報(bào)告錯(cuò)誤的情況下與其接口,這引起SSD控制器106 發(fā)出錯(cuò)誤消息)。在圖31中圖示ECC處理,其示出閃存端口 0 304。如上所述,閃存端口 0包括閃存 HEMi 0 307與閃存級(jí)緩沖器0 308,并且連接到閃存組0 301。圖31還示出ECC校正引擎3101。如上所解釋?zhuān)琒SD控制器106包括大量閃存端口, 每個(gè)具有關(guān)聯(lián)的閃存組。然而,在當(dāng)前的實(shí)施例中,SSD控制器106僅包括單個(gè)ECC校正引 擎,其被在閃存端口之間共享。因?yàn)閮H一個(gè)ECC校正引擎存在,所以,當(dāng)閃存HEMi需要ECC 校正引擎時(shí),其必須檢查ECC引擎是否忙碌。如果ECC校正引擎不忙碌,則閃存HEMi可以 使用它。如果ECC校正引擎忙碌,則閃存HEMi必須將其ID添附到包含在全局寄存器2203 中的ECC校正FIFO(見(jiàn)圖22)。該FIFO包括需要訪(fǎng)問(wèn)ECC校正引擎的所有閃存HEMi的排 序的列表。當(dāng)HEMi的ID來(lái)到FIFO的頂部時(shí),該HEMi被批準(zhǔn)訪(fǎng)問(wèn)ECC校正引擎。在不同的實(shí)施例中,SSD控制器106可以包括多于一個(gè)ECC校正引擎,最多到總共 每個(gè)閃存端口一個(gè)。該實(shí)施例增加成本和復(fù)雜度,但如果必須校正大量的數(shù)據(jù),則允許更快 的性能。在該實(shí)施例中,不需要閃存HEMi等待訪(fǎng)問(wèn)ECC校正引擎。在其它替代實(shí)施例中, 可以對(duì)于給定數(shù)量(例如,兩個(gè)或四個(gè))的閃存端口具有一個(gè)ECC校正引擎。如圖31所示,閃存端口 0 304包括ECC邏輯3102。ECC邏輯3102還包括ECC產(chǎn) 生(ECC Generation) 3103 以及 ECC 檢查 3104。ECC產(chǎn)生3103—次為一個(gè)區(qū)段的數(shù)據(jù)產(chǎn)生ECC位。當(dāng)正在閃存級(jí)緩沖器308與閃 存組301之間傳輸數(shù)據(jù)時(shí)這么做。當(dāng)從級(jí)緩沖器向閃存組寫(xiě)入時(shí),與數(shù)據(jù)一起存儲(chǔ)ECC信 息,該ECC信息被存儲(chǔ)在S頁(yè)面區(qū)段的ECC字段1303中(見(jiàn)圖13)。當(dāng)從閃存組向級(jí)緩沖 器讀取時(shí),ECC信息被ECC檢查3104使用,如下所述。在當(dāng)前的優(yōu)選實(shí)施例中,ECC產(chǎn)生3103使用漢明(Hamming)算法為每個(gè)區(qū)段產(chǎn)生 十二個(gè)ECC碼元,因此每個(gè)區(qū)段使用12個(gè)ECC字節(jié)。這需要略少于20個(gè)字節(jié)用于存儲(chǔ),并 且,由于此原因,S頁(yè)面區(qū)段的ECC字段1303包括20個(gè)字節(jié)?;谠诔跏蓟瘯r(shí)在ECC邏輯 3102中設(shè)置的寄存器,每個(gè)區(qū)段產(chǎn)生的ECC的量可被編程的。在替代實(shí)施例中,通過(guò)將ECC 大小設(shè)為0,并重新安排或消除由其它字段占據(jù)的空間,將可以縮小S頁(yè)面區(qū)段的大小,并 因此允許每個(gè)超級(jí)頁(yè)面保持16個(gè)區(qū)段(并因此處理16個(gè)LBA)。當(dāng)從閃存組301中讀取數(shù)據(jù)時(shí),ECC產(chǎn)生3103為每個(gè)區(qū)段產(chǎn)生ECC位的新集合。 然后,ECC檢查3104將新產(chǎn)生的ECC位與ECC字段1303的內(nèi)容比較。使用標(biāo)志傳達(dá)該比較的結(jié)果,該標(biāo)志指示是ECC位匹配還是發(fā)現(xiàn)了錯(cuò)誤。在本領(lǐng)域中公知用于產(chǎn)生和檢查ECC 信息的方法,這里不再描述。當(dāng)ECC檢查3104發(fā)現(xiàn)ECC錯(cuò)誤時(shí),閃存HEMi 307將區(qū)段數(shù)據(jù)和元數(shù)據(jù)(包括ECC 字段1303)從級(jí)緩沖器308復(fù)制到ECC校正引擎3101中。ECC校正引擎使用ECC字段1303 的內(nèi)容來(lái)設(shè)法校正在寫(xiě)入或讀出閃存組301的過(guò)程中引入到數(shù)據(jù)中的錯(cuò)誤。再次,本領(lǐng)域 中公知ECC校正處理的細(xì)節(jié),這里不再描述。在當(dāng)前的優(yōu)選實(shí)施例中,基于約20個(gè)字節(jié)的 ECC信息,ECC校正引擎能夠校正每區(qū)段十二個(gè)錯(cuò)誤。如果ECC校正引擎3101成功校正了數(shù)據(jù),則閃存HEMi 307獲取從ECC校正引擎 3101的輸出,并將其寫(xiě)回級(jí)緩沖器308中,然后,已校正的數(shù)據(jù)被用于最終向主機(jī)的傳送 (從以上討論,聯(lián)系圖27應(yīng)該理解,雖然涉及兩個(gè)傳輸,但HEMi設(shè)計(jì)允許使用單個(gè)HEMi指 令將數(shù)據(jù)的每個(gè)雙字從ECC校正引擎3101傳輸?shù)郊?jí)緩沖器308)。如果錯(cuò)誤的數(shù)量太大以 至于ECC校正引擎3101不能校正,則調(diào)用第二級(jí)的錯(cuò)誤校正協(xié)議。該協(xié)議具有兩個(gè)階段。 在第一階段,從閃存組向級(jí)緩沖器的讀被重復(fù)一次或多次,再次以相同的區(qū)段啟動(dòng)錯(cuò)誤校 正循環(huán)。這么做是因?yàn)殄e(cuò)誤有時(shí)來(lái)自在報(bào)告一個(gè)狀態(tài)與另一狀態(tài)之間閾值處的單元,并且 重讀可以產(chǎn)生額外的有效位。如果ECC校正引擎能夠第二(或后續(xù))次校正該數(shù)據(jù),則進(jìn) 行校正,物理區(qū)段被標(biāo)記為“壞”,并且數(shù)據(jù)被重新寫(xiě)入另一區(qū)段。在第二級(jí)錯(cuò)誤校正協(xié)議的第二階段中,數(shù)據(jù)被重復(fù)地讀取并且與在前讀取的結(jié)果 一起“或”。由于“或”操作,如果在任何讀取期間,比特位置處遇到“1”,則將保持該“1”,即 使該比特位置處的值在在先或在后讀取期間被讀為“0”也是如此。使用該過(guò)程是因?yàn)殚W 存錯(cuò)誤通常來(lái)自電荷從閃存單元的泄漏,導(dǎo)致該單元中的值被讀為“0”而不是“1” (例如, 讀干擾)。因?yàn)樵撔孤┛梢詫?dǎo)致單元中具有在0和1之間的中間電荷水平,所以不同的讀可 導(dǎo)致不同的值返回。“或”處理最大化了從讀中接收的1的數(shù)量。一旦已經(jīng)完成“或”處理 設(shè)定次數(shù)后,該值被返回ECC校正引擎3101,以確定該數(shù)據(jù)現(xiàn)在是否可以被校正。如果數(shù)據(jù)破壞來(lái)自單元中的電荷增加,從而“0”值被間歇地讀為“ 1 ”,則“或”處 理可以實(shí)際上提高數(shù)據(jù)破壞。然而,該情況相對(duì)稀少,盡管僅在第二級(jí)錯(cuò)誤校正的第一階段 (沒(méi)有“或”的讀取)失敗之后使用“或”處理才有道理。如果ECC校正引擎3101最終不能校正該數(shù)據(jù),則閃存HEMi發(fā)出錯(cuò)誤消息,其被通 過(guò)主機(jī)端口發(fā)送到與數(shù)據(jù)關(guān)聯(lián)的啟動(dòng)器。在當(dāng)前的優(yōu)選實(shí)施例中,已校正的錯(cuò)誤不被寫(xiě)回到閃存中,除非錯(cuò)誤數(shù)量超過(guò)了 閾值?;诳尚U腻e(cuò)誤數(shù)量(在當(dāng)前實(shí)施例中,每個(gè)區(qū)段12個(gè))減去基于在后續(xù)讀中引 入額外錯(cuò)誤的可能性而計(jì)算的保護(hù)帶,來(lái)設(shè)置該閾值。在當(dāng)前的優(yōu)選實(shí)施例中,發(fā)明人已經(jīng) 確定在區(qū)段讀中發(fā)現(xiàn)的錯(cuò)誤的數(shù)量不大可能比在該區(qū)段的緊挨在前的讀中發(fā)現(xiàn)的錯(cuò)誤的 數(shù)量多三個(gè)(或少三個(gè))以上。因此,例如,如果在一次讀時(shí),區(qū)段具有三個(gè)可校正的錯(cuò)誤, 則在下一次讀時(shí),其很可能具有六個(gè)或少于六個(gè)的可校正錯(cuò)誤。應(yīng)該理解,該行為意味著,如果在一次讀時(shí),區(qū)段具有九個(gè)或少于九個(gè)可校正錯(cuò) 誤,則很可能在下一次讀時(shí),該區(qū)段將具有十二個(gè)或少于十二個(gè)錯(cuò)誤,意味著在下一次讀 時(shí),該錯(cuò)誤將可校正。這,接著,意味著不必要將已校正的錯(cuò)誤寫(xiě)回閃存。避免這樣的寫(xiě)很 重要,因?yàn)閷⒁研U臄?shù)據(jù)寫(xiě)入閃存需要重寫(xiě)整個(gè)超級(jí)頁(yè)面。在當(dāng)前實(shí)施例中,保護(hù)帶被設(shè)為四,而不是三,以進(jìn)一步最小化在后續(xù)的讀上發(fā)現(xiàn)
44不可校正的錯(cuò)誤的可能性。因此,在讀上發(fā)現(xiàn)的可校正的錯(cuò)誤的閾值設(shè)為八。如果發(fā)現(xiàn)多 于八個(gè)錯(cuò)誤,則調(diào)用寫(xiě)處理程序,并且將包括已校正數(shù)據(jù)的、包含該區(qū)段的超級(jí)頁(yè)面重寫(xiě)入 閃存。如果發(fā)現(xiàn)少于八個(gè)錯(cuò)誤,則不重寫(xiě)該超級(jí)頁(yè)面,這是因?yàn)椋A(yù)見(jiàn)到該數(shù)量的錯(cuò)誤在下 一次讀時(shí)仍將可校正。在替代實(shí)施例中,因?yàn)樵谀承﹨^(qū)段中的錯(cuò)誤的存在意味著相鄰區(qū)段也包含錯(cuò)誤, 可以識(shí)別包含錯(cuò)誤的超級(jí)塊用于優(yōu)先垃圾收集。優(yōu)先垃圾收集包括一定的無(wú)效率性,因?yàn)?所選擇的超級(jí)塊將很可能比未選作優(yōu)先的超級(jí)塊包括更多有效的數(shù)據(jù)(見(jiàn)下文對(duì)垃圾收 集的討論),但該無(wú)效率性比由立即重寫(xiě)任何發(fā)現(xiàn)一定錯(cuò)誤的超級(jí)頁(yè)面所施加的無(wú)效率性
小得多。IV.元數(shù)據(jù)結(jié)構(gòu)A. DRAM 結(jié)構(gòu)圖32圖示數(shù)據(jù)路徑DRAM 107中發(fā)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),在系統(tǒng)初始化時(shí)設(shè)立和初始化 它們中的每個(gè)。它們包括以下結(jié)構(gòu)轉(zhuǎn)發(fā)表3201,其被用于在LBA地址和閃存地址之間轉(zhuǎn)換。聯(lián)系圖33更詳細(xì)地描述該表。IOP數(shù)據(jù)緩沖器3202,其存儲(chǔ)在主機(jī)接口 310與閃存模塊108之間傳輸?shù)臄?shù)據(jù)。ARM執(zhí)行代碼3203,其存儲(chǔ)由ARM處理器2002執(zhí)行的軟件。在當(dāng)前的優(yōu)選實(shí)施例 中,用C++編程語(yǔ)言編寫(xiě)該軟件。ARM數(shù)據(jù)3204,其構(gòu)成由ARM處理器2002在處理期間使用的存儲(chǔ)空間。反轉(zhuǎn)(reverse)表塊3206,其用于垃圾收集以及從掉電中恢復(fù)。反轉(zhuǎn)表塊3206為 每個(gè)閃存端口包含單獨(dú)的表,例如,表3205包含用于閃存端口 0的反轉(zhuǎn)表。聯(lián)系圖34更詳 細(xì)地描述反轉(zhuǎn)表3205。超級(jí)塊元數(shù)據(jù)表塊3207,其為每個(gè)閃存端口包含用于當(dāng)前開(kāi)放的超級(jí)塊的元數(shù)據(jù) 表。聯(lián)系圖35進(jìn)一步描述這些表。HEMi代碼覆蓋表3208,其包含初始化時(shí)載入每個(gè)HEMi中的固件。該表為每種類(lèi) 型的HEMi包含八個(gè)代碼覆蓋,例如,條目3209包含用于兩個(gè)接收HEMi的八個(gè)固件覆蓋,條 目3210包含用于兩個(gè)傳送HEMi的八個(gè)固件覆蓋,等等。根據(jù)需要以上文詳細(xì)解釋的方式 將這些覆蓋交換進(jìn)和交換出HEMiiRAM。SCSI標(biāo)簽表3211,其對(duì)于每個(gè)當(dāng)前有效的啟動(dòng)器包含一行,并且,對(duì)于根據(jù)SCSI 協(xié)議允許用于SCSI標(biāo)簽的65536個(gè)可能值中的每個(gè)包含一列。當(dāng)接收到包含特定SCSI標(biāo) 簽的⑶B時(shí),在對(duì)應(yīng)于該啟動(dòng)器和該SSCI標(biāo)簽的SCSI標(biāo)簽表位置設(shè)置該比特。當(dāng)⑶B的 執(zhí)行已經(jīng)完成時(shí),清除該比特。這允許SSD控制器106檢查,以確保所有接收到的SCSI標(biāo) 簽都是唯一的,并且啟動(dòng)器從不具有帶有相同SCSI標(biāo)簽的兩個(gè)有效CDB。調(diào)試緩沖器3212,其是存儲(chǔ)從調(diào)試FIFO 2210接收的調(diào)試數(shù)據(jù)的循環(huán)緩沖器。響 應(yīng)于HEMi固件中的調(diào)試命令,在常規(guī)系統(tǒng)操作期間收集所述調(diào)試數(shù)據(jù)。所收集的信息包含 所接收的CDB的基本命令流以及作為結(jié)果產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)(CDBInfo、Ι0Ρ、傳輸請(qǐng)求)。在 檢測(cè)到錯(cuò)誤的情況中,收集附加調(diào)試信息,以識(shí)別錯(cuò)誤的類(lèi)型以及對(duì)錯(cuò)誤做出的響應(yīng)(如 果存在)的性質(zhì)。圖33示出了轉(zhuǎn)發(fā)表3201。轉(zhuǎn)發(fā)表3201被用于將從主機(jī)101和102接收的LBA地址轉(zhuǎn)換為閃存模塊108中的實(shí)際物理閃存地址。由LBA對(duì)轉(zhuǎn)發(fā)表3201進(jìn)行索引,并且,轉(zhuǎn)發(fā)表3201對(duì)于系統(tǒng)可以支持的每十五個(gè) LBA包含一個(gè)條目。如圖33中所示,轉(zhuǎn)發(fā)表3201中的第一條目涉及LBA 0_14,第二條目涉 及LBA 15-29,第三條目涉及LBA 30-44,等。注意,每個(gè)條目的LBA的數(shù)量與可以被存儲(chǔ)在 超級(jí)頁(yè)面中的LBA的數(shù)量相同。在包括更大或更小的超級(jí)頁(yè)面的不同實(shí)施例中,每個(gè)轉(zhuǎn)發(fā) 表?xiàng)l目的LBA的數(shù)量將同樣變得更大或更小。轉(zhuǎn)發(fā)表3201的大小取決于閃存模塊108的總存儲(chǔ)大小。在當(dāng)前的優(yōu)選實(shí)施例中, 300G字節(jié)的閃存模塊可以存儲(chǔ)約6億個(gè)LBA,由此在轉(zhuǎn)發(fā)表3201中需要約4000萬(wàn)個(gè)可能 的條目。對(duì)于更大或更小量的存儲(chǔ)量,轉(zhuǎn)發(fā)表3201的大小將相應(yīng)地更大或更小。對(duì)于每個(gè)LBA條目,轉(zhuǎn)發(fā)表3201包括可以被用于識(shí)別物理閃存芯片上相應(yīng)數(shù)據(jù)的 位置(端口、子組、塊和頁(yè)面)的信息。此外,轉(zhuǎn)發(fā)表3201包含標(biāo)記為“用戶(hù)”的字段,其可以存儲(chǔ)特定客戶(hù)可以發(fā)現(xiàn)有用 的信息。在一個(gè)實(shí)施例中,用戶(hù)字段存儲(chǔ)所關(guān)聯(lián)的LBA在預(yù)定的維護(hù)期間(例如,一個(gè)月) 中已經(jīng)訪(fǎng)問(wèn)(讀或?qū)?的次數(shù)。用戶(hù)可以使用該信息來(lái)確定LBA的特定組包含較經(jīng)常使用 還是較不經(jīng)常使用的信息。經(jīng)常使用的信息可以被移動(dòng)到較快、較高成本的存儲(chǔ)器中。不 經(jīng)常使用的信息可以被移動(dòng)到較慢的檔案存儲(chǔ)器中。在操作中,轉(zhuǎn)發(fā)表3201如下操作從主機(jī)接收LBA,例如,LBA23。將LBA除以15, 整數(shù)商被用于獲得進(jìn)入轉(zhuǎn)發(fā)表3201的索引。例如,對(duì)于LBA23,除以15給出商“1”,意味著 通過(guò)對(duì)進(jìn)入轉(zhuǎn)發(fā)表的一行進(jìn)行索引而發(fā)現(xiàn)對(duì)于該LBA的物理地址信息。在圖33中,其為標(biāo) 注為L(zhǎng)BA 15-29的行。所選擇的行識(shí)別存儲(chǔ)LBA信息的端口,并因此識(shí)別用于訪(fǎng)問(wèn)該信息的閃存HEMi和 閃存組。所選擇的行還識(shí)別存儲(chǔ)信息的特定子組,并由此識(shí)別被所選擇的閃存HEMi使用來(lái) 選擇該信息的CS信號(hào)。所選擇的行還識(shí)別在其中發(fā)現(xiàn)信息的塊。注意,這是在子組的每個(gè)芯片上的相同 的塊。最后,所選擇的行識(shí)別在其中發(fā)現(xiàn)信息的頁(yè)面。例如,該行可以識(shí)別塊1的頁(yè)面 1 (應(yīng)該理解,在該示例中,LBA將實(shí)際地存儲(chǔ)在塊1的超級(jí)頁(yè)面1中)。如上所述,每個(gè)超級(jí)頁(yè)面包括十五個(gè)S頁(yè)面區(qū)段,每個(gè)區(qū)段可以存儲(chǔ)涉及單個(gè)LBA 的內(nèi)容。一旦已經(jīng)從轉(zhuǎn)發(fā)表3201中識(shí)別了超級(jí)頁(yè)面,通過(guò)從上述除法中獲取余數(shù)而獲得超 級(jí)頁(yè)面中的實(shí)際S頁(yè)面區(qū)段。在所給定的示例中,余數(shù)是8(23/15 = 1,余數(shù)8)。因此,將 在每個(gè)選擇的頁(yè)面中的第九個(gè)P區(qū)段存取位置中發(fā)現(xiàn)所請(qǐng)求的LBA信息(第九,而不是第 八,這是因?yàn)椋韽腖BA 0開(kāi)始)。圖34示出反轉(zhuǎn)表3205。如上所述,數(shù)據(jù)路徑DRAM 107對(duì)于每一個(gè)閃存組包含一 個(gè)反轉(zhuǎn)表。如上所述,每個(gè)塊包括64個(gè)超級(jí)頁(yè)面,每個(gè)超級(jí)頁(yè)面由來(lái)自四個(gè)頁(yè)面的存儲(chǔ)空間 構(gòu)成,子組中的每個(gè)電路小片一個(gè)。還如上所述,超級(jí)塊包括來(lái)自該組中的每個(gè)子組的相同 塊。例如,特定閃存組的超級(jí)塊0包括來(lái)自該組中的所有子組的所有塊0。列3401表示超級(jí)塊(0),行代表子組0的超級(jí)頁(yè)面0_63、子組1的超級(jí)頁(yè)面0_63 等,一個(gè)子組上的每組64個(gè)超級(jí)頁(yè)面表示塊。
表3205中的每個(gè)超級(jí)頁(yè)面行(例如,行3402)包含用于每個(gè)超級(jí)塊中的相同超級(jí) 頁(yè)面(例如,超級(jí)塊0-n的超級(jí)頁(yè)面0)的條目。反轉(zhuǎn)表3205中的每個(gè)超級(jí)頁(yè)面字段包括單個(gè)有效位。當(dāng)設(shè)為“1”時(shí),該有效位指 示該超級(jí)頁(yè)面包含當(dāng)前有效的編程數(shù)據(jù)(即,該超級(jí)頁(yè)面已經(jīng)被寫(xiě)入了保持有效的數(shù)據(jù)), 或者已被擦除并可用于寫(xiě)入(即,包含值Oxffffffff,其是擦除后的缺省狀態(tài))。當(dāng)被設(shè)為 “0”時(shí),該有效位指示超級(jí)頁(yè)面包含無(wú)效數(shù)據(jù),意味著其不可以被讀取也不可用于寫(xiě)入。當(dāng) 存儲(chǔ)在超級(jí)頁(yè)面上的LBA被進(jìn)行了之后的寫(xiě)入時(shí),使該超級(jí)頁(yè)面無(wú)效。因?yàn)殚W存不允許直 接的覆寫(xiě),所以,當(dāng)超級(jí)頁(yè)面上的LBA被覆寫(xiě)時(shí),該新數(shù)據(jù)與該超級(jí)頁(yè)面上任何保持有效的 舊數(shù)據(jù)一起被復(fù)制到新頁(yè)面,并且,舊超級(jí)頁(yè)面被標(biāo)記為無(wú)效,意味著其不再被使用(未決 的(pending)垃圾收集,其在下文被描述)。因此,例如,字段3403中的“1”將指示閃存組的子組0的塊0的超級(jí)頁(yè)面1含有 有效數(shù)據(jù)、或者已經(jīng)被擦除且可用于寫(xiě)入,然而,該字段中的“0”將指示閃存的子組0的塊 0的超級(jí)頁(yè)面1是無(wú)效的。反轉(zhuǎn)表3205還包含計(jì)數(shù)行。該行中的每個(gè)條目包含表示超級(jí)塊中當(dāng)前無(wú)效的超 級(jí)頁(yè)面的總數(shù)量的數(shù)。因此,字段3404存儲(chǔ)表示超級(jí)塊0中當(dāng)前無(wú)效的超級(jí)頁(yè)面的數(shù)量的 數(shù)。也可以通過(guò)對(duì)列中“0”有效位的數(shù)量求和來(lái)計(jì)算該計(jì)數(shù)。但是,計(jì)數(shù)被單獨(dú)地保 持,作為性能優(yōu)化,這是因?yàn)?,在單?dú)字段中保持總計(jì)數(shù)避免了在需要時(shí)計(jì)算該數(shù)的必要。 該計(jì)數(shù)以下文更詳細(xì)描述的方式用于垃圾收集目的。反轉(zhuǎn)表3205還包含時(shí)間戳行,如行3405所示。其包含指示最初每個(gè)超級(jí)塊對(duì)寫(xiě) 關(guān)閉的時(shí)間的時(shí)間戳。該字段的使用包括重建處理,下文聯(lián)系圖58對(duì)其描述。反轉(zhuǎn)表3205還包括擦除計(jì)數(shù)行,如行3406所示。其包含超級(jí)塊已經(jīng)被擦除過(guò)的 次數(shù)的計(jì)數(shù),并且,可以被用于例如以更高的擦除計(jì)數(shù)按優(yōu)先級(jí)排序超級(jí)塊,以用于垃圾收集。圖35圖示了超級(jí)塊元數(shù)據(jù)表3501,其包含涉及一個(gè)超級(jí)塊的元數(shù)據(jù)信息。超級(jí)塊 元數(shù)據(jù)表被存儲(chǔ)在每個(gè)超級(jí)塊的子組0的超級(jí)頁(yè)面0中(例如,用于端口 0的超級(jí)塊0的 超級(jí)塊元數(shù)據(jù)表被存儲(chǔ)在端口 0的塊0的超級(jí)頁(yè)面0中)。此外,用于每個(gè)閃存組中當(dāng)前對(duì) 寫(xiě)入開(kāi)放的超級(jí)塊的超級(jí)塊元數(shù)據(jù)表被存儲(chǔ)在DRAM 107的超級(jí)塊元數(shù)據(jù)表塊3207中。超級(jí)塊元數(shù)據(jù)表3501對(duì)于超級(jí)塊中的每個(gè)超級(jí)頁(yè)面包含一行,通過(guò)子組組織超 級(jí)頁(yè)面。因此,行3502包含用于子組0的超級(jí)頁(yè)面0的信息。行3503跟隨其后,行3503 包含用于從子組0的超級(jí)頁(yè)面1直到子組0的超級(jí)頁(yè)面63的信息,隨后是行3504,其包含 用于從子組1的超級(jí)頁(yè)面0直到所到達(dá)的最后一個(gè)子組(圖35中標(biāo)記為子組η)的信息。超級(jí)塊元數(shù)據(jù)表3501對(duì)于每個(gè)超級(jí)頁(yè)面存儲(chǔ)三種類(lèi)型的元數(shù)據(jù)超級(jí)頁(yè)面時(shí)間 戳、缺陷標(biāo)志以及LBA。超級(jí)頁(yè)面時(shí)間戳列3505包含超級(jí)頁(yè)面被寫(xiě)入的時(shí)間。該信息還被添附到超級(jí)頁(yè) 面的末端,并被用于在數(shù)據(jù)丟失情況下以下文描述的方式重建的目的。缺陷標(biāo)志列3510包含指示超級(jí)頁(yè)面是否已被標(biāo)記為“有缺陷”的單個(gè)比特。如果 在閃存讀或?qū)懫陂g來(lái)自超級(jí)頁(yè)面的任何頁(yè)面被指示為有缺陷,則超級(jí)頁(yè)面被識(shí)別為有缺陷 的。在一個(gè)實(shí)施例中,如果這在讀期間發(fā)生,則超級(jí)塊被強(qiáng)制進(jìn)入垃圾收集。在一個(gè)實(shí)施例
47中,如果這在寫(xiě)期間發(fā)生,則不同的超級(jí)頁(yè)面被用于寫(xiě)。在任一情況下,都設(shè)置該缺陷標(biāo)志。LBA列3511包含寫(xiě)入到超級(jí)頁(yè)面中的數(shù)據(jù)的LBA地址。如以上所解釋?zhuān)總€(gè)頁(yè)面 包含來(lái)自一組15個(gè)連續(xù)LBA的數(shù)據(jù)。LBA列3511識(shí)別該組中的第一個(gè)LBA。子組0的超級(jí)頁(yè)面0是特殊情況,這是因?yàn)?,其包含用于超?jí)塊的超級(jí)塊元數(shù)據(jù) 表,并因此不保持對(duì)應(yīng)于任何LBA的數(shù)據(jù)。為此原因,與該超級(jí)頁(yè)面關(guān)聯(lián)的LBA字段不包含 LBA信息。超級(jí)塊元數(shù)據(jù)表3501還包含不專(zhuān)用于特定超級(jí)頁(yè)面的四個(gè)字段,而是包含與整 個(gè)超級(jí)塊相關(guān)的元數(shù)據(jù)超級(jí)塊時(shí)間戳3506、擦除計(jì)數(shù)字段3507、開(kāi)放標(biāo)志3508以及關(guān)閉 標(biāo)志3509。超級(jí)塊時(shí)間戳3506包含反映對(duì)寫(xiě)關(guān)閉的超級(jí)塊的時(shí)間的時(shí)間戳,如下所述,該字 段被用于掉電恢復(fù)。擦除計(jì)數(shù)字段3507包含超級(jí)塊已被擦除的次數(shù)。如下所述,該字段可以被用于磨 損均衡(wear leveling)目的。當(dāng)超級(jí)頁(yè)面對(duì)寫(xiě)開(kāi)放時(shí),設(shè)置開(kāi)放標(biāo)志3508。當(dāng)超級(jí)頁(yè)面被關(guān)閉時(shí),設(shè)置關(guān)閉標(biāo)志3509。如下所述,開(kāi)放和關(guān)閉標(biāo)志被用于掉電恢復(fù)。當(dāng)超級(jí)塊對(duì)寫(xiě)開(kāi)放時(shí),其元數(shù)據(jù)表被從閃存復(fù)制進(jìn)DRAM 107中。當(dāng)每個(gè)超級(jí)頁(yè)面 被寫(xiě)入時(shí),將合適的LBA寫(xiě)入對(duì)應(yīng)于該超級(jí)頁(yè)面的LBA字段中,并且將超級(jí)頁(yè)面被寫(xiě)入的時(shí) 間寫(xiě)入列3505中的超級(jí)頁(yè)面時(shí)間戳條目。類(lèi)似地,如果超級(jí)頁(yè)面被發(fā)現(xiàn)有缺陷,則填充對(duì) 應(yīng)于該超級(jí)頁(yè)面的缺陷字段。當(dāng)超級(jí)塊被關(guān)閉時(shí),所關(guān)聯(lián)的超級(jí)塊元數(shù)據(jù)表被從DRAM 107寫(xiě)入到包含該超級(jí) 塊的閃存組的子組0的塊0的超級(jí)頁(yè)面0中,并且接著通過(guò)用于下一個(gè)要開(kāi)放的超級(jí)塊的 超級(jí)塊元數(shù)據(jù)表而被覆寫(xiě)在超級(jí)塊元數(shù)據(jù)表塊3207中。超級(jí)塊元數(shù)據(jù)表在三個(gè)單獨(dú)的情形中被寫(xiě)入閃存中1.當(dāng)超級(jí)塊被擦除并被置于空閑列表上時(shí)。此時(shí),元數(shù)據(jù)表被寫(xiě)入閃存中,然而, 僅缺陷和擦除計(jì)數(shù)數(shù)據(jù)是有效的。2.當(dāng)超級(jí)塊開(kāi)放時(shí)。此時(shí),該表被復(fù)制到級(jí)緩沖器中。閃存HEMi設(shè)置開(kāi)放標(biāo)志, 并將該表寫(xiě)回到閃存中(不過(guò),應(yīng)該理解,副本保留在級(jí)緩沖器中,并且,僅表的部分需要 被寫(xiě)入閃存中)。這允許開(kāi)放的超級(jí)頁(yè)面在不可預(yù)見(jiàn)的掉電的情況中被識(shí)別。3.當(dāng)超級(jí)塊被關(guān)閉時(shí)。此時(shí),被填充了的表被復(fù)制回到閃存中。在那發(fā)生之前,閃 存HEMi設(shè)置關(guān)閉標(biāo)志。因此這兩個(gè)標(biāo)志指示超級(jí)塊的所有可能的狀態(tài)空閑(兩個(gè)標(biāo)志都 未被設(shè)置)、開(kāi)放(開(kāi)放標(biāo)志被設(shè)置、關(guān)閉標(biāo)志未被設(shè)置)、以及關(guān)閉(兩個(gè)標(biāo)志都被設(shè)置)。圖36圖示IOP數(shù)據(jù)緩沖器3202。如圖32所示,IOP數(shù)據(jù)緩沖器3202被存儲(chǔ)在數(shù) 據(jù)路徑DRAM 107中。該緩沖器被用于緩沖由數(shù)據(jù)路徑DRAM107從主機(jī)接口 310、或從閃存 模塊108接收的數(shù)據(jù)。IOP數(shù)據(jù)緩沖器3202對(duì)于每個(gè)可以被SSD控制器106支持的IOP包含一行(在當(dāng) 前優(yōu)選實(shí)施例中,其為60)。每行對(duì)于保持315個(gè)S頁(yè)面區(qū)段都足夠大,315個(gè)S頁(yè)面區(qū)段 是對(duì)于IOP來(lái)說(shuō)可以返回的最大數(shù)據(jù)量(7個(gè)傳輸請(qǐng)求X3個(gè)頁(yè)面請(qǐng)求X 15個(gè)LBA)。在寫(xiě)操作時(shí),IOP數(shù)據(jù)緩沖器3202保持從主機(jī)接收的數(shù)據(jù)。在讀操作時(shí),數(shù)據(jù)緩沖器保持從閃存接收的數(shù)據(jù)。在任一情況中,都以L(fǎng)BA順序來(lái)存儲(chǔ)數(shù)據(jù)。這使得計(jì)算用于 涉及特定傳輸請(qǐng)求和特定頁(yè)面請(qǐng)求的數(shù)據(jù)的準(zhǔn)確位置更容易。例如,涉及由IOP發(fā)出的第 一傳輸請(qǐng)求的第一頁(yè)面請(qǐng)求的數(shù)據(jù)將始終在數(shù)據(jù)緩沖器3202中該IOP的條目的開(kāi)始處被 發(fā)現(xiàn)(IOP(O)的第一位置被示為位置3601)。涉及第一傳輸請(qǐng)求的第二頁(yè)面請(qǐng)求的數(shù)據(jù)將 始終在從該條目的開(kāi)始的偏移處(例如,位置3602)被發(fā)現(xiàn),基于要被第一頁(yè)面請(qǐng)求傳輸?shù)?LBA的數(shù)量計(jì)算所述偏移(注意,如果傳輸?shù)钠鹗糒BA落入超級(jí)頁(yè)面內(nèi),則該第一頁(yè)面請(qǐng)求 將傳輸少于完全的超級(jí)頁(yè)面)。因此,根據(jù)主機(jī)發(fā)起的讀和寫(xiě)操作被分為可以在不同時(shí)間或無(wú)次序地完成的傳輸 請(qǐng)求和頁(yè)面請(qǐng)求的事實(shí),IOP數(shù)據(jù)緩沖器3202操作來(lái)隔離向和從主機(jī)101和102的數(shù)據(jù)流。 盡管數(shù)據(jù)傳輸具有亂序性質(zhì),但I(xiàn)OP數(shù)據(jù)緩沖器3202以主機(jī)期望的LBA順序存儲(chǔ)數(shù)據(jù)。對(duì)于主機(jī)發(fā)起的讀,IOP數(shù)據(jù)緩沖器3202保持由傳輸請(qǐng)求返回的數(shù)據(jù)直到所有請(qǐng) 求的數(shù)據(jù)出現(xiàn),此時(shí),數(shù)據(jù)被以L(fǎng)BA順序讀出到主機(jī)接口。對(duì)于主機(jī)發(fā)起的寫(xiě),IOP數(shù)據(jù)緩 沖器3202保持從主機(jī)接收(還以L(fǎng)BA順序)的數(shù)據(jù),直到所有數(shù)據(jù)都已被接收,此時(shí),數(shù)據(jù) 被傳輸?shù)介W存級(jí)緩沖器。該機(jī)制也允許SSD控制器106即使主機(jī)發(fā)起的數(shù)據(jù)傳輸操作被內(nèi) 部分為小得多的閃存讀和寫(xiě)、也以主機(jī)期望的順序向和從主機(jī)接受和傳送數(shù)據(jù),并且還允 許數(shù)據(jù)路徑DRAM以最大的速度操作,而不管控制器中的其它元件以較低的速度傳輸數(shù)據(jù) 的事實(shí)。B.事務(wù)結(jié)構(gòu)如上所述,SSD控制器106使用四種類(lèi)型的數(shù)據(jù)結(jié)構(gòu)在閃存模塊108中控制讀和 寫(xiě)操作⑶Binfos、Ι0Ρ、傳輸請(qǐng)求和頁(yè)面請(qǐng)求。如基于SCSI協(xié)議的系統(tǒng)中所常規(guī)的,通過(guò)從主機(jī)接收到命令描述器塊(“⑶B”) 而發(fā)起讀或?qū)?其它協(xié)議包括類(lèi)似機(jī)制,但CDB將被用于闡述的目的)。SSD控制器106以 被稱(chēng)為⑶Binfo的結(jié)構(gòu)存儲(chǔ)⑶B。控制器可以一次處理最多144個(gè)⑶Binfo,不過(guò),如下文 更詳細(xì)地描述的,其中的16個(gè)被保留用于特殊目的,從而可以一次處理128個(gè)標(biāo)準(zhǔn)的主機(jī) 發(fā)起的讀/寫(xiě)命令,盡管它們中的某些可能正被“暫?!保却匾Y源的可用性。SSD控制器106通過(guò)將主機(jī)發(fā)起的讀和寫(xiě)命令分為分級(jí)移動(dòng)來(lái)處理主機(jī)發(fā)起的讀 和寫(xiě)命令。系統(tǒng)通過(guò)產(chǎn)生IOP來(lái)處理⑶Binfo而開(kāi)始。一次總共可以有60個(gè)IOP是有效 的。每個(gè)IOP可以發(fā)出七個(gè)傳輸請(qǐng)求(盡管一次最多僅可以有120個(gè)傳輸請(qǐng)求是有效的), 它們中的每個(gè)可以發(fā)出三個(gè)頁(yè)面請(qǐng)求。每個(gè)頁(yè)面請(qǐng)求引起最多一個(gè)超級(jí)頁(yè)面(例如,超級(jí) 頁(yè)面213)的數(shù)據(jù)和元數(shù)據(jù)的移動(dòng)。如上所解釋?zhuān)總€(gè)超級(jí)頁(yè)面存儲(chǔ)與15個(gè)LBA關(guān)聯(lián)的區(qū) 段內(nèi)容。該結(jié)構(gòu)被設(shè)計(jì)來(lái)允許單個(gè)IOP處理大多數(shù)主機(jī)發(fā)起的傳輸,其包括256個(gè)連續(xù) LBA。如下所解釋?zhuān)鶕?jù)要被傳輸?shù)牡谝粋€(gè)和最后一個(gè)LBA落入超級(jí)頁(yè)面內(nèi)的位置,以及它 們落入數(shù)據(jù)分條內(nèi)的位置,第一個(gè)和/或最后一個(gè)頁(yè)面請(qǐng)求將可以?xún)H僅傳輸一個(gè)LBA,以 及,第一個(gè)和/或最后一個(gè)頁(yè)面請(qǐng)求還將可以?xún)H僅傳輸一個(gè)超級(jí)頁(yè)面。因此,在某些情況 中,在序列中的第一個(gè)和/或最后一個(gè)傳輸請(qǐng)求實(shí)際上可以傳輸僅與單個(gè)LBA關(guān)聯(lián)的區(qū)段 內(nèi)容。因此,單個(gè)IOP能夠處理至少225個(gè)LBA,并且最多315個(gè)。然而,在實(shí)踐中,IOP可 以處理少于256個(gè)LBA的情況相對(duì)較少,從而,在當(dāng)前結(jié)構(gòu)中,單個(gè)IOP將幾乎總能夠處理 包括256個(gè)LBA的事務(wù)。
如SCSI協(xié)議所要求的,通過(guò)重復(fù)地調(diào)用相同的Ι0Ρ,系統(tǒng)可以處理更多數(shù)量的LBA 的傳輸。然而,根據(jù)經(jīng)驗(yàn),發(fā)明人相信256個(gè)LBA將是通常操作情形下實(shí)際上遇到的最大移 動(dòng)。注意,每個(gè)LBA對(duì)應(yīng)于一個(gè)標(biāo)準(zhǔn)硬盤(pán)驅(qū)動(dòng)器區(qū)段,并且IDE驅(qū)動(dòng)器一般一次僅能傳輸 256個(gè)區(qū)段。假如設(shè)計(jì)現(xiàn)有主機(jī),以滿(mǎn)足該256區(qū)段限制,則可能單個(gè)IOP將能夠處理所遇 到的絕大多數(shù)主機(jī)發(fā)起的傳輸。圖37圖示了示例性CDBinfo (例如,CDBinfo 201)的結(jié)構(gòu)。自指針3701識(shí)別該特定CDBinfo在CDBinfo表4109中的位置,以下聯(lián)系圖41對(duì) 其描述。該值被傳遞到其它需要識(shí)別該CDBinfo的數(shù)據(jù)結(jié)構(gòu)。自指針3701被用于調(diào)用CDBinfo 201,并通過(guò)希望使用該CDBinfo的操作為此目 的而復(fù)制。此外,自指針3701被用于錯(cuò)誤檢查。自指針3701應(yīng)該始終指向⑶Binfο 201。 如果其不指向其自身,則意味著有操作利用不正確的數(shù)據(jù)覆寫(xiě)了該CDBinfo。注意,該描述 對(duì)于包含在其它類(lèi)型的數(shù)據(jù)結(jié)構(gòu)中的自指針也正確。⑶B字段3702包含從主機(jī)獲得的⑶B (或類(lèi)似數(shù)據(jù)結(jié)構(gòu))的副本。由主機(jī)協(xié)議指 定⑶B的格式,但⑶B始終至少包含命令、用于數(shù)據(jù)傳輸?shù)腖BA以及傳輸長(zhǎng)度。啟動(dòng)器字段3703包含指向共享RAM啟動(dòng)器表4108 (見(jiàn)圖41)中對(duì)應(yīng)于負(fù)責(zé)該⑶B 的啟動(dòng)器的啟動(dòng)器條目的指針。從由帶有該CDB的主機(jī)提供的元數(shù)據(jù)獲得該信息。將該元 數(shù)據(jù)與啟動(dòng)器表4108比較。如果發(fā)現(xiàn)匹配,則指向啟動(dòng)器表4108中匹配位置的指針被置 于啟動(dòng)器字段中。如果未發(fā)現(xiàn)匹配,則從啟動(dòng)器空閑列表4112(見(jiàn)圖41)中彈出新啟動(dòng)器, 新啟動(dòng)器被輸入表4108中,并且,指向該新啟動(dòng)器的指針被置于啟動(dòng)器字段3703中。IOP字段3704指向被產(chǎn)生來(lái)執(zhí)行CDBinfo所要求的事務(wù)的Ι0Ρ。SCSI標(biāo)簽3705包含從啟動(dòng)器接收的SCSI (或隊(duì)列)標(biāo)簽。如在本領(lǐng)域中所理解 的,當(dāng)最初形成連接時(shí),SCSI標(biāo)簽是從啟動(dòng)器接收的信息的一部分。在對(duì)CDB的任何響應(yīng) 中,該信息都必須被返回到啟動(dòng)器。SCSI標(biāo)簽3706包含SCSI協(xié)議所要求的標(biāo)志。突發(fā)包長(zhǎng)度控制字段3707包含從啟動(dòng)器信息突發(fā)包長(zhǎng)度字段4204復(fù)制的突發(fā)包 長(zhǎng)度控制信息,下文聯(lián)系圖42對(duì)其描述。參考標(biāo)簽字段3708包含連同⑶B —起接收的參考標(biāo)簽(如果存在),上文解釋了 它們的使用。應(yīng)用標(biāo)簽字段3709包含連同⑶B —起接收的應(yīng)用標(biāo)簽與應(yīng)用標(biāo)簽掩碼(如果存 在),上文解釋了它們的使用。圖38圖示IOP (諸如IOP 202)的內(nèi)部結(jié)構(gòu)。如下所述,IOP被存儲(chǔ)在共享RAM塊 318的IOP表4110中(見(jiàn)圖41,下文),并且,當(dāng)IOP被HEMi使用時(shí),該IOP還被復(fù)制到該 HEMi 的 mRAM 中。在當(dāng)前的優(yōu)選實(shí)施例中,每個(gè)IOP是包含以下字段的32雙字的數(shù)據(jù)結(jié)構(gòu)自指針3801。其包含共享RAM IOP表4110 (見(jiàn)下文)內(nèi)該IOP所處的地址。在初 始化時(shí)設(shè)置該字段。當(dāng)IOP在IOP空閑列表4103 (見(jiàn)下文)上時(shí),這是IOP中唯一包含有 效數(shù)據(jù)的字段。調(diào)用HEMi字段3802包含用于當(dāng)前操作該IOP的HEMi的標(biāo)識(shí)符。這是被授權(quán)修改 IOP 202中任何數(shù)據(jù)(除了中止(Abort)標(biāo)志3811,下文對(duì)其進(jìn)一步描述)的唯一 HEMi。
主機(jī)端口字段3803識(shí)別接收引起IOP的調(diào)用的初始主機(jī)命令的主機(jī)端口(0或 1)。如下所解釋?zhuān)?dāng)命令完成時(shí),這是IOP必須被發(fā)送到的端口。啟動(dòng)器字段3804包含指向共享RAM啟動(dòng)器表4108 (見(jiàn)下文)中對(duì)應(yīng)于初始負(fù)責(zé) 導(dǎo)致該IOP的調(diào)用的CDB的啟動(dòng)器的啟動(dòng)器條目的指針。CDBinfo字段3805包含指向共享RAM CDBinfo表4109 (見(jiàn)下文)中引起該IOP被 調(diào)用的⑶Binfο的指針。命令字段3806識(shí)別IOP被指定來(lái)執(zhí)行的命令的類(lèi)型。在一個(gè)實(shí)施例中,僅為主機(jī) 的讀或?qū)懨町a(chǎn)生Ι0Ρ。在不同的實(shí)施例中,還可以為其它類(lèi)型的命令產(chǎn)生Ι0Ρ。在該實(shí)施 例中,IOP被傳送到ARM處理器2002用于非讀/寫(xiě)命令的處理。已分配傳輸請(qǐng)求字段3807包含IOP已經(jīng)為當(dāng)前讀或?qū)懖僮鞣峙涞膫鬏斦?qǐng)求的數(shù) 量。當(dāng)IOP被RdWr HEMi初始化時(shí),該HEMi計(jì)算執(zhí)行由CDBinfo指定的讀或?qū)懨钏匦?的傳輸請(qǐng)求的數(shù)量,并將該數(shù)量輸入到該字段中。在當(dāng)前優(yōu)選實(shí)施例中,該數(shù)量被設(shè)置為最 大值7。剩余傳輸請(qǐng)求字段3808包含由還未完成的IOP分配的傳輸請(qǐng)求的數(shù)量。當(dāng)IOP被 初始設(shè)立時(shí),該字段包含與已分配傳輸請(qǐng)求字段3807相同的值。隨著每個(gè)傳輸請(qǐng)求完成, 剩余傳輸請(qǐng)求字段3808被遞減。傳輸請(qǐng)求指針陣列3809對(duì)于IOP分配的每個(gè)傳輸請(qǐng)求包含一個(gè)條目。對(duì)于每個(gè) 這樣的傳輸請(qǐng)求,傳輸請(qǐng)求指針陣列3809包含指向正在處理傳輸請(qǐng)求的閃存HEMi的指針, 以及指向傳輸請(qǐng)求表4111 (見(jiàn)下文)中該傳輸請(qǐng)求自身的指針。當(dāng)傳輸請(qǐng)求從傳輸請(qǐng)求空 閑列表4104(見(jiàn)下文)中彈出時(shí),從傳輸請(qǐng)求的自指針(見(jiàn)下文)復(fù)制指向傳輸請(qǐng)求的指 針。傳輸請(qǐng)求指針陣列字段3809被用于識(shí)別當(dāng)IOP的執(zhí)行完成時(shí)應(yīng)該被返回到傳輸 請(qǐng)求空閑列表4104的傳輸請(qǐng)求。在IOP的中止標(biāo)志3811被設(shè)置的情況下,該字段還被用 于識(shí)別應(yīng)該被中止的傳輸請(qǐng)求。下文進(jìn)一步描述中止操作。狀態(tài)變量字段3810包含用于追蹤IOP的狀態(tài)的信息,包括關(guān)于命令是否完成、錯(cuò) 誤是否發(fā)生等的信息。該字段還指示IOP是新的還是“再進(jìn)入的(re-entrant)”。如上所 述,如果CDB需要傳輸比單個(gè)IOP可以處理的數(shù)據(jù)多的數(shù)據(jù),則傳輸被分解為段,并且相同 的IOP被重復(fù)地調(diào)用,以處理每個(gè)段。狀態(tài)變量字段3810追蹤IOP在該處理中的位置。中止標(biāo)志3811。該標(biāo)志指示IOP的操作應(yīng)該被中止。這是IOP可以被除了在調(diào)用 HEMi字段3802中識(shí)別的HEMi外的任何HEMi寫(xiě)入的僅有部分。參考標(biāo)簽字段3812包含參考標(biāo)簽,上文描述了它的使用。應(yīng)用標(biāo)簽字段3813包含應(yīng)用標(biāo)簽掩碼與應(yīng)用標(biāo)簽,上文描述了它們的使用。圖39圖示了傳輸請(qǐng)求(如傳輸請(qǐng)求203)的內(nèi)部結(jié)構(gòu)。在初始化時(shí),為每個(gè)傳輸 請(qǐng)求在傳輸請(qǐng)求表4111 (見(jiàn)下文)中分配包括16個(gè)32位雙字的空間。在當(dāng)前優(yōu)選實(shí)施例 中,僅使用這些雙字中的14個(gè)。為將來(lái)的擴(kuò)展保留附加的兩個(gè)雙字。傳輸請(qǐng)求是由RdWr HEMi創(chuàng)建并由閃存HEMi使用的數(shù)據(jù)結(jié)構(gòu)。它們包含以下字 段自指針3901。其識(shí)別傳輸請(qǐng)求表4111 (見(jiàn)下文)中的特定傳輸請(qǐng)求的位置。其被 傳遞到其它需要識(shí)別該傳輸請(qǐng)求的數(shù)據(jù)結(jié)構(gòu),例如,需要識(shí)別調(diào)用傳輸請(qǐng)求的頁(yè)面請(qǐng)求。
調(diào)用IOP字段3902。其包含引起該傳輸請(qǐng)求被創(chuàng)建并從IOP自指針3801取得的 IOP的識(shí)別。LBA字段3903。其包含用于該傳輸?shù)钠鹗糒BA。例如,如果調(diào)用的IOP需要從LBA 0-100中讀,則用于第一個(gè)傳輸請(qǐng)求的LBA字段3903將讀為“0”,用于第二個(gè)傳輸請(qǐng)求的 LBA字段3903將讀為“45”,以及用于第三個(gè)傳輸請(qǐng)求的LBA字段3903將讀為“90” (如上 所解釋?zhuān)總€(gè)傳輸請(qǐng)求可以處理最多45個(gè)LBA)。傳輸長(zhǎng)度字段3904。其包含要被傳輸?shù)腖BA的數(shù)量。數(shù)據(jù)路徑DRAM指針3905。其包含指向IOP數(shù)據(jù)緩沖器3202中為該傳輸請(qǐng)求數(shù)據(jù) 被寫(xiě)入或被讀出的地址的指針。如上所解釋?zhuān)琁OP數(shù)據(jù)緩沖器3202由IOP組織,并且包含 用于從閃存模塊108中讀取或被寫(xiě)入到該閃存模塊的數(shù)據(jù)的空間。中止標(biāo)志3906。該標(biāo)志指示傳輸請(qǐng)求的操作應(yīng)該被中止。在傳輸數(shù)據(jù)之前由傳輸 請(qǐng)求檢查中止標(biāo)志,以確保不為已經(jīng)中止的命令傳輸數(shù)據(jù)。下文進(jìn)一步描述中止處理。命令字段3907。其識(shí)別所請(qǐng)求的命令的性質(zhì)。可能的狀態(tài)包括讀、寫(xiě)、格式化、移 動(dòng)以及擦除。狀態(tài)變量3908。它們包含用于追蹤傳輸請(qǐng)求的當(dāng)前狀態(tài)的變量。當(dāng)閃存HEMi開(kāi) 始對(duì)傳輸請(qǐng)求的操作時(shí),其檢查這些變量,以確定需要什么類(lèi)型的執(zhí)行。例如,“完成”狀態(tài) 變量告知閃存HEMi 傳輸請(qǐng)求已完成,以及清理(clean-up)例程(下文描述)應(yīng)該開(kāi)始。參考標(biāo)簽字段3909。其存儲(chǔ)用于作為傳輸請(qǐng)求的對(duì)象的第一區(qū)段的參考標(biāo)簽。從 調(diào)用的IOP的參考標(biāo)簽字段3812取得該信息,然而,對(duì)于除由IOP調(diào)用的第一個(gè)傳輸請(qǐng)求 外的傳輸請(qǐng)求,必須對(duì)其進(jìn)行調(diào)整。應(yīng)用標(biāo)簽字段3910。其存儲(chǔ)應(yīng)用標(biāo)簽和應(yīng)用標(biāo)簽掩碼。從調(diào)用的IOP的應(yīng)用標(biāo)簽 字段3813中取得該信息。已分配頁(yè)面請(qǐng)求字段3911包含傳輸請(qǐng)求已經(jīng)為當(dāng)前讀或?qū)懖僮鞣峙涞捻?yè)面請(qǐng)求 的數(shù)量。在當(dāng)前優(yōu)選實(shí)施例中,該數(shù)量設(shè)置為最大3。剩余頁(yè)面請(qǐng)求字段3912包含傳輸請(qǐng)求分配的還未完成的頁(yè)面請(qǐng)求的數(shù)量。該字 段起初包含與已分配頁(yè)面請(qǐng)求字段3911相同的值。隨著每個(gè)頁(yè)面請(qǐng)求完成,閃存HEMi遞 減剩余頁(yè)面請(qǐng)求字段3912。頁(yè)面請(qǐng)求指針陣列3913。該字段包含指向分配來(lái)處理傳輸請(qǐng)求所要求的傳輸?shù)拿?個(gè)頁(yè)面請(qǐng)求的指針。已分配頁(yè)面請(qǐng)求字段3911、剩余頁(yè)面請(qǐng)求字段3912以及頁(yè)面請(qǐng)求指針陣列字段 3913不包括在存儲(chǔ)在共享RAM中的傳輸請(qǐng)求表4111 (見(jiàn)下文)中的傳輸請(qǐng)求中。相反,當(dāng) 傳輸請(qǐng)求被存儲(chǔ)在閃存HEMi的mRAM中時(shí),在下文更詳細(xì)解釋的處理中,將這些字段加入到 傳輸請(qǐng)求。圖40圖示頁(yè)面請(qǐng)求(如頁(yè)面請(qǐng)求210)的結(jié)構(gòu)。頁(yè)面請(qǐng)求被存儲(chǔ)在閃存HEMi的 mRAM中。當(dāng)閃存HEMi從RdWr HEMi接收到傳輸請(qǐng)求時(shí),閃存HEMi設(shè)立執(zhí)行該傳輸請(qǐng)求所 必需的頁(yè)面請(qǐng)求,并且利用識(shí)別這些頁(yè)面請(qǐng)求的信息填充傳輸請(qǐng)求的頁(yè)面請(qǐng)求的指針陣列 3913。每個(gè)頁(yè)面請(qǐng)求包括以下字段頁(yè)面請(qǐng)求自指針4001。其指向閃存HEMi的mRAM中的頁(yè)面請(qǐng)求表2906中保持該 頁(yè)面請(qǐng)求的頁(yè)面請(qǐng)求的位置。
52
調(diào)用傳輸請(qǐng)求4002。其包含用于調(diào)用該頁(yè)面請(qǐng)求、并從傳輸請(qǐng)求自指針3901中復(fù) 制的傳輸請(qǐng)求的標(biāo)識(shí)符。命令字段4003,其被從調(diào)用的傳輸頁(yè)面的命令字段3907中取得。該字段中的可能 的值包括讀寫(xiě)讀/修改/寫(xiě)擦除注意,如果傳輸請(qǐng)求中的命令字段3907是“寫(xiě)”,并且頁(yè)面請(qǐng)求的傳輸長(zhǎng)度字段 4010 (見(jiàn)下文)指示該寫(xiě)針對(duì)少于完整頁(yè)面,則設(shè)置讀/修改/寫(xiě)狀態(tài)。如下所解釋的,在 該情況中,需要讀/修改/寫(xiě),這是因?yàn)?,閃存寫(xiě)以每次一個(gè)完整頁(yè)面發(fā)生,并且,如果頁(yè)面 請(qǐng)求是寫(xiě)入少于完整的超級(jí)頁(yè)面,則舊超級(jí)頁(yè)面的剩余部分必須被復(fù)制和寫(xiě)入到新超級(jí)頁(yè) 面中。數(shù)據(jù)路徑DRAM指針字段4004。其被從傳輸請(qǐng)求的DRAM指針字段3905獲取,但 被修改來(lái)反映設(shè)計(jì)該特定頁(yè)面請(qǐng)求的數(shù)據(jù)應(yīng)該被置于哪里或者應(yīng)該在分配給傳輸請(qǐng)求的 DRAM空間中哪里發(fā)現(xiàn)它(例如,將在傳輸請(qǐng)求空間的開(kāi)始處發(fā)現(xiàn)涉及第一個(gè)頁(yè)面請(qǐng)求的數(shù) 據(jù),涉及第一個(gè)頁(yè)面請(qǐng)求的數(shù)據(jù)將被偏移到傳輸請(qǐng)求空間中,等等)。S頁(yè)面索引字段4005存儲(chǔ)進(jìn)入表示正被該頁(yè)面請(qǐng)求處理的LBA范圍的轉(zhuǎn)發(fā)表 3201的索引。基于傳輸請(qǐng)求LBA字段3903產(chǎn)生該信息,根據(jù)需要而修改它,以反映由于相 同傳輸請(qǐng)求而發(fā)起的其它頁(yè)面請(qǐng)求。閃存讀地址字段4006。其包含閃存組中讀將發(fā)生的地址,并且通過(guò)子組、塊和頁(yè) 面識(shí)別位置。從轉(zhuǎn)發(fā)表3201獲取該信息。當(dāng)閃存HEMi接收到傳輸請(qǐng)求時(shí),閃存HEMi使用 來(lái)自傳輸請(qǐng)求的LBA字段3903中的信息來(lái)發(fā)現(xiàn)對(duì)應(yīng)于轉(zhuǎn)發(fā)表3201中的LBA的閃存地址信 息。如上所解釋?zhuān)ㄟ^(guò)將LBA除以15來(lái)找到轉(zhuǎn)發(fā)表中的行,并使用來(lái)自所述除法的余數(shù)來(lái) 識(shí)別區(qū)段的物理位置,將LBA轉(zhuǎn)換為物理閃存地址。閃存寫(xiě)地址字段4007。其包含被頁(yè)面請(qǐng)求用于寫(xiě)的閃存組地址,并且基于要用于 寫(xiě)的超級(jí)頁(yè)面來(lái)計(jì)算其。下文描述超級(jí)頁(yè)面被選擇的方式。因?yàn)樽x_修改-寫(xiě)需要讀地址 和寫(xiě)地址字段兩者,所以頁(yè)面請(qǐng)求包括兩者。頭長(zhǎng)度字段4008。在傳輸在超級(jí)頁(yè)面的中間開(kāi)始的部分傳輸?shù)那闆r中,該字段保 持LBA在超級(jí)頁(yè)面的開(kāi)始與傳輸假定開(kāi)始的位置之間的偏移。通過(guò)取得用于確定閃存讀地 址或閃存寫(xiě)地址(見(jiàn)上文)的LBA并將其除以15來(lái)計(jì)算該字段。來(lái)自該除法的余數(shù)被用 于頭長(zhǎng)度字段。尾長(zhǎng)度字段4009。在傳輸在超級(jí)頁(yè)面中間結(jié)束的部分傳輸?shù)那闆r中,該字段保持 LBA在超級(jí)頁(yè)面的末端與該傳輸假定結(jié)束的位置之間的偏移。通過(guò)將頭長(zhǎng)度字段4008中的 值加上傳輸長(zhǎng)度字段4010中的值并從“15”減去結(jié)果值來(lái)計(jì)算該字段。傳輸長(zhǎng)度字段4010。其指定該頁(yè)面請(qǐng)求所需要的傳輸?shù)拈L(zhǎng)度。由閃存HEMi基 于傳輸請(qǐng)求的傳輸長(zhǎng)度字段3904以及該特定頁(yè)面請(qǐng)求將被要求處理的傳輸部分產(chǎn)生該信 息。注意,頭長(zhǎng)度字段4008、尾長(zhǎng)度字段4009與傳輸長(zhǎng)度字段4010的總和將始終是單個(gè)超 級(jí)頁(yè)面中的LBA的數(shù)量(在當(dāng)前實(shí)施例中為15)。
53
狀態(tài)變量字段4011。該字段由一系列用于追蹤頁(yè)面請(qǐng)求210的當(dāng)前狀態(tài)的標(biāo)志構(gòu) 成。聯(lián)系圖51和圖53描述使用狀態(tài)變量的示例??梢酝瑫r(shí)設(shè)置多個(gè)標(biāo)志,但某些組合不 合法。在當(dāng)前的優(yōu)選實(shí)施例中,該字段包括以下標(biāo)志,然而,應(yīng)該理解,所使用的準(zhǔn)確標(biāo)志是 實(shí)施相關(guān)的,并且不同集合的狀態(tài)標(biāo)志可以被用于獲得相同的結(jié)果命令其指示頁(yè)面請(qǐng)求準(zhǔn)備好向閃存發(fā)出命令準(zhǔn)備好/等待其指示頁(yè)面請(qǐng)求準(zhǔn)備好進(jìn)行,以及等待資源可用需要級(jí)緩沖器其指示頁(yè)面請(qǐng)求需要閃存級(jí)緩沖器來(lái)進(jìn)行閃存?zhèn)鬏斖瓿善渲甘卷?yè)面請(qǐng)求所需要的閃存讀或?qū)懲瓿傻谝?、第?其指示事務(wù)的當(dāng)前階段。例如在讀/修改/寫(xiě)中,在事務(wù)的不同階段, 需要頁(yè)面請(qǐng)求向閃存發(fā)出不同的命令。該字段允許頁(yè)面請(qǐng)求追蹤其在該處理中的位置。頁(yè)面請(qǐng)求完成其指示頁(yè)面請(qǐng)求已經(jīng)完成所有必須的操作。數(shù)據(jù)傳輸錯(cuò)誤其指示由頁(yè)面請(qǐng)求處理的傳輸導(dǎo)致了錯(cuò)誤。參考標(biāo)簽字段4012存儲(chǔ)被頁(yè)面請(qǐng)求尋址的數(shù)據(jù)的第一個(gè)區(qū)段的參考標(biāo)簽。從調(diào) 用的傳輸請(qǐng)求的參考標(biāo)簽字段3909獲取該信息,然而,對(duì)于除由傳輸請(qǐng)求調(diào)用的第一個(gè)頁(yè) 面請(qǐng)求外的頁(yè)面請(qǐng)求,偏移是必要的。應(yīng)用標(biāo)簽字段4013存儲(chǔ)從調(diào)用的傳輸請(qǐng)求的應(yīng)用標(biāo)簽字段3910中取得的應(yīng)用標(biāo) 簽和應(yīng)用標(biāo)簽?zāi)0逍畔?。C.共享RAM結(jié)構(gòu)圖41圖示存儲(chǔ)在共享RAM塊318中的信息。共享RAM塊318包含涉及啟動(dòng)器的兩個(gè)數(shù)據(jù)結(jié)構(gòu)啟動(dòng)器空閑列表4112和啟動(dòng)器 表 4108。在當(dāng)前實(shí)施例中,SSD控制器106能夠響應(yīng)來(lái)自十六個(gè)同時(shí)有效的啟動(dòng)器的命令。 因此,啟動(dòng)器表4108包含十六個(gè)存取位置,其中每個(gè)都包含用于涉及單個(gè)啟動(dòng)器(指示為 啟動(dòng)器0-15)的信息的空間,例如,啟動(dòng)器信息塊4101,下文聯(lián)系圖42對(duì)其進(jìn)一步描述。雖 然SCSI協(xié)議要求SSD控制器106響應(yīng)至少十六個(gè)有效的啟動(dòng)器,但在替代實(shí)施例中,可以 將SSD控制器106設(shè)計(jì)通過(guò)提高啟動(dòng)器表4108和啟動(dòng)器空閑列表4112的大小,以響應(yīng)比 該協(xié)議所需要的數(shù)量更多的啟動(dòng)器。啟動(dòng)器空閑列表4112是包含指向啟動(dòng)器表4108中空存取位置的指針的深度 16(16-deep)的FIFO隊(duì)列。當(dāng)新啟動(dòng)器最初尋求與SSD控制器106通信時(shí),來(lái)自啟動(dòng)器空 閑列表4112的頂部的指針從隊(duì)列中彈出,并且啟動(dòng)器列表4108中由該指針引用的存取位 置(例如存取位置4101)被用于有關(guān)新啟動(dòng)器的信息的存儲(chǔ)。如果啟動(dòng)器列表4112是空 的,則其指示SSD控制器106不能處理任何額外的啟動(dòng)器。SSD控制器106可以通過(guò)經(jīng)由主 機(jī)接口 310提供狀態(tài)信息而響應(yīng)該情形。應(yīng)該理解,將啟動(dòng)器信息傳遞到SSD控制器106的方式是協(xié)議特定的。然而,一般 地,在啟動(dòng)器首次開(kāi)始發(fā)起SSD控制器處指示的命令之前提供的數(shù)據(jù)結(jié)構(gòu)中傳遞該信息。 該數(shù)據(jù)結(jié)構(gòu)中的信息被用于填充啟動(dòng)器表4108中的啟動(dòng)器的條目。共享RAM塊318包含兩個(gè)涉及CDBinfo的數(shù)據(jù)結(jié)構(gòu)CDBinfo表4109和CDBinfo 空閑列表4102。CDBinfo表4109包含用于144個(gè)CDBinfo (標(biāo)記為CDBinfo 0-143)的存取位置。這些存取位置中的每個(gè)存儲(chǔ)單個(gè)⑶Binf0,例如,⑶Binfο 201。聯(lián)系圖37描述存儲(chǔ)在⑶Binfo 中的信息。空閑列表4102是包含指向⑶Binfo表4109中空存取位置的指針的深度144的 FIFO隊(duì)列。當(dāng)需要新⑶Binfo時(shí),從空閑列表4102的頂端彈出指針。然后,將用于新 ⑶Binfo的信息寫(xiě)入⑶Binfo表4109中由所彈出的指針指向的空存取位置中。當(dāng)完成 CDBinfo的處理時(shí),擦除該CDBinfo,并且,指向CDBinfo表4109中包含該CDBinfo的存取 位置的指針被加入空閑列表4102,由此釋放空間,以便其被用于新⑶B。SCSI協(xié)議需要SSD控制器106甚至在資源不可用的情況中也保證在特殊環(huán)境下處 理⑶B的能力。下文聯(lián)系圖46和圖47詳細(xì)描述這些影響控制空閑列表4102的方式的需 求。共享RAM塊318包含兩個(gè)涉及IOP的數(shù)據(jù)結(jié)構(gòu)Ι0Ρ表4110和IOP空閑列表4103。 它們與對(duì)應(yīng)的⑶Binfo結(jié)構(gòu)類(lèi)似地操作。IOP表4110對(duì)于SSD控制器106 —次可以處理 的60個(gè)IOP中的每個(gè)包含一個(gè)存取位置。聯(lián)系圖38描述包含在IOP表4110的每個(gè)存取 位置中的IOP信息的格式。IOP空閑列表4103是包含指向IOP表4110中空閑(未填充有 效Ι0Ρ)的存取位置的指針的深度60的FIFO隊(duì)列。共享RAM塊318包含兩個(gè)涉及傳輸請(qǐng)求的數(shù)據(jù)結(jié)構(gòu)傳輸請(qǐng)求表4111和傳輸請(qǐng) 求空閑列表4104。它們與對(duì)應(yīng)的IOP結(jié)構(gòu)類(lèi)似地操作。傳輸請(qǐng)求表4111對(duì)于SSD控制器 106 —次可以處理的120個(gè)傳輸請(qǐng)求中的每個(gè)包含一個(gè)存取位置。聯(lián)系圖39描述該信息的 格式。傳輸請(qǐng)求空閑列表4104是包含指向傳輸請(qǐng)求表4111中空閑的存取位置(未填充有 效傳輸請(qǐng)求)的指針的深度120的FIFO隊(duì)列。共享RAM塊318還對(duì)于包含在SSD控制器106中的每個(gè)HEMi包含一個(gè)工作列表。 雖然所描述的實(shí)施例包括23個(gè)HEMi,其中每個(gè)在共享RAM塊318中都具有關(guān)聯(lián)的工作列 表,但圖41僅示出了它們中的三個(gè)4105、4106和4107。應(yīng)該理解,HEMi的數(shù)量在實(shí)施之 間變化,并且共享RAM塊318將始終對(duì)于每個(gè)HEMi包含一個(gè)工作列表。每個(gè)HEMi工作列表是要被關(guān)聯(lián)的HEMi操作的任務(wù)的隊(duì)列。一般地,HEMi工作列 表包含指向CDBInfo表4109中的CDBinfo、IOP表4110中的IOP以及傳輸請(qǐng)求表4111中 的傳輸請(qǐng)求的指針,并且HEMi工作表上這樣的指針的出現(xiàn)指示關(guān)聯(lián)的HEMi被要求執(zhí)行涉 及所識(shí)別的⑶Binfo、I0P或傳輸請(qǐng)求的處理任務(wù)。HEMi通過(guò)在HEMi工作列表上放置指針 而互相通信。在當(dāng)前的實(shí)施例中,工作列表是FIFO,并且被FIFO指針寄存器控制,指針寄存器 如聯(lián)系圖24所描述(例如,指針寄存器2205)。任務(wù)以被接收的順序從工作列表中彈出,而 不試圖對(duì)特定任務(wù)賦予優(yōu)先級(jí)。在替代實(shí)施例中,通過(guò)例如在IOP中包括優(yōu)先級(jí)位而對(duì)任 務(wù)賦予優(yōu)先級(jí)。由設(shè)置有優(yōu)先級(jí)位的IOP調(diào)用的傳輸請(qǐng)求也可包括優(yōu)先級(jí)位。這樣的高優(yōu) 先級(jí)傳輸請(qǐng)求可以被加入到HEMi工作列表的頂部,而不是附加到底部,從而,這樣的傳輸 請(qǐng)求變成下一個(gè)由HEMi處理的傳輸請(qǐng)求,即使其它傳輸請(qǐng)求已經(jīng)在列表上。一旦⑶Binfo、IOP或傳輸請(qǐng)求被移動(dòng)到HEMi工作列表,沒(méi)有其它的HEMi能夠修 改該結(jié)構(gòu)(除了中止相關(guān)的信息)。共享RAM塊318還包括全局變量4113。它們存儲(chǔ)由處理中的HEMi使用的變量。圖42圖示啟動(dòng)器表4108中的條目的結(jié)構(gòu)。每個(gè)這樣的條目(例如,啟動(dòng)器04101)包含啟動(dòng)器自指針字段(4201),其指向表4108中的啟動(dòng)器的位置。啟動(dòng)器標(biāo)識(shí)符字段4202包含識(shí)別該特定啟動(dòng)器的信息。從主機(jī)接收該信息,并且 其被用在主機(jī)與SSD控制器106之間的通信中,從而主機(jī)可以從SSD控制器106向合適的 啟動(dòng)器路由通信。通過(guò)從主機(jī)接收第一個(gè)指示新啟動(dòng)器已經(jīng)請(qǐng)求訪(fǎng)問(wèn)SSD控制器106的請(qǐng) 求的接收HEMi填充啟動(dòng)器標(biāo)識(shí)符字段4202 (這種請(qǐng)求的格式對(duì)特定協(xié)議是特定的,例如, SAS、FCAL等,并且本領(lǐng)域的普通技術(shù)人員理解這一點(diǎn))。當(dāng)接收到這樣的指示時(shí),接收HEMi 使啟動(dòng)器從啟動(dòng)器空閑列表4112中彈出,并利用從主機(jī)接收的識(shí)別信息填充啟動(dòng)器標(biāo)識(shí) 符字段。在當(dāng)前優(yōu)選實(shí)施例中,啟動(dòng)器標(biāo)識(shí)符包括作為啟動(dòng)器的開(kāi)放幀接收的全球名稱(chēng)。計(jì)數(shù)字段4203包含從還未完成的啟動(dòng)器接收的⑶B的數(shù)量。當(dāng)接收到⑶B時(shí),接 收HEMi識(shí)別啟動(dòng)器,并為該啟動(dòng)器遞增計(jì)數(shù)字段4203。當(dāng)IOP完成執(zhí)行時(shí),作為清理處理 的一部分,計(jì)數(shù)字段4203遞增。當(dāng)計(jì)數(shù)字段4203到達(dá)0時(shí),其指示該啟動(dòng)器在系統(tǒng)中沒(méi)有剩下的命令。此時(shí),在 一個(gè)實(shí)施例中,啟動(dòng)器信息被擦除,并且數(shù)據(jù)結(jié)構(gòu)被返回到啟動(dòng)器空閑列表4112。在替代實(shí) 施例中,僅當(dāng)空閑列表是空的并需要新啟動(dòng)器時(shí),啟動(dòng)器才被返回到空閑列表。突發(fā)包長(zhǎng)度字段4204包含當(dāng)啟動(dòng)器最初被設(shè)立時(shí)從主機(jī)作為元數(shù)據(jù)的一部分接 收的突發(fā)包長(zhǎng)度控制信息。由SCSI協(xié)議指定的突發(fā)包長(zhǎng)度控制信息被用于設(shè)置突發(fā)包數(shù) 據(jù)傳輸?shù)淖畲箝L(zhǎng)度。如果向或從啟動(dòng)器的傳輸超過(guò)該最大長(zhǎng)度,則SSD控制器106必須中 斷該傳輸,允許向或從其它啟動(dòng)器的傳輸發(fā)生,并且接著恢復(fù)該傳輸。這由正處理該傳輸?shù)?傳送HEMi處理。在達(dá)到該限制之后,傳送HEMi斷開(kāi)傳輸,并接著立即設(shè)法重新連接。V.操作A.寫(xiě)性能對(duì)于高容量固態(tài)驅(qū)動(dòng)器,主要性能瓶頸是與閃存的接口。因此設(shè)計(jì)SSD控制器106 來(lái)最大化該接口的使用。通過(guò)將事務(wù)分解為相對(duì)較小的組塊(chunk),并以高度并行性執(zhí)行 這些組塊,意在保持閃存接口盡量忙碌來(lái)這么做。因此,閃存模塊108包含大量閃存組,每 個(gè)組具有與系統(tǒng)的其余部分的獨(dú)立接口,以及允許每個(gè)閃存組獨(dú)立而并行地操作的關(guān)聯(lián)閃 存端口。在每個(gè)閃存組內(nèi),存儲(chǔ)器被分解為子組,每個(gè)子組可以并行地操作。雖然每個(gè)閃存 組一次僅有一個(gè)子組可以與SSD控制器106通信,但小事務(wù)部分被輸入到多個(gè)子組,允許子 組在閃存接口被用于其它目的同時(shí)執(zhí)行內(nèi)部閃存操作。這連同多個(gè)緩沖器的使用允許事務(wù) 比在讀或?qū)懕仨毚邪l(fā)生的情況中所可能的速度快得多地完成。以40MHz工作的典型的同時(shí)代單層單元閃存芯片執(zhí)行一個(gè)頁(yè)面的寫(xiě)操作花費(fèi)大 概200微秒(本領(lǐng)域的技術(shù)人員應(yīng)該理解,閃存寫(xiě)操作經(jīng)常包括讀-修改-寫(xiě))。此外,將 一超級(jí)頁(yè)面的數(shù)據(jù)從級(jí)緩沖器移動(dòng)到閃存芯片緩沖器中花費(fèi)約50微秒。這意味著閃存組 可以使對(duì)不同的子組的五個(gè)連續(xù)的寫(xiě)操作流水線(xiàn)化,并由此保持閃存接口被完全占用每 個(gè)寫(xiě)操作需要總線(xiàn)50微秒,并接著內(nèi)部操作200微秒,在這期間,四個(gè)其它的寫(xiě)操作可以使 用該總線(xiàn)。因此,數(shù)據(jù)可以在500微秒內(nèi)被寫(xiě)入90個(gè)LBA的完整分條中。這在圖43中圖示,其包含交叉引用一個(gè)閃存組的子組0-7與以50微秒為遞增的 時(shí)間的表。該表示出了對(duì)子組0-5 (包括90個(gè)LBA)上的超級(jí)頁(yè)面的六超級(jí)頁(yè)面的寫(xiě)。在第一個(gè)50微秒時(shí)間段中,子組0使用總線(xiàn)將一超級(jí)頁(yè)面的數(shù)據(jù)從級(jí)緩沖器移動(dòng) 到子組0的閃存頁(yè)面緩沖器。這在圖43中被示為“M”。在接下來(lái)的四個(gè)50微秒時(shí)間段中,子組0上的閃存電路小片執(zhí)行從它們的頁(yè)面緩沖器到閃存的內(nèi)部寫(xiě)操作(在圖43中被示 為 “W,,)。因?yàn)樵诔跏紩r(shí)間段之后子組0不需要總線(xiàn),所以,在第二個(gè)50微秒時(shí)間段(標(biāo)記 為時(shí)間100)期間,子組1能夠從級(jí)緩沖器向子組1的頁(yè)面緩沖器移動(dòng)數(shù)據(jù)。然后,子組1 可以開(kāi)始內(nèi)部閃存寫(xiě)操作,將總線(xiàn)移交給子組2。對(duì)子組3、4和5的寫(xiě)類(lèi)似地進(jìn)行。可以看出,該六超級(jí)頁(yè)面的寫(xiě)花費(fèi)500微秒。閃存總線(xiàn)在該時(shí)間段中的300微秒 期間處于使用狀態(tài)。因?yàn)殚W存寫(xiě)操作可以與總線(xiàn)操作并行地發(fā)生,所以,在約三分之一的時(shí) 間中完成了在串行情況下將花費(fèi)1500微秒(6X250)的寫(xiě)。此外,在300微秒之后,閃存總線(xiàn)是空閑的,因此允許其它事務(wù)獲得對(duì)總線(xiàn)的訪(fǎng) 問(wèn),并因此允許多個(gè)事務(wù)重疊。圖43示出了寫(xiě)操作,因?yàn)榘谶@樣的操作中的等待時(shí)間比讀操作大得多,其中 讀操作花費(fèi)約100微秒(50微秒用于將數(shù)據(jù)讀取到閃存頁(yè)面緩沖器,50微秒用于將數(shù)據(jù)移 動(dòng)到級(jí)緩沖器),所以,所描述的結(jié)構(gòu)被設(shè)計(jì)來(lái)最大化寫(xiě)的性能,盡管其也傾向提高讀的性 能,但程度較低,其中假定在相同的閃存組上僅可以重疊兩個(gè)讀操作(一個(gè)從閃存讀,一個(gè) 將數(shù)據(jù)移動(dòng)到級(jí)緩沖器)。因?yàn)橄嗤潭鹊男阅懿⑿械匕l(fā)生在每個(gè)閃存端口上,而且因?yàn)閿?shù)據(jù)橫跨閃存 組被分條,所以,與沒(méi)有使用該并行流水線(xiàn)化結(jié)構(gòu)所可能的情形相比,大事務(wù)可以迅速 得多發(fā)生。因此,理論上,包含12個(gè)閃存組的系統(tǒng)可以在500毫秒時(shí)間段中寫(xiě)1080個(gè) LBA(12X90)。在真實(shí)世界中通常不可能獲得該理論最大值,這是因?yàn)槠湫枰總€(gè)寫(xiě)以子組 和閃存組的形式完美地排隊(duì)。但是,應(yīng)該很顯然,所描述的結(jié)構(gòu)的并行性和流水線(xiàn)化掩蓋 了閃存引入的等待時(shí)間,并允許以比傳統(tǒng)硬盤(pán)驅(qū)動(dòng)器或閃存設(shè)備高得多的性能處理讀寫(xiě)序 列。因?yàn)樗枋龅慕Y(jié)構(gòu)包括可觀的超過(guò)合并了標(biāo)準(zhǔn)SLC閃存芯片的系統(tǒng)所必需的性 能凈空(headroom),所以其可以在沒(méi)有大修改的情況下適用于較低速的MLC閃存。如在本 領(lǐng)域中所理解的,MLC( “多級(jí)單元”)每個(gè)閃存單元存儲(chǔ)兩個(gè)(或更多個(gè))比特。因此,對(duì) 于給定的存儲(chǔ)量,MLC芯片更便宜。然而,MLC芯片在讀和寫(xiě)上更慢。圖44示出了在單個(gè)由MLC閃存芯片構(gòu)成的閃存組上的90個(gè)LBA的寫(xiě),該MLC閃 存芯片需要350微秒用于一個(gè)頁(yè)面的寫(xiě)(當(dāng)前市場(chǎng)上的MLC芯片的典型性能)??梢钥闯觯?在600微秒內(nèi)完成整個(gè)寫(xiě)。雖然這超過(guò)了圖43中所示的用于SLC器件的500微秒,但是, 盡管MLC芯片為每個(gè)寫(xiě)都花費(fèi)額外的100微秒,而對(duì)于六個(gè)完整頁(yè)面的寫(xiě),差別也僅有100 微秒。如上文,可以橫跨多個(gè)閃存組并行地完成該寫(xiě)。該并行性足夠很大程度地掩蓋MLC 芯片的額外等待時(shí)間,從而,無(wú)論使用SLC還是MLC芯片,對(duì)于主機(jī),系統(tǒng)跨越主機(jī)接口的響 應(yīng)度都將完全可接受。B.讀和寫(xiě)處理圖45包含圖示當(dāng)接收到主機(jī)發(fā)起的寫(xiě)命令時(shí)主機(jī)端口(例如,主機(jī)端口 0104)遵 循的步驟的流程圖。該流程圖假定所接收的初始幀是寫(xiě),并在該基礎(chǔ)上進(jìn)行。為此原因, 未示出實(shí)際實(shí)施中所需要的大量步驟(例如,確定所接收的命令是讀還是寫(xiě),并相應(yīng)地分 支)。在步驟4501中,GigaBlaze 1801接收來(lái)自主機(jī)的基元。
在步驟4502中,GigaBlaze 1801將基元發(fā)送到基元匹配邏輯1802。在步驟4503中,基元匹配邏輯將基元識(shí)別為幀開(kāi)始(“S0F”)基元,指示其后跟隨 著幀(應(yīng)該理解,該描述本質(zhì)上是概念性的,并不意在描述所接收的基元的特定性質(zhì)。還應(yīng) 該理解,通信的性質(zhì)一定程度上取決于特定協(xié)議,并且該處理的細(xì)節(jié)根據(jù)所使用的協(xié)議而 不同)。在步驟4504中,在對(duì)應(yīng)于來(lái)自基元匹配寄存器1902的與所接收的基元匹配的寄 存器的來(lái)自基元匹配控制寄存器1903的寄存器的控制下,幀破解邏輯1904評(píng)估幀的第一 個(gè)雙字。在步驟4505中,幀破解邏輯確定幀是命令幀。在步驟4506中,在基元匹配邏輯1802的控制下操作的幀路由器1803將幀路由到 非數(shù)據(jù)有效載荷FIFO 1804。這在基元匹配控制寄存器和幀破解邏輯的控制下完成。在步驟4507中,用于主機(jī)端口的接收HEMi (例如,接收HEMi 1702)使命令幀從頭 部FIFO中彈出。在步驟4508中,接收HEMi評(píng)估幀并確定其包含⑶B。在步驟4509中,作為確定幀包含⑶B的結(jié)果,接收HEMi產(chǎn)生⑶Binfo。在步驟4510 中,接收 HEMi 將 CDBinfo 發(fā)送到 SCSI HEMi 2001。在步驟4511中,SCSI HEMi 2001確定CDB包含寫(xiě)命令。在步驟4512中,基于CDB包含寫(xiě)命令的確定,SCSI HEMi 2001將CDBinfo發(fā)送到 Rdffr HEMi。在步驟4513 中,基于 CDBinfo,Rdffr HEMi 產(chǎn)生 Ι0Ρ。在步驟4514中,Rdffr HEMi將IOP發(fā)送到傳送HEMi (例如,1704)。在步驟4515中,傳送HEMi產(chǎn)生傳輸準(zhǔn)備好的幀,其被設(shè)計(jì)來(lái)向主機(jī)指示SSD控制 器106現(xiàn)在準(zhǔn)備好接收包含要被寫(xiě)的數(shù)據(jù)的數(shù)據(jù)幀。在步驟4516中,傳送HEMi將傳輸準(zhǔn)備好的幀發(fā)送到GigaBlaze 1801。在步驟4517中,GigaBlaze將傳輸準(zhǔn)備好的幀發(fā)送到主機(jī)。在步驟4518中,GigaBlaze接收由主機(jī)發(fā)送的響應(yīng)于傳輸準(zhǔn)備好的幀的基元,其 用信號(hào)發(fā)送第一個(gè)數(shù)據(jù)幀的開(kāi)始。在步驟4519中,GigaBlaze 1801將基元發(fā)送到基元匹配邏輯1802。在步驟4520中,基元匹配寄存器匹配該基元作為S0F。在步驟4521中,在基元匹配控制寄存器1903的控制下,幀破解邏輯1904評(píng)估幀
的第一個(gè)雙字。在步驟4522中,幀破解邏輯確定該幀是數(shù)據(jù)幀。在步驟4523中,在基元匹配邏輯1802控制下操作的幀路由器1803將幀的頭部部 分路由到非數(shù)據(jù)有效載荷FIFO 1804,并將幀的數(shù)據(jù)部分路由到接收級(jí)緩沖器1706。這由 于基元匹配控制寄存器中的基元的匹配以及幀被識(shí)別為數(shù)據(jù)幀而完成。在該情況中,基元 匹配控制寄存器引起路由邏輯將設(shè)置數(shù)量的雙字路由到非數(shù)據(jù)有效載荷FIFO,并接著將后 續(xù)雙字路由到級(jí)緩沖器。在步驟4524中,接收HEMi使頭部從非數(shù)據(jù)有效載荷FIFO中彈出。在步驟4525中,接收HEMi評(píng)估頭部并確定其表示數(shù)據(jù)幀。
在步驟4526中,接收HEMi檢查頭部的目標(biāo)端口傳輸標(biāo)簽(“TPTT”)部分。與所 有幀一起接收的該字段包含將與單個(gè)事務(wù)關(guān)聯(lián)的幀連接在一起的數(shù)據(jù),例如,包含寫(xiě)命令 的命令幀與包含要寫(xiě)入的數(shù)據(jù)的數(shù)據(jù)幀。TPTT信息被復(fù)制到作為傳入的命令的結(jié)果而創(chuàng)建 的IOP中。接收HEMi使用該信息將接收的數(shù)據(jù)幀與在步驟4513中創(chuàng)建的IOP關(guān)聯(lián)。在步驟4527中,接收HEMi設(shè)立包含在接收級(jí)緩沖器中的數(shù)據(jù)到數(shù)據(jù)路徑DRAM 107中由IOP指定的位置的DMA傳輸。下文描述寫(xiě)操作隨后進(jìn)行的方式。圖46包含圖示SSD控制器106處理⑶B的最初階段的流程圖。該流程示從 從主機(jī)接收CDB —直到將CDBinfo傳遞到RdWr HEMi的處理。應(yīng)該理解,并且對(duì)于在這里使用的所有流程圖來(lái)說(shuō)都正確的,圖46從算法的角度 圖示了該處理,而不意在描述實(shí)現(xiàn)細(xì)節(jié),也不意在描述具體的軟件步驟。此外,某些步驟的 排序是任意的,因?yàn)樵诤蟮牟襟E不依賴(lài)于在先的步驟的結(jié)果。實(shí)際實(shí)施例中排序這種步驟 的方式是實(shí)施相關(guān)的。在步驟4601中,主機(jī)101通過(guò)物理接口 1701將⑶B傳送到接收HEMi 1702。如上 所述,CDB由包括啟動(dòng)器的標(biāo)識(shí)的元數(shù)據(jù)伴隨。接收HEMi 1702在它的mRAM中臨時(shí)存儲(chǔ)CDB 和元數(shù)據(jù)。在步驟4602中,接收HEMi 1702通過(guò)交叉切換器2201訪(fǎng)問(wèn)共享RAM快318,并且 檢查⑶Binfo空閑列表4102,以確定是否超過(guò)16個(gè)⑶Binfo可用。如果16或更少個(gè)可用(步驟4602的“否”結(jié)果),則處理進(jìn)行到圖47所示的流程 圖,其涉及特殊情形的處理,聯(lián)系該圖更詳細(xì)地討論所述處理。如果超過(guò)16個(gè)CDBinfo可用(步驟4602的“是”結(jié)果),則在步驟4603中,接收 HEMi 1702通過(guò)交叉切換器2201訪(fǎng)問(wèn)共享RAM塊318,并檢查啟動(dòng)器表4108,以查看在元數(shù) 據(jù)中識(shí)別的啟動(dòng)器是否已經(jīng)存在。注意,該步驟還可以作為圖47所示的流程圖的結(jié)果之一 而被到達(dá)。如果啟動(dòng)器不在啟動(dòng)器表4108中(步驟4603的“否”結(jié)果),則在步驟4604中, 接收HEMi 1702檢查啟動(dòng)器空閑列表4112,以確定是否有空閑啟動(dòng)器可用。如果沒(méi)有空閑啟動(dòng)器可用(步驟4604的“否”結(jié)果),則在步驟4605中,接收HEMi 1702調(diào)用隊(duì)列滿(mǎn)例程。在當(dāng)前的優(yōu)選實(shí)施例中,SSD控制器106處理該情況的方式取決于 用戶(hù)在初始化時(shí)可設(shè)置的參數(shù)。用戶(hù)可以決定在該情況中進(jìn)行隊(duì)列滿(mǎn)報(bào)告,其具有引起啟 動(dòng)器重試命令直到資源可用的效果??蛇x地,用戶(hù)可以決定要求啟動(dòng)器表4108的“清除 (scrub) ”,以確定該表是否包含任何具有0的計(jì)數(shù)字段4203的啟動(dòng)器,具有0的計(jì)數(shù)字段 4203的啟動(dòng)器意味著它們沒(méi)有有效的命令。可以從表中清除這種啟動(dòng)器,由此釋放用于新 啟動(dòng)器的空間。如果清除打開(kāi)一啟動(dòng)器,則處理可以繼續(xù)。否則,進(jìn)行隊(duì)列滿(mǎn)報(bào)告。如果有空閑啟動(dòng)器可用(步驟4604的“是”結(jié)果),則在步驟4606中,接收HEMi 1702使啟動(dòng)器從啟動(dòng)器空閑列表4112中彈出。在步驟4607中,接收HEMi 1702使用在伴隨該⑶B的元數(shù)據(jù)中接收的識(shí)別信息填 充啟動(dòng)器標(biāo)識(shí)符字段4202。在步驟4608中,接收HEMi 1702為該啟動(dòng)器將計(jì)數(shù)字段4203加上1。無(wú)論啟動(dòng)器 是(步驟4603的“是”結(jié)果)否(來(lái)自步驟4607)已經(jīng)存在在啟動(dòng)器表4108中,都執(zhí)行該步驟。
59
在步驟4609 中,接收 HEMi 1702 使頂部 CDBinfo (例如,CDBinfo 201)從 CDBinfo 空閑列表4102中彈出。在步驟4610中,接收HEMi 1702將CDBinfo從CDBInfo表4109復(fù)制到其自己的 mRAM中。注意,此時(shí),⑶Binfο除自指針字段3701外是空的。在步驟4611中,接收HEMi 1702如下填充⑶Binfo的字段在⑶B字段3702中,其放置從主機(jī)101接收的⑶B的副本。在啟動(dòng)器字段3703中,其放置來(lái)自啟動(dòng)器表4108中用于該啟動(dòng)器的條目的自指 針4201的副本。在SCSI標(biāo)簽字段3705、SCSI標(biāo)簽字段3706、參考標(biāo)簽字段3708以及應(yīng)用標(biāo)簽字 段3709中,其放置在包括該⑶B的傳送中從主機(jī)101中接收的元數(shù)據(jù)。聯(lián)系圖37描述該 元數(shù)據(jù)的性質(zhì)。在突發(fā)包長(zhǎng)度控制字段3707中,其放置包含在與在啟動(dòng)器字段3703中識(shí)別的啟 動(dòng)器關(guān)聯(lián)的啟動(dòng)器信息的突發(fā)包長(zhǎng)度控制字段4204中的信息的副本。在步驟4612中,接收HEMi 1702訪(fǎng)問(wèn)交叉切換器2201,并將填充的CDBinfo 201 復(fù)制到⑶Binfo表4109中被自指針字段3701指向的存取位置。在步驟4613中,接收HEMi 1702在用于SCSI HEMi 2001的工作列表中放置自指 針字段3701的副本。如果用于SCSI HEMi 2001的工作列表先前是空的,則將指針置于該工作列表中會(huì) 喚醒SCSI HEMi0如果其它任務(wù)已經(jīng)存在在工作列表上,則SCSI HEMi完成這些任務(wù)。在任 一情況下,在某些點(diǎn)上,指向⑶Binfo 201的指針在工作列表的頂部,并且,在步驟4614中, SCSI HEMi 2001使用交叉切換器2201訪(fǎng)問(wèn)其工作列表,并使該指針彈出。在步驟4615中,SCSI HEMi 2001使用交叉切換器2201訪(fǎng)問(wèn)CDBinfo表4109中 的⑶Binfο 201的位置,并且將該⑶Binfο復(fù)制到其自身的mRAM中。在步驟4616 中,SCSI HEMi 2001 從 CDBinfo 201 的 CDB 字段 3702 中讀取 CDB 的 命令部分,以確定其是否是數(shù)據(jù)傳輸(讀或?qū)?。如果命令不是讀或?qū)?步驟4616的“否”結(jié)果),則在步驟4617中,SCSIHEMi 2001 將⑶Binfo傳遞到ARM處理器2002,其負(fù)責(zé)處理除讀或?qū)懼獾拿?。此時(shí),圖46中所述 的處理結(jié)束。如果命令是讀或?qū)?步驟4616的“是”結(jié)果),則在步驟4618中,SCSI HEMi2001 將存儲(chǔ)在⑶Binfo 201的⑶B字段3702中的⑶B的LBA和傳輸長(zhǎng)度字段與命令表2003比 較,如上所述,命令列表2003被存儲(chǔ)在SCSI HEMi 2001的mRAM中。通過(guò)該比較,SCSI HEMi 2001確定在命令表中是否已識(shí)別任一需要被⑶B傳輸?shù)腖BA。匹配意味著新⑶B的主題的 某些或全部LBA已經(jīng)是現(xiàn)有傳輸?shù)闹黝}。如上所述,需要SSD控制器106保持一致性,從而 LBA不經(jīng)受不一致的命令。如果SCSI HEMi 2001發(fā)現(xiàn)命令列表匹配(步驟4618的“是”結(jié)果),則在步驟4619 中,其停止⑶Binfo的執(zhí)行并返回到步驟4618。該循環(huán)繼續(xù)直到匹配不再存在。如果未發(fā)現(xiàn)匹配(步驟4618的“否”結(jié)果),則在步驟4620中,SCSI HEMi2001將 LBA和傳輸長(zhǎng)度從⑶B字段3702放置到命令列表2003中。在步驟4621中,SCSI HEMi 2001為每個(gè)RdWr HEMi工作列表訪(fǎng)問(wèn)計(jì)數(shù)寄存器(例如,計(jì)數(shù)寄存器2408),以確定這些工作列表中的哪個(gè)包含最少的任務(wù)。在步驟4622中,SCSI HEMi 2001將指向CDBinfo 201的指針?lè)胖迷谧R(shí)別的工作 列表上,例如用于RdWr HEMi 2101的工作列表,并且圖46所描述的處理完成。注意,步驟4602之后步驟4609之前的啟動(dòng)器相關(guān)的步驟僅對(duì)于允許超過(guò)一個(gè)啟 動(dòng)器的協(xié)議(例如,SAS和光纖信道)是必要的。對(duì)于僅允許單個(gè)啟動(dòng)器的協(xié)議(例如, SATA),這些步驟不必要。替代地,對(duì)于基于SATA的系統(tǒng),當(dāng)接收到最初的設(shè)置特征命令時(shí), 控制器106設(shè)立啟動(dòng)器。如本領(lǐng)域中所理解,設(shè)置特征命令包括需要用于突發(fā)包長(zhǎng)度字段 4204的突發(fā)包長(zhǎng)度信息。在設(shè)立了啟動(dòng)器之后,⑶B的處理如圖46中所示地進(jìn)行,然而,應(yīng) 該理解,對(duì)步驟4603的回答總是“是”,并且處理進(jìn)行到步驟4608 (其不必要但也無(wú)害)然 后進(jìn)入步驟4609。這允許對(duì)SATA、SAS以及光纖信道使用公共的代碼庫(kù)(code base)。在替代實(shí)施例中,略有不同的代碼庫(kù)被用于SATA系統(tǒng),該系統(tǒng)完全沒(méi)有啟動(dòng)器。 在這樣的實(shí)施例中,圖46的處理將跳過(guò)步驟4602至步驟4609。在再一實(shí)施例中,基于使用 的協(xié)議設(shè)置變量,并且在該變量識(shí)別SATA協(xié)議的情況下,處理跳過(guò)步驟4602至步驟4609。如上所述,當(dāng)接收到⑶B時(shí),如果⑶Binfo空閑列表4102上16個(gè)或更少的⑶Binfo 可用,則調(diào)用特殊的處理例程。兩個(gè)特殊情形必須被檢查和處理(如果它們存在)。首先,SCSI協(xié)議需要SSD控制器105確保最后一個(gè)⑶B可以在SSD控制器106已 經(jīng)報(bào)告了缺乏資源之后被處理。盡管該協(xié)議需要控制器正確地響應(yīng)這些情況下發(fā)出的任何 CDB,但該能力通常意在允許主機(jī)發(fā)出要求關(guān)于錯(cuò)誤情形的信息的請(qǐng)求探測(cè)CDB,第二個(gè)特殊情況出現(xiàn)在客戶(hù)要求強(qiáng)制SSD控制器106能夠同時(shí)支持十六個(gè)有效的 啟動(dòng)器的情況下,意味著其必須能夠?yàn)槊總€(gè)可能的啟動(dòng)器(最多16個(gè))支持至少一個(gè)有效 的 CDB。該客戶(hù)要求意味著在少于16個(gè)當(dāng)前有效的啟動(dòng)器的情況下,SSD控制器106必 須維持足夠的CDBinfo來(lái)保留,來(lái)為每個(gè)可以變?yōu)橛行У念~外啟動(dòng)器(最多16個(gè))分配一 個(gè)CDBinfo。注意,該特征是實(shí)施相關(guān)的,這是因?yàn)槟承┛蛻?hù)可能不需要它。在一個(gè)實(shí)施例 中,通過(guò)在初始化時(shí)設(shè)置的變量來(lái)使能該特征。在另一實(shí)施例中,略有不同的代碼庫(kù)被用于 需要以及不需要該特征的系統(tǒng)。在一個(gè)實(shí)施例中,可以如圖47中所示處理這些特殊情況的兩者。注意,在圖46中 的步驟4602的“否”結(jié)果之后,由接收HEMi執(zhí)行這些步驟。在步驟4701中,檢查CDBinfo空閑列表4102,以確定是否有任何空閑CDBinfo。如果沒(méi)有空閑⑶Binfo存在(步驟4701的“否”結(jié)果),則處理進(jìn)行到步驟4702, 其調(diào)用隊(duì)列滿(mǎn)例程。雖然細(xì)節(jié)取決于使用的協(xié)議,但一般這包括向主機(jī)返回隊(duì)列滿(mǎn)消息。如果有空閑CDBinfo (步驟4701的“是”結(jié)果),則在步驟4703中,檢查空閑列表 4102,以確定空閑列表上是否僅有單個(gè)空閑⑶Binfo。如果空閑列表上僅有一個(gè)⑶Binfο (步驟4703的“是”結(jié)果),則在步驟4704中, 檢查保留標(biāo)志。在初始化時(shí)該標(biāo)志被設(shè)為“0”,并且在向空閑列表4102中加入CDBinfo的 任何時(shí)候也將其設(shè)為“0”。保留標(biāo)志指示當(dāng)前CDB是否有權(quán)使用空閑列表中的最后一個(gè) CDBinfo0如上所述,SCSI協(xié)議需要在隊(duì)列滿(mǎn)被返回之后接受一個(gè)額外的CDB,意味著如果 僅有一個(gè)⑶Binfo剩余在空閑列表上,則第一⑶B必須觸發(fā)隊(duì)列滿(mǎn)指示,并且允許第二⑶B 使用 CDBinfo。
如果保留標(biāo)志未被設(shè)置(步驟4704的“否”結(jié)果),則在步驟4705中,設(shè)置保留標(biāo) 志。然后,處理繼續(xù)到步驟4702,其指示隊(duì)列滿(mǎn)例程。如果保留標(biāo)志被設(shè)置(步驟4704的“是”結(jié)果),則在步驟4706中,處理返回到圖 46的步驟4603,其后,保留的CDBinfo將被分配給CDB。如果空閑列表4102上的空閑⑶Binfo的數(shù)量大于1 (步驟4703的“否”輸出),則 處理進(jìn)行到步驟4707,其中負(fù)責(zé)該CDB的啟動(dòng)器的計(jì)數(shù)字段4203被評(píng)估,以確定該啟動(dòng)器 是否已經(jīng)具有至少一個(gè)當(dāng)前的⑶B (計(jì)數(shù)字段彡1)。如果啟動(dòng)器不具有任何有效的CDB(或者如果其為新啟動(dòng)器)(步驟4707的“否” 結(jié)果),則處理進(jìn)行到步驟4706,并且從那里進(jìn)行到圖46的步驟4603,其后,⑶Binfo將為 該啟動(dòng)器彈出,這是因?yàn)?,系統(tǒng)允許啟動(dòng)器被保證至少一個(gè)有效的CDB。如果啟動(dòng)器已經(jīng)具有有效的⑶B (步驟4707的“是”結(jié)果),則不需要系統(tǒng)向啟動(dòng) 器保證⑶B,并且處理進(jìn)行到步驟4708,在其中,啟動(dòng)器表4108中具有至少為1的值的計(jì)數(shù) 字段4203的條目的數(shù)量被放置在稱(chēng)為“Varl”的變量中。該數(shù)量表示當(dāng)前有效的啟動(dòng)器的 數(shù)量,每個(gè)啟動(dòng)器至少具有一個(gè)有效的命令。在步驟4709中,從16減去Varl,并且將結(jié)果置于稱(chēng)為“Var2”的變量中。其表示 必須被保證⑶Binfo的額外啟動(dòng)器的數(shù)量。在步驟4710中,將空閑列表4102 中條目的數(shù)量與Var2比較。如果空閑⑶Binfo 的數(shù)量比Var至少大2 (步驟4720的“是”結(jié)果),則處理進(jìn)行到步驟4706,并且從那里進(jìn) 行到圖46的步驟4603,其后,將⑶Binfo彈出,這是因?yàn)?,有足夠的⑶Binfo可用于滿(mǎn)足該 保證。如果空閑CDBinfo的數(shù)量并非比Var2至少大2 (步驟4710的“否”結(jié)果),則在 步驟4702中,系統(tǒng)報(bào)告隊(duì)列滿(mǎn)。這是必須的,因?yàn)楸仨毐3肿銐虻目臻e⑶Binfo,以允許由 Var2表示的數(shù)量的啟動(dòng)器的未來(lái)維護(hù),加上一個(gè)必須維持保留的額外CDBinfo。因此,圖47所示的流程圖檢查上述的兩個(gè)特殊情況。圖48包含圖示基于⑶Binfo設(shè)立IOP和傳輸請(qǐng)求的方式的流程圖。在步驟4801中,RdWr HEMi (例如,RdWr HEMi 2101)使用交叉切換器2201來(lái)訪(fǎng)問(wèn) 其工作列表,并使指向⑶Binfo (例如,⑶Binfo 201)的指針彈出。在步驟4802中,RdWr HEMi 2101使用交叉切換器2201訪(fǎng)問(wèn)CDBinfo表4109中 的對(duì)應(yīng)于所述指針的位置,并在該位置找到⑶Binfo 201。RdWr HEMi 2101將⑶Binfo 201 復(fù)制到它的mRAM中。在步驟4803中,RdWr HEMi 2101確定在IOP空閑列表4103上是否存在任何Ι0Ρ。如果在空閑列表上不存在IOP (步驟4803的“否”結(jié)果),則在步驟4804中,RdWr HEMi 2101等待IOP以完成執(zhí)行,然后,一旦空閑IOP出現(xiàn)在空閑列表上,重新開(kāi)始處理。如果在空閑列表上存在IOP(步驟4803的“是”結(jié)果),則在步驟4805中,Rdffr HEMi 2101使用交叉切換器2201訪(fǎng)問(wèn)共享RAM,并確定傳輸請(qǐng)求空閑列表4104上是否存在 足夠的傳輸請(qǐng)求用于處理IOP所需要數(shù)量的傳輸請(qǐng)求。如果空閑列表上存在不足的傳輸請(qǐng)求(步驟4805的“否”結(jié)果),則在步驟4806 中,RdWr HEMi 2101等待傳輸請(qǐng)求釋放,然后進(jìn)行到步驟4807。如果空閑列表上存在傳輸請(qǐng)求(步驟4805的“是”結(jié)果),則在步驟4807中,RdWrHEMi 2101使頂部IOP指針從空閑列表中彈出。該指針被復(fù)制到⑶Binfo的IOP字段3704中。在步驟4808中,RdWr HEMi 2101將空閑列表上的頂部指針指向的IOP (例如,IOP 202)從IOP表4110復(fù)制到它的mRAM中。此時(shí),包含在IOP中的僅有信息是自指針3801。在步驟4809中,Rdffr HEMi 2101將來(lái)自⑶B字段3702的傳輸長(zhǎng)度值從⑶Binfo 復(fù)制到名為“TLvar”的變量中。該變量貫穿所描述的算法的剩余部分存儲(chǔ)當(dāng)前傳輸長(zhǎng)度 (應(yīng)該理解,在這個(gè)或其它情況中,該描述本質(zhì)上是概念性的,并且實(shí)際實(shí)施可以包括也可 以不包括帶有該名稱(chēng)的變量)。在步驟4810 中,RdWr HEMi 2101 將來(lái)自 CDB 字段 3702 的 LBA 值從 CDBinfo 復(fù) 制到稱(chēng)為“LBAvar”的值中。該變量貫穿所描述的算法的剩余部分存儲(chǔ)當(dāng)前傳輸開(kāi)始處的 LBA。在步驟4811 中,RdWr HEMi 2101 如下填充 IOP 202 在調(diào)用HEMi字段3802中,其放置其自身的指針。在⑶Binfo字段3805中,其放置早先從其工作列表彈出的⑶Binfo指針。在啟動(dòng)器字段3804中,其放置從⑶Binfo 201的啟動(dòng)器字段3703中取出的啟動(dòng) 器指針。其設(shè)置狀態(tài)變量字段3810,以指示IOP的當(dāng)前狀態(tài)。其清零中止標(biāo)志3811。在參考標(biāo)志字段3812和應(yīng)用標(biāo)志字段3813中,其復(fù)制⑶Binfo 201的參考標(biāo)簽 字段3708和應(yīng)用標(biāo)簽字段3709的內(nèi)容。在步驟4812中,Rdffr HEMi 2101使頂端傳輸請(qǐng)求指針從空閑列表中彈出。在步驟4813中,RdWr HEMi 2101將由空閑列表上的頂部指針指向的傳輸請(qǐng)求從 傳輸請(qǐng)求表4111復(fù)制到它的mRAM中。此時(shí),包含在傳輸請(qǐng)求中的僅有信息是自指針3901。在步驟4814中,RdWr HEMi 2101遞增IOP已分配傳輸請(qǐng)求字段3807,以反映新傳 輸請(qǐng)求。在步驟4815中,RdWr HEMi 2101遞增IOP剩余傳輸請(qǐng)求字段3808,以反映信息傳
輸請(qǐng)求。在步驟4816中,RdWr HEMi 2101將傳輸請(qǐng)求自指針3901復(fù)制到IOP傳輸請(qǐng)求指 針陣列3809中。在步驟4817中,RdWr HEMi 2101將來(lái)自L(fǎng)BAvar的值復(fù)制到傳輸請(qǐng)求LBA字段 3903中。這是將被傳輸請(qǐng)求用于傳輸?shù)拈_(kāi)始的位置。在步驟4818中,Rdffr HEMi 2101利用通過(guò)從IOP傳輸長(zhǎng)度中減去TLvar并將該 結(jié)果加到指向IOP數(shù)據(jù)緩沖器3202中專(zhuān)用于該IOP的空間的指針上而計(jì)算的值填充傳輸 請(qǐng)求DRAM指針字段3905。該結(jié)果指示涉及該傳輸請(qǐng)求的數(shù)據(jù)將存儲(chǔ)在IOP的DRAM空間中 的哪里。該值將為每個(gè)后繼的傳輸請(qǐng)求增加等于由緊挨在前的傳輸請(qǐng)求處理的傳輸?shù)拇笮〉牧?。在步驟4819中,Rdffr HEMi 2101如下填充某些傳輸請(qǐng)求字段在調(diào)用IOP字段3902中,其放置指向從IOP空閑列表4103中彈出的IOP的指針。在LBA字段3903中,其放置當(dāng)前在LBAvar中的值的副本,指示用于該傳輸?shù)钠鹗?br>
63LBA。清除中止標(biāo)志3906。在命令字段3907中,其放置所要求的命令的類(lèi)型。在該示例中,該命令是讀。利用從IOP 202的字段3812和3813中取得的信息,來(lái)填充參考標(biāo)簽字段3909和 參考標(biāo)簽字段3910。在步驟4820中,RdWr HEMi將傳輸請(qǐng)求LBA值除以15,并將商放置到名為“索引”
的變量中。在步驟4821中,RdWr HEMi使用索引在轉(zhuǎn)發(fā)表3201中執(zhí)行查找。該查找產(chǎn)生對(duì) 應(yīng)于包含在傳輸請(qǐng)求LBA字段中識(shí)別的LBA的超級(jí)頁(yè)面的行。來(lái)自該行的端口字段被放置 到名為“端口 A”的變量中。在步驟4822中,TLVar中的值被復(fù)制到名為“TLTemp”的變量中。在步驟4823中,名為“頁(yè)面”的變量被初始化為值1。如上所述,每個(gè)傳輸請(qǐng)求可 以處理最多三個(gè)超級(jí)頁(yè)面,每個(gè)超級(jí)頁(yè)面可以處理15個(gè)LBA的塊。該變量追蹤分配到該傳 輸請(qǐng)求的這種LBA塊的數(shù)量。在步驟4824中,從15減去來(lái)自在步驟4820中執(zhí)行的除法的余數(shù),并將結(jié)果放置 在名為“偏移”的變量中。如上所述,每個(gè)超級(jí)頁(yè)面包含15個(gè)LBA,并且,傳輸中的第一個(gè) LBA可以被偏移到操作頁(yè)面的中間。還如上所述,每個(gè)傳輸請(qǐng)求可以發(fā)起三個(gè)頁(yè)面請(qǐng)求,每 個(gè)頁(yè)面請(qǐng)求可以處理單個(gè)超級(jí)頁(yè)面。結(jié)果,如果第一個(gè)LBA被偏移到超級(jí)頁(yè)面中,則由傳輸 請(qǐng)求發(fā)出的頁(yè)面請(qǐng)求中的一個(gè)將處理少于十五個(gè)LBA。步驟4824處理該情況。在步驟4825中,將偏移中的值與TLTemp中的值比較。如果Offset比TLTemp大或相等(步驟4825的“是”結(jié)果),則這意味著傳輸將在 可以由該傳輸請(qǐng)求處理的LBA范圍中完成。在步驟4826中,TLTemp中的值被寫(xiě)入傳輸請(qǐng)求傳輸長(zhǎng)度字段3904中。在步驟4827中,將傳輸請(qǐng)求放置在用于負(fù)責(zé)在端口 A變量中識(shí)別的端口的閃存 HEMi的工作列表上。因?yàn)橛糜谠揑OP所必需的所有傳輸請(qǐng)求都已經(jīng)被分配,所以接著處理結(jié)束。如果TLTemp比偏移大(步驟4825的“否”結(jié)果),則在步驟4828中,評(píng)估TLTemp, 以確定其是否小于或等于15。如果TLTemp小于或等于15 (步驟4828的“是”結(jié)果),則其意味著傳輸將以該傳 輸請(qǐng)求完成,并且,處理繼續(xù)到步驟4826,其如上所述進(jìn)行。如果TLTemp大于15 (步驟4828的“否”結(jié)果),則在步驟4829中,從TLTemp中減 去偏移,并且將結(jié)果存回到TLTemp中。該步驟重復(fù)地遞減TLTemp,以反映要被分配給當(dāng)前 正在設(shè)立的傳輸請(qǐng)求的LBA。然后,使用該值計(jì)算傳輸請(qǐng)求傳輸長(zhǎng)度字段。在步驟4830中,變量索引中的值被遞增。在步驟4831中,基于新索引值執(zhí)行轉(zhuǎn)發(fā)表查找。應(yīng)該理解,這產(chǎn)生在由在前的查 找提供的行之后的行,并因此產(chǎn)生下一個(gè)15個(gè)LBA的塊。來(lái)自該行的端口值被寫(xiě)入名為 “端口 B”的變量。其表示存儲(chǔ)下一 LBA塊的超級(jí)頁(yè)面。在步驟4832中,比較端口 A和端口 B。如果它們相同(,步驟4832的“是”結(jié)果), 則其意味著包含所述15個(gè)LBA的下一塊的超級(jí)頁(yè)面與在前的超級(jí)頁(yè)面存儲(chǔ)在相同的閃存組中。這意味著當(dāng)前傳輸請(qǐng)求理論上可以處理下一 LBA塊。在步驟4833中,將頁(yè)面變量與3比較。如果頁(yè)面變量小于3 (步驟4833的“否”結(jié) 果),則其意味著傳輸請(qǐng)求可以處理額外的15個(gè)LBA的塊,因此,處理進(jìn)行,以設(shè)立穿過(guò)傳 輸請(qǐng)求循環(huán)的下一反復(fù)(iteration)。在步驟4834中,遞增頁(yè)面變量,以反映在下一循環(huán)中新LBA塊將被分配到傳輸請(qǐng) 求的事實(shí)。在步驟4835中,將值15寫(xiě)入到偏移變量中。因?yàn)橛糜谙聝蓚€(gè)超級(jí)頁(yè)面的LBA范 圍將在15的偶數(shù)倍處開(kāi)始,所以對(duì)于任何在第一個(gè)超級(jí)頁(yè)面后的超級(jí)頁(yè)面不需要偏移。為 了在步驟4825中的計(jì)算的目的,以及為了在步驟4829中遞減TLTemp的目的,通過(guò)將偏移 設(shè)為15來(lái)處理其。然后,處理循環(huán)到步驟4825,并為下一 LBA塊而進(jìn)行。如果端口 B中的值與端口 A中的值不同(步驟4832的“否”結(jié)果),則其意味著 下一 LBA塊處于與分配給傳輸請(qǐng)求的在前塊不同的端口上。因?yàn)閭鬏斦?qǐng)求僅可以操作一個(gè) 閃存組上的LBA,因此當(dāng)前傳輸請(qǐng)求此時(shí)必須結(jié)束。類(lèi)似地,如果頁(yè)面變量等于3 (步驟4833 的“是”結(jié)果),則傳輸請(qǐng)求也必須結(jié)束,這是因?yàn)?,這意味著傳輸請(qǐng)求已經(jīng)被分配了相當(dāng)三 個(gè)超級(jí)頁(yè)面的LBA。在任一情況中,處理進(jìn)行到步驟4836,其中,從TLVar減去TLTemp,并且將結(jié)果存 儲(chǔ)在傳輸請(qǐng)求傳輸長(zhǎng)度字段3904中,該結(jié)果包含分配給傳輸請(qǐng)求的LBA的數(shù)量。在步驟4837中,傳輸請(qǐng)求被添附到用于分配給與端口 A變量中識(shí)別的端口關(guān)聯(lián)的 閃存組的閃存HEMi的工作列表中。在步驟4838中,將TLTemp的值存儲(chǔ)在TLVar中。這設(shè)立TLVar用于在產(chǎn)生下一 傳輸請(qǐng)求中使用。在步驟4839中,將LBAVar加到傳輸請(qǐng)求傳輸長(zhǎng)度字段中的值上,并且將結(jié)果存回 到LBAVar中。這設(shè)立LBAVar用于在產(chǎn)生下一傳輸請(qǐng)求中使用。在步驟4840中,Rdffr HEMi分析IOP已分配傳輸請(qǐng)求字段3807,以查看其是否等 于 “7”。如果已經(jīng)分配了七個(gè)傳輸請(qǐng)求(步驟4840的“是”結(jié)果),則IOP不能分配任何其 它傳輸請(qǐng)求。如上所述,通過(guò)允許IOP完成并接著重新發(fā)出帶有由于IOP的在前執(zhí)行而修 改的LBA和傳輸長(zhǎng)度值的IOP來(lái)處理該情況。因此,在步驟4841中,完成了 IOP的第一次 反復(fù),此時(shí),處理循環(huán)到步驟4811,其中,為IOP的下一執(zhí)行填充IOP字段。如果已經(jīng)分配的傳輸請(qǐng)求少于七個(gè)(步驟4840的“否”結(jié)果),則處理循環(huán)回到步 驟4812,并且開(kāi)始發(fā)出下一傳輸請(qǐng)求的處理。注意,新傳輸請(qǐng)求將獲得已被基于緊挨在前的 傳輸請(qǐng)求調(diào)整的LBA和傳輸長(zhǎng)度值。圖49圖示閃存HEMi (例如,閃存HEMi 307)基于在閃存HEMi的工作列表上存在 的傳輸請(qǐng)求設(shè)立用于讀或?qū)懖僮鞯捻?yè)面請(qǐng)求的方式。在步驟4901中,閃存HEMi 307檢查它的局部傳輸請(qǐng)求空閑列表2905,以確定局部 傳輸請(qǐng)求表2901是否包含至少一個(gè)空閑存取位置。如果否(步驟4901的“否”結(jié)果),則在步驟4902中,閃存HEMi 307等待,并接著 返回到步驟4901。該等待可以是指定的時(shí)間段,也可以直到其它任務(wù)已經(jīng)完成執(zhí)行為止。一旦存在空閑的局部傳輸請(qǐng)求可用(步驟4901的“是”結(jié)果),則在步驟4903中,
65閃存HEMi 307使用交叉切換器2201訪(fǎng)問(wèn)它的工作列表,并將該傳輸請(qǐng)求從工作列表中彈
出ο在步驟4904中,閃存HEMi 307使指向下一空閑局部傳輸請(qǐng)求的指針從局部傳輸 請(qǐng)求空閑列表2905中彈出。在步驟4905中,閃存HEMi 307使用交叉切換器2201訪(fǎng)問(wèn)共享RAM塊318中的傳 輸請(qǐng)求表4111,并且將由工作列表指向的傳輸請(qǐng)求從表4111復(fù)制到來(lái)自局部傳輸請(qǐng)求表 2901的由從局部傳輸請(qǐng)求空閑列表2905中彈出的指針指向的存取位置中。在步驟4906中,來(lái)自傳輸請(qǐng)求LBA字段3903的值被復(fù)制到被稱(chēng)為L(zhǎng)BAvar的變量中。在步驟4907中,來(lái)自傳輸請(qǐng)求傳輸長(zhǎng)度字段3904的值被復(fù)制到被稱(chēng)為T(mén)Lvar的
變量中。 在步驟4908中,來(lái)自傳輸請(qǐng)求數(shù)據(jù)路徑DRAM指針字段3905的值被復(fù)制到被稱(chēng)為 DPvar的變量中。在步驟4909中,閃存HEMi使頁(yè)面請(qǐng)求從它的頁(yè)面請(qǐng)求空閑列表2910中彈出。注 意,不需要檢查來(lái)確定是否存在空閑的頁(yè)面請(qǐng)求,這是因?yàn)?,閃存HEMi 307的mRAM包含 十八個(gè)頁(yè)面請(qǐng)求,其是可以被閃存HEMi 307 —次可以處理的六個(gè)局部傳輸請(qǐng)求要求的最大值。在步驟4910中,將LBAvar的值除以15。在步驟4911中,來(lái)自步驟4910的結(jié)果被用作進(jìn)入轉(zhuǎn)發(fā)表3201的偏移。該查找產(chǎn) 生閃存中用于LBA的位置的子組、塊和頁(yè)面的地址信息。注意,來(lái)自轉(zhuǎn)發(fā)表的端口信息不必 要,這是因?yàn)?,該信息被用在圖48的流程圖中,以將傳輸請(qǐng)求發(fā)送到所述閃存HEMi,該閃存 HEMi僅控制單個(gè)端口。在步驟4912中,將來(lái)自轉(zhuǎn)發(fā)表的查找的子組、塊和頁(yè)面地址信息存儲(chǔ)在頁(yè)面請(qǐng) 求閃存讀地址字段4006中。注意,需要讀地址用于寫(xiě)到少于一個(gè)完整頁(yè)面的寫(xiě)操作,因 為這種寫(xiě)操作需要讀-修改-寫(xiě)。在帶有傳輸長(zhǎng)度15的頁(yè)面請(qǐng)求寫(xiě)的情況中,跳過(guò)步驟 4910-4913,該情況指示要寫(xiě)入完整頁(yè)面。在步驟4913中,來(lái)自步驟4910的余數(shù)被復(fù)制到頭長(zhǎng)度字段4008中。如果存在, 其表示基于超級(jí)頁(yè)面的偏移,在該點(diǎn)處開(kāi)始傳輸。在步驟4914中,來(lái)自DPvar的值被復(fù)制到數(shù)據(jù)路徑DRAM指針字段4004。其指示 數(shù)據(jù)路徑DRAM 107中頁(yè)面請(qǐng)求要讀取數(shù)據(jù)的位置,或者頁(yè)面請(qǐng)求要寫(xiě)入數(shù)據(jù)的位置。在步驟4915中,基于傳輸請(qǐng)求,填充其它頁(yè)面請(qǐng)求字段。聯(lián)系圖40如上描述這些 字段。如下填充這些字段利用指向調(diào)用局部傳輸請(qǐng)求的指針(從局部傳輸請(qǐng)求空閑列表2905彈出的值) 填充調(diào)用傳輸請(qǐng)求字段4002?;趥鬏斦?qǐng)求的命令字段3907填充命令字段4003。在傳輸請(qǐng)求寫(xiě)的情況中,如果 該寫(xiě)覆蓋超級(jí)頁(yè)面的完整的15個(gè)LBA (傳輸長(zhǎng)度=15)則利用平常的(plain)寫(xiě)來(lái)填充命 令字段,或者,如果該寫(xiě)覆蓋少于一個(gè)完整超級(jí)頁(yè)面,則利用讀_修改_寫(xiě)來(lái)填充命令字段。如果命令字段4003識(shí)別該事務(wù)為寫(xiě)或讀_修改_寫(xiě),則利用要被寫(xiě)的超級(jí)頁(yè)面的 物理地址來(lái)填充閃存寫(xiě)地址字段4007。聯(lián)系圖54描述識(shí)別該超級(jí)頁(yè)面的方式。
狀態(tài)變量字段4011也在步驟4915中被初始化。在步驟4916中,將TLvar與值“15”比較。如果TLvar小于或等于15 (步驟4916的“是”結(jié)果),則其意味著當(dāng)前的頁(yè)面請(qǐng)求 表示傳輸請(qǐng)求所需要的最后一個(gè)頁(yè)面請(qǐng)求。在步驟4917中,尾長(zhǎng)度字段4009被設(shè)為15-(TLVar+頭長(zhǎng)度)。其表示超級(jí)頁(yè)面 末端不包括LBA的部分傳輸。注意,對(duì)于傳輸請(qǐng)求中除最后一個(gè)頁(yè)面請(qǐng)求外的所有頁(yè)面請(qǐng) 求,將尾長(zhǎng)度字段設(shè)為0。在步驟4918中,將傳輸長(zhǎng)度字段4010設(shè)為T(mén)Lvar。在步驟4919中,將指向頁(yè)面請(qǐng)求的指針?lè)胖迷趥鬏斦?qǐng)求的頁(yè)面請(qǐng)求指針陣列 3913 上。在步驟4920中,來(lái)自頁(yè)面請(qǐng)求指針陣列3913的每個(gè)指針被復(fù)制到子組隊(duì)列2911 中對(duì)應(yīng)于在步驟4911中的查找中獲得的子組的隊(duì)列上。在步驟4921中,為調(diào)用傳輸請(qǐng)求在傳輸請(qǐng)求狀態(tài)變量3908中設(shè)置傳輸請(qǐng)求“完 成”變量。在下次傳輸請(qǐng)求從局部傳輸請(qǐng)求隊(duì)列2904中彈出時(shí)將檢查該變量,并且其將指 示對(duì)清理例程的需要。然后,圖49中所描述的處理結(jié)束。如果TLvar大于15 (步驟4916的“否”結(jié)果),則其意味著當(dāng)前頁(yè)面請(qǐng)求對(duì)于傳輸 請(qǐng)求不是最后一個(gè)頁(yè)面請(qǐng)求。在步驟4922中,將尾長(zhǎng)度字段4009設(shè)為“0”。在步驟4923中,將頁(yè)面請(qǐng)求傳輸長(zhǎng)度字段4010設(shè)為15減去在頭長(zhǎng)度字段4008 中放置的值。對(duì)于不在超級(jí)頁(yè)面的開(kāi)始處開(kāi)始的傳輸,其表示進(jìn)入超級(jí)頁(yè)面的偏移。在步驟4924中,將指向超級(jí)頁(yè)面的指針?lè)胖玫絺鬏斦?qǐng)求的頁(yè)面請(qǐng)求指針陣列 3913 上。在步驟4925中,從TLvar減去15。在步驟4926中,將來(lái)自傳輸長(zhǎng)度字段4010的值加到LBAvar上。在步驟4927中,將來(lái)自傳輸長(zhǎng)度字段4010的值加到DPVar上。然后,處理循環(huán)回 到步驟4909,用于新頁(yè)面請(qǐng)求。該循環(huán)繼續(xù),直到傳輸請(qǐng)求所要求的最后一個(gè)頁(yè)面請(qǐng)求已被傳輸?shù)阶咏M隊(duì)列上為止。圖50圖示閃存HEMi執(zhí)行循環(huán)。該循環(huán)處理傳輸請(qǐng)求和頁(yè)面請(qǐng)求的執(zhí)行。在步驟5001中,閃存HEMi檢查閃存端口,以確定其是否空閑(即,當(dāng)前未使用于 向或從閃存組的傳輸中)。如果閃存端口不空閑(步驟5001的“否”結(jié)果),則頁(yè)面請(qǐng)求處理程序不能操作。 在步驟5002中,閃存HEMi檢查,以確定在局部傳輸請(qǐng)求隊(duì)列2904上是否存在任何傳輸請(qǐng) 求。如果隊(duì)列包含局部傳輸請(qǐng)求(步驟5002的“是”結(jié)果),則在步驟5003中,閃存 HEMi處理隊(duì)列頂部的局部傳輸請(qǐng)求。跟隨步驟5003之后,或者,如果隊(duì)列不包含局部傳輸請(qǐng)求(步驟5002的“否”結(jié) 果),則在步驟5004中,閃存HEMi檢查,以查看閃存HEMi的工作列表(例如,工作列表 4107)上是否存在任何傳輸請(qǐng)求。
67
如果工作列表包含指向傳輸請(qǐng)求的指針(步驟5004的“是”結(jié)果),則在步驟5005 中,閃存HEMi檢查,以查看局部傳輸請(qǐng)求空閑列表2905是否包含任何空閑的局部傳輸請(qǐng) 求。如果有局部傳輸請(qǐng)求可用(步驟5005的“是”結(jié)果),則在步驟5006中,閃存HEMi 處理工作列表頂部的傳輸請(qǐng)求,其包括將傳輸請(qǐng)求復(fù)制到閃存HEMi的mRAM中以及產(chǎn)生頁(yè) 面請(qǐng)求(見(jiàn)圖49)。跟隨步驟5006、或者如果工作列表上沒(méi)有傳輸請(qǐng)求(步驟5004的“否”結(jié)果)、或 者如果沒(méi)有空閑的局部傳輸請(qǐng)求(步驟5005的“否”結(jié)果),則在步驟5007中,閃存HEMi 檢查當(dāng)前狀態(tài),以確定其是否需要進(jìn)入休眠模式。例如,如果作為步驟5001、5002以及5004 的“否”結(jié)果,已經(jīng)到達(dá)步驟5007,則閃存HEMi不能對(duì)任何頁(yè)面請(qǐng)求或傳輸請(qǐng)求操作,因此 將進(jìn)入休眠模式。如上所解釋?zhuān)ㄟ^(guò)進(jìn)入休眠狀態(tài),閃存HEMi節(jié)電,并且在傳輸請(qǐng)求被加入 到工作列表情況下允許其自身迅速響應(yīng)。在不同的實(shí)施例中,當(dāng)其它任務(wù)不可得時(shí),閃存HEMi不進(jìn)入休眠狀態(tài),而是調(diào)用 巡邏(patrol)功能處理程序。將在下文描述,該巡邏功能檢查超級(jí)頁(yè)面的錯(cuò)誤,并且如果 必要,校正這些錯(cuò)誤。在步驟5008中,閃存HEMi計(jì)算所需要的休眠時(shí)間段。其基于當(dāng)前狀態(tài),并被設(shè)計(jì) 來(lái)在任何執(zhí)行任務(wù)完成之前喚醒閃存HEMi。因此,例如,如果閃存端口正被級(jí)緩沖器用于閃 存?zhèn)鬏?,則閃存HEMi檢查閃存?zhèn)鬏斢?jì)數(shù)寄存器2712,以確定傳輸?shù)氖S嗖糠謱⒒ㄙM(fèi)多久, 并接著設(shè)置休眠模式時(shí)間段,以便休眠模式將在傳輸完成之前結(jié)束。如上所解釋?zhuān)ㄟ^(guò)重復(fù) 一系列的空指令來(lái)設(shè)置休眠模式,從而基于所需要的休眠時(shí)間段確定所使用的空指令的數(shù) 量。在步驟5009中,閃存HEMi進(jìn)入休眠模式。當(dāng)其從休眠模式離開(kāi)時(shí),處理返回到步 驟 5001。如果步驟5001的檢查指示閃存端口是空閑的(步驟5001的“是”結(jié)果),則在步 驟5010中,閃存HEMi檢查子組位圖2920,以確定是否有任何子組(a)被子組隊(duì)列的頂部的 頁(yè)面請(qǐng)求需要(設(shè)置了需要子組標(biāo)志)以及(b)準(zhǔn)備好(設(shè)置了子組R標(biāo)志)。如果沒(méi)有(步驟5010的“否”輸出),則處理進(jìn)行到步驟5002,以確定是否需要處 理任何傳輸請(qǐng)求。如果有子組既被需要又準(zhǔn)備好了(步驟5010的“是”結(jié)果),則在步驟5011中,當(dāng) 前子組被設(shè)為滿(mǎn)足這兩個(gè)標(biāo)準(zhǔn)的最低子組。例如,如果子組位圖2920指示子組0、2和4都 具有所述兩個(gè)標(biāo)志被設(shè)置,則步驟5011將選擇子組0。在步驟5012中,檢查所選擇的子組隊(duì)列(本實(shí)施例中的隊(duì)列0)的頂部上的頁(yè)面 請(qǐng)求的狀態(tài)變量字段,以確定該頁(yè)面請(qǐng)求是否需要某些資源(例如,DMA信道)。如果頁(yè)面 請(qǐng)求需要資源(步驟5012的“是”結(jié)果),則在步驟5013中,閃存HEMi確定該資源是否可 用。注意,對(duì)于閃存端口不需要檢查,這是因?yàn)?,在步驟5001中確認(rèn)了它的可用性。如果必要的資源可用(步驟5013的“是”結(jié)果),或者如果不需要資源(步驟5012 的“否”結(jié)果),則處理進(jìn)行到5014,在其中,檢查包含在所選擇的子組隊(duì)列的頂部的頁(yè)面請(qǐng) 求中的命令字段,以確定命令是讀、讀_修改_寫(xiě)還是擦除,并且調(diào)用和執(zhí)行合適的頁(yè)面請(qǐng) 求處理程序。
在頁(yè)面請(qǐng)求處理程序返回之后,到達(dá)步驟5015。在該步驟中,檢查來(lái)自處理程序的 返回值,以確定該處理程序是否已經(jīng)使用了閃存端口。如果處理程序使用了閃存端口(步驟5015的“是”結(jié)果),則因?yàn)殚W存端口現(xiàn)在忙 碌,不能執(zhí)行此外的頁(yè)面請(qǐng)求,并且處理進(jìn)行到步驟5007,用于確定閃存HEMi是否可以進(jìn) 入休眠模式。如果處理程序未使用閃存端口(步驟5015的“否”結(jié)果),或者如果沒(méi)有足夠的資 源可用于頁(yè)面請(qǐng)求(步驟5013的“否”結(jié)果),則在步驟5016中,閃存HEMi檢查子組位圖 2920,以確定是否有更高編號(hào)的子組既被需要又準(zhǔn)備好。在以上給定的示例中,其中,子組 0、2和4被需要且準(zhǔn)備好,并且處理了子組0,步驟5016的結(jié)果將為“是”,這是因?yàn)樽咏M2 比子組0高,而且被需要并準(zhǔn)備好。另一方面,如果步驟5014已經(jīng)處理了子組4,則在該示 例中,步驟5015的結(jié)果將是“否”,這是因?yàn)?,即使子組0和2仍保持被需要且準(zhǔn)備,也沒(méi)有 比4高的子組滿(mǎn)足該條件。如果有更高編號(hào)的子組既被需要又準(zhǔn)備好(步驟5016的“是”結(jié)果),則在步驟 5017中,當(dāng)前子組被設(shè)為該更高編號(hào)的子組。然后處理返回到步驟5012,其中對(duì)步驟5017 所選擇的子組調(diào)用資源檢查。如果沒(méi)有更高編號(hào)的子組既被需要又準(zhǔn)備好(步驟5016的“否”結(jié)果),則處理返 回步驟5004,以處理工作列表上的任何傳輸請(qǐng)求。注意,即使始終存在準(zhǔn)備好處理的頁(yè)面請(qǐng) 求,處理也不返回到循環(huán)的頂部(步驟5001),以便確保頁(yè)面請(qǐng)求處理程序循環(huán)將被周期性 地中斷,從而允許傳輸請(qǐng)求被定期地處理。只要系統(tǒng)被加電,該循環(huán)便無(wú)限地繼續(xù)。圖51圖示了頁(yè)面請(qǐng)求讀處理程序。該流程圖示出了 如果頁(yè)面請(qǐng)求包含讀命令, 則在步驟5014中進(jìn)行的步驟。在步驟5101中,檢查頁(yè)面請(qǐng)求狀態(tài)變量字段4011,以確定頁(yè)面請(qǐng)求在哪個(gè)狀態(tài)。 一般地,頁(yè)面請(qǐng)求讀經(jīng)過(guò)三個(gè)狀態(tài)進(jìn)行命令、需要級(jí)緩沖器、以及閃存?zhèn)鬏斖瓿?。在每個(gè)狀 態(tài)之后,處理程序返回到圖50所示的執(zhí)行循環(huán)的步驟5015。注意,在命令和需要級(jí)緩沖器 階段之后,頁(yè)面請(qǐng)求保持在子組隊(duì)列的頂部,從而,在這樣的返回之后,閃存HEMi執(zhí)行循環(huán) 將在以后返回到相同的頁(yè)面請(qǐng)求。如果命令狀態(tài)被設(shè)置(步驟5101的“命令”結(jié)果),則在步驟5102中,閃存HEMi 為與頁(yè)面請(qǐng)求彈出的子組隊(duì)列關(guān)聯(lián)的閃存子組建立(assert) CS信號(hào)(例如,在線(xiàn)703上建 立 CS)。在步驟5103中,閃存HEMi建立CLE信號(hào)803,并將讀命令的第一操作碼(opcode) 置于總線(xiàn)709上。閃存HEMi知道基于頁(yè)面請(qǐng)求命令字段4003中讀命令的存在來(lái)使用該操 作碼。CLE信號(hào)的建立需要在由CS信號(hào)所選擇的子組中的閃存電路小片使能它們的命令鎖 存,從而在總線(xiàn)709上發(fā)送的比特將被作為命令鎖存。在步驟5104中,閃存HEMi建立ALE信號(hào)802,并且將用于讀的物理地址置于總線(xiàn) 709上。從閃存讀地址4006中獲得用于閃存頁(yè)面的該地址。如果傳輸以一偏移、而不是 在開(kāi)頭處開(kāi)始進(jìn)入頁(yè)面,則從頭長(zhǎng)度字段4008中取得該偏移,并將其作為地址的一部分發(fā) 送。該偏移被用于設(shè)置頁(yè)面緩沖器中向總線(xiàn)709的傳輸將開(kāi)始的位置。注意,沒(méi)有理由發(fā) 送在頁(yè)面末端的偏移(尾長(zhǎng)度),這是因?yàn)?,一旦已?jīng)發(fā)送了合適數(shù)量的字節(jié),則傳輸長(zhǎng)度字段4010被用來(lái)停止該傳輸。因?yàn)橛糜谡_的子組的CS信號(hào)保持被建立,所以,該子組上的閃存電路小片接收 ALE信號(hào)。該信號(hào)使它們將總線(xiàn)709上的比特鎖存到它們的地址鎖存中。如果上所解釋?zhuān)?有四個(gè)電路小片接收相同的地址,并且,其是每個(gè)電路小片中一個(gè)頁(yè)面數(shù)據(jù)的起始地址。還 如上所解釋?zhuān)咏M的每個(gè)電路小片中的相同地址處的四個(gè)頁(yè)面構(gòu)成超級(jí)頁(yè)面,并且,超級(jí)頁(yè) 面表示15個(gè)區(qū)段,其構(gòu)成與15個(gè)連續(xù)LBA關(guān)聯(lián)的內(nèi)容。在步驟5105中,閃存HEMi建立CLE信號(hào)803,并且將讀命令的第二操作符置于總 線(xiàn)709上。CLE信號(hào)的建立需要由CS信號(hào)所選擇的子組中的閃存電路小片使能它們的命令 鎖存,從而在總線(xiàn)709上發(fā)送的比特將被作為命令鎖存。當(dāng)閃存電路小片接收到第二讀操 作碼時(shí),它們自動(dòng)地開(kāi)始從閃存中的之前所指定的地址向頁(yè)面緩沖器讀取。在步驟5106中,閃存HEMi更新頁(yè)面請(qǐng)求狀態(tài)變量字段4011。在其它更新之中,當(dāng) 前狀態(tài)被設(shè)為需要級(jí)緩沖器。在步驟5107中,因?yàn)闉槊顮顟B(tài)所執(zhí)行的系列步驟使用了閃存端口,但該使用很 短并已完成,所以,返回值被設(shè)置為閃存端口不忙碌。然后,頁(yè)面請(qǐng)求讀處理程序返回到圖50的步驟5015。第二次為該頁(yè)面請(qǐng)求調(diào)用處理程序時(shí),作為步驟5014的結(jié)果,在步驟5101中檢查 的狀態(tài)是需要級(jí)緩沖器。在步驟5108中,檢查級(jí)緩沖器,以確定其是否空閑。如果不是(步驟5108的“否” 結(jié)果),則頁(yè)面請(qǐng)求讀處理程序返回而不進(jìn)行任何動(dòng)作。如果級(jí)緩沖器是空閑的(步驟5108 的“是”結(jié)果),則在步驟5109中,級(jí)緩沖器被分配給該處理。在步驟5110中,閃存HEMi設(shè)立從閃存頁(yè)面緩沖器(其由于閃存讀而包含從閃存 讀出的值)到級(jí)緩沖器的DMA傳輸。在步驟5111中,閃存HEMi更新頁(yè)面請(qǐng)求狀態(tài)變量字段4011。在其它更新中,當(dāng)前 狀態(tài)被設(shè)為閃存?zhèn)鬏斖瓿?。這反映了閃存?zhèn)鬏攲ⅹ?dú)立于閃存HEMi而發(fā)生的事實(shí),因?yàn)檫@是 DMA傳輸。在下次調(diào)用處理程序時(shí),閃存?zhèn)鬏攲⑼瓿?。在步驟5112中,因?yàn)樵陧?yè)面請(qǐng)求讀的處理程序返回之后、閃存頁(yè)面緩沖器與級(jí)緩 沖器之間的DMA傳輸將占用閃存端口一段時(shí)間,所以返回值被設(shè)為閃存端口忙碌。然后,頁(yè)面請(qǐng)求讀的處理程序返回到圖50的步驟5015。在第三次為該頁(yè)面請(qǐng)求調(diào)用處理程序時(shí),作為步驟5014的結(jié)果,在步驟5101中檢 查的狀態(tài)是閃存?zhèn)鬏斖瓿伞T诓襟E5113中,閃存HEMi確定作為向級(jí)緩沖器傳輸?shù)囊徊糠肿詣?dòng)執(zhí)行的ECC檢 查是否在讀取的數(shù)據(jù)中識(shí)別了任何錯(cuò)誤。如果檢測(cè)到了錯(cuò)誤(步驟5113的“是”結(jié)果),則在步驟5114中,調(diào)用錯(cuò)誤處理 程序。處理程序進(jìn)行的方式取決于所檢測(cè)的錯(cuò)誤的性質(zhì)和數(shù)量。如果所檢測(cè)的數(shù)量太大而 不能校正,則錯(cuò)誤處理程序可能使該數(shù)據(jù)被第二次讀取,希望第二次讀將產(chǎn)生更好的數(shù)據(jù) (如在一個(gè)或多個(gè)閃存單元接近有效數(shù)據(jù)與錯(cuò)誤之間的閾值的情況下所可能的)。如果所 檢測(cè)錯(cuò)誤的數(shù)量可以被校正,則錯(cuò)誤處理程序可以通過(guò)ECC校正引擎3101校正數(shù)據(jù)(見(jiàn)聯(lián) 系圖31的討論)。在步驟5115中,閃存HEMi設(shè)立從級(jí)緩沖器(其包含從閃存頁(yè)面緩沖器讀取的作為需要級(jí)緩沖器狀態(tài)處理的結(jié)果的值)到數(shù)據(jù)路徑DRAM107的DMA傳輸。在步驟5116中,頁(yè)面請(qǐng)求讀的處理程序等待。因?yàn)橄駾RAM的DMA傳輸非常塊,所 以,讀處理程序此時(shí)不返回,而是暫時(shí)停止。在步驟5117中,閃存HEMi檢查,以查看傳輸計(jì)數(shù)寄存器2716是否具有0的值,其 指示DMA傳輸完成。如果不是(步驟5117的“否”結(jié)果),則等待步驟5116被重復(fù)。一旦 DMA傳輸完成(步驟5117的“是”結(jié)果),則在步驟5118中,為其它操作的使用釋放級(jí)緩沖
ο在步驟5119中,將頁(yè)面請(qǐng)求從子組隊(duì)列中彈出。因?yàn)椴恍枰擁?yè)面請(qǐng)求的進(jìn)一步 處理,并且現(xiàn)在可以處理子組隊(duì)列上的下一頁(yè)面請(qǐng)求,所以完成這一步。在步驟5120中,閃存HEMi遞減傳輸請(qǐng)求剩余頁(yè)面請(qǐng)求字段3912,反映該頁(yè)面請(qǐng)求 已經(jīng)完成的事實(shí)。在步驟5121中,閃存HEMi檢查,以確定剩余頁(yè)面請(qǐng)求字段是否已經(jīng)到達(dá)0。如果該字段已經(jīng)到達(dá)0 (步驟5121的“是”結(jié)果),則其意味著用于該傳輸請(qǐng)求的 所有頁(yè)面請(qǐng)求已完成。在步驟5122中,傳輸請(qǐng)求被添附到局部傳輸請(qǐng)求隊(duì)列2904中,從 而其將被閃存HEMi執(zhí)行循環(huán)處理。注意,此時(shí),傳輸請(qǐng)求具有完成的狀態(tài)(見(jiàn)圖49,步驟 4921),從而,一旦其從局部傳輸請(qǐng)求隊(duì)列中彈出,則將發(fā)起清理處理(見(jiàn)下文)。如果對(duì)傳輸請(qǐng)求有額外的頁(yè)面請(qǐng)求剩余(步驟5121的“否”結(jié)果),或者當(dāng)步驟 5122完成時(shí),則到達(dá)步驟5123。在步驟5123,返回值被設(shè)為閃存端口不忙碌。然后,頁(yè)面請(qǐng)求讀處理程序返回到圖50的步驟5015。圖52更詳細(xì)地圖示閃存讀操作的某些方面。在步驟5201中,閃存HEMi驅(qū)動(dòng)CS/RB總線(xiàn)702中的一條為低。隨后反轉(zhuǎn)該信號(hào), 使得信號(hào)在所選擇的閃存子組的四個(gè)閃存芯片的芯片使能引腳上被接收為高。在步驟5202中,閃存HEMi驅(qū)動(dòng)CLE信號(hào)803為高。這通知所選擇的子組上的電 路小片下一組信號(hào)將包括命令。在步驟5203中,閃存HEMi驅(qū)動(dòng)構(gòu)成總線(xiàn)709上的讀命令的第一階段的八個(gè)比特。 如在閃存器件中慣常的,讀命令的第一階段指示閃存電路小片準(zhǔn)備接收讀地址。命令的第 一階段構(gòu)成八個(gè)比特,并且四個(gè)副本在32位的總線(xiàn)709上被并行地驅(qū)動(dòng)。例如,如果第一 讀命令是操作碼08,則總線(xiàn)709上的信息將是08080808,并且,命令的一個(gè)副本將被遞送到 每個(gè)電路小片。因?yàn)镃LE先前已經(jīng)被驅(qū)動(dòng)為高,并且在所選擇的子組的每個(gè)電路小片的CLE 引腳上被接收,所以,子組上的每個(gè)電路小片將該命令鎖存到它的命令鎖存中。在步驟5204中,閃存HEMi建立CLE信號(hào)為低,ALE信號(hào)802為高。這使閃存電路 小片準(zhǔn)備接收地址。在步驟5205中,閃存HEMi發(fā)送要被讀的地址的一個(gè)字節(jié)。這通過(guò)在總線(xiàn)709上 發(fā)送地址的四個(gè)副本而完成。其使得該字節(jié)被鎖存到所選擇的子組上的每個(gè)閃存電路小片 的地址鎖存中。在步驟5206中,閃存HEMi確定是否已經(jīng)發(fā)送了所有地址。如果不是(步驟5206 的“否”結(jié)果),則處理返回到步驟5205,以發(fā)送下一地址字節(jié)。在當(dāng)前的優(yōu)選實(shí)施例中,每 個(gè)地址由五個(gè)字節(jié)構(gòu)成,所以該循環(huán)將重復(fù)四次。在當(dāng)前的實(shí)施例中,五次地址選通(strobe)足以為閃存電路小片提供完全的地
71址。然而,典型的閃存芯片忽略超過(guò)芯片所需要的地址位的地址選通。為此原因,閃存電路 小片可以被更小和更廉價(jià)的閃存芯片取代,而不需要尋址機(jī)制的任何重設(shè)計(jì),因?yàn)殡m然更 小的閃存芯片將需要更少的地址字節(jié)(例如,四個(gè)字節(jié)而不是五個(gè)),但這些芯片將忽略所 接收的任何不必要的地址字節(jié),從而它們將被合并到該系統(tǒng)中,而不需要降低地址周期數(shù)。 類(lèi)似地,通過(guò)增加地址周期數(shù),并因此增加地址字節(jié)數(shù),系統(tǒng)可以被設(shè)計(jì)來(lái)處理任意大小的 閃存芯片,而不需要對(duì)更小的芯片的任何地址相關(guān)的重新設(shè)計(jì)。一旦已經(jīng)發(fā)送了整個(gè)地址(步驟5206的“是”結(jié)果),處理以步驟5207繼續(xù),在其 中,CLE被建立并且ALE被撤銷(xiāo)(deassert)。在步驟5208中,在A/D總線(xiàn)上發(fā)送讀命令的第二階段。傳統(tǒng)上,讀命令的第二階 段使閃存芯片開(kāi)始從閃存電路小片向頁(yè)面緩沖器的讀取。在步驟5209中,閃存電路小片每個(gè)都設(shè)置它們的準(zhǔn)備好/忙碌引腳為忙碌。如上 所述,這些引腳每個(gè)都連接到進(jìn)一步連接到SSD控制器106的引腳上的一個(gè)CS/RB線(xiàn)上。這 使得閃存HEMi辨認(rèn)出閃存子組是忙碌的而不能接收額外的命令。聯(lián)系圖11詳細(xì)地描述建 立忙碌信號(hào)的方式。在步驟5210中,每個(gè)閃存電路小片從所請(qǐng)求的閃存地址將數(shù)據(jù)提取到電路小片 的內(nèi)部頁(yè)面緩沖器中。在步驟5211中,來(lái)自閃存子組的R/B信號(hào)轉(zhuǎn)變?yōu)椤皽?zhǔn)備好”狀態(tài),其意味著所有四 個(gè)來(lái)自電路小片的準(zhǔn)備好/忙碌引腳已經(jīng)從“忙碌”狀態(tài)轉(zhuǎn)變到“準(zhǔn)備好”的狀態(tài),指示所 請(qǐng)求的數(shù)據(jù)存在在每個(gè)芯片的頁(yè)面緩沖器中,并且可被讀取到總線(xiàn)709上。在步驟5212中,閃存HEMi建立RE。作為傳統(tǒng),其使得在所影響的子組上的電路小 片的頁(yè)面緩沖器每個(gè)讀取單個(gè)字節(jié)到總線(xiàn)709上。這四個(gè)字節(jié)構(gòu)成一個(gè)雙字。該雙字被傳 輸?shù)郊?jí)緩沖器。在步驟5213中,遞增閃存?zhèn)鬏斢?jì)數(shù)寄存器2712。該寄存器保持要被傳輸?shù)碾p字 的數(shù)量。如果該讀僅將傳輸頁(yè)面的一部分,則閃存?zhèn)鬏斢?jì)數(shù)寄存器在合適的點(diǎn)停止傳輸,即 使頁(yè)面緩沖器中可能存在額外的數(shù)據(jù)也是如此。下次使用該頁(yè)面緩沖器時(shí)覆寫(xiě)所述額外數(shù) 據(jù)。在步驟5214中,檢查閃存?zhèn)鬏斢?jì)數(shù)寄存器,以確定其是否已達(dá)到0。如果不是(步 驟5214的“否”結(jié)果),則處理返回步驟5212,以到達(dá)(clock out)下一雙字。如果閃存?zhèn)鬏斢?jì)數(shù)為0(步驟5214的“是”結(jié)果),則從閃存的傳輸完成。此時(shí),數(shù) 據(jù)在級(jí)緩沖器中。如上所述,接著,從級(jí)緩沖器將數(shù)據(jù)傳輸?shù)綌?shù)據(jù)路徑DRAM,并且從那里通 過(guò)主機(jī)端口傳輸?shù)街鳈C(jī)。圖53圖示作為圖50的步驟5014的部分的頁(yè)面請(qǐng)求寫(xiě)處理程序的處理。如本領(lǐng) 域的普通技術(shù)人員所理解,閃存寫(xiě)不用新數(shù)據(jù)覆寫(xiě)閃存頁(yè)面,而是用包含新數(shù)據(jù)的新閃存 頁(yè)面取代舊閃存頁(yè)面,并將舊頁(yè)面無(wú)效。因此,如果寫(xiě)僅改變頁(yè)面的部分,則必須在被稱(chēng)為 讀-修改-寫(xiě)的操作中將未改變的頁(yè)面部分復(fù)制到新頁(yè)面中。頁(yè)面請(qǐng)求寫(xiě)處理程序從步驟5301開(kāi)始,其檢查頁(yè)面請(qǐng)求狀態(tài)變量4011。在讀-修 改_寫(xiě)操作的情況中,狀態(tài)從將狀態(tài)變量設(shè)置為命令開(kāi)始。在命令狀態(tài)的識(shí)別之后的處理(步驟5302-5307)與讀處理程序中命令狀態(tài)的識(shí) 別之后的處理(圖51,步驟5102-5107)類(lèi)似,這里將不再描述(應(yīng)該理解,在實(shí)際軟件實(shí)施
72例中這兩組步驟可以被組合到單個(gè)軟件例程中)。該處理以狀態(tài)變量被設(shè)為需要級(jí)緩沖器 和級(jí)1而結(jié)束。此時(shí),閃存已被設(shè)立來(lái)讀取包含受制于所述寫(xiě)的LBA的超級(jí)頁(yè)面。寫(xiě)處理 程序退出,并且,控制返回閃存HEMi執(zhí)行循環(huán)(圖50,步驟5015)。需要級(jí)緩沖器1狀態(tài)的處理(步驟5308-5312)與讀處理程序中需要級(jí)緩沖器狀 態(tài)的識(shí)別之后的處理(圖51,步驟5108-5112)類(lèi)似。注意,雖然所影響的頁(yè)面的全部存在 在閃存頁(yè)面緩沖器中,僅包含在寫(xiě)中不改變的LBA的區(qū)段被復(fù)制到級(jí)緩沖器中。該處理以 狀態(tài)變量被設(shè)為需要級(jí)緩沖器2而結(jié)束。寫(xiě)處理程序退出,并且控制返回到閃存HEMi執(zhí)行 循環(huán)(圖50,步驟5015)。在步驟5301中的需要級(jí)緩沖器2狀態(tài)的識(shí)別之后的處理從步驟5313開(kāi)始,其中, 進(jìn)行關(guān)于ECC邏輯3102是否從閃存的數(shù)據(jù)讀中檢測(cè)到任何ECC錯(cuò)誤的確定。如果檢測(cè)到錯(cuò)誤(步驟5313的“是”結(jié)果),則在步驟5314中,調(diào)用錯(cuò)誤處理程 序。該處理程序進(jìn)行的方式取決于所檢測(cè)的錯(cuò)誤的性質(zhì)和數(shù)量。如果所檢測(cè)的錯(cuò)誤的數(shù)量 對(duì)于校正來(lái)說(shuō)太大,則錯(cuò)誤處理程序可以使數(shù)據(jù)讀取第二次,希望第二次的讀取將產(chǎn)生更 好的數(shù)據(jù)(如在一個(gè)或多個(gè)閃存單元的狀態(tài)接近有效數(shù)據(jù)與錯(cuò)誤之間的閾值的情況下所 可能的)。如果所檢測(cè)的錯(cuò)誤的數(shù)量可以被校正,則錯(cuò)誤處理程序可以使得通過(guò)ECC校正引 擎3101校正數(shù)據(jù)(見(jiàn)聯(lián)系圖31的討論)。如果未檢測(cè)到錯(cuò)誤(步驟5313的“否”結(jié)果),則在步驟5315中,設(shè)立DRAM到級(jí) 緩沖器DMA的傳輸。一旦閃存HEMi設(shè)立了 DMA傳輸,則DMA傳輸在沒(méi)有HEMi進(jìn)一步干預(yù) 的情況下自動(dòng)進(jìn)行。注意,該傳輸僅包括對(duì)應(yīng)于在寫(xiě)中改變的LBA的數(shù)據(jù),并且該數(shù)據(jù)與從 閃存中接收的數(shù)據(jù)合并,從而在該步驟之后,級(jí)緩沖器保持整個(gè)超級(jí)頁(yè)面(四個(gè)頁(yè)面)的數(shù) 據(jù),包括新寫(xiě)入的LBA以及對(duì)于來(lái)自超級(jí)頁(yè)面中的未被覆寫(xiě)的LBA的舊數(shù)據(jù)。步驟5316和5317與圖51中的步驟5116和5117相同,將不再描述。在步驟5318中,設(shè)置CS信號(hào)。該步驟與圖51中的步驟5102相同。在步驟5319中,設(shè)置CLE,并且將第一寫(xiě)操作碼發(fā)送到閃存。該步驟與圖51中的 步驟5103類(lèi)似地操作。在步驟5320中,設(shè)置ALE,并且將用于寫(xiě)的地址發(fā)送到閃存。該步驟與圖51中的 步驟5104相同。在步驟5321中,閃存HEMi設(shè)立從級(jí)緩沖器到閃存的DMA傳輸。然后,該傳輸自動(dòng) 發(fā)生,而沒(méi)有閃存HEMi的進(jìn)一步參與。在步驟5322中,閃存HEMi更新頁(yè)面請(qǐng)求狀態(tài)變量,以指示下一狀態(tài)是閃存?zhèn)鬏斖?成。在步驟5323中,將返回值設(shè)為閃存端口忙碌,跟隨其后,寫(xiě)處理程序退出,并且控 制返回到閃存HEMi執(zhí)行循環(huán)(圖50,步驟5015)。此時(shí),將數(shù)據(jù)的超級(jí)頁(yè)面從級(jí)緩沖器傳 輸?shù)介W存頁(yè)面緩沖器,并且已經(jīng)為從閃存頁(yè)面緩沖器到閃存單元的寫(xiě)設(shè)立了閃存。在下次調(diào)用寫(xiě)處理程序時(shí),在步驟5301中識(shí)別閃存?zhèn)鬏斖瓿蔂顟B(tài)。在步驟5324 中,設(shè)置Cs。其與圖51的步驟5102相同。在步驟5325中,設(shè)置CLE,并且將第二寫(xiě)操作碼發(fā)送到閃存。這使得閃存將值從閃 存頁(yè)面緩沖器寫(xiě)入閃存。在步驟5326中,釋放級(jí)緩沖器,以用于其它操作的使用。
在步驟5327中,閃存HEMi更新頁(yè)面請(qǐng)求狀態(tài)變量,以指示下一狀態(tài)是頁(yè)面請(qǐng)求完 成。在步驟5328中,將返回值設(shè)為閃存端口不忙碌,并且,寫(xiě)處理程序退出,并將控制 返回到閃存HEMi執(zhí)行循環(huán)(圖50,步驟5015)。此時(shí),將數(shù)據(jù)從閃存頁(yè)面緩沖器發(fā)送到閃
存單元。在步驟5301中的頁(yè)面請(qǐng)求完成狀態(tài)的識(shí)別之后的處理從步驟5329開(kāi)始,其中,進(jìn) 行檢查,以確定在寫(xiě)上是否檢測(cè)到任何錯(cuò)誤。如果檢測(cè)到錯(cuò)誤(步驟5329的“是”結(jié)果),則在步驟5330中,調(diào)用錯(cuò)誤處理程 序。該步驟與步驟5314類(lèi)似地操作。如果未檢測(cè)到錯(cuò)誤(步驟5329的“否”結(jié)果),則處理在步驟5331到5335中繼 續(xù),它們與圖51的步驟5119-5123相同。其后,寫(xiě)處理程序完成并退出,并且控制返回到閃 存HEMi執(zhí)行循環(huán)(圖50,步驟5015)。圖53中所述的處理圖示了讀-修改-寫(xiě)操作。如果頁(yè)面請(qǐng)求的傳輸長(zhǎng)度是15,其 指示寫(xiě)將替換整個(gè)超級(jí)頁(yè)面,則該操作的讀-修改部分不必要,并且不使用該命令和需要 級(jí)緩沖器1路徑。替代地,頁(yè)面請(qǐng)求狀態(tài)變量從需要級(jí)緩沖器2狀態(tài)開(kāi)始。如上所述,在寫(xiě)操作的情況中,需要閃存HEMi向頁(yè)面請(qǐng)求分配超級(jí)頁(yè)面。圖54中 的流程示該處理。在步驟5401中,閃存HEMi使用由傳輸請(qǐng)求分配給頁(yè)面請(qǐng)求的第一個(gè)LBA作為用 于進(jìn)入轉(zhuǎn)發(fā)表3201的查找的索引,并且識(shí)別當(dāng)前保持與LBA關(guān)聯(lián)的數(shù)據(jù)。在步驟5402中,閃存HEMi檢查超級(jí)頁(yè)面指針列表2919,以確定子組上是否有任何 可用的超級(jí)頁(yè)面。選擇用于讀_修改_寫(xiě)的子組設(shè)法使用相同子組上的超級(jí)頁(yè)面作為保持 原始數(shù)據(jù)的超級(jí)頁(yè)面。這大大增強(qiáng)性能,這是因?yàn)?,可以通過(guò)從閃存向閃存頁(yè)面緩沖器的數(shù) 據(jù)讀處理事務(wù)的讀取側(cè),而不需要任何向級(jí)緩沖器的讀。然后,在頁(yè)面緩沖器中合并新和舊 的數(shù)據(jù)。通過(guò)避免向級(jí)緩沖器的讀,該方法提高了寫(xiě)操作的性能,并避免了占用閃存接口, 從而使其空閑用于其它事務(wù)。如果子組上有超級(jí)頁(yè)面可用(步驟5402的“是”結(jié)果),則處理進(jìn)行到步驟5403, 其中,在超級(jí)塊元數(shù)據(jù)表3501中檢查對(duì)應(yīng)于超級(jí)頁(yè)面的條目,以確定超級(jí)頁(yè)面是否已被識(shí) 別為有缺陷。如果超級(jí)頁(yè)面是有缺陷的(步驟5403的“是”結(jié)果),則處理進(jìn)行到步驟5404,其 中,跳過(guò)有缺陷的超級(jí)頁(yè)面。然后,處理返回步驟5402。如果超級(jí)頁(yè)面是無(wú)缺陷的(步驟5403的“否”結(jié)果),則處理進(jìn)行到步驟5412,下 文對(duì)其描述。如果子組上無(wú)可用的超級(jí)頁(yè)面(步驟5402的“否”結(jié)果),則在步驟5405中,閃存 HEMi遞增子組,由此移動(dòng)到下一子組,并且如果必要,輪轉(zhuǎn)回到子組0。在步驟5406中,閃存HEMi確定其是否已經(jīng)檢查了閃存組中的所有子組(即,當(dāng)前 子組是否與被檢查的第一個(gè)子組相同)。如果不是(步驟5406的“否”結(jié)果),則閃存HEMi 返回到步驟5402,以確定下一子組上是否有超級(jí)頁(yè)面可用。注意,作為步驟5405中遞增的 結(jié)果,每次檢查通過(guò)新子組。如果檢查了所有的子組并且無(wú)超級(jí)頁(yè)面可用(步驟5406的“是”結(jié)果),則當(dāng)前開(kāi)放的超級(jí)塊滿(mǎn)了且必須被關(guān)閉,而且必須開(kāi)放新超級(jí)塊。在步驟5407中,閃存HEMi將用于 當(dāng)前開(kāi)放的超級(jí)塊的超級(jí)塊元數(shù)據(jù)表3501從數(shù)據(jù)路徑DRAM 107復(fù)制到開(kāi)放的超級(jí)塊的子 組0的超級(jí)頁(yè)面0。這通過(guò)發(fā)出用來(lái)移動(dòng)數(shù)據(jù)的內(nèi)部傳輸請(qǐng)求而被完成。在復(fù)制操作之前, 設(shè)置該表的關(guān)閉標(biāo)志3509。在步驟5408中,閃存HEMi使下一超級(jí)塊從超級(jí)塊空閑列表2912中彈出,并且將 該超級(jí)塊的標(biāo)識(shí)符復(fù)制到開(kāi)放的超級(jí)塊指針2914中。在步驟5409中,閃存HEMi將當(dāng)前時(shí)間寫(xiě)入對(duì)應(yīng)于新開(kāi)放的超級(jí)塊的反轉(zhuǎn)表(例 如,反轉(zhuǎn)表3205)中的時(shí)間戳字段中。在步驟5410中,閃存HEMi將超級(jí)塊元數(shù)據(jù)表從新開(kāi)放的超級(jí)塊的子組0的超級(jí) 頁(yè)面0復(fù)制到數(shù)據(jù)路徑DRAM 107的超級(jí)塊元數(shù)據(jù)表3501中。此時(shí),除缺陷和擦除計(jì)數(shù)信 息以及開(kāi)放標(biāo)志3508 (其被設(shè)置)之外,該表是空白的。在步驟5411中,閃存HEMi初始化超級(jí)頁(yè)面指針列表2919。因?yàn)槌?jí)塊元數(shù)據(jù)表 占用了超級(jí)頁(yè)面0,所以,用于子組0的所述指針被設(shè)置到超級(jí)頁(yè)面1。所有其它指針被設(shè) 為超級(jí)頁(yè)面0。然后,處理返回到步驟5402,用于向頁(yè)面請(qǐng)求分配超級(jí)頁(yè)面。如果子組上有無(wú)缺陷的超級(jí)頁(yè)面可用,則到達(dá)步驟5412 (步驟5403的“否”結(jié)果)。 在步驟5412中,閃存HEMi將指針列表上的下一超級(jí)頁(yè)面分配給頁(yè)面請(qǐng)求,從當(dāng)前子組選擇 條目。閃存HEMi將超級(jí)頁(yè)面的地址寫(xiě)入頁(yè)面請(qǐng)求的閃存寫(xiě)地址字段4007中。注意,因?yàn)?閃存地址的特征在于端口、子組、塊和頁(yè)面,所以整個(gè)地址可得。因?yàn)樵撻W存HEMi僅對(duì)單個(gè) 端口操作,所以不需要端口信息,而且,基于用于識(shí)別使用了哪個(gè)超級(jí)頁(yè)面列表的超級(jí)塊標(biāo) 識(shí)符、超級(jí)頁(yè)面號(hào)以及子組的組合,子組、塊和頁(yè)面信息可得。在步驟5413中,閃存HEMi通過(guò)遞增用于相關(guān)子組的指針而更新超級(jí)頁(yè)面指針列 表,以反映在步驟5412中分配的超級(jí)頁(yè)面。然后,該操作的處理結(jié)束。在圖55中描述完成的事務(wù)的清理。在該流程圖中描述的處理被作為圖50的步驟 5003的部分執(zhí)行。此時(shí),作為頁(yè)面請(qǐng)求處理程序確定用于傳輸請(qǐng)求的最后一個(gè)頁(yè)面請(qǐng)求已 經(jīng)完成的結(jié)果(例如,圖51,步驟5122),作為主機(jī)發(fā)起的讀或?qū)懨畹牟糠终{(diào)用的傳輸請(qǐng) 求在局部傳輸請(qǐng)求隊(duì)列上。在步驟5501中,傳輸請(qǐng)求從局部傳輸請(qǐng)求隊(duì)列中彈出。由在閃存HEMi上運(yùn)行的 傳輸請(qǐng)求處理程序執(zhí)行步驟5501到步驟5504。在步驟5502中,檢查傳輸請(qǐng)求狀態(tài)變量字段3908。一般地,隊(duì)列上的傳輸請(qǐng)求將 具有完成的狀態(tài)(見(jiàn),例如圖49,步驟4921),主要例外是作為垃圾收集例程的部分調(diào)用的 傳輸請(qǐng)求。在該情況中,因?yàn)閭鬏斦?qǐng)求來(lái)自于完成的讀或?qū)懨?,所以其具有完成的狀態(tài)。在步驟5503中,將在頁(yè)面請(qǐng)求指針陣列3913中識(shí)別的頁(yè)面請(qǐng)求放置在頁(yè)面請(qǐng)求 空閑列表2910上。這些頁(yè)面請(qǐng)求現(xiàn)在可用于被其它傳輸請(qǐng)求使用。在步驟5504中,將內(nèi)部傳輸請(qǐng)求放置在局部傳輸請(qǐng)求空閑列表2905上。該內(nèi)部 傳輸請(qǐng)求現(xiàn)在空閑,以被分配給閃存HEMi的外部工作列表上的傳輸請(qǐng)求。傳輸請(qǐng)求處理程 序調(diào)用在閃存HEMi上運(yùn)行的IOP處理程序,并終止。在步驟5505中,在閃存HEMi上運(yùn)行的IOP處理程序遞減在傳輸請(qǐng)求的調(diào)用IOP 字段3902中識(shí)別的IOP的剩余傳輸請(qǐng)求字段3808。注意,此時(shí),IOP不在任何HEMi的工作列表上,從而,即使它不在閃存HEMi的工作列表上,也允許閃存HEMi訪(fǎng)問(wèn)它。在步驟5506中,閃存HEMi確定剩余傳輸請(qǐng)求字段是否已達(dá)到0,其指示IOP不具 有有效的傳輸請(qǐng)求。如果該值大于0(步驟5506的“否”結(jié)果),則傳輸請(qǐng)求處理程序結(jié)束。因?yàn)镮OP 還未完成,所以不需要清理。如果該值是0(步驟5506的“是”結(jié)果),則在步驟5507中,將IOP放置在用于與 在IOP的主機(jī)端口字段3803中識(shí)別的端口關(guān)聯(lián)的傳送HEMi的工作列表上。然后,在閃存 HEMi上運(yùn)行的IOP處理程序終止。在步驟5508中,評(píng)估IOP命令字段3806,以確定IOP是否涉及讀或?qū)懨?。由?傳送HEMi上運(yùn)行的IOP處理程序執(zhí)行這個(gè)以及所有后續(xù)步驟。如果命令是讀命令(步驟5508的“是”結(jié)果),則在步驟5509中,傳送HEMi設(shè)立 數(shù)據(jù)幀和向主機(jī)傳輸數(shù)據(jù)所必需的其它幀,并且將這些幀傳送到主機(jī)。在步驟5509之后,或者如果命令是寫(xiě)而不是讀(步驟5508的“否”結(jié)果),則在步 驟5510中,傳送HEMi向主機(jī)傳送指示命令已被完成的狀態(tài)幀。在步驟5511中,傳送HEMi (a)將在IOP CDBinfo字段3805中識(shí)別的CDBinfo放置 在CDBinfo空閑列表4102上,(b)將IOP放置在IOP空閑列表4103上,以及(c)將在IOP 傳輸請(qǐng)求指針陣列3809中識(shí)別的傳輸請(qǐng)求放置在傳輸請(qǐng)求空閑列表4104上。在步驟5512中,傳送HEMi清理各種其它數(shù)據(jù)結(jié)構(gòu),以反映⑶Binfo和IOP的關(guān)閉。 例如,傳送HEMi遞減用于在IOP啟動(dòng)器字段3804中識(shí)別的啟動(dòng)器的啟動(dòng)器信息條目中的 計(jì)數(shù)字段4203。然后,清理處理結(jié)束。C.垃圾收集垃圾收集是釋放閃存空間用于新寫(xiě)入的處理。當(dāng)與每個(gè)端口關(guān)聯(lián)的閃存HEMi確 定是否需要垃圾收集用于與該端口關(guān)聯(lián)的閃存組,并且如果必要執(zhí)行垃圾收集操作時(shí),在 閃存端口上以閃存端口為基礎(chǔ)執(zhí)行該處理。每個(gè)閃存組包括大量超級(jí)塊,這些超級(jí)塊處于三個(gè)狀態(tài)之一 (1)開(kāi)放(當(dāng)前對(duì)寫(xiě) 開(kāi)放的單個(gè)超級(jí)塊);(2)關(guān)閉(已被寫(xiě)入數(shù)據(jù)的超級(jí)塊,但其不再對(duì)寫(xiě)開(kāi)放);以及(3)空 閑(超級(jí)塊空閑列表2912上的超級(jí)塊,其已被擦除并可用于將來(lái)的寫(xiě))。關(guān)閉的超級(jí)塊通 常包括有效超級(jí)頁(yè)面(包含帶有當(dāng)前有效的數(shù)據(jù)的區(qū)段)和無(wú)效超級(jí)頁(yè)面(包含帶有對(duì)應(yīng) 于已被后續(xù)地寫(xiě)入其它地方而因此不再有效的LBA的數(shù)據(jù)的區(qū)段)的組合。如聯(lián)系圖34 所解釋?zhuān)谟糜陂W存組的反轉(zhuǎn)表中如此指定無(wú)效超級(jí)頁(yè)面。為了操作,每個(gè)閃存組需要空閑超級(jí)塊,這是因?yàn)?,如果開(kāi)放的超級(jí)塊未包含用于 寫(xiě)的足夠空間(即,在超級(jí)頁(yè)面指針列表2919上沒(méi)有示出空閑超級(jí)頁(yè)面),則該超級(jí)塊必須 被關(guān)閉,必須開(kāi)放來(lái)自超級(jí)塊空閑列表的超級(jí)塊,并且,必須將新數(shù)據(jù)寫(xiě)入新開(kāi)放的超級(jí)塊 中。垃圾收集是整合(consolidate)數(shù)據(jù)來(lái)為未來(lái)的寫(xiě)釋放超級(jí)塊的處理。返回到圖29,在當(dāng)前的優(yōu)選實(shí)施例中,在每次從超級(jí)塊空閑列表2912分配超級(jí)塊 時(shí),遞減相關(guān)閃存HEMi的mRAM中的超級(jí)塊空閑列表計(jì)數(shù)器2913。該計(jì)數(shù)器包含當(dāng)前在超 級(jí)塊空閑列表2912上的超級(jí)塊的數(shù)量。在遞減計(jì)數(shù)器2913之后,將計(jì)數(shù)器當(dāng)前保持的值與在閃存HEMi的mRAM的垃圾收集閾值段2915中保持的兩個(gè)值(臨界閾值和非臨界閾值)比較。在當(dāng)前的優(yōu)選實(shí)施例中, 在初始化時(shí),將這些值分別設(shè)置為缺省值“2”和“6”,但如下所討論,可以使用其它值。此 外,這些值是可編程的,因此可以由用戶(hù)改變。如果計(jì)數(shù)器值(以及因此的超級(jí)塊空閑列表上的超級(jí)塊的數(shù)量)在臨界閾值或低 于臨界閾值,則設(shè)置臨界標(biāo)志,并且,閃存HEMi移入臨界垃圾收集模式,其中垃圾收集操作 優(yōu)先于包含主機(jī)讀和寫(xiě)的所有其它操作。這繼續(xù)直到計(jì)數(shù)器值(以及因此的超級(jí)塊空閑列 表上的超級(jí)塊的數(shù)量)超過(guò)臨界閾值為止,這引起臨界標(biāo)志被復(fù)位。如果計(jì)數(shù)器值大于臨界閾值、但在非臨界閾值點(diǎn)或低于非臨界閾值,則閃存HEMi 移入非臨界垃圾收集模式,并且發(fā)起垃圾收集操作,但僅在已經(jīng)處理了所有主機(jī)發(fā)起的讀 和寫(xiě)之后。如果可用的空閑空間量大于非臨界閾值,則垃圾收集不發(fā)生。在當(dāng)前的優(yōu)選實(shí)施例中,臨界閾值被設(shè)為2,這是因?yàn)?,所有時(shí)候都至少需要一個(gè) 空閑的超級(jí)塊,以確??梢越蛹{即將到來(lái)的寫(xiě),并且,需要一個(gè)附加的超級(jí)塊來(lái)針對(duì)臨界標(biāo) 志被設(shè)置之前在局部請(qǐng)求隊(duì)列2904上的傳輸請(qǐng)求可能用光附加超級(jí)塊的可能性提供保 護(hù)。注意,甚至在臨界模式中,已經(jīng)在局部傳輸請(qǐng)求隊(duì)列上的傳輸請(qǐng)求也將在垃圾收集傳輸 請(qǐng)求之前被閃存HEMi處理,該垃圾收集傳輸請(qǐng)求與所有其它新傳輸請(qǐng)求一樣被添附到局 部傳輸請(qǐng)求隊(duì)列2904的底部。在當(dāng)前的優(yōu)選實(shí)施例中,非臨界閾值被設(shè)為“6”,其表示降低垃圾收集的頻率(需 要更低的數(shù))與最小化主機(jī)發(fā)起的寫(xiě)的序列可能被對(duì)臨界模式垃圾收集的需要中斷的可 能性(需要更高的數(shù))之間的折衷。在替代實(shí)施例中,該數(shù)可以被設(shè)得略高或略低。注意, 更低的數(shù)將傾向降低垃圾收集的頻率,并因此將增加超級(jí)塊在被垃圾收集之前保持關(guān)閉的 時(shí)間量。由于隨著時(shí)間的過(guò)去超級(jí)塊包含的有效數(shù)據(jù)量將傾向減少(因?yàn)槌?jí)塊中的有效 超級(jí)頁(yè)面是新寫(xiě)入的主題,所以被無(wú)效),因此垃圾收集對(duì)更老更舊的超級(jí)塊更有效率,這 是因?yàn)?,這種超級(jí)塊包含更少的必須被復(fù)制到開(kāi)放的超級(jí)塊中的有效信息。因此,將非臨界 閾值設(shè)置為更低的值傾向于通過(guò)增加給定超級(jí)塊在被垃圾收集前關(guān)閉的時(shí)間量而提高垃 圾收集操作的效率。然而,再次,這是一種折衷,因?yàn)樵摂?shù)越低,將越有可能達(dá)到臨界閾值, 此時(shí),系統(tǒng)性能將下降,這是因?yàn)榕R界模式垃圾收集優(yōu)先于常規(guī)讀和寫(xiě)。在圖56所示的流程圖中圖示垃圾收集的處理。垃圾收集的需要選擇用于擦除的超級(jí)塊。這在步驟5601中表示。因?yàn)槠湫枰獙?lái) 自所選擇的超級(jí)塊中的有效超級(jí)頁(yè)面的數(shù)據(jù)寫(xiě)到當(dāng)前開(kāi)放的超級(jí)塊中,所以,選擇具有最 少量有效數(shù)據(jù)的超級(jí)塊是合理的。因此,當(dāng)發(fā)起垃圾收集時(shí),相關(guān)的閃存HEMi對(duì)用于閃存 組的反轉(zhuǎn)表中的每個(gè)超級(jí)塊檢查計(jì)數(shù)字段,從最近加入到超級(jí)頁(yè)面空閑列表中的超級(jí)塊之 后的超級(jí)塊開(kāi)始(例如,如果作為垃圾收集的結(jié)果而加入到空閑列表的最后一個(gè)超級(jí)塊是 17,則在下一次垃圾收集操作中第一個(gè)被檢查的超級(jí)塊計(jì)數(shù)字段將是超級(jí)塊18),并且以編 號(hào)順序經(jīng)過(guò)每個(gè)超級(jí)塊進(jìn)行,回卷到超級(jí)塊0。閃存HEMi利用最高的計(jì)數(shù)字段值(指示最大數(shù)量的無(wú)效頁(yè)面)選擇超級(jí)塊。如 果對(duì)于最高計(jì)數(shù)字段,多于一個(gè)超級(jí)塊是持平的,則在當(dāng)前的優(yōu)選實(shí)施例中,選擇所遇到的 第一個(gè)這種超級(jí)塊用于垃圾收集。在可選的實(shí)施例中,可以通過(guò)對(duì)每個(gè)持平的超級(jí)塊檢查 超級(jí)塊元數(shù)據(jù)表(或反轉(zhuǎn)表)中的擦除計(jì)數(shù)字段來(lái)打破持平,其中選擇具有較低擦除計(jì)數(shù) 的超級(jí)塊。該選擇具有施加一定程度的磨損均衡的優(yōu)點(diǎn)。本領(lǐng)域的普通技術(shù)人員將理解,擦除操作傾向造成對(duì)閃存的損耗,從而具有更高次數(shù)擦除的那些塊將趨向具有更高數(shù)量的 缺陷。該類(lèi)型的磨損均衡趨向橫跨塊平均化缺陷數(shù)量,然而付出了在每個(gè)垃圾收集之前施 加額外操作的代價(jià)。一旦超級(jí)塊被選擇用于垃圾收集,則在步驟5602中,關(guān)聯(lián)的閃存HEMi創(chuàng)建足夠?qū)?數(shù)據(jù)從該超級(jí)塊中的每個(gè)有效的超級(jí)頁(yè)面移動(dòng)到當(dāng)前開(kāi)放的超級(jí)塊中的一系列內(nèi)部傳輸 請(qǐng)求。內(nèi)部傳輸請(qǐng)求由特定閃存HEMi發(fā)出并專(zhuān)用于特定閃存HEMi。它們與常規(guī)傳輸請(qǐng) 求的不同在于內(nèi)部傳輸請(qǐng)求僅被保持在發(fā)出請(qǐng)求的閃存HEMi的mRAM中,而永遠(yuǎn)不存儲(chǔ)在 共享RAM中或被任何其它HEMi操作。因?yàn)閮?nèi)部傳輸請(qǐng)求不作為IOP的結(jié)果而被調(diào)用,所以 每個(gè)內(nèi)部傳輸請(qǐng)求的調(diào)用IOP字段3902被留為空白。如上所述,每個(gè)傳輸請(qǐng)求可以發(fā)出三個(gè)頁(yè)面請(qǐng)求,并且每個(gè)頁(yè)面請(qǐng)求可以引起一 個(gè)超級(jí)頁(yè)面數(shù)據(jù)的傳輸。因此,閃存HEMi需要發(fā)出以移動(dòng)數(shù)據(jù)的內(nèi)部傳輸請(qǐng)求的數(shù)量將等 于超級(jí)塊中的有效超級(jí)頁(yè)面的數(shù)量除以3(向上取整)。在當(dāng)前的優(yōu)選實(shí)施例中,假定每個(gè)閃存組八個(gè)塊,每個(gè)超級(jí)塊包含512個(gè)超級(jí)頁(yè) 面(每個(gè)塊64個(gè)超級(jí)頁(yè)面X8),所以,理論上,垃圾收集可能需要發(fā)出171個(gè)傳輸請(qǐng)求(不 過(guò),應(yīng)該理解,如果超級(jí)塊中的每一個(gè)超級(jí)頁(yè)面都是有效的,則在對(duì)超級(jí)塊執(zhí)行垃圾收集將 沒(méi)有意義)。然而,實(shí)踐中,因?yàn)楸贿x擇用于垃圾收集的超級(jí)塊傾向具有相對(duì)較少的有效超 級(jí)頁(yè)面,所以需要遠(yuǎn)小于171個(gè)傳輸頁(yè)面。在步驟5603中,執(zhí)行作為在步驟5602中設(shè)立的傳輸請(qǐng)求的結(jié)果而發(fā)出的頁(yè)面請(qǐng) 求。應(yīng)該理解,步驟5602和5603將很可能重疊,這是因?yàn)椋笥糜趶呐f超級(jí)塊向開(kāi)放的 超級(jí)塊移動(dòng)有效超級(jí)頁(yè)面的傳輸請(qǐng)求的數(shù)量將可能超過(guò)6,其是可以同時(shí)被閃存HEMi處理 的傳輸請(qǐng)求的數(shù)量。因此,某個(gè)數(shù)量的傳輸請(qǐng)求將被分配,然后,將為這些傳輸請(qǐng)求執(zhí)行頁(yè) 面請(qǐng)求,并且當(dāng)每個(gè)傳輸請(qǐng)求完成時(shí),它在局部傳輸請(qǐng)求表2901中的存取位置將開(kāi)放,從 而允許閃存HEMi發(fā)出新傳輸請(qǐng)求。除了沒(méi)有外部數(shù)據(jù)之外,將數(shù)據(jù)從有效頁(yè)面請(qǐng)求復(fù)制到當(dāng)前開(kāi)放的超級(jí)塊中的操 作與常規(guī)寫(xiě)操作類(lèi)似。如上文聯(lián)系超級(jí)頁(yè)面指針列表2919的描述所描述的,優(yōu)選地,寫(xiě)對(duì) 在與將被該寫(xiě)無(wú)效的超級(jí)頁(yè)面所在子組相同的子組上的超級(jí)頁(yè)面發(fā)生。這最小化所需要的 傳輸?shù)臄?shù)量,這是因?yàn)?,從閃存子組的一個(gè)位置到同一子組中的另一位置的寫(xiě)不需要將數(shù) 據(jù)移動(dòng)到閃存級(jí)緩沖器,而可以通過(guò)將數(shù)據(jù)從閃存寫(xiě)入閃存頁(yè)面緩沖器并接著從閃存頁(yè)面 緩沖器寫(xiě)入閃存來(lái)完成。這大大快于需要將數(shù)據(jù)傳輸?shù)郊?jí)緩沖器的移動(dòng),并且不占用將級(jí) 緩沖器與閃存組連接的總線(xiàn)。使用超級(jí)頁(yè)面指針列表2919,垃圾收集寫(xiě)優(yōu)先針對(duì)同一子組。一個(gè)頁(yè)面請(qǐng)求可以 處理從閃存的讀與向閃存的寫(xiě)兩者,所以單個(gè)傳輸請(qǐng)求可以處理三個(gè)有效超級(jí)頁(yè)面。與常 規(guī)寫(xiě)一樣,每次來(lái)自有效超級(jí)頁(yè)面的數(shù)據(jù)被復(fù)制到新位置時(shí),更新轉(zhuǎn)發(fā)表3201中對(duì)應(yīng)于這 些LBA的條目。在將數(shù)據(jù)從舊超級(jí)塊移動(dòng)到開(kāi)放的超級(jí)中的傳輸請(qǐng)求之后,在步驟5604中,發(fā)出 三個(gè)傳輸請(qǐng)求,一共包含七個(gè)頁(yè)面請(qǐng)求(各有三個(gè)頁(yè)面請(qǐng)求在開(kāi)始的兩個(gè)傳輸請(qǐng)求中,且 一個(gè)頁(yè)面請(qǐng)求在第三個(gè)傳輸請(qǐng)求中)。這些頁(yè)面請(qǐng)求中的每個(gè)對(duì)單個(gè)塊執(zhí)行閃存擦除命令。 如上所述,每個(gè)超級(jí)塊在端口的八個(gè)子組的每個(gè)中包括相同的塊。因此,每個(gè)頁(yè)面請(qǐng)求在不同芯片選擇(chip select)上擦除相同的塊。如本領(lǐng)域的普通計(jì)數(shù)人員將理解的,閃存擦 除命令引起向被擦除的塊中寫(xiě)入一系列的“1”。這七個(gè)頁(yè)面請(qǐng)求擦除超級(jí)塊的塊1-7。
垃圾收集操作所需的最后一個(gè)傳輸請(qǐng)求包含三個(gè)頁(yè)面請(qǐng)求。在步驟5605中,這些 頁(yè)面請(qǐng)求中的第一個(gè)將缺陷列和擦除計(jì)數(shù)從存儲(chǔ)在超級(jí)塊的子組0、超級(jí)頁(yè)面0中的超級(jí) 塊元數(shù)據(jù)表(見(jiàn)圖35)中復(fù)制到閃存級(jí)緩沖器中。注意,其駐留于超級(jí)塊的塊0中,不在步 驟5604中擦除塊0。 在步驟5606中,閃存HEMi遞增超級(jí)塊元數(shù)據(jù)表中的擦除計(jì)數(shù)字段3507,反映該超 級(jí)塊現(xiàn)在被擦除了附加的一次的事實(shí)。在步驟5607中,閃存HEMi在數(shù)據(jù)路徑DRAM 107中訪(fǎng)問(wèn)用于閃存組的反轉(zhuǎn)表,將 來(lái)自該超級(jí)塊的所有超級(jí)頁(yè)面標(biāo)記為有效,并將用于該超級(jí)塊的計(jì)數(shù)字段設(shè)為0。在步驟5608中,來(lái)自最后一個(gè)傳輸請(qǐng)求的第二個(gè)頁(yè)面請(qǐng)求擦除塊0。注意,這個(gè)以 及步驟5609-5610可以與步驟5607并行發(fā)生。在步驟5609中,最后一個(gè)頁(yè)面請(qǐng)求將擦除計(jì)數(shù)和缺陷數(shù)據(jù)從級(jí)緩沖器復(fù)制回到 超級(jí)塊的子組0的超級(jí)頁(yè)面0中,因此,在閃存中設(shè)立新的超級(jí)頁(yè)面元數(shù)據(jù)表,其除了這些 條目之外是空白的。在步驟5610中,將超級(jí)塊放置回超級(jí)塊空閑列表2912上,并且遞增超級(jí)塊空閑列 表計(jì)數(shù)器2913。然后,用于該超級(jí)塊的垃圾收集操作完成。雖然當(dāng)前的優(yōu)選實(shí)施例將有效數(shù)據(jù)從舊超級(jí)塊復(fù)制到當(dāng)前開(kāi)放的超級(jí)塊中,但正 如在主機(jī)發(fā)起的寫(xiě)的情況中所發(fā)生的,在替代實(shí)施例中,同時(shí)具有兩個(gè)“開(kāi)放”超級(jí)塊,一個(gè) 用于常規(guī)讀,第二個(gè)用于收集來(lái)自正在被通過(guò)垃圾收集處理回收的超級(jí)塊的數(shù)據(jù)。在該實(shí) 施例中,識(shí)別了垃圾收集發(fā)起的傳輸請(qǐng)求(例如,通過(guò)傳輸請(qǐng)求中的垃圾收集標(biāo)志),并且 使得數(shù)據(jù)被寫(xiě)入開(kāi)放的垃圾收集超級(jí)塊,而不是用于主機(jī)發(fā)起的寫(xiě)的開(kāi)放超級(jí)塊。與當(dāng)前對(duì)寫(xiě)開(kāi)放的超級(jí)塊中的有效數(shù)據(jù)相比,由垃圾收集產(chǎn)生的有效數(shù)據(jù)相 對(duì)“舊”。為此原因,將由垃圾收集產(chǎn)生的有效數(shù)據(jù)復(fù)制到垃圾收集超級(jí)塊中將傾向集中 (concentrate)相對(duì)舊并因此較不可能被高頻率使用的數(shù)據(jù)。本領(lǐng)域的普通技術(shù)人員將理 解,不是最近寫(xiě)入的數(shù)據(jù)在近未來(lái)被讀或?qū)懙目赡苄源蟠笮∮诟臄?shù)據(jù)?!袄占背?jí)塊的使用具有在一個(gè)或多個(gè)超級(jí)塊中壓縮相對(duì)舊的數(shù)據(jù)的優(yōu)勢(shì)。 因?yàn)檫@種數(shù)據(jù)被覆寫(xiě)的可能性相對(duì)較小,所以這種超級(jí)塊將傾向用有效數(shù)據(jù)填充。如果,如 上所述,垃圾收集被優(yōu)先施加于帶有相對(duì)較高比例的無(wú)效數(shù)據(jù)的超級(jí)塊,則用作垃圾收集 的庫(kù)(repository)的超級(jí)塊將很可能它們自身不經(jīng)受垃圾收集。這具有期望是相對(duì)靜態(tài) 的數(shù)據(jù)將在相對(duì)較小數(shù)量的超級(jí)塊中集中、以及該數(shù)據(jù)將不被垃圾收集的優(yōu)點(diǎn),因此不必 要經(jīng)常地將該數(shù)據(jù)復(fù)制到新超級(jí)塊作為垃圾收集處理的一部分。相反地,用于常規(guī)寫(xiě)的超 級(jí)塊將傾向包括經(jīng)常被使用和重寫(xiě)的數(shù)據(jù)的集中。因此,這種超級(jí)塊將傾向包括相對(duì)較高 比例的無(wú)效超級(jí)頁(yè)面。當(dāng)這種超級(jí)塊自身經(jīng)受垃圾收集時(shí),將必須從超級(jí)塊中復(fù)制出來(lái)的 有效數(shù)據(jù)的數(shù)量將相對(duì)較低,從而降低了垃圾收集所需要的時(shí)間。因此,盡管以額外的復(fù)雜度為代價(jià),但通過(guò)最小化垃圾收集操作所必需的時(shí)間量, 垃圾收集超級(jí)塊可以提高性能。在該替代實(shí)施例的擴(kuò)展中,使用分級(jí)的存儲(chǔ)器系統(tǒng),包括相對(duì)昂貴的快速存儲(chǔ)器 和相對(duì)較便宜的慢速存儲(chǔ)器。用于存儲(chǔ)在垃圾收集期間收集的數(shù)據(jù)的超級(jí)塊被存儲(chǔ)在慢速存儲(chǔ)器中,這是由于,這種超級(jí)塊被預(yù)期包括不需要與更近被更新、因此被存儲(chǔ)在保持在快 速存儲(chǔ)器中的超級(jí)塊中的數(shù)據(jù)在相同的頻率基礎(chǔ)上的數(shù)據(jù)。D.巡邏功能如在本領(lǐng)域中所理解,閃存中數(shù)據(jù)完整性可能因?yàn)楦鞣N原因而退化 (deteriorate) 0在每次讀期間,頁(yè)面的單元內(nèi)的電荷可能輕微地耗散,導(dǎo)致單元中的電壓 退化直到該電壓不再可以被正確地讀取為止。相鄰頁(yè)面也可以被讀操作影響,從而導(dǎo)致這 種頁(yè)面的單元中的電壓退化,即使實(shí)際的單元未被讀取。這被稱(chēng)為“讀干擾”。隨著時(shí)間的 過(guò)去,該耗散可以導(dǎo)致單元電壓下降到閾值之下,并導(dǎo)致“1”記錄為“0”。如果不處理這些 錯(cuò)誤,則隨著時(shí)間的過(guò)去,可以存在比通過(guò)ECC可恢復(fù)的錯(cuò)誤更多的錯(cuò)誤,并且數(shù)據(jù)損壞可 發(fā)生。此外,編程(寫(xiě))或擦除存儲(chǔ)器單元也可降低性能并導(dǎo)致數(shù)據(jù)錯(cuò)誤的增加。例如, 當(dāng)編程或擦除單元時(shí),可能需要提高的電壓來(lái)使電荷流入或流出浮柵。然而,提高的電壓可 以對(duì)用于形成單元的半導(dǎo)體材料施加壓力。隨著大量的編程或擦除周期,單元有效地存儲(chǔ) 存儲(chǔ)電荷的能力降低,導(dǎo)致數(shù)據(jù)中增加的錯(cuò)誤。自閃存單元被寫(xiě)入起的時(shí)間量也可對(duì)數(shù)據(jù)不可靠性有貢獻(xiàn)。注意,這些問(wèn)題可能、也可能不是源自導(dǎo)致超級(jí)頁(yè)面被識(shí)別為有缺陷的閃存中的 物理缺陷。物理缺陷是永久性的,并且,所影響的超級(jí)頁(yè)面被永久地映射出去而不再被使 用。替代地,由超級(jí)頁(yè)面上的一個(gè)或多個(gè)閃存單元所保持的電荷的降低產(chǎn)生的這些類(lèi)型的 錯(cuò)誤是瞬時(shí)的。這種瞬時(shí)的錯(cuò)誤的檢測(cè)不需要超級(jí)頁(yè)面被識(shí)別為有缺陷,并且這些錯(cuò)誤本 身可以通過(guò)使用ECC校正。然而,ECC僅可以校正每頁(yè)面給定數(shù)目的錯(cuò)誤。此外,一旦頁(yè)面的完整性開(kāi)始被諸 如上面所列舉的因素(例如,讀干擾、寫(xiě)干擾等)影響,頁(yè)面上的錯(cuò)誤數(shù)量將可能隨著時(shí)間 增加,從而,在某些點(diǎn)上,頁(yè)面上的信息將不可恢復(fù)。錯(cuò)誤處理始終是面對(duì)企業(yè)級(jí)閃存存儲(chǔ)的最重要的挑戰(zhàn)之一。如本領(lǐng)域所公知的, 閃存存儲(chǔ)具有相對(duì)較高的錯(cuò)誤率,而且,這被與以下事實(shí)結(jié)合,即閃存系統(tǒng)中的錯(cuò)誤校正 需要使用花費(fèi)大量系統(tǒng)資源的讀_修改_寫(xiě)操作來(lái)寫(xiě)入完整頁(yè)面。SSD控制器106獨(dú)特地適合處理閃存錯(cuò)誤,這是因?yàn)?,大量處理器和多個(gè)獨(dú)立的流 水線(xiàn)允許SSD控制器106或多或少連續(xù)地檢測(cè)和校正錯(cuò)誤,而不降低主機(jī)角度的系統(tǒng)性能。SSD控制器106的設(shè)計(jì)在錯(cuò)誤校正算法上允許很大的選擇,這里描述算法中的幾 個(gè)。在一個(gè)實(shí)施例中,SSD控制器106使用獨(dú)立的巡邏功能,其包括在獨(dú)立地“巡邏” 每個(gè)閃存組的每個(gè)閃存HEMi上運(yùn)行的固件,讀包含有效信息的每一個(gè)超級(jí)頁(yè)面,以及校正 超過(guò)閾值的錯(cuò)誤。圖57中圖示了該實(shí)施例。圖57的流程圖從圖50的步驟5004的“否”結(jié)果開(kāi)始。如上文聯(lián)系圖50所述,步 驟5007-5009在某些情況中可以由巡邏功能取代。步驟5701表示確定巡邏功能是否正在操作的檢查。在一個(gè)實(shí)施例中,巡邏功能周 期性地操作。在該實(shí)施例中,該功能檢查閃存組中每一個(gè)有效的超級(jí)頁(yè)面,然后關(guān)閉一段時(shí) 間。例如,巡邏功能可以每24個(gè)小時(shí)運(yùn)行到完成一次。在該實(shí)施例中,一旦巡邏功能完成, 則其將直到所指定的時(shí)間段完成前都不會(huì)重新開(kāi)始,例如,其可以在每個(gè)午夜開(kāi)始,運(yùn)行到
80完成(如下所解釋?zhuān)摴δ鼙恢芷谛缘刂袛?,以允許其它操作發(fā)生),然后關(guān)閉直到下一個(gè) 午夜。在巡邏功能周期性地運(yùn)行的實(shí)施例中,步驟5701的“否”結(jié)果導(dǎo)致圖50的步驟 5007,其中,閃存HEMi可以進(jìn)入休眠模式。在巡邏功能連續(xù)地操作(再次,該功能被中斷用于其它任務(wù))的實(shí)施例中,步驟 5701被跳過(guò)。在這些實(shí)施例中,或者如果巡邏功能是操作中的(步驟5701的“是”結(jié)果),則 在步驟5702中,進(jìn)行檢查,以確定是否有任何局部傳輸請(qǐng)求可用。注意,在優(yōu)選實(shí)施例中, 這個(gè)以及下面某些的步驟不表示獨(dú)立的巡邏功能程序,而是對(duì)通常用于主機(jī)發(fā)起的讀和寫(xiě) (例如,圖49)的固件例程的調(diào)用。如果無(wú)局部傳輸請(qǐng)求可用(步驟5702的“否”結(jié)果),則處理進(jìn)行到圖50的步驟 5007。如果有局部傳輸請(qǐng)求可用(步驟5702的“是”結(jié)果),則在步驟5703中,局部傳輸 請(qǐng)求被彈出。在步驟5704中,局部傳輸請(qǐng)求被填充。一般地,這反映(mirror)用于主機(jī)發(fā)起的 事務(wù)(見(jiàn)例如圖49)的處理,其中,對(duì)命令字段3907使用讀命令。然而,用于傳輸請(qǐng)求的LBA 范圍基于該閃存組上用于巡邏功能的緊挨在前的反復(fù)的LBA范圍,并考慮在閃存組之間使 用的LBA分條,目標(biāo)為覆蓋分配給閃存組的所有LBA。在初始化之后巡邏功能第一次運(yùn)行時(shí)(或其在周期性的關(guān)閉之后第一次重新開(kāi) 始時(shí)),傳輸請(qǐng)求將被分配存儲(chǔ)在閃存組中的90個(gè)LBA。下一次,傳輸請(qǐng)求將被分配存儲(chǔ)在 閃存組中的接下來(lái)的90個(gè)LBA,等等,直到到達(dá)閃存組中存儲(chǔ)的最后一個(gè)LBA為止,此時(shí),巡 邏功能將從頭重新開(kāi)始(如果其連續(xù)地運(yùn)行),或者關(guān)閉,等待下一觸發(fā)事件(例如,下一午 夜)。巡邏功能使用閃存HEMi mRAM中的數(shù)據(jù)結(jié)構(gòu)(例如局部變量2916中的變量)追 蹤最近分配的LBA。如上所述(見(jiàn),例如圖16和所附討論),LBA在閃存組之間被分條。因此,巡邏功能 不能夠簡(jiǎn)單地將下90個(gè)LBA分配給傳輸請(qǐng)求,而替代地,必須識(shí)別已經(jīng)被分配給閃存組的 下一組的90個(gè)LBA。這可以通過(guò)讀整個(gè)轉(zhuǎn)發(fā)表3201來(lái)發(fā)現(xiàn)帶有與巡邏功能在其上運(yùn)行的 閃存組相等的端口值的下一行而完成??蛇x地,巡邏功能可以使用與用于首先將LBA分配 給閃存組(例如,以90個(gè)的分條分配的LBA,帶有等于90乘以閃存組的數(shù)量的間隙(gap)) 相同的算法。在步驟5704中對(duì)局部傳輸請(qǐng)求的填充之后,在步驟5705中,三個(gè)頁(yè)面請(qǐng)求被彈出 并被填充,各自接收分配給傳輸請(qǐng)求的45個(gè)LBA中的15個(gè)。上文聯(lián)系圖49描述了頁(yè)面請(qǐng) 求被填充的方式。在步驟5706中,頁(yè)面請(qǐng)求被發(fā)送到子組隊(duì)列。這是與用于產(chǎn)生頁(yè)面請(qǐng)求來(lái)處理主 機(jī)發(fā)起的事務(wù)相同的處理。參見(jiàn)例如圖49。在步驟5707中,執(zhí)行頁(yè)面請(qǐng)求讀。注意,數(shù)據(jù)被讀到閃存緩沖器,但不被傳送到數(shù) 據(jù)路徑DRAM 107。替代地,讀的唯一目的是觸發(fā)ECC檢查。如上聯(lián)系圖31所述,每次數(shù)據(jù) 被讀到存級(jí)緩沖器時(shí),ECC檢查3104操作,并且,如果發(fā)現(xiàn)了錯(cuò)誤,則將數(shù)據(jù)傳送到ECC校 正引擎3101。[1004]在步驟5708中,檢查由ECC檢查3104設(shè)置的指示器,以確定是否檢測(cè)到任何讀錯(cuò) 誤。如果沒(méi)有(步驟5708的“否”結(jié)果),則處理進(jìn)行回到圖50的循環(huán)的開(kāi)始。這允許閃 存HEMi處理其它非巡邏功能任務(wù),甚至在巡邏功能運(yùn)行的同時(shí)也是如此,并且確保巡邏功 能將不顯著地降低對(duì)于主機(jī)發(fā)起的讀和寫(xiě)的性能。如果無(wú)其它操作被要求,則當(dāng)圖50的循 環(huán)返回到步驟5004時(shí),來(lái)自該步驟的“否”結(jié)果將再次觸發(fā)巡邏功能,這次使用45個(gè)LBA的 新組。如果檢測(cè)到讀錯(cuò)誤(步驟5708的“是”結(jié)果),則在步驟5709中,將包含錯(cuò)誤的區(qū) 段發(fā)送到ECC校正引擎3101。上文聯(lián)系圖31描述ECC校正。在步驟5710中,檢查由ECC校正引擎3101校正的錯(cuò)誤的數(shù)量,以確定其是否超過(guò) 可允許的錯(cuò)誤的閾值,當(dāng)前實(shí)施例中該值設(shè)為8 (見(jiàn)上文,聯(lián)系圖31)。如果錯(cuò)誤的數(shù)量等于或低于閾值(步驟5710的“否”結(jié)果),則巡邏功能將控制返 回到圖50的步驟5001。如上聯(lián)系圖31所述,如果所檢測(cè)的錯(cuò)誤的數(shù)量不超過(guò)該閾值,則不 將所校正的數(shù)據(jù)寫(xiě)入到閃存中。如果錯(cuò)誤的數(shù)量超過(guò)閾值(步驟5710的“是”結(jié)果),則在步驟5711中,使用讀-修 改-寫(xiě)操作將所校正的數(shù)據(jù)寫(xiě)入到新超級(jí)頁(yè)面中。見(jiàn)圖53,以及上文所附的描述。在步驟5711之后,巡邏功能將控制返回到圖50的步驟5001。圖57描述巡邏功能的一個(gè)實(shí)施例,其中,該功能獨(dú)立地在每個(gè)閃存組上運(yùn)行。這 由于獨(dú)立的閃存HEMi服務(wù)每個(gè)閃存組的事實(shí)而變得可能。SSD控制器106中固有的處理能 力允許閃存錯(cuò)誤被連續(xù)地或周期性地檢測(cè)和校正,而對(duì)整個(gè)系統(tǒng)性能沒(méi)有任何影響,并且 不需要設(shè)法預(yù)測(cè)閃存中的哪些區(qū)域特別易于有錯(cuò)誤。在不同的實(shí)施例中,SSD控制器106發(fā)出用于巡邏功能的Ι0Ρ。每個(gè)IOP指定一個(gè) LBA范圍,并且,IOP被周期性地發(fā)出直到覆蓋了由SSD控制器106管理的整個(gè)LBA范圍。 在該實(shí)施例中,不必要單獨(dú)地計(jì)算哪些LBA被分配到哪些閃存組,這是因?yàn)?,?dāng)SSD控制器 106處理IOP (見(jiàn)上文)時(shí)其被自動(dòng)地處理(見(jiàn)上)。在該實(shí)施例中,不進(jìn)行檢查來(lái)確定是否有其它的任務(wù)正等待被處理。為此原因,應(yīng) 該隔開(kāi)IOP發(fā)出(例如,一分鐘一個(gè))。此外,在一個(gè)替代選擇中,作為巡邏功能IOP的結(jié)果 而被調(diào)用的傳輸請(qǐng)求和頁(yè)面請(qǐng)求可能被識(shí)別為具有較低的優(yōu)先級(jí),并在其它傳輸請(qǐng)求和頁(yè) 面請(qǐng)求(見(jiàn)上文)之后被處理。E.中止處理需要SSD控制器106來(lái)正確地響應(yīng)SCSI中止命令、以及其它相關(guān)協(xié)議中的類(lèi)似命 令。中止命令可能需要中止特定的讀或?qū)懨睿蛘咚衼?lái)自特定啟動(dòng)器的命令。SSD控制 器106還必須正確地響應(yīng)硬復(fù)位,其中,所有當(dāng)前的命令被中止,并且系統(tǒng)返回到缺省的上 電狀態(tài)。在中止命令或硬復(fù)位之后,存儲(chǔ)在經(jīng)受了已中止的寫(xiě)命令(其已開(kāi)始,但在中止 之前未結(jié)束)的LBA中的數(shù)據(jù)在未定義的狀態(tài)中,并且,需要啟動(dòng)器重寫(xiě)這種數(shù)據(jù),以將其 返回到已知狀態(tài)。在請(qǐng)求中止特定命令的情況中,SSD控制器通過(guò)以下步驟響應(yīng)識(shí)別與中止命令 一起接收的SCSI標(biāo)簽,并將該信息與存在在CDBinfo表4109中的CDBinfo中的SCSI標(biāo) 簽字段3705匹配,由此識(shí)別響應(yīng)于現(xiàn)在正被中止的命令而被創(chuàng)建的⑶Binfo。然后,該⑶Binfo的IOP字段3704被用于識(shí)別被調(diào)用來(lái)處理事務(wù)的Ι0Ρ。接著,檢查該IOP的傳輸 請(qǐng)求指針陣列3809,以識(shí)別作為該IOP的結(jié)果而被發(fā)出的每個(gè)傳輸請(qǐng)求。然后,中止這些傳 輸請(qǐng)求中的每個(gè),意味著設(shè)置了它的中止標(biāo)志3906,并且,閃存HEMi執(zhí)行循環(huán)為每個(gè)傳輸 請(qǐng)求發(fā)起中止處理程序。中止處理程序?qū)鬏斦?qǐng)求置入完成的狀態(tài),并且,將在頁(yè)面請(qǐng)求指 針陣列3913中識(shí)別的所有頁(yè)面請(qǐng)求從子組隊(duì)列中移除。頁(yè)面請(qǐng)求、傳輸請(qǐng)求和IOP的清理 如聯(lián)系圖55所描述的進(jìn)行。中止隊(duì)列命令需要中止由負(fù)責(zé)中止隊(duì)列命令的啟動(dòng)器發(fā)出的所有命令。根據(jù)伴隨 中止隊(duì)列命令的元數(shù)據(jù)識(shí)別該啟動(dòng)器。識(shí)別該啟動(dòng)器的所有CDBinfo和IOP通過(guò)被從所有 工作列表中移除而被停用(retire),并返回到它們的空閑列表中,并且,由這樣的IOP發(fā)出 的所有傳輸請(qǐng)求也被停用。硬復(fù)位需要求終止所有有效的命令。在一個(gè)實(shí)施例中,通過(guò)在所有有效的IOP中 設(shè)置中止標(biāo)志3811而不采取其它動(dòng)作來(lái)處理它。當(dāng)IOP被發(fā)送到傳送HEMi用于向主機(jī)發(fā) 送數(shù)據(jù)(對(duì)于寫(xiě))或狀態(tài)信息(對(duì)于讀)的目的時(shí)(見(jiàn)圖55,步驟5507),傳送HEMi讀取中 止標(biāo)志并終止IOP的處理,而不向主機(jī)發(fā)送任何通信。否則,事務(wù)正常地完成。因此,在該 實(shí)施例中,因?yàn)槌瞬幌蛑鳈C(jī)發(fā)送通信外所有的事務(wù)正常地完成,所以不需要特殊的處理。在替代實(shí)施例中,硬復(fù)位使得在所有有效的IOP和傳輸請(qǐng)求上設(shè)置中止標(biāo)志。一 旦這完成了,從HEMi工作列表中彈出的IOP和傳輸請(qǐng)求便不被處理,而是被忽略,并且,所 有頁(yè)面請(qǐng)求被從子組隊(duì)列中移除。一旦所有的HEMi都沒(méi)有了工作(由于所有頁(yè)面請(qǐng)求、IOP 和傳輸請(qǐng)求的停用),則控制被轉(zhuǎn)交給ARM 2002,其負(fù)責(zé)清理,包括將所有頁(yè)面請(qǐng)求、IOP和 傳輸請(qǐng)求返回到空閑列表,以及將所有狀態(tài)參數(shù)設(shè)為缺省值。該替代實(shí)施例比允許所有事 務(wù)完成更快,但使用特殊處理的需求引入了軟件錯(cuò)誤的風(fēng)險(xiǎn)。F.掉電恢復(fù)如上所述,數(shù)據(jù)路徑DRAM 107被用于存儲(chǔ)轉(zhuǎn)發(fā)和反轉(zhuǎn)表。因?yàn)閺腄RAM的讀以及 向DRAM的寫(xiě)比對(duì)閃存的讀或?qū)懣斓枚?,所以在DRAM中存儲(chǔ)該信息提供了很大的性能優(yōu)勢(shì), 特別是需要對(duì)這些表的大量的寫(xiě)的情況下。然而,因?yàn)镈RAM 107是易失性存儲(chǔ)器,所以,如果意外地掉電,則必須重建這些 表,正如必須為每個(gè)閃存端口重建用于當(dāng)前開(kāi)放的超級(jí)塊的超級(jí)塊元數(shù)據(jù)表一樣,如上所 述,超級(jí)塊元數(shù)據(jù)表也被存儲(chǔ)在DRAM 107中。通常,使用存儲(chǔ)在閃存超級(jí)頁(yè)面元數(shù)據(jù)字段中的信息重建開(kāi)放的超級(jí)塊元數(shù)據(jù) 表,并且使用存儲(chǔ)在閃存中的超級(jí)塊元數(shù)據(jù)表和重建的開(kāi)放超級(jí)塊元數(shù)據(jù)表中的信息重建 轉(zhuǎn)發(fā)和反轉(zhuǎn)表。圖58圖示了這一點(diǎn),其示出了用于單個(gè)閃存組的重建處理。在步驟5801中,當(dāng)前超級(jí)塊被設(shè)為0。其設(shè)立了穿過(guò)閃存組中的所有超級(jí)塊的循 環(huán)。在步驟5802中,將用于當(dāng)前超級(jí)塊的超級(jí)塊元數(shù)據(jù)表3501從閃存復(fù)制到級(jí)緩沖 器。從級(jí)緩沖器中的表讀取或?qū)懭爰?jí)緩沖器中的表比讀取或?qū)懭腴W存中的表更容易。在步驟5803中,檢查超級(jí)塊元數(shù)據(jù)表開(kāi)放標(biāo)志3508和關(guān)閉標(biāo)志3509,以確定在掉 電時(shí)超級(jí)塊是否在被擦除的狀態(tài)下。如果所述兩個(gè)標(biāo)志都被清除(步驟5803的“是”結(jié)果),則這意味著超級(jí)塊被擦除。 在步驟5804中,將超級(jí)塊放置在超級(jí)塊空閑列表2912上,其后,處理以步驟5821繼續(xù),如下所述,其觸發(fā)對(duì)下一超級(jí)塊的分析。如果超級(jí)塊未被擦除(步驟5803的“否”結(jié)果),則在步驟5805中,檢查開(kāi)放和關(guān) 閉標(biāo)志,以確定超級(jí)塊在掉電時(shí)是否開(kāi)放。這通過(guò)開(kāi)放標(biāo)志被設(shè)置和關(guān)閉標(biāo)志未被設(shè)置而 被指示。注意,該步驟可以與步驟5803組合。如果超級(jí)塊在掉電時(shí)是關(guān)閉的(步驟5805的“否”結(jié)果),則在步驟5806中,對(duì)于 該超級(jí)塊,將來(lái)自超級(jí)塊元數(shù)據(jù)表的超級(jí)塊時(shí)間戳3506復(fù)制到反轉(zhuǎn)表的時(shí)間戳字段3405 中。該步驟用對(duì)于該超級(jí)塊正確的時(shí)間戳信息來(lái)更新反轉(zhuǎn)表。在步驟5807中,子組被設(shè)為0。其設(shè)立通過(guò)所有子組的循環(huán),注意,每個(gè)超級(jí)塊在 每個(gè)子組上包括單個(gè)塊。在步驟5708中,超級(jí)頁(yè)面被設(shè)為0。其設(shè)立通過(guò)塊中的64個(gè)超級(jí)頁(yè)面的循環(huán)。在步驟5809中,用于當(dāng)前超級(jí)頁(yè)面和子組的超級(jí)塊元數(shù)據(jù)表的LBA字段被用作用 于向轉(zhuǎn)發(fā)表3201中查找的索引。注意,子組0、超級(jí)頁(yè)面0是特殊情況,這是由于,該超級(jí)頁(yè) 面包含超級(jí)塊元數(shù)據(jù)表,從而在分析中跳過(guò)該超級(jí)頁(yè)面。如果用于LBA的轉(zhuǎn)發(fā)表行已經(jīng)被填充(步驟5809的“是”結(jié)果),則這意味著在重 構(gòu)期間已經(jīng)遇到了 LBA,從而意味著LBA至少被兩次寫(xiě)入開(kāi)放超級(jí)塊。這需要將最后的這樣 的寫(xiě)識(shí)別為有效,并將任何在先的寫(xiě)無(wú)效。在步驟5810中,來(lái)自對(duì)應(yīng)于LBA的轉(zhuǎn)發(fā)表行的 數(shù)據(jù)被用于識(shí)別LBA被寫(xiě)入其中的超級(jí)塊。將用于在先超級(jí)塊的反轉(zhuǎn)表時(shí)間戳字段3405 與來(lái)自用于當(dāng)前正被評(píng)估的超級(jí)塊的超級(jí)塊元數(shù)據(jù)表的時(shí)間戳字段3506比較。如果反轉(zhuǎn)表時(shí)間戳低于(早于)超級(jí)塊元數(shù)據(jù)表時(shí)間戳(步驟5810的“<”結(jié) 果),則這意味著已經(jīng)在轉(zhuǎn)發(fā)表中的條目隨后被當(dāng)前正被評(píng)估的超級(jí)塊元數(shù)據(jù)表中反映的 較新的條目替換。在該情況中,在步驟5811中,對(duì)應(yīng)于現(xiàn)有的用于LBA的轉(zhuǎn)發(fā)表?xiàng)l目的現(xiàn) 有反轉(zhuǎn)表超級(jí)頁(yè)面條目在反轉(zhuǎn)表中被標(biāo)記為無(wú)效。然后,處理進(jìn)行到步驟5815,下文對(duì)其描 述。如果對(duì)應(yīng)于現(xiàn)有的轉(zhuǎn)發(fā)表?xiàng)l目的反轉(zhuǎn)表時(shí)間戳高于(晚于)超級(jí)塊元數(shù)據(jù)表時(shí)間 戳(步驟5810的“>”結(jié)果),則這意味著當(dāng)前在轉(zhuǎn)發(fā)表中的LBA條目取代了超級(jí)塊元數(shù)據(jù) 表中的LBA條目(例如,LBA在被寫(xiě)入當(dāng)前正被評(píng)估的超級(jí)塊中之后再次被寫(xiě)入)。在該情 況中,在步驟5812中,將用于包含當(dāng)前超級(jí)塊元數(shù)據(jù)表中的LBA的超級(jí)頁(yè)面的反轉(zhuǎn)表?xiàng)l目 標(biāo)記為無(wú)效。然后,處理進(jìn)行到步驟5817,下文對(duì)其描述。如果反轉(zhuǎn)表時(shí)間戳等于超級(jí)塊元數(shù)據(jù)表時(shí)間戳(步驟5810的“=”結(jié)果),則這意 味著相同的LBA被兩次寫(xiě)入相同的超級(jí)塊中。為了確定哪個(gè)被寫(xiě)得更晚,必須讀取來(lái)自超 級(jí)頁(yè)面元數(shù)據(jù)的時(shí)間戳。在步驟5813中,將來(lái)自?xún)蓚€(gè)超級(jí)頁(yè)面的時(shí)間戳字段1403的內(nèi)容 從閃存復(fù)制到級(jí)緩沖器中。在步驟5814中,比較超級(jí)頁(yè)面時(shí)間戳。在步驟5811中,在反轉(zhuǎn)表中將兩個(gè)超級(jí)頁(yè)面的較舊者標(biāo)記為無(wú)效。在LBA在轉(zhuǎn)發(fā)表中未準(zhǔn)備好(步驟5809的“否”結(jié)果)的情況下,或者在步驟5811 之后,到達(dá)步驟5815,在步驟5811中,已經(jīng)在反轉(zhuǎn)表中將舊超級(jí)頁(yè)面標(biāo)記為無(wú)效。在步驟 5815中,將用于新超級(jí)頁(yè)面的閃存地址信息寫(xiě)入對(duì)應(yīng)于LBA的轉(zhuǎn)發(fā)表字段中。用于LBA的 轉(zhuǎn)發(fā)表?xiàng)l目現(xiàn)在指向存儲(chǔ)LBA數(shù)據(jù)的當(dāng)前有效版本的超級(jí)頁(yè)面。在步驟5816中,在反轉(zhuǎn)表中將該超級(jí)頁(yè)面標(biāo)記為有效。
84[1041]在步驟5816之后或步驟5812之后到達(dá)步驟5817。在步驟5817中,遞增超級(jí)頁(yè)
面。 在步驟5818中,將被遞增的超級(jí)頁(yè)面值與63比較。如果新遞增的超級(jí)頁(yè)面小于或等于63(步驟5818的“否”結(jié)果),則這意味著在當(dāng) 前子組中還剩余附加的超級(jí)頁(yè)面要被評(píng)估,并且處理返回到步驟5809,其中,下一超級(jí)頁(yè)面 的評(píng)估開(kāi)始。注意,超級(jí)塊元數(shù)據(jù)表中所列的超級(jí)頁(yè)面從0至63按順序被評(píng)估。如果新遞增的超級(jí)頁(yè)面大于63(步驟5818的“是”結(jié)果),則這意味著已經(jīng)到達(dá)子 組中的最后一個(gè)超級(jí)頁(yè)面。在步驟5819中,遞增子組。在步驟5820中,將新遞增的子組值與子組的數(shù)量(標(biāo)記為“η”)比較(如以上所 標(biāo)注的,子組的數(shù)量是實(shí)施相關(guān)的)。如果新遞增的子組小于或等于η (步驟5820的“否”結(jié)果),則這意味著超級(jí)塊中 還剩余附加的子組要被檢查(如上所述,超級(jí)塊在每個(gè)子組上包括相同的塊)。在該情況 中,處理返回到步驟5808,此時(shí),下一子組的超級(jí)頁(yè)面0的評(píng)估開(kāi)始。應(yīng)該理解,子組被按從 0至η的順序評(píng)估。如果新遞增的子組大于η (步驟5820的“是”結(jié)果),則這意味著已經(jīng)到達(dá)超級(jí)塊 中的最后一個(gè)塊。在步驟5821中,遞增超級(jí)塊。注意,要么從步驟5820要么從步驟5804到達(dá)該步 驟,在這兩個(gè)步驟中,當(dāng)前超級(jí)塊被置于超級(jí)塊空閑列表上。在步驟5822中,將新遞增的超級(jí)塊值與每閃存組的超級(jí)塊的總數(shù)量(標(biāo)記為“ρ”) 比較(如上所標(biāo)注的,每閃存組的超級(jí)塊的數(shù)量是實(shí)施相關(guān)的)。如果新遞增的超級(jí)塊小于或等于ρ (步驟5822的“否”結(jié)果),則這意味著該閃存 組中還剩余附加的超級(jí)塊要被評(píng)估。在該情況中,處理返回到步驟5802,此時(shí),用于下一超 級(jí)塊的超級(jí)塊元數(shù)據(jù)表被復(fù)制到級(jí)緩沖器中,覆寫(xiě)用于在先的超級(jí)塊的表,并且,處理再次 開(kāi)始用于新超級(jí)塊。如果新遞增的超級(jí)塊大于ρ (步驟5822的“是”結(jié)果),則已經(jīng)評(píng)估了最后一個(gè)超 級(jí)塊,而且,用于該閃存組的超級(jí)塊元數(shù)據(jù)表、轉(zhuǎn)發(fā)表和反轉(zhuǎn)表的恢復(fù)完成。返回到步驟5805,如果開(kāi)放和關(guān)閉標(biāo)志的分析指示超級(jí)塊在掉電時(shí)是開(kāi)放的(設(shè) 置了開(kāi)放標(biāo)志,未設(shè)置關(guān)閉標(biāo)志),則存儲(chǔ)在閃存中的用于該超級(jí)塊的超級(jí)塊元數(shù)據(jù)表在確 定哪些LBA已經(jīng)被分配給該超級(jí)塊的超級(jí)頁(yè)面時(shí)將沒(méi)有作用,這是因?yàn)?,?dāng)關(guān)閉該超級(jí)塊 時(shí),該信息僅被存儲(chǔ)到閃存中。為此原因,必須使用存儲(chǔ)在閃存中的超級(jí)頁(yè)面元數(shù)據(jù)重建超 級(jí)塊元數(shù)據(jù)表。一旦該表被重建,便可以接著使用與用于所有其它超級(jí)塊相同的方法分析 該超級(jí)塊。在步驟5823中,將當(dāng)前時(shí)間寫(xiě)入超級(jí)塊元數(shù)據(jù)表的時(shí)間戳字段3506中。雖然該時(shí) 間戳不反映關(guān)閉超級(jí)塊的時(shí)間(因?yàn)槌?jí)塊在掉電時(shí)不關(guān)閉),但當(dāng)前時(shí)間被保證晚于用 于任何其它超級(jí)塊的反轉(zhuǎn)表時(shí)間戳的值。因此,如果相同的LBA被寫(xiě)入開(kāi)放的超級(jí)塊中與 關(guān)閉的超級(jí)塊中,則用于開(kāi)放的超級(jí)塊的時(shí)間戳值將晚于用于關(guān)閉的超級(jí)塊的時(shí)間戳值, 因此,導(dǎo)致在存儲(chǔ)用于LBA的有效內(nèi)容時(shí)接受用于開(kāi)放的超級(jí)塊的超級(jí)頁(yè)面。這是正確的 結(jié)果,這是因?yàn)椋_(kāi)放的超級(jí)塊中的信息晚于在先關(guān)閉的超級(jí)塊中的信息被定義。注意,在 重建處理完成之后,開(kāi)放的超級(jí)塊將保持開(kāi)放。當(dāng)關(guān)閉超級(jí)塊時(shí),超級(jí)塊元數(shù)據(jù)表時(shí)間戳值將在該表被存回到閃存中之前被關(guān)閉時(shí)間覆寫(xiě),并因此將是正確的。在步驟5824中,將子組設(shè)為0,因此設(shè)立通過(guò)超級(jí)塊的所有塊(每個(gè)子組一個(gè))的 循環(huán)。在步驟5825中,將超級(jí)頁(yè)面設(shè)為0,因此設(shè)立穿過(guò)子組中的所有超級(jí)頁(yè)面的循環(huán)。在步驟5826中,將用于當(dāng)前超級(jí)頁(yè)面的超級(jí)頁(yè)面元數(shù)據(jù)1401從閃存復(fù)制到級(jí)緩 沖器中。 [1057]在步驟5827中,進(jìn)行檢查,以確定超級(jí)頁(yè)面是否在掉電前被寫(xiě)入。已經(jīng)被寫(xiě)的超 級(jí)頁(yè)面將包括有效元數(shù)據(jù)。如果超級(jí)頁(yè)面已被寫(xiě)入(步驟5827的“是”結(jié)果),則在步驟5828中,超級(jí)頁(yè)面元 數(shù)據(jù)被用于填充超級(jí)塊元數(shù)據(jù)表中用于該超級(jí)頁(yè)面的條目。S頁(yè)面索引字段1402被用于超 級(jí)塊元數(shù)據(jù)表的LBA字段。時(shí)間戳字段1403被用于超級(jí)塊元數(shù)據(jù)表的超級(jí)頁(yè)面時(shí)間戳字 段。注意,用于該超級(jí)頁(yè)面的超級(jí)塊元數(shù)據(jù)缺陷字段已經(jīng)包含有效信息,這是因?yàn)椋毕菪?息被保持在用于擦除的超級(jí)塊的元數(shù)據(jù)表的閃存版本中,并因此在用于開(kāi)放的超級(jí)塊被從 閃存復(fù)制到級(jí)緩沖器時(shí)是有效的。步驟5829-5832與步驟5817-5820相同地操作。如上所解釋?zhuān)@些步驟控制循環(huán) 的處理,并確保每個(gè)超級(jí)塊的每個(gè)超級(jí)頁(yè)面被評(píng)估。注意,如果當(dāng)前超級(jí)頁(yè)面未被寫(xiě)入(步驟5827的“否”結(jié)果),則處理跳到步驟 5831,此時(shí),遞增子組。因?yàn)樵诿總€(gè)子組上按順序分配超級(jí)塊的超級(jí)頁(yè)面,所以,如果子組上 的一超級(jí)頁(yè)面未被寫(xiě)入,則這意味著該子組上隨后的超級(jí)頁(yè)面也未被寫(xiě)入。一旦已經(jīng)評(píng)估了超級(jí)塊元數(shù)據(jù)表中的最后一個(gè)塊(步驟5832的“是”結(jié)果),用于 該表的重建處理完成,并且處理返回到步驟5806,此時(shí),用于元數(shù)據(jù)表的時(shí)間戳信息被復(fù)制 到反轉(zhuǎn)表中,因此確保該超級(jí)塊中的超級(jí)頁(yè)面在發(fā)現(xiàn)與任何其它超級(jí)塊沖突的情況下始終 被認(rèn)為是有效的。然后,處理對(duì)于該超級(jí)塊從步驟5806繼續(xù)。VI. MLC 閃存雖然這里描述的大多數(shù)實(shí)施例使用SLC閃存,但SSD控制器106很好地適用于MLC 閃存的適用。MLC閃存每個(gè)閃存單元存儲(chǔ)多個(gè)比特,并因此能夠存儲(chǔ)更大量的數(shù)據(jù)。MCL還 對(duì)每單元存儲(chǔ)量具有更低的成本。然而,MLC遭受幾個(gè)使其難以在高性能、高穩(wěn)定性應(yīng)用(諸如數(shù)據(jù)中心)中使用的 問(wèn)題。首先,MLC比SLC慢。如上所述,MLC寫(xiě)可能比SLC寫(xiě)多花費(fèi)100微秒,并且某些MLC
甚至更慢。第二,MLC閃存比SLC傾向具有更短的壽命。一般地,SLC閃存被指定處理100000 個(gè)擦除周期而不失敗,而目前的MLC閃存技術(shù)僅被指定處理10000個(gè)擦除周期。第三,MLC閃存比SLC承受更高的數(shù)據(jù)錯(cuò)誤率。SSD控制器106被設(shè)計(jì)為與MLC閃存一起在非常高性能水平上操作,并且對(duì)控制器 軟件或硬件具有最小的改變或無(wú)改變。首先,如上聯(lián)系圖44所解釋?zhuān)赟SD控制器106中使用的并行流水線(xiàn)掩蓋寫(xiě)等待 時(shí)間,從而,雖然MLC寫(xiě)比SLC寫(xiě)花費(fèi)更長(zhǎng)的時(shí)間,但經(jīng)過(guò)一系列的寫(xiě),該差別的大部分被掩 蓋,這是因?yàn)?,SSD控制器106可以將寫(xiě)分解為頁(yè)面大小的組塊,并且,以并行和重疊的方式 處理這些組塊。[1069]第二,SSD控制器106的閃存結(jié)構(gòu)傾向在相對(duì)較大的存儲(chǔ)空間中到處移動(dòng)新寫(xiě)的 數(shù)據(jù),由此最小化擦除周期限制的影響,甚至不使用特殊的磨損均衡技術(shù)。如上所述,對(duì)不 同的超級(jí)頁(yè)面而不是保持現(xiàn)有數(shù)據(jù)的超級(jí)頁(yè)面進(jìn)行新的寫(xiě),并且,新超級(jí)頁(yè)面可以與初始 超級(jí)頁(yè)面在不同的塊上。這傾向在閃存組內(nèi)到處移動(dòng)數(shù)據(jù),從而,如果特定數(shù)據(jù)元素相對(duì)頻 繁地被擦除,則這些擦除將橫跨大量物理閃存頁(yè)面分散。在不同的實(shí)施例中,SSD控制器106可以使用顯性的磨損均衡技術(shù)。例如,在識(shí)別 要經(jīng)受垃圾收集的超級(jí)塊時(shí),SSD控制器106可以?xún)?yōu)先選擇帶有在擦除計(jì)數(shù)字段3507中 (見(jiàn)圖35)識(shí)別的相對(duì)低的擦除計(jì)數(shù)的超級(jí)塊。用于每個(gè)超級(jí)塊的擦除計(jì)數(shù)信息可以以與 時(shí)間戳字段3405類(lèi)似的方式被存儲(chǔ)在反轉(zhuǎn)表的行中。SSD控制器106可以使用擦除計(jì)數(shù) 信息來(lái)打破帶有相同數(shù)量的有效超級(jí)頁(yè)面的超級(jí)塊之間的垃圾收集平局(見(jiàn)聯(lián)系圖56的 討論),或者可以使用擦除計(jì)數(shù)信息將超級(jí)塊分為多類(lèi),具有接近危險(xiǎn)區(qū)(例如,5000次擦 除)的擦除計(jì)數(shù)的超級(jí)塊被優(yōu)先選擇為“垃圾收集”超級(jí)塊(如上聯(lián)系圖56所述,在一個(gè) 實(shí)施例中,來(lái)自與垃圾收集操作有關(guān)的、正被擦除的超級(jí)塊的有效數(shù)據(jù)被存儲(chǔ)在垃圾收集 超級(jí)塊中,導(dǎo)致垃圾收集超級(jí)塊上相對(duì)較少的數(shù)據(jù)無(wú)效,從而該超級(jí)塊的擦除將傾向相對(duì) 較不頻繁地發(fā)生)。類(lèi)似地,如上所述,可以識(shí)別帶有超過(guò)閾值的擦除計(jì)數(shù)值的超級(jí)塊,以便 它們被優(yōu)先選擇用于常規(guī)的垃圾收集,由此降低對(duì)這種超級(jí)塊的額外磨損。雖然本發(fā)明已被描述的各個(gè)方面的實(shí)施例是優(yōu)選實(shí)施例,但本領(lǐng)域的技術(shù)人員將 理解,它們的變化也是可以的。因此,本發(fā)明被給予所附權(quán)利要求的全部范圍內(nèi)的保護(hù)。
權(quán)利要求
一種閃存控制器,包括多個(gè)處理器,每個(gè)處理器包括寄存器、ALU和內(nèi)部存儲(chǔ)器;多個(gè)存儲(chǔ)器,所述存儲(chǔ)器中的至少一些包含數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)包括與存儲(chǔ)器命令相關(guān)的元數(shù)據(jù),所述存儲(chǔ)器中的至少一些包含用于所述多個(gè)處理器的工作隊(duì)列;交叉切換器,其將所述處理器與所述存儲(chǔ)器連接,所述交叉切換器包括一組處理器端口,其對(duì)于每個(gè)處理器包括一個(gè)端口;以及一組存儲(chǔ)器端口,其對(duì)于每個(gè)存儲(chǔ)器包括一個(gè)端口;以及內(nèi)部切換機(jī)制,其允許任何處理器端口與任何存儲(chǔ)器端口連接,但不允許處理器端口與另一處理器端口連接、或存儲(chǔ)器端口與另一存儲(chǔ)器端口連接;由此,處理器通過(guò)使用所述交叉切換器來(lái)在與另一處理器關(guān)聯(lián)的工作隊(duì)列上放置任務(wù),與另一處理器通信。
2.如權(quán)利要求1所述的閃存控制器,還包括仲裁器,其在多于一個(gè)處理器尋求對(duì)交叉切換器存儲(chǔ)器端口的訪(fǎng)問(wèn)的情況下,控制對(duì) 所述端口的訪(fǎng)問(wèn),所述仲裁器控制交叉切換器內(nèi)部切換電路,以提供對(duì)已經(jīng)贏得仲裁的處 理器的訪(fǎng)問(wèn)。
3.如權(quán)利要求1所述的閃存控制器,其中所述工作隊(duì)列中的至少一個(gè)包含指向所述數(shù)據(jù)結(jié)構(gòu)之一的指針。
4.如權(quán)利要求3所述的閃存控制器,其中所述存儲(chǔ)器中的至少一個(gè)包含指向數(shù)據(jù)結(jié)構(gòu)的指針,所述數(shù)據(jù)結(jié)構(gòu)被格式化來(lái)存儲(chǔ)元 數(shù)據(jù),但包括當(dāng)前未存儲(chǔ)有效元數(shù)據(jù)的一個(gè)或多個(gè)字段。
5.如權(quán)利要求1所述的閃存控制器,其中至少一個(gè)工作隊(duì)列被寄存器組控制,所述寄存器組包括存儲(chǔ)信息的第一寄存器,根據(jù) 所述信息,可以將空的工作隊(duì)列與至少包含一個(gè)任務(wù)的工作隊(duì)列區(qū)分開(kāi);并且所述控制器還包括連接到處理器的信號(hào),所述信號(hào)由所述第一寄存器控制,所述信號(hào) 由空的工作隊(duì)列與包含任務(wù)的工作隊(duì)列之間的轉(zhuǎn)變觸發(fā),所述信號(hào)引起所述處理器終止休 眠模式。
6.一種操作閃存控制器的方法,包括以下步驟(a)接收指定讀或?qū)懸约斑壿嫷刂返闹鳈C(jī)命令;(b)創(chuàng)建與所述主機(jī)命令相關(guān)的元數(shù)據(jù)結(jié)構(gòu),所述結(jié)構(gòu)指定所述主機(jī)命令、以及所述邏 輯地址、或與所述邏輯地址相關(guān)的地址;(c)在第一存儲(chǔ)器或存儲(chǔ)器區(qū)域中存儲(chǔ)所述元數(shù)據(jù)結(jié)構(gòu);(d)第一處理器訪(fǎng)問(wèn)第二存儲(chǔ)器或存儲(chǔ)器區(qū)域,所述第二存儲(chǔ)器包含與第二處理器關(guān) 聯(lián)的排序的工作列表;(e)所述第一處理器將指向所述元數(shù)據(jù)結(jié)構(gòu)的指針寫(xiě)入所述工作列表上;以及(f)作為響應(yīng),所述第二處理器執(zhí)行與所述元數(shù)據(jù)結(jié)構(gòu)相關(guān)的任務(wù)。
7.如權(quán)利要求6所述的方法,其中步驟(d)還包括所述第一處理器訪(fǎng)問(wèn)交叉切換器,并連接到與所述第二存儲(chǔ)器關(guān)聯(lián) 的端口。
8.如權(quán)利要求6所述的方法,其中步驟(f)中的第二處理器的任務(wù)包括以下子步驟(i)訪(fǎng)問(wèn)所述第一存儲(chǔ)器或存儲(chǔ)器區(qū)域,并且將所述元數(shù)據(jù)結(jié)構(gòu)復(fù)制 到所述第二處理器內(nèi)部的存儲(chǔ)器中。
9.如權(quán)利要求8所述的方法,其中步驟(f)中的訪(fǎng)問(wèn)所述第一存儲(chǔ)器或存儲(chǔ)器區(qū)域的動(dòng)作包括所述第二處理器訪(fǎng)問(wèn)交 叉切換器,并連接到與所述第一存儲(chǔ)器或存儲(chǔ)器區(qū)域關(guān)聯(lián)的端口。
10.如權(quán)利要求8所述的方法,其中步驟(f)中的第二處理器的任務(wù)包括以下附加子步驟( )在所述元數(shù)據(jù)結(jié)構(gòu)被存儲(chǔ)在所述第二處理器的內(nèi)部存儲(chǔ)器中的同時(shí),修改所述元 數(shù)據(jù)結(jié)構(gòu)的內(nèi)容;以及(iii)將修改的元數(shù)據(jù)結(jié)構(gòu)復(fù)制到所述第一存儲(chǔ)器中。
11.一種閃存控制器,包括交叉切換器,其將多個(gè)處理器與多個(gè)存儲(chǔ)器連接,所述交叉切換器包括仲裁器,所述仲 裁器基于仲裁的結(jié)果分配所述交叉切換器上的存儲(chǔ)器端口的控制; 所述多個(gè)存儲(chǔ)器,其存儲(chǔ)多個(gè)填充的元數(shù)據(jù)結(jié)構(gòu),所述元數(shù)據(jù)結(jié)構(gòu)與主機(jī)命令相關(guān); 指向空閑元數(shù)據(jù)結(jié)構(gòu)的指針的列表;以及第一和第二工作列表,其各自包含指向填充的元數(shù)據(jù)結(jié)構(gòu)的指針,每個(gè)工作列表與單 獨(dú)的處理器關(guān)聯(lián)。
12.如權(quán)利要求11所述的控制器,還包括第一處理器和第二處理器,每個(gè)處理器包括ALU、寄存器和內(nèi)部處理器存儲(chǔ)器,所述第 一處理器的內(nèi)部處理器存儲(chǔ)器存儲(chǔ)與第一主機(jī)命令相關(guān)的第一元數(shù)據(jù)結(jié)構(gòu),所述第二處理 器的內(nèi)部處理器存儲(chǔ)器存儲(chǔ)第二元數(shù)據(jù)結(jié)構(gòu)。
13.如權(quán)利要求12所述的控制器,其中所述第一工作列表與所述第一處理器關(guān)聯(lián),所述第二工作列表與所述第二處理器關(guān)聯(lián);在所述第一工作列表上的指針指向第三元數(shù)據(jù)結(jié)構(gòu),所述第三元數(shù)據(jù)結(jié)構(gòu)被存儲(chǔ)在控 制器存儲(chǔ)器中,所述第三元數(shù)據(jù)結(jié)構(gòu)與所述第一元數(shù)據(jù)結(jié)構(gòu)相關(guān);并且在所述第二工作列表上的指針指向第四元數(shù)據(jù)結(jié)構(gòu),所述第四元數(shù)據(jù)結(jié)構(gòu)被存儲(chǔ)在控 制器存儲(chǔ)器中,所述第四元數(shù)據(jù)結(jié)構(gòu)與所述第二元數(shù)據(jù)結(jié)構(gòu)相關(guān)。
14.如權(quán)利要求13所述的控制器,其中所述第一元數(shù)據(jù)結(jié)構(gòu)與所述第二元數(shù)據(jù)結(jié)構(gòu)是第一類(lèi)型; 所述第三元數(shù)據(jù)結(jié)構(gòu)與所述第四元數(shù)據(jù)結(jié)構(gòu)是第二類(lèi)型;并且 所述第一元數(shù)據(jù)結(jié)構(gòu)包含指向所述第三元數(shù)據(jù)結(jié)構(gòu)的指針,所述第二元數(shù)據(jù)結(jié)構(gòu)包含 指向所述第四元數(shù)據(jù)結(jié)構(gòu)的指針。
15.如權(quán)利要求14所述的控制器,其中 所述第三元數(shù)據(jù)結(jié)構(gòu)包含第一邏輯地址; 所述第四元數(shù)據(jù)結(jié)構(gòu)包含第二邏輯地址;所述第一元數(shù)據(jù)結(jié)構(gòu)包含與所述第一邏輯地址相關(guān)的第一物理地址;并且 所述第二元數(shù)據(jù)結(jié)構(gòu)包含與所述第二邏輯地址相關(guān)的第二物理地址。
16.一種操作閃存控制器的方法,所述閃存控制器包括第一處理器和第二處理器、交叉 切換器、以及第一和第二控制器存儲(chǔ)器,所述方法包括以下步驟(a)所述第一處理器在所述第一處理器內(nèi)部的處理器存儲(chǔ)器中存儲(chǔ)第一元數(shù)據(jù)結(jié)構(gòu);(b)所述第一處理器訪(fǎng)問(wèn)與所述第一控制器存儲(chǔ)器關(guān)聯(lián)的第一交叉切換器端口;(c)所述第一處理器將所述第一元數(shù)據(jù)結(jié)構(gòu)復(fù)制到所述第一控制器存儲(chǔ)器中;(d)所述第一處理器訪(fǎng)問(wèn)與所述第二控制器存儲(chǔ)器關(guān)聯(lián)的第二交叉切換器端口;(e)所述第一處理器將指向所述第一元數(shù)據(jù)結(jié)構(gòu)的指針?lè)胖迷诒淮鎯?chǔ)在所述第二控制 器存儲(chǔ)器中的工作列表中,所述工作列表與所述第二處理器關(guān)聯(lián);(f)所述第二處理器訪(fǎng)問(wèn)所述第一交叉切換器端口;(g)所述第二處理器將所述第一元數(shù)據(jù)結(jié)構(gòu)從所述第一控制器存儲(chǔ)器復(fù)制到所述第二 處理器內(nèi)部的處理器存儲(chǔ)器中;以及(h)所述第二處理器修改所述第一元數(shù)據(jù)結(jié)構(gòu)。
17.如權(quán)利要求16所述的方法,還包括(i)所述第二處理器填充第二元數(shù)據(jù)結(jié)構(gòu)的字段,所述第二元數(shù)據(jù)結(jié)構(gòu)位于所述第二 處理器內(nèi)部的處理器存儲(chǔ)器中;以及步驟(h)中的修改包括向所述第一元數(shù)據(jù)結(jié)構(gòu)加入指向所述第二元數(shù)據(jù)結(jié)構(gòu)的指針。
18.如權(quán)利要求17所述的方法,其中 所述第一元數(shù)據(jù)結(jié)構(gòu)包括邏輯地址;并且步驟(i)包括將第一物理閃存地址置于第二元數(shù)據(jù)結(jié)構(gòu)字段中,所述第一物理閃存 地址與所述邏輯地址相關(guān)。
19.如權(quán)利要求18所述的方法,還包括(j)所述第二處理器填充第三元數(shù)據(jù)結(jié)構(gòu)的字段,所述第三元數(shù)據(jù)結(jié)構(gòu)位于所述第二 處理器內(nèi)部的處理器存儲(chǔ)器中;以及步驟(h)中的修改包括向所述第一元數(shù)據(jù)結(jié)構(gòu)加入指向所述第三元數(shù)據(jù)結(jié)構(gòu)的指針。
20.如權(quán)利要求19所述的方法,其中步驟(j)包括將第二物理閃存地址置于第三元數(shù)據(jù)結(jié)構(gòu)字段中,所述第二物理閃存 地址與所述邏輯地址相關(guān)。
21.—種閃存控制器,包括第一處理器和第二處理器,每個(gè)處理器包括寄存器、ALU以及內(nèi)部處理器存儲(chǔ)器; 第一易失性存儲(chǔ)器,其包含第一工作列表,所述第一工作列表與所述第一處理器關(guān)聯(lián);第二易失性存儲(chǔ)器,其包含第二工作列表,所述第二工作列表與所述第二處理器關(guān)聯(lián);第三易失性存儲(chǔ)器,其包含與第一主機(jī)命令相關(guān)的第一元數(shù)據(jù)結(jié)構(gòu); 第四易失性存儲(chǔ)器,其包含與第二主機(jī)命令相關(guān)的第二元數(shù)據(jù)結(jié)構(gòu); 交叉切換器,其包括各自連接到處理器的一組處理器端口,其包括連接到所述第一處理器的第一處理器端口、以及連接到所述第二處理器的第二處理器端口 ;各自連接到易失性存儲(chǔ)器的一組存儲(chǔ)器端口,其包括連接到所述第一易失性存儲(chǔ)器的 第一存儲(chǔ)器端口、連接到所述第二易失性存儲(chǔ)器的第二存儲(chǔ)器端口、連接到所述第三易失 性存儲(chǔ)器的第三存儲(chǔ)器端口、以及連接到所述第四易失性存儲(chǔ)器的第四存儲(chǔ)器端口 ;所述交叉切換器包括內(nèi)部電路,其選擇性地將所述處理器端口之一連接到所述存儲(chǔ)器 端□之一。
22.如權(quán)利要求21所述的控制器,其中所述第一工作列表包含與所述第一主機(jī)命令相關(guān)的第一信息,并且,所述第二工作列 表包含與所述第二主機(jī)命令相關(guān)的第二信息。
23.如權(quán)利要求22所述的控制器,其中所述第一信息構(gòu)成指向所述第一元數(shù)據(jù)結(jié)構(gòu)的指針;以及所述第二信息構(gòu)成指向所述第二元數(shù)據(jù)結(jié)構(gòu)的指針。
24.如權(quán)利要求23所述的控制器,其中所述第一工作列表包括指向第三元數(shù)據(jù)結(jié)構(gòu)的指針,所述第三元數(shù)據(jù)結(jié)構(gòu)與所述第二 主機(jī)命令相關(guān)。
25.如權(quán)利要求23所述的控制器,其中所述第一元數(shù)據(jù)結(jié)構(gòu)和所述第二元數(shù)據(jù)結(jié)構(gòu)包括邏輯地址,但不包括物理地址;并且所述第一處理器的內(nèi)部處理器存儲(chǔ)器包括第四元數(shù)據(jù)結(jié)構(gòu),所述第四元數(shù)據(jù)結(jié)構(gòu)包括 物理地址。
全文摘要
提供了一種設(shè)計(jì)為與閃存存儲(chǔ)模塊一起使用的控制器,包括設(shè)計(jì)來(lái)將多個(gè)內(nèi)部處理器與包括多個(gè)內(nèi)部存儲(chǔ)器的各種內(nèi)部資源連接的交叉切換器。存儲(chǔ)器包含用于處理器的工作列表。在一個(gè)實(shí)施例中,處理器通過(guò)使用交叉切換器在其它處理器的工作列表上放置任務(wù)來(lái)通信。
文檔編號(hào)G06F12/00GK101965559SQ200880127623
公開(kāi)日2011年2月2日 申請(qǐng)日期2008年12月23日 優(yōu)先權(quán)日2007年12月27日
發(fā)明者道格拉斯·普林斯, 阿倫·奧爾布里科 申請(qǐng)人:普萊恩特技術(shù)股份有限公司