国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向安全啟動(dòng)的SPI Flash控制器

2015-12-23 01:12吳雪濤戴紫彬張立朝
關(guān)鍵詞:寄存器代碼加密

吳雪濤,戴紫彬,張立朝

(信息工程大學(xué) 密碼工程學(xué)院,河南 鄭州450001)

0 引 言

串行接口NOR Flash簡(jiǎn)稱(chēng)SPI Flash,它具有讀取速度快、穩(wěn)定性高、易用性強(qiáng)等優(yōu)點(diǎn),已成為最常見(jiàn)的非易失性存儲(chǔ)介質(zhì)之一[1]。

在以SPI Flash為主要存儲(chǔ)載體的SoC設(shè)備中需要加入專(zhuān)用的控制器來(lái)完成對(duì)SPI Flash的多種操作[2]。目前,常見(jiàn)的SPI Flash控制器主要有全硬件和軟硬件結(jié)合兩種實(shí)現(xiàn)方式[3,4],文獻(xiàn) [3]采用軟硬件結(jié)合的實(shí)現(xiàn)方式,可操作性強(qiáng)、適用性廣泛但是無(wú)法支持系統(tǒng)啟動(dòng);文獻(xiàn) [4]采用全硬件的實(shí)現(xiàn)方式,讀取速度快、能夠支持系統(tǒng)啟動(dòng),但是在讀取過(guò)程中無(wú)法進(jìn)行數(shù)據(jù)加解密操作,因此其中重要數(shù)據(jù)尤其是啟動(dòng)代碼的安全性無(wú)法保障。

針對(duì)上述情況,為提高系統(tǒng)啟動(dòng)過(guò)程和片外存儲(chǔ)功能的安全性,本文基于AHB總線(xiàn)協(xié)議設(shè)計(jì)了一款ESSB (encryption storage and security boot)型SPI Flash控制器,在保證其使用效率的同時(shí)可支持系統(tǒng)安全啟動(dòng)和加密存儲(chǔ)。本文設(shè)計(jì)的控制器采用緩存結(jié)構(gòu)提高讀寫(xiě)速度,提出了一種二次解析方法對(duì)SPI Flash的繁雜功能和操作進(jìn)行優(yōu)化,提高了可操作性。

1 SPI Flash差異性分析

不同廠(chǎng)商生產(chǎn)的SPI Flash芯片各有特點(diǎn),為設(shè)計(jì)具有廣泛適用性的控制器,需要研究多種芯片的差異性,找到它們的共同點(diǎn),并針對(duì)適用性較廣的結(jié)構(gòu)進(jìn)行設(shè)計(jì),以提高兼容性。

表1 通過(guò)對(duì)GigaDevice(兆易半導(dǎo)體)、Winbond (華邦電子)、Spansion (飛索半導(dǎo)體)、ATMEL (愛(ài)特梅爾半導(dǎo)體)等幾大主要SPI Flash廠(chǎng)商生產(chǎn)產(chǎn)品的對(duì)比發(fā)現(xiàn)了幾點(diǎn)不同:①管腳信號(hào)數(shù)目方面在是否支持Reset#上各有不同;②功能方面在是否支持雙端 (dual)和四端 (quad)模式、是否設(shè)置了緩存上略有差異,如ATMEL 的雙SRAM Buffer結(jié)構(gòu);③部分芯片還有其特殊功能,如飛索半導(dǎo)體的AutoBoot。但是在主要功能和結(jié)構(gòu)上是具有很多相同點(diǎn)的:操作碼 (OP code)基本一致,操作時(shí)序基本一致,必要功能均得到很好支持等。除ATMEL 的AT45系列外其余幾個(gè)廠(chǎng)商所生產(chǎn)的芯片在主要操作上完全相同,如操作代碼和操作時(shí)序,且他們?cè)诠δ苌铣恍└郊庸δ芡馐峭ㄓ玫?,因此就上述通用操作代碼集和基本功能設(shè)計(jì)的控制器是具有廣泛適用性的。

表1 主流SPI Flash廠(chǎng)商產(chǎn)品功能對(duì)比

