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

?

FPGA局部重配置技術(shù)的實(shí)現(xiàn)及應(yīng)用

2016-12-28 10:35:14韓煉冰段俊紅房利國(guó)
通信技術(shù) 2016年12期
關(guān)鍵詞:配置文件頂層開(kāi)發(fā)者

韓煉冰,段俊紅,王 松,房利國(guó),劉 蘊(yùn)

(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)

FPGA局部重配置技術(shù)的實(shí)現(xiàn)及應(yīng)用

韓煉冰,段俊紅,王 松,房利國(guó),劉 蘊(yùn)

(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)

局部重配置能夠在現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)運(yùn)行過(guò)程中動(dòng)態(tài)修改重配置區(qū)域,而不影響其他非重配置區(qū)域的正常運(yùn)行。因此,采用局部重配置技術(shù)設(shè)計(jì)的系統(tǒng),往往具有良好的靈活性和適應(yīng)性。于是,在詳細(xì)描述FPGA局部重配置的實(shí)現(xiàn)方法的基礎(chǔ)上,提出了一種避免所有模塊聯(lián)合編譯的FPGA設(shè)計(jì)方法。最終,分別在virtex5和Artix7開(kāi)發(fā)板上對(duì)該設(shè)計(jì)方法進(jìn)行驗(yàn)證,證明了所提方法的可行性。

局部重配置;FPGA;編譯;動(dòng)態(tài)配置

0 引 言

隨著通信系統(tǒng)的復(fù)雜化和多功能化,很多系統(tǒng)需要在不同時(shí)刻實(shí)現(xiàn)不同的功能,這就在多數(shù)場(chǎng)合需要FPGA支持動(dòng)態(tài)配置[1]。當(dāng)前,F(xiàn)PGA的配置方式可分為完全配置和局部重配置兩種。完全配置在FPGA系統(tǒng)的整個(gè)使用周期內(nèi)不再改變FPGA的邏輯結(jié)構(gòu)[2],除非重新配置新的配置文件,是FPGA的常用配置方式。局部重配置是在FPGA運(yùn)行過(guò)程中改變部分邏輯結(jié)構(gòu),而不影響其他邏輯正常工作的一種配置方法。局部重配置具有重要的實(shí)用意義,它可以將暫時(shí)不用的資源配置成有用的功能模塊,做到部分資源的分時(shí)復(fù)用,從而提高資源的利用率?;蛘?,它動(dòng)態(tài)改變局部模塊,達(dá)到改變功能或升級(jí)的目的。

在軟件實(shí)現(xiàn)系統(tǒng)中,處理器可以動(dòng)態(tài)地調(diào)用當(dāng)前所需的程序段完成不同的功能,具有相當(dāng)大的靈活性[3]。與軟件實(shí)現(xiàn)不同,通常FPGA開(kāi)發(fā)完成后需要將所有的模塊代碼進(jìn)行聯(lián)合編譯,才能生成最后的可執(zhí)行文件,這在一定程度上降低了靈活性。也正是因?yàn)檫@一特點(diǎn),使得一些跨團(tuán)隊(duì)合作的項(xiàng)目因?yàn)槁?lián)合編譯而浪費(fèi)開(kāi)發(fā)時(shí)間。特別是在特殊領(lǐng)域,因保密和管理的需要,一些重要模塊需要獨(dú)立開(kāi)發(fā),從而也給聯(lián)合編譯帶來(lái)諸多不便。于是,本文根據(jù)Xilinx的局部重配置技術(shù),提出了一種可獨(dú)立編譯模塊的FPGA設(shè)計(jì)方法。

1 局部重配置

Xilinx的局部重配置通常有兩種方法:一種是基于模塊化的方式;一種是基于差異化的方式。差異化的方法通常用在配置前后改變很小的情況,有一定的局限性。所以,這里主要研究模塊化的局部重配置技術(shù)。

1.1 模塊化局部重配置的設(shè)計(jì)要求和特性

