?

基于MCU的Flash預取加速控制器設計與實現

2018-01-23 06:29馮海英范學仕
電子與封裝 2018年1期
關鍵詞:寄存器時序時鐘

馮海英,范學仕

(中科芯集成電路股份有限公司,江蘇無錫 214072)

1 引言

隨著智能可穿戴設備、智能硬件的普及以及物聯網的興起,MCU在消費電子、工業控制、醫療設備以及人工智能等領域得到了廣泛應用[1]。為了減少外圍分立器件,增加通用型,MCU通常采用內嵌非易失性存儲器(Non-Volatile Memory,NVM)保存程序和少量數據,而Flash作為典型的NVM,具有體積小、成本低、高靈活性、多次擦除編程等特點,可以滿足高速訪問和系統安全性等不同需求,逐漸成為MCU存儲器的首選[2],因此MCU市場的蓬勃發展使得嵌入式Flash得到了越來越廣泛的研究和應用[3]。十多年來,Flash以高于摩爾定律的增長速度高速發展。目前,Flash已成為集成電路(Integrate Circuit,IC)技術發展的主要驅動器,已和傳統的動態隨機存取存儲器(Dynamic Random Access Memory,DRAM)、靜態隨機存取存儲器(Static Random Access Memory,SRAM)一起構成IC存儲的三大支柱產業[4]。

嵌入式Flash特定的接口協議與標準的總線接口協議不同,不能直接集成到芯片中。因此需要設計控制器實現兩種接口協議的轉換,完成Flash的基本操作[5]。同時,與處理器較高的運行頻率相比,嵌入式Flash屬于低速存儲設備。自20世紀80年代起,處理器性能以每年60%的速率提升,而存儲器訪問時間的改善速率每年大約為7%[6]。相對于處理器可以通過指令集并行[7]、超標量設計[8]和大量使用寄存器提高自身性能,而Flash性能的提升只能依賴于工藝改良等方法[9]。當前大多數MCU可以工作在100 MHz以上的系統頻率上,而Flash的讀取速度大多在30~60 ns之間。例如本文使用的Flash最大讀取速度為40 ns,理想情況最高速率為25 MHz;UMC推出的UM055EFLLP128KX032CAA的最大速度為40 ns;華虹公司推出的HKEFLYTxxK01系列片上Flash,最大讀取速度為63 ns,理想最高頻率為 15.9 MHz[10~11]。Flash與處理器之間的巨大速度差異會大大降低處理器取指效率,制約系統整體性能。因此設計帶預取加速的Flash控制器至關重要。

本文基于預取和緩存原理,采用位寬擴展技術和改進預取技術相結合的方式,設計了具有預取加速功能的Flash控制器,完成Flash特定接口協議與AHB協議的轉換,提高了取指效率,提升系統性能。本文首先詳細分析了當前的Flash研究背景及現狀,隨后對Flash的接口協議進行了闡述,接著重點介紹了預取加速控制器的設計思路與實現方法,最后通過仿真數據和實測數據證明該設計的可行性。

2 AHB和Flash接口協議

2.1 AHB總線協議

作為SoC片上高速總線,AMBA AHB主要負責對帶寬有較高要求的IP(Intellectual Property)的互連。AHB可以支持多主機、請求仲裁、突發傳輸、分離操作、流水操作等復雜操作,以滿足中央處理器(Central Processing Unit,CPU)、直接內存存?。―irect Memory Access,DMA)控制器、片內存儲器、外部存儲器接口等高速設備之間的帶寬要求。而系統的大部分低速外設則連接在高級外設總線(Advanced Peripheral Bus,APB)上,系統總線和外設總線之間使用橋接器進行連接[12~14]。本文的嵌入式Flash預取加速控制器屬于AHB從機。

2.2 Flash接口協議

本文所選用的嵌入式Flash為ISSI公司推出的64位PFXXXXX,它包括128 kB的主存儲區和3 kB的信息區,支持編程、頁擦除以及整片擦除,主要由地址緩存單元、地址解碼單元、邏輯控制單元、高電壓發生單元、輸入輸出驅動單元和存儲陣列單元組成,其整體框架如圖1所示。