據(jù)以上分析,本文設(shè)計(jì)的控制器能夠支持讀寫(xiě)、快速讀寫(xiě)、擦除、安全區(qū)域讀寫(xiě)等主要功能,兼容兩種訪(fǎng)問(wèn)接口,即能夠支持RESET#信號(hào)的硬件復(fù)位功能,其余信號(hào)為CS#、SO、WP#、SI、HOLD#、SCLK。對(duì)Flash芯片的控制都是通過(guò)SI、SO、WP、HOLD這4個(gè)控制信號(hào)來(lái)控制完成的。

2 SPI Flash控制器設(shè)計(jì)

SPI Flash在SoC設(shè)備中主要作為程序存儲(chǔ)器,用來(lái)存儲(chǔ)啟動(dòng)程序、操作系統(tǒng)等代碼量不大的固件程序,也可用來(lái)存儲(chǔ)少量重要數(shù)據(jù)。針對(duì)許多應(yīng)用場(chǎng)景對(duì)系統(tǒng)啟動(dòng)過(guò)程的高效性和高安全性要求,本文所設(shè)計(jì)的SPI Flash控制器加入了Boot Supporter結(jié)構(gòu),實(shí)現(xiàn)了高效的系統(tǒng)啟動(dòng),同時(shí)集成了獨(dú)立的數(shù)據(jù)保護(hù)電路,保證了啟動(dòng)代碼及重要數(shù)據(jù)的完整性和安全性。

2.1 控制器總體結(jié)構(gòu)

為保證各功能模塊的獨(dú)立性和靈活性,采用模塊化設(shè)計(jì)方法,該控制器整體結(jié)構(gòu)如圖1所示。本文設(shè)計(jì)的ESSB型SPI Flash控制器由以下幾個(gè)模塊組成:接口和地址譯碼模塊 (wrapper &addr_decorder)、輸入控制模塊 (inFSM)、輸出控制模塊 (outFSM)、微控制器模塊 (MCU)、啟動(dòng)支持模塊 (boot supporter)、SRAM、數(shù)據(jù)保護(hù)模塊(DPM)和輸入輸出FIFO 等。

控制器的信號(hào)傳遞過(guò)程為:接口和地址譯碼模塊接收AHB總線(xiàn)信號(hào),直接向微控制模塊發(fā)出操作指令,由輸入(輸出)FIFO 和控制模塊完成數(shù)據(jù)的傳輸,傳輸完成后由控制模塊完成串并轉(zhuǎn)換,根據(jù)需要對(duì)數(shù)據(jù)進(jìn)行加解密,生成指令序列,最后由微控制器匹配成SPI Flash芯片所能接受的時(shí)序完成相應(yīng)操作。

圖1 SPI Flash控制器結(jié)構(gòu)

2.2 接口和地址譯碼模塊

為了使控制器更好地與總線(xiàn)配合,設(shè)計(jì)了接口和地址譯碼模塊 (wrapper &addr_decorder)以解析總線(xiàn)時(shí)序并處理跨時(shí)鐘域問(wèn)題。由于SPI Flash的功能較為繁雜可操作性差,在進(jìn)行某些操作前還需要幾個(gè)先行配置操作,為用戶(hù)的使用帶來(lái)了極大不便。本文提出了一種二次解析的方法將其優(yōu)化。wrapper &addr_decorder模塊對(duì)總線(xiàn)的請(qǐng)求進(jìn)行先后兩次解析才轉(zhuǎn)換為Flash芯片可接受的命令,第一次解析是通過(guò)總線(xiàn)信號(hào)解析出用戶(hù)所執(zhí)行的操作,并自動(dòng)完成配置操作形成操作流;第二次解析是將此完整的操作流解析為相應(yīng)指令序列傳輸給Flash芯片。采用這種方法,用戶(hù)既無(wú)需了解SPI Flash芯片各功能的OP Code也無(wú)需了解某項(xiàng)操作所需的配置操作而只需簡(jiǎn)單地了解一套連續(xù)的數(shù)值各代表哪種操作即可,提高了使用性。