模塊化局部重配置需采用層次化的模塊設(shè)計(jì)方式,將設(shè)計(jì)分成頂層、靜態(tài)邏輯和動(dòng)態(tài)邏輯三部分,設(shè)計(jì)框圖如圖1所示。頂層用于靜態(tài)模塊和動(dòng)態(tài)模塊間的連接以及時(shí)鐘的管理等;靜態(tài)部分為固定不變的邏輯(也可將該部分全部或者部分放在頂層內(nèi));動(dòng)態(tài)部分為可重構(gòu)邏輯。可重構(gòu)邏輯可以實(shí)現(xiàn)成不同功能的模塊,但是每個(gè)模塊的頂層接口必須一致。值得注意的是,不是FPGA器件內(nèi)的所有資源都是可重構(gòu)的。不能重構(gòu)的資源包括[4]:BUFG、BUFR、MMCM、PLL、DCM、MGTs、BSCAN、STARTUP等。

圖1 局部重配置設(shè)計(jì)

靜態(tài)邏輯、動(dòng)態(tài)邏輯與頂層設(shè)計(jì)聯(lián)合編譯后,會(huì)產(chǎn)生完整的配置文件和單獨(dú)的動(dòng)態(tài)邏輯配置文件。在FPGA運(yùn)行過(guò)程中,若需要改變動(dòng)態(tài)邏輯的功能,只需向FPGA內(nèi)下載單獨(dú)的動(dòng)態(tài)邏輯配置文件即可。

1.2 模塊化局部重配置的實(shí)現(xiàn)方法

一個(gè)完整的FPGA設(shè)計(jì)工程中可以包含一個(gè)或者多個(gè)動(dòng)態(tài)邏輯,動(dòng)態(tài)邏輯間可以有交互接口,實(shí)現(xiàn)框圖如圖2所示。目前,Xilinx的局部重配置實(shí)現(xiàn)工具有兩種:一種是PlanAhead;一種是Vivado。PlanAhead用于Virtex4、Virtex5和Virtex6等FPGA的局部重配置設(shè)計(jì),Vivado用于7系列及以后的FPGA局部重配置設(shè)計(jì)。

圖2 包涵兩個(gè)動(dòng)態(tài)邏輯的實(shí)現(xiàn)模型

1.2.1 利用PlanAhead工具實(shí)現(xiàn)

Xilinx的局部重配置只能基于網(wǎng)表文件實(shí)現(xiàn)。利用PlanAhead開(kāi)發(fā)工具的實(shí)現(xiàn)步驟如下[5]:

①生成網(wǎng)表文件。通過(guò)ISE綜合工具生成頂層文件的網(wǎng)表文件(生成頂層網(wǎng)表文件時(shí),要去掉各個(gè)動(dòng)態(tài)模塊的代碼,只保留接口)和各個(gè)動(dòng)態(tài)邏輯的網(wǎng)表文件(生成動(dòng)態(tài)模塊的網(wǎng)表文件時(shí),要去掉ISE里添加I/O buffer的選項(xiàng))。同一個(gè)動(dòng)態(tài)邏輯的不同實(shí)現(xiàn),都要生成各自的網(wǎng)表文件。例如,圖2中動(dòng)態(tài)邏輯1和動(dòng)態(tài)邏輯2各有三種不同的邏輯實(shí)現(xiàn),因此各自需編譯三個(gè)網(wǎng)表文件。

②創(chuàng)建工程,劃分模塊邏輯區(qū)域。在PlanAhead中創(chuàng)建可重構(gòu)的工程,導(dǎo)入各網(wǎng)表文件和ucf文件,并為每個(gè)動(dòng)態(tài)邏輯劃分邏輯區(qū)域。

③編譯并生成配置文件。編譯整個(gè)工程,同一個(gè)動(dòng)態(tài)邏輯的不同實(shí)現(xiàn)都要編譯。圖2所示的動(dòng)態(tài)邏輯1有三種實(shí)現(xiàn),因此要編譯三次,但不是每次編譯都要從頭開(kāi)始。第二次和第三次編譯時(shí),都會(huì)導(dǎo)入第一次的靜態(tài)部分編譯結(jié)果,從而保證每次編譯時(shí)靜態(tài)部分的布局和布線(xiàn)完全一致。完成編譯后,將生成三個(gè)完整的配置文件和三個(gè)單獨(dú)的動(dòng)態(tài)邏輯1的配置文件。采用同樣的編譯方法對(duì)動(dòng)態(tài)邏輯2進(jìn)行編譯,得到三個(gè)完整的配置文件和三個(gè)單獨(dú)的動(dòng)態(tài)邏輯2的配置文件。除了上述單獨(dú)編譯動(dòng)態(tài)邏輯1和動(dòng)態(tài)邏輯2的方法外,還可將其聯(lián)合編譯,減少編譯次數(shù)。編譯方法為:第一次編譯Pr_A1和Pr_B1,第二次編譯Pr_A2和Pr_B2,第三次編譯Pr_A3和Pr_ B3,三次編譯完成后即可得到三個(gè)完整的配置文件和六個(gè)單獨(dú)的動(dòng)態(tài)邏輯配置文件(動(dòng)態(tài)邏輯1和動(dòng)態(tài)邏輯2各三個(gè)文件)。