圖1 嵌入式Flash整體架構

其關鍵信號介紹如下。

(1)CS:Flash 片選信號,高有效;(2)IFREN:信息區選擇信號,高有效;(3)AE:地址使能信號,高有效;(4)OE:輸出使能信號,高有效;(5)ADDR/DIN/DOUT:地址信號/寫入數據/讀出數據;(6)PROG/SERA/MASE:編程信號/頁擦除信號/整片擦除信號,在AE上升沿有效,Flash開始編程/頁擦除/整片擦除操作;(7)NVSTR:定義非易失性存儲周期,高有效,Flash 處于正在編程/擦除狀態;(8)TBIT:編程/擦除結束指示信號。

與SRAM不同,嵌入式Flash屬于異步低速存儲設備,本文選用的Flash最快讀取速度為40 ns,編程操作時間20 μs,頁擦除時間2 ms,整片擦除時間10 ms。

圖2為Flash讀取訪問時序圖。OE信號是數據輸出的使能信號,在讀取Flash的過程中需維持高電平狀態,而PORG、SERA、MASE、NVSTR必須為低。AE信號是地址的使能信號,在一次讀過程中,AE需要經過低-高-低的變化,tAAD≥40 ns,tAE≥10 ns,因此 Flash的最高讀速率為25 MHz。

圖2 Flash讀取訪問時序

圖3為Flash編程時序圖。PROG信號觸發編程操作,AE為地址使能信號,TBIT信號為Flash輸出信號,下降沿表示編程操作結束,NVSTR用來控制高電壓產生。

圖3 Flash編程操作時序

圖4 為Flash頁擦除時序圖,圖5為Flash整片擦除時序圖。由SERA/MASE觸發擦除操作,TBIT下降沿表示擦除操作結束,NVSTR用來控制高低壓產生。

圖4 Flash頁擦除時序

圖5 Flash整片擦除時序

3 Flash預取加速控制器設計

3.1 Flash控制器總體架構

嵌入式Flash預取加速控制器整體架構如圖6所示,其一端作為從機連接AHB總線,另一端連接64位嵌入式Flash,主要由寄存器模塊、保護機制、預取加速、仲裁機制、編程和擦除控制器、讀模塊、選擇字節區加載和測試模式組成。

各主要模塊功能如下。

(1)寄存器模塊:主要包括實現編程擦除操作的控制寄存器,讀出Flash狀態的狀態寄存器,地址寄存器,解鎖相關寄存器,保護寄存器和預取控制寄存器。

圖6 Flash預取加速控制器整體架構

(2)保護機制:主要實現對Flash的讀保護和寫保護,讀保護防止程序被竊取,寫保護防止程序被篡改。

(3)預取加速模塊:通過增加緩存的方式,實現對指令和數據的預取加速,該功能可以寄存器控制開啟或關閉。

(4)仲裁機制:本設計中Cortex-M3核通過3組總線訪問Flash控制器以實現不同操作,其中I-BUS為核取指令的總線,指令預取在該總線上進行,D-BUS為核取數據的總線,S-BUS為核配置Flash寄存器的總線。其中I-BUS和D-BUS可以通過仲裁機制同時訪問Flash控制器,D-BUS擁有更高的優先級。

(5)編程和擦除控制器:實現對Flash的編程/頁擦除/整片擦除操作,在訪問該模塊時需先進行解鎖操作。

(6)讀模塊:從Flash讀出數據送到AHB總線上。

(7)選擇字節區加載:選擇字節區存儲了Flash和系統的相關配置信息,復位后首先加載該部分內容,選擇字節區的值發生改變后,需重新復位方可生效。

(8)測試模式:用于芯片測試以及出廠相關配置信息的燒錄,也可用于量產燒錄用戶程序,提高效率。

3.2 Flash控制器讀操作的實現