本文設(shè)計(jì)的控制器在wrapper &addr_decorder模塊中設(shè)置了一組可直接訪(fǎng)問(wèn)的命令寄存器,總線(xiàn)對(duì)命令寄存器寫(xiě)入不同數(shù)據(jù)將被解析出不同的操作,而后在內(nèi)部填充好配置操作產(chǎn)生出完整的功能代碼傳送給Flash芯片,完成相應(yīng)操作,例如:寫(xiě)入0x001即實(shí)現(xiàn)QPP (四端頁(yè)寫(xiě))功能,內(nèi)部將自動(dòng)依次向SPI Flash芯片輸入06H (寫(xiě)使能)、01H (寫(xiě)狀態(tài)寄存器)指令代碼,然后由MCU 自動(dòng)循環(huán)讀取狀態(tài)寄存器的數(shù)值直到寫(xiě)入完成,最后輸入32H (四端頁(yè)寫(xiě))指令代碼。本文所使用的OP Code集為上一節(jié)分析得出的具有較強(qiáng)普遍性的代碼集,為防止出錯(cuò)常用操作的寫(xiě)入數(shù)據(jù)采用熱編碼機(jī)制。其中QPP、QWFR (四端快速讀)、SE (扇區(qū)擦除)的OP Code與命令寄存器中輸入數(shù)據(jù)的對(duì)應(yīng)以及它們?cè)赪rapper模塊內(nèi)部的執(zhí)行過(guò)程如圖2所示。

圖2 命令寄存器功能映射及執(zhí)行過(guò)程

2.3 啟動(dòng)支持模塊

由于SPI Flash的讀寫(xiě)速度較SRAM 等易失性存儲(chǔ)介質(zhì)慢得多,所以多用于程序的存儲(chǔ)而執(zhí)行一般在SRAM 上完成。為支持系統(tǒng)啟動(dòng)代碼的加載和執(zhí)行過(guò)程,本文設(shè)計(jì)的控制器中加入了Boot Supporter模塊,包括Boot Supporter和SRAM。該模塊既能很好地支持啟動(dòng)程序的執(zhí)行過(guò)程又能提高啟動(dòng)速度,在非啟動(dòng)應(yīng)用下作為DPM 模塊臨時(shí)數(shù)據(jù)的緩存,能夠減小硬件開(kāi)銷(xiāo),提高使用效率。

Boot Supporter與SRAM 共同實(shí)現(xiàn)系統(tǒng)的啟動(dòng)功能。由于SPI Flash的一個(gè)扇區(qū)為4 K 字節(jié),而且一般情況下SoC設(shè)備的啟動(dòng)代碼不會(huì)超過(guò)4K 字節(jié),所以將SRAM 的容量設(shè)置為4K 字節(jié)。Boot Supporter作為啟動(dòng)過(guò)程的控制器,既能夠模擬SRAM 的時(shí)序,完成對(duì)SRAM 的讀寫(xiě)操作,又能夠接受來(lái)自MCU 和DPM 的信號(hào)實(shí)現(xiàn)更復(fù)雜的功能。在其內(nèi)部設(shè)置有狀態(tài)寄存器,為方便讀寫(xiě),設(shè)置為32 bit。在系統(tǒng)啟動(dòng)階段MCU 通過(guò)mode_sel信號(hào)修改相應(yīng)的標(biāo)識(shí)位使Boot Supporter模塊進(jìn)入啟動(dòng)模式。在啟動(dòng)模式下,為了完成啟動(dòng)代碼的讀寫(xiě),Boot Supporter模塊支持AHB總線(xiàn)經(jīng)wrapper模塊對(duì)SRAM 中的啟動(dòng)代碼進(jìn)行直接讀寫(xiě);啟動(dòng)過(guò)程完成后,model_sel信號(hào)使其退出啟動(dòng)模式,為保護(hù)SRAM 中緩存的數(shù)據(jù)不再支持直接讀寫(xiě)。在非啟動(dòng)模式下,DPM 模塊工作的過(guò)程中需要緩存大量的數(shù)據(jù),為此特別擴(kuò)展了其緩存功能,DPM 模塊可以直接將需緩存數(shù)據(jù)經(jīng)Boot Supporter傳輸至SRAM 中,此時(shí)Boot Supporter的功能簡(jiǎn)化為SRAM 控制器,在整個(gè)SPI Flash控制器內(nèi)形成一個(gè)閉合的獨(dú)立存儲(chǔ)空間,保證了DPM 運(yùn)行過(guò)程中數(shù)據(jù)的安全性。

2.4 數(shù)據(jù)保護(hù)模塊

在安全性需求較高的應(yīng)用場(chǎng)景下,為保證系統(tǒng)的安全啟動(dòng),啟動(dòng)代碼需要加密存儲(chǔ),因此僅能夠完成代碼的加載和執(zhí)行是不夠的,還需要通過(guò)加密來(lái)保證其安全性。