1.2.2 利用Vivado工具實(shí)現(xiàn)

采用Vivado工具實(shí)現(xiàn)局部重配置的操作方式與PlanAhead有些差異。Vivado的大部分操作都需要腳本命令來(lái)實(shí)現(xiàn)。利用Vivado開(kāi)發(fā)工具實(shí)現(xiàn)局部重配置的流程如下[6]:

①綜合設(shè)計(jì)。編寫(xiě)綜合的腳本,將頂層和各重配置模塊編譯成.dcp(Design Checkpoint)文件。

②聚合設(shè)計(jì)。在Vivado里先后導(dǎo)入頂層和重配置模塊的.dcp文件,并設(shè)置重配置模塊的屬性HD.RECONFIGURABLE。

③設(shè)計(jì)布局。根據(jù)重配置模塊的資源,為其劃定區(qū)域,并將結(jié)果寫(xiě)入約束文件fplan.xdc里。

④實(shí)現(xiàn)第一個(gè)配置。導(dǎo)入管腳約束文件io.xdc,執(zhí)行布局、布線(xiàn)等命令后,完成編譯。執(zhí)行write_ checkpoint命令導(dǎo)出編譯后的信息到all1.dcp文件,該dcp文件將用于后續(xù)產(chǎn)生配置文件。執(zhí)行命令update_design去掉重配置模塊的邏輯,再執(zhí)行l(wèi)ock_ design命令鎖定重配置模塊外的邏輯及布局布線(xiàn)信息,并執(zhí)行命令write_checkpoint將信息寫(xiě)入到static. dcp文件。

⑤實(shí)現(xiàn)第二個(gè)配置。先導(dǎo)入static.dcp,再導(dǎo)入重配置模塊第二個(gè)功能的.dcp文件。執(zhí)行布局、布線(xiàn)命令進(jìn)行編譯,編譯完成后執(zhí)行write_checkpoint命令,導(dǎo)出編譯后信息到all2.dcp文件。

⑥產(chǎn)生配置文件。執(zhí)行open_checkpoint命令打開(kāi)all1.dcp或者all2.dcp,再執(zhí)行write_bitstream命令,即可生成a111或者all2的完成配置文件和重配置模塊的配置文件。

1.3 配置文件的下載方法

1.3.1 下載完整的bit文件

FPGA上電復(fù)位后需配置完整的bit文件。完整的bit文件包含F(xiàn)PGA的復(fù)位、配置數(shù)據(jù)及文件校驗(yàn)所需的所有信息,配置的框圖如圖3所示。當(dāng)配置完成且文件校驗(yàn)正確后,F(xiàn)PGA將進(jìn)入用戶(hù)模式,并將專(zhuān)用配置引腳DONE置高。

圖3 配置完整的BIT文件

1.3.2 下載局部bit文件

下載局部bit文件時(shí),F(xiàn)PGA處于用戶(hù)模式,以保證下載局部bit文件時(shí)FPGA的其他邏輯模塊還能正常工作。配置局部bit文件的框圖如圖4所示。局部配置bit文件只包含地址、配置數(shù)據(jù)以及最終的校驗(yàn)值。

圖4 配置局部的BIT文件

2 獨(dú)立編譯模塊的設(shè)計(jì)方法

2.1 實(shí)現(xiàn)條件

獨(dú)立編譯模塊的方法,除了滿(mǎn)足局部重配置的所有條件外,還需對(duì)整個(gè)設(shè)計(jì)擁有全局的把控。需要將不可重配置或者不需重配置的邏輯規(guī)劃到頂層文件中,并規(guī)劃每個(gè)獨(dú)立編譯模塊的接口和所需資源。頂層文件、獨(dú)立編譯模塊的接口信號(hào)以及規(guī)劃給獨(dú)立編譯模塊的資源這三部分,一旦確定將不可改變。任何一部分的改變,都將使獨(dú)立編譯的文件不能使用。