在本設計中,采用Cortex-M3,整個系統的最高運行頻率72 MHz,而所選Flash的最大讀取速度25 MHz,因此需要添加等待周期以實現高頻核對低頻Flash的訪問。具體做法為配置相關寄存器的LATENCY位,決定是否插入等待周期:

(1)LATENCY=0,0< 系統時鐘≤24 MHz,無需額外插入等待周期;

(2)LATENCY=1,24 MHz< 系統時鐘≤48 MHz,需要額外插入1個時鐘等待周期;

(3)LATENCY=2,48 MHz< 系統時鐘≤72 MHz,需要額外插入2個時鐘等待周期。

Flash預取的開關由相關寄存器的PRFTBE(預取緩沖區使能)控制,該信號為高時開啟Flash預取。

當預取開時,在LATENCY=0時,AE信號頻率與HCLK時鐘頻率一致;在LATENCY=1時,將時鐘二分頻作為AE信號;在LAYTENCY=2時,將時鐘三分頻作為AE信號,通過判斷當前總線狀態及跳轉狀態,選擇與AE匹配的地址,產生對Flash讀訪問。當預取關時,根據當前是否有有效傳輸產生AE信號和相應的ADDR信號,產生Flash讀訪問,此時可適當降低讀Flash產生的功耗。

3.3 Flash控制器擦除和編程功能的實現

擦除和編程控制器實現Flash的頁擦除/整片擦除和半字編程操作。編程/擦除過程如下:

(1)讀取Flash狀態寄存器,判斷當前時刻Flash是否進行其他操作;(2)配置Flash控制寄存器的編程/擦除位;(3)向指定地址寫入半字/選擇需要擦除的頁;(4)等待編程/擦除過程結束;(5)讀出相應的內容加以驗證。

其具體的狀態轉換過程如圖7所示。收到總線寫操作命令時,狀態跳轉到WR_PRP1狀態,判斷是否為保護地址,若被寫保護,跳回WR_IDLE狀態;若可寫,跳到WR_PRP2,讀對應地址單元,判斷是否為全F,若非全F,返回WR_IDLE狀態;若可寫,跳到WR_TT,發送AE及擦除或編程命令后,經WR_TT2跳到WR_WAIT,若在WR_TT之后有其他擦除或編程要求,在WR_WAIT狀態等到Tbit后,將跳回WR_TT,發起下一次擦除或編程,否則跳回WR_IDLE。

圖7 編程/擦除狀態轉換圖

3.4 Flash控制器預取加速的實現

預取加速模塊是Flash控制器的關鍵單元,負責提高Flash的讀取性能。本文基于預取和緩存原理,采用位寬擴展技術和改進預取技術相結合的方式,設計了一種具有預取加速功能的Flash控制器。

首先采用位寬擴展技術,通過擴展Flash位寬,實現一次Flash訪問取出多條指令,本文采用64位Flash,對于Cortex-M3的32位指令而言可以提高一倍的取指效率。單純使用位寬擴展技術,處理器仍然必須等到Flash讀取結束才能獲取第一條指令,依舊存在單次訪問延遲的問題。本文利用處理器處理已取出指令的間隙,發起硬件預取操作。

以順序取指為例,如圖8所示,使用兩組預取BUFF來記錄訪問Flash的地址和取出的數據。其具體操作流程如下:

(1)當處理器讀取N時,將數據和地址分別存入BUFF0的數據和地址寄存器,向總線返回數據D(N);(2)讀取 N+4地址時,D(N+4)已在 BUFF0 中,直接讀出;(3)讀取N+4地址的同時預取N+8地址的值,并在讀取N+8地址時,將數據和地址存入BUFF1的數據和地址寄存器;(4)以此類推讀出其余地址。

從圖8中可以看出,增加一組64位的BUFF0并不斷更新其讀地址和數據,即可實現預取技術??紤]到本文的32位CPU為Cortex-M3,受到流水線結構、數據和控制相關的影響,指令會出現跳轉、間斷,此時預取BUFF中的值將是無效的,需重新訪問Flash,通過增加一組64位BUFF1,配合BUFF0共同完成硬件預取加速,如圖9所示。之所以不多增加幾組BUFF,是因為由于跳轉指令的存在,過多的預取操作反而會導致系統性能的降低,同時會增加成本。

