
2.1.1 存儲(chǔ)區(qū)模塊
為了實(shí)現(xiàn)并行和流水技術(shù),整個(gè)存儲(chǔ)區(qū)模塊按如下方式構(gòu)成:由4片K9K1G08U0M型三星閃存芯片組成一個(gè)子模塊,8個(gè)子模塊組成8級流水的大模塊,而這個(gè)大模塊即是整個(gè)存儲(chǔ)區(qū),其總?cè)萘繛椋常玻牵猓椋簟o效塊備份的冗余區(qū)可以設(shè)在每個(gè)子模塊內(nèi)部,即從子模塊的每塊芯片中預(yù)留出一部分空間。這種模塊化管理的方式既便于系統(tǒng)擴(kuò)展,又可以在不影響系統(tǒng)正常工作的情況下旁路已損壞的存儲(chǔ)塊。
2.1.2 接口模塊
系統(tǒng)與外部的接口有兩個(gè)。一是與CPU的接口,主要完成系統(tǒng)的初始化、外部命令和地址的輸入以及內(nèi)部狀態(tài)參數(shù)的輸出,同時(shí)CPU 還要對存儲(chǔ)區(qū)完成管理:無效塊的管理、地址的譯碼和映射等;二是與外部高速數(shù)據(jù)源的接口,主要完成外部高速數(shù)據(jù)的接收和發(fā)送。這里選用了1394高速總線作為數(shù)據(jù)源總線。
2.1.3 數(shù)據(jù)緩沖模塊
這一模塊包括數(shù)據(jù)輸入FIFO、數(shù)據(jù)輸出FIFO和一個(gè)作為數(shù)據(jù)備份的SRAM。由于閃存的寫入速度比較慢,如果沒有數(shù)據(jù)緩沖區(qū),外部的高速數(shù)據(jù)很有可能會(huì)丟失,而且數(shù)據(jù)回放時(shí)也需要一個(gè)緩沖區(qū)使內(nèi)外的數(shù)據(jù)率匹配?紤]到編程出錯(cuò)時(shí)需要重新加載數(shù)據(jù),按照流水線的工作方式,如果不進(jìn)行數(shù)據(jù)備份,可能會(huì)出現(xiàn)出錯(cuò)時(shí)的數(shù)據(jù)丟失,因此選用了一個(gè)SRAM進(jìn)行數(shù)據(jù)備份。當(dāng)將輸入FIFO的數(shù)據(jù)寫入FLASH時(shí),同時(shí)也將數(shù)據(jù)寫入到SRAM進(jìn)行備份;當(dāng)需要重新編程時(shí),再從SRAM中將相應(yīng)的備份數(shù)據(jù)重新寫入FLASH。
2.1.4 主控模塊
這一模塊完成整個(gè)存儲(chǔ)器系統(tǒng)的內(nèi)部控制,是核心控制機(jī)構(gòu),連接著存儲(chǔ)區(qū)、數(shù)據(jù)緩沖以及外部接口三個(gè)模塊,完成它們之間的數(shù)據(jù)、命令、地址、狀態(tài)的相互傳遞、轉(zhuǎn)換和處理。主控模塊又分為三個(gè)子模塊,即存儲(chǔ)區(qū)控制子模塊、存儲(chǔ)區(qū)數(shù)據(jù)子模塊和1394接口控制子模塊,分別由三片FPGA(現(xiàn)場可編程邏輯陣列)完成。
3 系統(tǒng)的基本工作原理
下面以閃存的寫(編程)操作為線索,闡述系統(tǒng)的基本工作原理。
3.1 寫操作的準(zhǔn)備和啟動(dòng)
1394高速總線上的串行數(shù)據(jù)通過一定的接口芯片變換成并行數(shù)據(jù)。當(dāng)大容量存儲(chǔ)器接收到外部1394高速總線上的數(shù)據(jù)存儲(chǔ)握手信號時(shí),1394接口控制子模塊利用握手信號產(chǎn)生一定的時(shí)鐘和控制信號,控制高速數(shù)據(jù)緩存入32位的輸入FIFO。當(dāng)輸入FIFO的存儲(chǔ)量達(dá)到一次8級流水運(yùn)行的數(shù)據(jù)量時(shí),就向CPU發(fā)出中斷,申請寫操作啟動(dòng)。
圖4 頁編程操作時(shí)序圖
存儲(chǔ)區(qū)的尋址采用內(nèi)存尋址方式,即為FLASH存儲(chǔ)區(qū)分配一段內(nèi)存空間,CPU象訪問內(nèi)存一樣對其進(jìn)行尋址,大小為2M,共21根地址線,其中高3位是子模塊選擇,選擇8級流水中的某一級;低18位是子模塊的每塊芯片的頁(行)地址。對于芯片內(nèi)的列地址,由于向每一頁寫入數(shù)據(jù)時(shí),總是從頁的起始處開始寫,即列地址(頁內(nèi)編程起始地址)是固定的,因此可以直接由FPGA給出。當(dāng)CPU接收到寫操作啟動(dòng)的中斷申請時(shí),給出寫操作命令,并進(jìn)行地址譯碼。存儲(chǔ)區(qū)控制子模塊將CPU給出的命令和地址經(jīng)過一定的邏輯轉(zhuǎn)換成片選、命令、地址及控制信號,依次對8級存儲(chǔ)子模塊進(jìn)行片選并完成各級命令和內(nèi)部地址的加載工作。然后再由存儲(chǔ)區(qū)控制子模塊產(chǎn)生一定的控制信號,控制輸入FIFO啟動(dòng)對8級存儲(chǔ)子模塊的數(shù)據(jù)加載工作:首先對第一級進(jìn)行片選,數(shù)據(jù)流由輸入FIFO經(jīng)存儲(chǔ)區(qū)數(shù)據(jù)子模塊驅(qū)動(dòng)后輸入第一級存儲(chǔ)子模塊,經(jīng)過512個(gè)寫周期后(頁有效數(shù)據(jù)),完成對四片并行的FLASH芯片的頁加載,加載完成后由存儲(chǔ)區(qū)控制子模塊給出自動(dòng)編程的起始指令10H,第一級子模塊的四片芯片就開始將加載到頁寄存器的數(shù)據(jù)寫入到芯片內(nèi)部,進(jìn)行自動(dòng)編程工作。頁編程操作時(shí)序圖如圖4所示,這時(shí)它們的片選可以無效。然后使第二級片選信號有效,開始對第二級進(jìn)行數(shù)據(jù)加載。依次下去,完成8級存儲(chǔ)子模塊的數(shù)據(jù)加載。
3.3 檢驗(yàn)寫流水操作是否成功
第一級存儲(chǔ)子模塊在完成了數(shù)據(jù)加載后開始自動(dòng)編程,待到8級的數(shù)據(jù)加載都完成后,其自動(dòng)編程已接近尾聲。此時(shí)不斷檢測該級四片芯片的忙/閑端口,一旦它們都處于“閑”狀態(tài)時(shí),說明自動(dòng)編程都已經(jīng)結(jié)束。這時(shí)由存儲(chǔ)區(qū)控制子模塊的控制邏輯產(chǎn)生片選信號,選通第一級存儲(chǔ)子模塊并發(fā)讀狀態(tài)命令70H,通過采樣四片芯片的I/O端口的“0”狀態(tài)來檢測編程是否成功,并將檢測結(jié)果鎖存進(jìn)FPGA內(nèi)部的寄存器;然后按同樣的方式對第二級存儲(chǔ)子模塊進(jìn)行檢測,依次下去,直到“記錄”下8級存儲(chǔ)子模塊的編程成功與否的狀態(tài)信息后,向CPU申請中斷并將這些狀態(tài)值返回給CPU。CPU則根據(jù)這些狀態(tài)值更新無效塊映射表,并將無效塊映射到冗余區(qū),對編程出錯(cuò)的存儲(chǔ)子模塊重新編程。重新編程與正常編程的工作原理是一致的 只不過數(shù)據(jù)是由SRAM輸出給FLASH,且不能進(jìn)行流水操作。
4 采用并行及流水技術(shù)后速率的估算
根據(jù)上述實(shí)現(xiàn)方案以及三星閃存芯片的時(shí)序和各項(xiàng)性能指標(biāo)參數(shù),可以對采用四片并行和8級流水技術(shù)后的寫速率做一個(gè)理論上的大致估算,整個(gè)流水操作完成所需的時(shí)間應(yīng)以最后一級流水完成的時(shí)間為準(zhǔn)。估算方法如下:令FLASH芯片中一頁的數(shù)據(jù)量為a 并行操作的芯片數(shù)為b 流水的總級數(shù)為c,命令、地址和數(shù)據(jù)的加載時(shí)間為d 芯片自動(dòng)編程時(shí)間為e,檢測時(shí)間為f,需重新編程的級數(shù)為g,正常寫速率為S1,重新寫入時(shí)的寫速率為S2,則:
S1=(a×b×c)/(d×c+e+f)
S2=(a×b×c)/[(d×c+e+f)+(d+e+f)×g]
采用并行和流水技術(shù)前后的寫速率比較如表1所示?梢钥闯,采用該方案后的速率較采用前有了大幅度的提高。即使考慮到硬軟件的延遲及其它一些因素,這個(gè)速率的提升仍然是可觀的,說明這個(gè)設(shè)計(jì)方案是可行的。
表1 采用并行和流水技術(shù)前后的寫速率比較