2.2 實(shí)現(xiàn)方法

圖5給出了一個(gè)模塊獨(dú)立編譯的設(shè)計(jì)框圖。設(shè)計(jì)分成三部分:頂層邏輯、模塊A和模塊B。模塊A和B為可重構(gòu)模塊。頂層邏輯和模塊A、B的接口與資源一旦確定,模塊A和模塊B可獨(dú)立的開(kāi)發(fā)、調(diào)試,最終編譯可執(zhí)行文件。下面分別介紹采用PlanAhead工具和Vivado工具的實(shí)現(xiàn)方法。

2.2.1 利用PlanAhead工具實(shí)現(xiàn)

圖5 獨(dú)立編譯的設(shè)計(jì)

利用PlanAhead工具實(shí)現(xiàn)的主要步驟如下:

①編譯頂層網(wǎng)表。模塊A和模塊B的開(kāi)發(fā)者各自實(shí)現(xiàn)一個(gè)只模擬接口時(shí)序的模塊A1和模塊B1,并編譯成網(wǎng)表,編譯方法同1.2節(jié)的步驟;

②導(dǎo)入頂層網(wǎng)表。在PlanAhead里創(chuàng)建局部重配置工程,導(dǎo)入編譯好的頂層網(wǎng)表文件和ucf文件;

③導(dǎo)入可重構(gòu)模塊,劃分邏輯區(qū)域。導(dǎo)入可模擬接口時(shí)序的模塊A1和B1的網(wǎng)表文件,為可重構(gòu)模塊A和B劃分邏輯區(qū)域;

④編譯。編譯完成后,將config_1執(zhí)行Promote Partitions操作;

⑤將編譯后的整個(gè)工程和網(wǎng)表文件分別給模塊A和模塊B的開(kāi)發(fā)者;

⑥模塊A(B)的開(kāi)發(fā)者,用自己模塊的網(wǎng)表文件A(B)替換第⑤步里的A1(B1)網(wǎng)表文件,同時(shí)將模塊B(A)繼續(xù)保持為B1(A1);

⑦重新編譯。開(kāi)發(fā)者A和開(kāi)發(fā)者B各自進(jìn)行編譯,編譯完成后開(kāi)發(fā)者A(B)將得到兩種配置文件:一種是頂層+模塊A(B)的完整配置文件;一種是模塊A(B)單獨(dú)的配置文件;

⑧開(kāi)發(fā)者A(B)將模塊A(B)單獨(dú)的配置文件給開(kāi)發(fā)者B(A);

⑨配置時(shí),先配置頂層+模塊A(B)完整的配置文件,再配置模塊B(A)單獨(dú)的配置文件;

⑩如果設(shè)計(jì)過(guò)程中修改了頂層邏輯、模塊A(B)的接口信號(hào)或者A(B)規(guī)劃的邏輯資源,需要重復(fù)實(shí)現(xiàn)步驟①~步驟⑨,重新規(guī)劃動(dòng)態(tài)模塊的資源,并用新的工程文件編譯各個(gè)動(dòng)態(tài)模塊。

2.2.2 利用Vivado工具實(shí)現(xiàn)

利用Vivado工具實(shí)現(xiàn)的主要步驟如下:

①綜合。模塊A和模塊B的開(kāi)發(fā)者各自實(shí)現(xiàn)一個(gè)只模擬接口時(shí)序的模塊A1和模塊B1,并綜合得到.dcp文件。按照1.2節(jié)描述的步驟得到static.dcp文件,將該文件分別發(fā)送給模塊A的開(kāi)發(fā)者和模塊B的開(kāi)發(fā)者;

②開(kāi)發(fā)者A(B)先導(dǎo)入static.dcp文件,再導(dǎo)入自己真實(shí)的模塊A(B)的dcp文件和B1(A1)的dcp文件,編譯后生成配置文件;

③開(kāi)發(fā)者A(B)將模塊A(B)的局部配置文件發(fā)給模塊B(A)的開(kāi)發(fā)者;

