仿真器

主要集中在对程序仿真的设备

仿真器(emulator)以某一系统复现另一系统的功能。与计算机模拟系统(Computer Simulation)的区别在于,仿真器致力于模仿系统的外在表现、行为,而不是模拟系统的抽象模型。请参阅仿真和模拟词条。

概述
仿真器可以替代你的目标系统中的MCU,仿真其运行。 仿真器运行起来和实际的目标处理器一样,但是增加了其它功能,使你能够通过桌面计算机或其它调试界面来观察MCU中的程序和数据,并控制MCU的运行。随着IC和软件集成平台的飞速发展,仿真器也不断赋予新的内容和新的挑战,因为它的发展必须与CPU同步,要想在总线速度为150Mhz 64bit的情况下实现TRACE已经成为不可能。
仿真器的基本实现方式
由于仿真器属于一种高科技含量的开发工具,其实现的方式比较复杂。
1).商用CPU这是一种最简单的实现方式,直接采用最普通的商用CPU去设计仿真器。一般来说,CPU都有一些资源,如非屏蔽中断,NMI,TRAP指令,Ready信号等等。在用商用CPU去设计仿真器时,基本上都会采用这些指令式信号,以达到单步Step,全速运行Go,断点Breakpoint的功能。用商用CPU去设计仿真器,一般来说其CPU的速度不能很快,
如像8051,196等是可以采用这种方式的。若CPU的速度很快,则无法去实现。因为仿真器要在CPU的地址,数据总线上截取或插入某些资讯。CPU的速度太快,则根本无法在时序上去做截取或插入资讯的动作。用商用CPU去做仿真CPU,一般来说会碰到I/O管脚重整的困难,就像最简单的8051或83C196,其A/D总线都可复用成I/O。而仿真器是要提供所有有关CPU的资料给用户。所以,实际上CPU是以地址/数据总线的方式在运行。如用户的设计是用I/O方式的话,仿真器就一定要重新整合一套I/O线路出来。这一点是最麻烦的地方,往往有些简单的仿真器就不能做到这一点。
.2)采用特殊的仿真模式有的商用CPU会提供一些特殊的仿真模式,其CPU还是采用商用CPU。但当CPU在上电或复位时,如果在CPU的某些管脚上灌一些特殊的电平或序列,则CPU就会进入一种特殊的仿真模式,如Philips的8051CPU,就是有一种叫“Hooks”的模式。进入这种模式之后,CPU会在地址数据总线上分时地提供一些用于I/O重建的信息。有了这种特殊的仿真模式,仿真器进行I/O重建相对来说比较简单一些,但往往会存在着一些时序方面的问题。毕竟进入仿真模式之后的CPU的时序与普通CPU是有所不同的。如果用户的设计非常苛刻的话,有时会存在连不上目标板的问题,并且,这时的CPU在跑很高的时钟频率会遇到困难。
3.)使用专用仿真CPU–BondoutSilicon一般来说,当CPU的速度很快时,往往就需要专用的仿真CPU了。这时仿真器在控制方面,相对来说设计起来就比较简单。但此时仿真器的性能,已在很大程度上取决于仿真CPU了。仿真CPU设计得好,则相对来说仿真器的功能及稳定度都会比较好。但是,由于仿真CPU是一款专用的CPU,对于芯片厂商来说生产的数量非常少,往往其测试程度不会很高,专用的仿真CPU或多或少都会有些问题,就像目前国内仿真器普遍采用的W78958仿真CPU。这是Winbond为8051做的一种仿真CPU,其在中断,I/O的驱动能力等存在着问题。
4).利用BDM,JTAG方式当CPU越来越复杂,速度越变越快时,以上方式都已不能满足要求了。像PowerPC或Pentium,其内部有MMU,Cache,并且可乱序执行,以往传统的总线方式都不可行了。JTAG的提出,最初是给测试用的,主要目的是为了测试器件是否焊好,是否存在短路或断路。后来,一些CPU的厂商把这一概念引进到了用于CPU内部。把JTAG的移位寄存器全部连到CPU内部的控制状态寄存器,并增加一些仿真器专用的寄存器,如控制Memory的读写等。这时,仿真器在硬件上面已变得很简单了,用户设计目标板时,只要把几个控制管脚电平设计正确,就可以实现在线实时控制。目前,32位元以上的CPU普遍支
持这种调试方式。5.ROM-Monitor绝大多数CPU厂商在新推出他的新一代CPU的同时,会相应的推出他的参考设计原型,这就是大家所熟知的ADS开发板,配上第三方的集成开发环境,就可以实现对相应CPU的软件开发,这就是ROM-Monitor仿真器的实现构成。
单片机仿真器的作用
单片机仿真器是一种在电子产品开发阶段代替单片机芯片进行软硬件调试的开发工具。配合集成开发环境使用仿真器可以对单片机程序进行单步跟踪调试,也可以使用断点、全速等调试手段,并可观察各种变量、RAM及寄存器的实时数据,跟踪程序的执行情况。同时还可以对硬件电路进行实时的调试。利用单片机仿真器可以迅速找到并排除程序中的逻辑错误,大大缩短单片机开发的周期。在现场只利用烧录器反复烧写单片机,通过肉眼观察结果进行开发的方法大大增加了调试的难度,延长了整个开发周期,并且不容易发现程序中许多隐含的错误,特别对于单片机开发经验不丰富的初学者来说更加困难,由此可见,单片机仿真器单片机系统开发中发挥着重要的作用。
仿真器的功能概念
1).执行断点(Exebreakpoint)这是最普通的一个断点,所有的仿真器都必须有,其实现方式二种。一种是硬件断点,一般来说是用硬件的比较器去做的;另一种是软件断点,如用TRAP指令。评价执行断点的标准点:当用户在调试用户板EPROM中的程序时,还能不能设断点,往往一些低档的仿真器是做不到这一点的。
2).总线断点(Busbreakpoint)光有执行断点是不够满足实际需求的,总线断点是一个地址断点,若用户的系统需要调数据总线,或中断,定时器/记数器,并且要实时调试时,这时候就需要有总线断点。总线断点可以设定为地址总线,数据总线,CPU的一些状态。当这时设定匹配时,让CPU停下来,所以,这样的仿真器的功能就比较强大,很容易找问题,但是在实现这些功能时,所用到的硬件设计就要复杂得多了。
3).寄存器断点(RegisterBreakpoint)这种断点往往需要CPU能支持这功能。CPU内部要有一个比较器,当所设定的CPU的值与之匹配时,仿真器就停下来。像PowerPC是可以做到这一点的。
4).事件(Event)以上所说的总线断点,可以看成是事件的一种要素。事件可以是某些CPU的信息的组合,也可以是外部的触发输入,并且可以有逻辑的组合,时序上分先后顺序,具有记数功能等等。这种事件功能,在一些高档的仿真器中是一种最基本的功能。
5).触发(Trigger)事件的最终目的是产生触发,这种触发不见得要让CPU马上停下来,往往用户在调试时,有可能是想看当设定的条件满足要求之后的几个CPUCycle时的CPU情况。所以,触发要满足这方面的需求,并且触发最好能和追踪存储器配合使用。
6).追踪存储器(TraceMemory)追踪存储器就像是一台摄像机,在CPU全速运行时,能抓取CPU的一些信息,如地址/数据总线,CPU的状态,I/O管脚情况。所以,追踪存储器就必须要有一定的宽度与深度,很快就爆满的追踪存储器就不存在什么意义。目前,大多数人都是在以C,C++的方式写程序,对于追踪存储器中抓下来的数据,就必须要能翻译或链接到相应的C代码才有意义。
7).追踪过滤(Qualify)若是只有追踪存储器,没有追踪过滤,这样的追踪存储器是没有什么用处的!为什么这么说呢:追踪存储器就像以上说的是一台摄像机。用户总不可能去摄像时,一出家门就开始不作任何刷选地去摄像。往往大家只有感兴趣的景点才作摄像。所以,在使用追踪存储器时,一定要有一个硬件上的过滤,只挑选有用的信息才存下来,这样才不会导致追踪存储器爆满。当然,对于已追踪记录下来的数据,最好是还有一个软件过滤的动作,就像是电影的再剪辑。有些仿真器号称提供追踪或“逻辑分析仪”功能,但没有硬件过滤。用户程序停下来之后,追踪存储器中往往是大量的无用信息,真正有用的数据可能反而被覆盖了。
8).软件性能分析(SPA)大家在开始一个项目时,往往在项目刚开始时,追求的是功能,而到了一定时候,就要开始追求性能,这时,往往需要作程序代码的优化动作。但是,总不可能把整个用户程序从头到尾全部优化一次,这是非常没有效率的。有了软件性能分析,就可以分析出那些代码在整个系统的运行过程中占的时间百分比比较高,则在优化时,就只需要针对这一部分去优化就行了,这样的效率才能最高。
9).代码覆盖率分析(CodeCoverage)代码覆盖率分析能帮助用户分析出用户的那些代码是废代码。现在,用户系统越来越大,往往一个项目不是一个人开发的,或者花了好多时间才开发完,往往会存在着大量的废代码,在系统的运行过程中,根本就没有被调用过,但有时又不敢轻易地把它删除。有了代码覆盖率分析的功能,就很容易地分析出那些是废代码,可以放心地删除了。
10).时间节拍(TimeStamp)在一些高档的CPU,如486,Pentium,内部都已有MMU,Cache等,用户已根本无法按CPU时钟及cycle来算出到每一条指令的执行时间了,有时误差会有好几倍的出入。这时,有了时间节拍的功能,用户就能很清楚地知道到每一条指令的执行时间了。时间节拍器记录是在追踪存储器中的,如果要保证记录足够长的时间和足够的精度,需要大量的存储器。
11).仿真存储器(EmulationMemory)仿真存储器,也是仿真器的一个最基本的功能。对于窄地址空间的CPU,要看它是否能提供全空间的仿真存储器,对于宽地址空间的CPU,要看它能提供多少深度,并且是否能与编译器的Linker/Locater配合随意搬移使用。评价一个仿真器的仿真存储器,还要看它是否一点都不占用用户空间,能否读到用户板EPROM中的程序,能否帮用户反汇编并存成文件,能否接在用户板EPROM上调试。
12).仿真存储器块扩展(BankSwitch)一些窄地址空间的CPU,就像8051,其程序空间只有64K,往往有的用户会觉得不够用,如要存放一些语音,图像数据到EPROM中,这时候,就需要有块扩展功能。往往一些编译器能支持块扩展功能,像Keil的C51编译器。这时,最好仿真器也与一起支持,这样,用户在使用时就根本不需要再去考虑是否能平稳地做到块切换,全局变量与局部变量的问题。
13).内存映射(MAP)一般来说,仿真器都会提供内部与外部内存映射。但其实,好的仿真器还能做更复杂的属性,如警式(Guard),只读(Read-Only)等等。像这种属性是非常有用的。像Guard,它的意思是对于不存在的空间,用户可以设定成Guard。这样,当程序一旦跑飞进入这空间之后,CPU就马上停下来。配合上追踪功能,用户能很快定位出程序是从哪儿跑飞的,原因是什么,有可能是push/pop少写了一个,或者干扰因素等。
14).内存飞速(Memoryon-the-fly),追踪飞速(Traceon-the-fly)在某些场合,如PWM调试马达,马达是用PWM的占空比来作马达速度的控制,有可能CPU不能停下来,一旦CPU停下来,PWM保持高电平。这样,马达就要飞转起来。所以,CPU不能停。这时候,用户有可能想看仿真存储器中及追踪存储器中的资料,就需要仿真器能支持这方面的功能。这时候有一点非常重要,不能是偷偷地把仿真CPU停下来,读一下之后再让CPU跑起来。这样做就是假的,不存在任何意义,可以采用双端口RAM或者采用影子内存的方式(类似Cache)。
15).支持的工具链(ToolChains)一个好的仿真器,应能支持众多的编译器,就像51,做编译器的厂商就非常多,如Keil,2500AD,BSOTasking,PLM等。不能要求用户买了这台仿真器之后,指定用户只能用某一家的编译器,而让用户去重新熟悉一套编译器的环境。
16).协议软件的支持(SupportProtocolS/W)目前,用户的系统都越来越复杂,像USB,PCMCIA1394,LCD,Ethernet等,就需要相应的协议,如TCP/IP协议,有许多专业写这方面协议软件的公司,如Interniche等。一个好的开发系统,最好能直接支持第三方写好的协议软件。
17).支持实时操作系统(SupportRTOS)操作系统很多,特别是在嵌入式系统中,如VxWorks,ThreadX,Linux等。如是一个开发系统不能支持用户购买的操作系统的话,那么那些操作系统就成了一堆废代码,根本就不能调试。
开发系统要帮用户显示出哪些Task在运行,哪些Task被挂起,挂起的原因是因为Semaphore,Eventflag等,还要帮用户显示出Mailbox,messagequeue和memorypool等系统定义的结构。最佳的开发系统更要支持多项目和多CPU的环境。
仿真器中使用的技术
仿真器的生产在国内有十多年的历史其中使用的技术根据时间和性能的不同大约分成以下几种:
(1) 仿真开发系统
这种技术主要在仿真器的初级阶段使用。由于当时没有好的仿真技术或仿真芯片,仿真器设计成了一个双平台的系统,并根据用户的要求在监控系统和用户系统中切换。这种仿真系统性能完全依赖于设计者的水平。实际的最终性能厂家之间相差很大。不过总的说来需要占用一定的用户资源并且设计复杂,现在基本上已经淘汰,只是使用在一些开发学习系统中。
(2) Bondout技术
一般来说人们常常说的专用仿真芯片其实就是Bondout。这种仿真芯片一般也是一种单片机。但是内部具有特殊的配合仿真的时序。当进入仿真状态后,可以冻结内部的时序运行,可以查看/修改在静止时单片机内部的资源 。 使用Bondout制作的仿真器一般具有时序运行准确(也有例外)。设计制作成本低等优点: Bondout芯片一般是由单片机生产厂家提供的。因此它只能仿真该厂商指定的单片机,仿真的品种很少 。
(3) HOOKS技术
HOOKS是PHILIPS拥有的一项仿真技术。主要解决不同品种单片机的仿真问题。使用该专利技术就可以仿真所有具有HOOKS特性的单片机。即使该单片机是不同厂家制造的 ,使用HOOKS技术制造的仿真器可以兼容仿真不同厂家的多种单片机,而且仿真的电气性能非常接近于真实的单片机。 但是HOOKS技术对仿真器的制造厂家的技术要求特别高 。不同的仿真器生产厂家同时得到HOOKS技术的授权。 但是设计的仿真器的性能差别很大 。即使到了今天也不是每个仿真器厂家都能生产HOOKS仿真器。即使生产出来性能也差异很大,用户应仔细区别 。
(4) 内嵌仿真功能的芯片
随着芯片技术的发展,很多单片机生产厂商在芯片内部增加了仿真功能一般通过JTAG接口进行控制。为了降低成本和增加可靠性,内嵌的仿真部分一般功能比较简单。 根据当前的发展趋势,如果只仿真标准的MCS-51系列单片机可以选用Bondout技术的仿真器。如果 用户希望仿真器功能更多更灵活的诸如增强型80C51系列单片机的话,那么必须选用HOOKS技术仿真器。二者比较而言采用HOOKS技术的仿真器性价比要高于Bondout技术 。
仿真器的种类
软件仿真器:这种方法主要是使用计算机软件来模拟运行,实际的单片机运行因此仿真与硬件无关的系统具有一定的优点。用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最终的设计。
硬件仿真器:使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。使用了附加硬件后用户就可以对程序的运行进行控制,例如单步,全速,
查看资源断点等。硬件仿真是开发过程中所必须的。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市