為了對(duì)Flash芯片中的數(shù)據(jù)進(jìn)行加密存儲(chǔ),本文采用了AES-TAC/iHASH 片外存儲(chǔ)安全防護(hù)技術(shù)[9]作為獨(dú)立的數(shù)據(jù)保護(hù)模塊DPM (data protection module),并針對(duì)本文特點(diǎn)加以改進(jìn)。文獻(xiàn) [9]的設(shè)計(jì)中為安全合理地保存iHASH 模塊產(chǎn)生的標(biāo)簽以及AES-OTP模塊所產(chǎn)生的時(shí)間標(biāo)簽TS (time stamp)在其結(jié)構(gòu)中加入了標(biāo)簽緩存,這樣一來(lái)硬件開(kāi)銷(xiāo)會(huì)明顯增大,本文的設(shè)計(jì)中由于Boot Supporter模塊 (見(jiàn)2.3)的存在很好地解決了這個(gè)問(wèn)題,減小了硬件開(kāi)銷(xiāo)的同時(shí)也保證了標(biāo)簽的安全性;在文獻(xiàn) [9]的工作流程中,明文經(jīng)過(guò)iHASH 模塊產(chǎn)生的標(biāo)簽也被加密存儲(chǔ)在緩存中,在本文的應(yīng)用中無(wú)需將其標(biāo)簽再次加密存儲(chǔ),提高了運(yùn)行效率。圖3為DPM 模塊內(nèi)部的結(jié)構(gòu)。為抵抗竊聽(tīng)攻擊且增強(qiáng)靈活性,AES core所需密鑰采用外部注入的方式,本文設(shè)計(jì)的數(shù)據(jù)保護(hù)模塊,可抵抗篡改攻擊、拷貝攻擊、竊取攻擊、監(jiān)聽(tīng)攻擊等攻擊模型有力地保證了數(shù)據(jù)的完整性和安全性。

圖3 DPM 模塊結(jié)構(gòu)

在DPM 模塊中設(shè)置有配置寄存器和標(biāo)識(shí)寄存器。配置寄存器用來(lái)指示當(dāng)前輸入的數(shù)據(jù)是否需要加密存儲(chǔ)功能。配置寄存器的配置由wrapper模塊解析特定的命令完成,在數(shù)據(jù)進(jìn)入前配置完成,當(dāng)檢測(cè)到數(shù)據(jù)輸入完成信號(hào)后根據(jù)配置寄存器的值完成相應(yīng)的操作。標(biāo)志寄存器可被隨時(shí)讀取以了解當(dāng)前運(yùn)行狀態(tài),設(shè)有工作狀態(tài)、工作模式、iHASH 值生成、完整性檢測(cè)、密鑰注入完成、keystream生成、數(shù)據(jù)加密、數(shù)據(jù)解密等標(biāo)志位以表示響應(yīng)工作狀態(tài)。

需要加以說(shuō)明:在相當(dāng)多的情況下我們存儲(chǔ)的數(shù)據(jù)并不需要進(jìn)行加密或是添加雜湊值。為了增強(qiáng)電路的靈活性,使得控制器容易識(shí)別出此段代碼是否經(jīng)過(guò)了加密處理。本文人為地將整個(gè)Flash芯片存儲(chǔ)區(qū)域劃分為兩部分,其中一部分用來(lái)存儲(chǔ)需加密存儲(chǔ)的數(shù)據(jù),另一部分存儲(chǔ)未加密數(shù)據(jù)。寫(xiě)入時(shí),當(dāng)寫(xiě)入?yún)^(qū)域與加密設(shè)置不符合時(shí)提示錯(cuò)誤,讀取時(shí)根據(jù)所讀取的區(qū)域進(jìn)行是否進(jìn)行解密運(yùn)算。

3 控制器操作流程

SPI Flash的操作時(shí)序較為復(fù)雜,本文設(shè)計(jì)的控制器通過(guò)優(yōu)化使其復(fù)雜度大大降低,下面給出其操作流程。圖4以四端快速讀取操作為例給出了的一般的工作流程。