④配置時(shí),開(kāi)發(fā)者A(B)先配置完整的配置文件,再配置B(A)模塊的局部配置文件;

⑤如果頂層邏輯有改動(dòng),需要重新產(chǎn)生static. dcp文件,并發(fā)給A、B雙方。A、B雙方再重復(fù)步驟②~步驟④,重新生成新的配置文件。

2.3 實(shí)現(xiàn)結(jié)果

分別在virtex5和Artix7的開(kāi)發(fā)板中,根據(jù)圖5的設(shè)計(jì)框圖編寫(xiě)了實(shí)際的程序,并模擬A、B兩個(gè)開(kāi)發(fā)者對(duì)A、B兩個(gè)模塊獨(dú)立開(kāi)發(fā)。按照2.2節(jié)的實(shí)現(xiàn)方法,A、B兩個(gè)設(shè)計(jì)者各自產(chǎn)生了完整的配置文件和A或B模塊單獨(dú)的配置文件。開(kāi)發(fā)者A配置時(shí),通過(guò)JTAG調(diào)試接口先配置自己生成的完整配置文件,再配置模塊B單獨(dú)的配置文件。開(kāi)發(fā)者B配置時(shí),通過(guò)JTAG調(diào)試接口先配置自己生成的完整配置文件,再配置模塊A單獨(dú)的配置文件。開(kāi)發(fā)者A和B配置完成后,F(xiàn)PGA的所有功能都能正常運(yùn)行。由此表明,文中描述的FPGA獨(dú)立編譯模塊的方法是可行的。

3 適用性分析

對(duì)未采用局部重配置的普通設(shè)計(jì)方法、文獻(xiàn)[2]描述的局部重配置方法以及文中基于局部重配置的獨(dú)立編譯模塊的設(shè)計(jì)方法共三種FPGA設(shè)計(jì)方法進(jìn)行比較,可以得到如表1所示的結(jié)果??梢?jiàn),文中的FPGA設(shè)計(jì)方法具有局部重配置的所有優(yōu)點(diǎn),且與文獻(xiàn)[2]相比,極大減少了開(kāi)發(fā)者的工作量。同時(shí),由于文中的FPGA設(shè)計(jì)方法能獨(dú)立對(duì)模塊進(jìn)行編譯,產(chǎn)生可以直接供其他模塊使用的二進(jìn)制文件,因此非常適合多個(gè)團(tuán)隊(duì)合作完成一項(xiàng)科研任務(wù)時(shí)使用。

表1 三種設(shè)計(jì)方法比較

4 結(jié) 語(yǔ)

基于局部重配置技術(shù)的FPGA設(shè)計(jì)方法,除了能避免所有模塊聯(lián)合編譯外,還能對(duì)設(shè)計(jì)者的模塊起到知識(shí)產(chǎn)權(quán)保護(hù)作用。設(shè)計(jì)者最終只需要提供模塊的執(zhí)行程序,而不需提供模塊的網(wǎng)表文件或者源代碼。目前,局部重配置技術(shù)在使用上還有一定的限制,尚有待進(jìn)一步發(fā)展,但這一領(lǐng)域已是眾多FPGA廠(chǎng)商研究的熱點(diǎn)[7]。相信隨著技術(shù)的不斷成熟,此技術(shù)的應(yīng)用前景將非常廣闊。

[1] 陳曦,沈佐峰.一種可靠的FPGA動(dòng)態(tài)配置方法及實(shí)現(xiàn)[J].通信技術(shù),2012,45(03):105-110. CHEN Xi,SHEN Zuo-feng.A Reliable Dynamic Configuration and Implementation of FPGA[J].Communications Technology,2012,45(03):105-110.

[2] 陶杰.FPGA局部動(dòng)態(tài)可重配置的研究[J].電子科技,2009,22(04):36-38. TAO Jie.Research on Partially and Dynamically Reconfigured FPGA[J].Electronic Science and Technology, 2009,22(04):36-38.

[3] 李鵬,蘭巨龍,姜鯤鵬.FPGA動(dòng)態(tài)局部重構(gòu)技術(shù)研究進(jìn)展[J].信息工程大學(xué)學(xué)報(bào),2009,10(01):98-105. LI Peng,LAN Ju-long,JIANG Kun-peng.Survey of Research on FPGA-Based Partial Reconfiguration Technology[J].Journal of Information Engineering University,2009,10(01):98-105.