圖8 預取加速時序圖

整個預取加速功能的實現可總結如下。

(1)選取Flash地址。若等待傳輸的地址(在讀Flash期間鎖存的地址)不在BUFF中,Flash地址選取等待地址(鎖存地址);若當前總線傳輸地址不在BUFF中,Flash地址選取當前地址;若當前總線傳輸地址/等待傳輸地址在BUFF中 (無等待傳輸),Flash地址選取當前地址+8的地址。

(2)判斷是否預取。若當前地址和當前地址+8均在BUFF中,暫停預取,否則開啟預取。

(3)是否更新BUFF。正在讀取當前傳輸對應的Flash單元時,當前傳輸地址對應為跳轉地址且跳轉失敗,讀取單元不等于新地址,也不等于新地址+8,不更新BUFF;預取當前地址+8對應Flash單元時,在讀Flash周期的中間周期(LATENCY=2)時,發生成功跳轉且預取地址不等于當前地址,也不等于當前地址+8,不更新BUFF;預取當前地址+8對應Flash單元,在Flash數據鎖定信號有效時,發生跳轉且當前地址不等于讀Flash期間READY信號為低的鎖定地址,也不等于當前地址,更不等于當前地址+8,不更新BUFF。

(4)成功跳轉判斷。在更新標志發生時或之前,跳轉狀態由1或2跳轉為8,或者有其他跳轉發生,此時可不更新BUFF。

圖9 帶跳轉的預取加速時序圖

3.5 Flash控制器保護機制

Flash中的用戶代碼程序(主存儲區)可以防止非法讀出,通過設置讀保護實現這一保護措施。在設置讀保護后,除用外代碼本身外的任何操作均無法讀出Flash中的用戶代碼程序,在解除讀保護時將產生一次整片擦除。

同樣也可以對Flash加以頁保護,防止程序在跑飛的情況下被意外改寫,可通過設置寫保護實現,任何試圖在一個寫保護的頁面進行編程或者擦除時均會在Flash控制器的狀態寄存器中反饋保護錯誤標準。

本文采用Cortex-M3的內核,并且支持3種啟動方式:Flash啟動,SRAM啟動和系統Memory啟動。Flash的內存空間可分為 main flash、option byte和system memory,本文設計的讀保護訪問權限如表1所示,“√”表示允許訪問,“×”表示禁止訪問。

3.6 其他部分設計

考慮到芯片測試以及出廠相關配置信息的燒錄,以使其量產時更高效地燒錄用戶程序,本文設計了Flash測試模式,此測試模式可以直接與標準SPI進行通信,方便操作,提高燒寫效率,降低成本。同時增加了低功耗設計,系統進入低功耗模式后Flash也進入相應的低功耗模式。

4 結果及分析

為驗證本文設計的Flash預取加速控制器的功能,同時對性能和功耗進行評估。本文搭建的SoC實驗平臺,集成了ARM公司Cortex-M3的32位低功耗處理器、AHB總線、Flash預取加速控制器、ISSI的64位某型Flash和SRAM??刂破鲗崿F對Flash的讀、編程和擦除3類操作,具體仿真波形如圖10~14所示。

圖10 LATENCY為0時預取及仲裁時序

圖11 LATENCY為1時預取時序

圖12 LATENCY為2時預取時序

圖13 頁擦除時序

圖14 編程時序

圖10為LATENCY為0時預取及仲裁時序。在I-Bus和D-Bus同時讀取0x080007a8地址時,D-Bus具有更好的優先級,優先讀出數據0x20000068,隨后I-Bus讀出該值。I-Bus及D-Bus讀取和仲裁正確。

圖11和圖12分別為LATENCY為1和2時的預取時序,其讀取結果正確,預取時序符合圖8所述本文設計的預取加速原理。