經(jīng)優(yōu)化后的操作流程有較高的一致性,依次可分為4個(gè)階段:輸入階段、校驗(yàn)階段、序列階段、接收階段,不同的操作可能只有其中的幾個(gè)甚至只有一個(gè)階段。輸入階段需要使用者向命令寄存器輸入與操作對(duì)應(yīng)的命令代碼、向地址寄存器輸入操作執(zhí)行的地址、向數(shù)據(jù)端口輸入即將操作的數(shù)據(jù),不同的操作需輸入的內(nèi)容會(huì)有所不同。對(duì)于各不同寄存器的輸入沒(méi)有次序要求。校驗(yàn)階段將對(duì)輸入的內(nèi)容進(jìn)行檢查,如果出現(xiàn)錯(cuò)誤將向使用者報(bào)告并要求重新輸入,如果無(wú)誤將會(huì)繼續(xù)下一步操作。序列階段將生成能夠直接輸入至Flash芯片接口的指令序列,如果當(dāng)前操作涉及數(shù)據(jù)寫(xiě)入則直到數(shù)據(jù)準(zhǔn)備好即發(fā)出start啟動(dòng)信號(hào)時(shí),才能生成由命令代碼、操作地址、操作數(shù)組成的指令序列,如果不涉及數(shù)據(jù)則可由指令代碼和操作地址甚至只有指令代碼組成指令序列。接收階段將由Flash芯片根據(jù)請(qǐng)求輸出相應(yīng)的響應(yīng),例如讀狀態(tài)寄存器操作的寄存器數(shù)值,讀操作的讀出數(shù)據(jù)等。

圖4 控制器工作流程

由于啟動(dòng)階段的操作流程比較特殊,所以在圖5單獨(dú)給出,下面對(duì)啟動(dòng)階段的工作流程做詳細(xì)介紹。系統(tǒng)上電啟動(dòng)或復(fù)位后,MCU 檢測(cè)到復(fù)位信號(hào),自動(dòng)將操作地址設(shè)置為SPI Flash 中的起始地址,生成讀指令序列輸入至Flash芯片,讀出前4K 內(nèi)容,讀取完成后等待外部密鑰注入,以此密鑰運(yùn)行數(shù)據(jù)保護(hù)模塊進(jìn)行解密,解密完成后運(yùn)行完整性校驗(yàn),期間任何過(guò)程未通過(guò)則輸出提示信息后關(guān)閉系統(tǒng),反之,則運(yùn)行啟動(dòng)代碼。

4 性能參數(shù)

為驗(yàn)證設(shè)計(jì)的正確性,采用Verilog HDL 語(yǔ)言對(duì)本文設(shè)計(jì)的SPI Flash 控制器編程實(shí)現(xiàn),SPI Flash 芯片選用Giga Device的GD25Q128B,利用Synopsys公司的VCS軟件進(jìn)行功能驗(yàn)證,包括數(shù)據(jù)加解密和系統(tǒng)啟動(dòng)在內(nèi)的所有功能均正確無(wú)誤,在50 MHz時(shí)鐘下,各主要操作消耗時(shí)間情況見(jiàn)表2,與相關(guān)設(shè)計(jì)相比具有較高性能[10]。并利用Design Compiler軟件在SMIC 0.18μm 工藝庫(kù)下進(jìn)行綜合,整個(gè)IP核的等效門(mén)數(shù)為9.78萬(wàn)門(mén)。

圖5 系統(tǒng)啟動(dòng)工作流程

表2 主要操作時(shí)間消耗

在功能驗(yàn)證的基礎(chǔ)上搭建了硬件測(cè)試平臺(tái),采用Altera公司的Stratix Ⅲ系列FPGA 芯片EP3SL150F1152C2N進(jìn)行了硬件驗(yàn)證,并利用Tektronix公司的TLA5202系列邏輯分析儀得到了Flash芯片接口處實(shí)際的信號(hào)波形圖,確認(rèn)了其功能的正確性。實(shí)驗(yàn)結(jié)果表明,本文所設(shè)計(jì)的結(jié)構(gòu)可以實(shí)現(xiàn)安全高效存儲(chǔ),可以較為容易地移植到其它系統(tǒng)中去,可以支持多種SPI Flash芯片,具有普遍適用性。

5 結(jié)束語(yǔ)