[4] XILINX.Partial Reconfiguration User Guide[EB/OL]. (2012-12-08)[2016-08-12].http://www.xilinx.com.

[5] XILINX.PlanAhead Tutorial Partial Reconfiguration [EB/ OL].(2012-05-08)[2016-08-12].http://www.xilinx.com.

[6] XILINX.Vivado Partial Reconfiguration Tutorial [EB/ OL].(2014-10-01)[2015-12-28].http://www.xilinx.com.

[7] 吳鳳艷,王烈,孫洪民.基于FPGA的動(dòng)態(tài)局部可重構(gòu)方法分析與比較[J].廣西科學(xué)院學(xué)報(bào),2009,25(04): 340-346. WU Feng-yan,WANG Lie,SUN Hong-min.Analyze and Compare the Methods of Dynamic Partial Reconfiguration based on FPGAs[J].Journal of Guangxi Academy of Sciences,2009,25(04):340-346.

韓煉冰(1984—),男,學(xué)士,工程師,主要研究方向?yàn)樾畔踩?、通信安全技術(shù);

段俊紅(1984—),男,學(xué)士,工程師,主要研究方向?yàn)榍度胧较到y(tǒng)、通信安全技術(shù);

王 松(1985—),男,學(xué)士,工程師,主要研究方向?yàn)樾畔踩?、通信安全技術(shù);

房利國(guó)(1977—),男,碩士,高級(jí)工程師,主要研究方向?yàn)樾畔踩?、通信安全技術(shù)、計(jì)算機(jī)應(yīng)用;

劉 蘊(yùn)(1981—),女,碩士,工程師,主要研究方向?yàn)樾畔踩?/p>

Implementation and Application of FPGA Partial Reconfiguration Technology

HAN Lian-bing, DUAN Jun-hong, WANG Song, FANG Li-guo, LIU Yun
(NO.30 Institute of CETC, Chengdu Sichuan 610041, China)

Partial reconfiguration can dynamically modify reconfiguration region in operating process of FPGA, without any effect on the normal operation of other non-reconfiguration region. For this reason, the system with the design of partial reconfiguration technology often has fairly good flexibility and adaptability. Thus based on the detailed description of implementation method of FPGA partial reconfiguration, the FPGA design method capable of avoiding all modules in combined compiling is proposed. Finally, the actual verification of the design method on the Virtex5 and Artix7 development boards is done, and this verification indicates the feasibility and applicability of the proposed method.

partial reconfiguration; FPGA; compilation; dynamic configuration

TP302

A

1002-0802(2016)-12-1728-05

10.3969/j.issn.1002-0802.2016.12.029

2016-08-19

2016-11-22 Received date:2016-08-19;Revised date:2016-11-22

猜你喜歡
配置文件頂層開(kāi)發(fā)者
提示用戶(hù)配置文件錯(cuò)誤 這樣解決
汽車(chē)頂層上的乘客
文苑(2019年24期)2020-01-06 12:06:58
搭建簡(jiǎn)單的Kubernetes集群
互不干涉混用Chromium Edge
忘記ESXi主機(jī)root密碼怎么辦
頂層設(shè)計(jì)
16%游戲開(kāi)發(fā)者看好VR
CHIP新電腦(2016年3期)2016-03-10 13:06:42
加快頂層設(shè)計(jì)
iOS開(kāi)發(fā)者調(diào)查
電腦迷(2015年8期)2015-05-30 12:27:10
iOS開(kāi)發(fā)者調(diào)查
電腦迷(2015年4期)2015-05-30 05:24:09
鄂伦春自治旗| 石屏县| 鄂州市| 黔西县| 梓潼县| 诸城市| 阿尔山市| 旅游| 丽水市| 阿瓦提县| 磐安县| 离岛区| 阳春市| 定结县| 乌审旗| 象山县| 宜春市| 永川市| 宜良县| 新兴县| 自治县| 青川县| 获嘉县| 井冈山市| 宝应县| 海门市| 阿巴嘎旗| 密云县| 平舆县| 乌鲁木齐市| 合江县| 洞头县| 吴川市| 武川县| 涟源市| 喀喇沁旗| 泸定县| 辉南县| 永嘉县| 晋中市| 周至县|