圖13和圖14分別為Flash擦除和編程時序仿真圖,其結果與Flash本身擦除及編程時序一致,即圖3和圖4所示。

在對預取加速控制器的預取效率評估中,采用上述實驗平臺,分別在預取開啟和關閉的情況下讀取相同的地址空間內容(地址包含連續、跳轉等),以耗費時間作為標準進行評估。具體實驗數據見表2。

表1 讀保護/非讀保護時對Flash空間的訪問權限表

表2 預取開關耗時實驗結果表

實驗結果表明,時鐘頻率在24 MHz、48 MHz和72 MHz時(即LATENCY分別為0/1/2),預取開啟比預取關閉耗時更少,效率分別提高了16.3%、5%和11.6%。其中在48 MHz時,由于時鐘頻率剛好為Flash讀取速度的兩倍,兩個時鐘周期完成一次讀操作,故預取開關耗時相差不大,僅在跳轉發生時,預取開具有更高的效率。

搭載本文設計的Flash預取加速控制器的MCU芯片,已完成樣品流片和測試,其結果與預期設計一致。

5 結論

本文基于預取和緩存原理,采用位寬擴展技術和改進預取技術相結合的方式,設計了具有預取加速功能的Flash控制器,完成Flash特定接口協議與AHB協議的轉換。搭建了SoC仿真實驗平臺,驗證了設計的正確性。實驗結果表明,本設計最多提高了16.3%的Flash取指效率,提升了系統性能。同時設計了明確的保護機制以保護用戶程序;實現了Flash測試模式與通用串口的通信,提高測試和燒錄效率,降低成本。實際樣片結果表明本設計的正確性和合理性。

[1]郭煒,魏繼增,郭箏,謝憬.SoC設計方法與實現[M].北京:電子工業出版社,2011.

[2]Brewer J,Gill M.Nonvolatile memory technologies with emphasison flash:acomprehensive guide to understanding and usingflashmemorydevice[M].Hoboken:Wiley,2011:19-62.

[3]潘立陽,朱鈞.Flash存儲器技術與發展[J].微電子學,2002,1:47-52.

[4]劉衛.NAND Flash控制器的設計與驗證[D].長沙:國防科學技術大學,2008:23.

[5]Ma D,Huang K,et al.An automatic SoC design methodology for integration and verification[J].Advanced Material Research,2011,383-390:2222-2230.

[6]Cappelletti P,Golla C.Flash memories[M].Kluwer Academic Publishers,1999.

[7]Wong C L.Methods for increasing instruction-level parallelism in microprocessors and digital system[M].US,US6988183,2006.

[8]Aagaard M D,Cook B,et al.A framework for superscalar microprocessor correctness statements[J].International Journal on Software Tools for Technology Transfer,2003,4(3):298-312.

[9]鄭文靜,李明強,舒繼武.Flash存儲技術[J].計算機研究與發展,2010,47(4):716-726.

[10]蔣進松.高效的片上Flash加速控制器軟硬件設計[D].杭州:浙江大學,2016.

[11]王鈺博.嵌入式Flash加速控制器的設計與實現[D].杭州:浙江大學,2014.

[12]AMBA Specification(Rev 2.0)[P].ARM,ARM IHI 0011A.

[13]周立功.ARM嵌入式系統基礎教程[M].北京:北京航空航天大學出版社,2008.

[14]Jungwook P,Cheong K,et al.An energy efficient cache memory architecture forembedded systems[C].Proceedings of the 2004 ACM Symposium on Applied Computing.NewYork,USA:ACM,2004:884-890.

猜你喜歡
寄存器時序時鐘
STM32和51單片機寄存器映射原理異同分析
基于Sentinel-2時序NDVI的麥冬識別研究
別樣的“時鐘”
古代的時鐘
Lite寄存器模型的設計與實現
基于FPGA 的時序信號光纖傳輸系統
有趣的時鐘
一種毫米波放大器時序直流電源的設計
時鐘會開“花”
DPBUS時序及其設定方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合