本文以SPI Flash控制器為研究對(duì)象,面向密碼SoC的應(yīng)用場(chǎng)景,采用二次解析的方法對(duì)其操作方式進(jìn)行優(yōu)化,嵌入Boot Supporter結(jié)構(gòu)和獨(dú)立的SHA-256和AES算法模塊同時(shí)保證了數(shù)據(jù)安全性和完整性,設(shè)計(jì)了一款可支持啟動(dòng)加載和安全存儲(chǔ)的SPI Flash控制器,解決了其寫(xiě)入速度慢、操作繁雜、安全性不足等問(wèn)題。通過(guò)VCS功能仿真和FPGA 板級(jí)測(cè)試驗(yàn)證了本文設(shè)計(jì)的可用性,在未增加資源消耗的情況下提高了安全性和高效性,實(shí)現(xiàn)了SPI Flash的啟動(dòng)支持和安全存儲(chǔ)。本文所設(shè)計(jì)的控制器為數(shù)據(jù)的安全存儲(chǔ)提供了有力支持,其設(shè)計(jì)思想、整體結(jié)構(gòu)和操作流程具有一定普遍適用性和參考價(jià)值。

[1]Chu CC,Lin YM,Yang CH,et al.A fully parallel BCH codec with double error correcting capability for NOR flash applications [C]//IEEE International Conference on Acoustics,Speech and Signal Processing,2012:1605-1608.

[2]Talole PT,Sawale ST.Performance enhancement by the design of flash controller for x8NAND flash memory devices[J].International Journal of Computer Applications,2010,1 (9):24-29.

[3]CHEN Chaowen,PENG Guojie,WANG Yiwen,et al.Design of NOR flash controller based on PLB general bus [J].Microelectronics &Computer,2014,31 (5):83-86 (in Chinese). [陳超文,彭國(guó)杰,王憶文,等.基于PLB 總線(xiàn)的NOR FLASH 控制器設(shè)計(jì) [J].微電子學(xué)與計(jì)算機(jī),2014,31(5):83-86.]

[4]LUO Li,XIA Jun,DENG Yu.Design and verification of general SPI flash controller [J].Computer Engineering,2011,37 (8):22-24 (in Chinese). [羅莉,夏軍,鄧宇.通用SPI Flash控制器的設(shè)計(jì)與驗(yàn)證 [J].計(jì)算機(jī)工程,2011,37 (8):22-24.]

[5]Technical Datasheet.GD25Q128B [S].

[6]Technical Datasheet.W25Q80BV [S].

[7]Technical Datasheet.S25FL128S [S].

[8]Technical Datasheet.AT45DB021A [S].

[9]CAI Luting,XU Jinfu,ZHANG Lichao.Security management of off-chip memory based on AES-TAC/iHASH [J].Computer Engineering and Design,2014,35 (3):841-845(in Chinese). [蔡路亭,徐金甫,張立朝.基于AES-TAC/iHASH 的片外存儲(chǔ)器安全防護(hù) [J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35 (3):841-845.]

[10]TIAN Peng,NIE Zedong,ZHANG Zhengping,et al.Design of a nor flash controller IP compatible AHB bus[J].Microelectronics & Computer,2013,30 (6):88-91 (in Chinese).[田鵬,聶澤東,張正平,等.一種兼容AHB總線(xiàn)的Nor Flash控制器IP 設(shè)計(jì) [J].微電子學(xué)與計(jì)算機(jī),2013,30 (6):88-91.]

猜你喜歡
寄存器代碼加密
Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
一種基于熵的混沌加密小波變換水印算法
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
分簇結(jié)構(gòu)向量寄存器分配策略研究*
認(rèn)證加密的研究進(jìn)展
基于ECC加密的電子商務(wù)系統(tǒng)
基于格的公鑰加密與證書(shū)基加密
清流县| 公主岭市| 疏勒县| 常山县| 凤冈县| 吉隆县| 项城市| 东台市| 新竹市| 邵阳市| 江西省| 三江| 泸溪县| 宁武县| 新兴县| 曲阳县| 安乡县| 沁源县| 兰考县| 尼木县| 彰武县| 连平县| 宾阳县| 万源市| 大关县| 凌源市| 额尔古纳市| 夹江县| 建昌县| 凌海市| 万年县| 平乡县| 岐山县| 九江县| 莫力| 恩平市| 鄂伦春自治旗| 甘孜县| 阿荣旗| 布拖县| 营口市|