范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

大神教你制作一个简单的16位CPU

  如何制作一个简单的16位CPU,首先我们要明确CPU是做什么的,想必各位都比我清楚,百度的资料也很全。
  如果想要制作一个CPU,首先得明白下计算机的组成结构(或者计算机的替代品,因为并不是只有计算机有CPU,现在的电子产品都很先进,很多设备例如手机、洗衣机甚至电 视和你家的汽车上面都得装一个CPU),数字电路基础,还最好有点编程的基础。相关文章推荐:用一堆开关做成一个CPU?当然,没有也没关系,这些知识都很容易获得,各种书上面都会提到,并且在接下来的过程中我会提到这些知识)
  我们要实现的是一个RISC指令集的CPU,并且我们最后要自己为这个CPU设计指令并且编码。
  首先我们来听个故事,关于CPU的诞生的故事:
  日本客户希望英特尔帮助他们设计和生产八种专用集成电路芯片,用于实现桌面计算器。英特尔的工程师发现这样做有两个很大的问题。第一,英特尔已经在全力开发 三种内存芯片了,没有人力再设计八种新的芯片。第二,用八种芯片实现计算器,将大大超出预算成本。英特尔的一个名叫特德?霍夫(Ted Hoff)的工程师仔细分析了日本同行的设计,他发现了一个现象。这八块芯片各实现一种特定的功能。当用户使用计算器时,这些功能并不是同时都需要的。比 如,如果用户需要计算100个数的和,他会重复地输入一个数,再做一次加法,一共做100次,最后再打印出来。负责输入、加法和打印的电路并不同时工作。这样,当一块芯片在工作时,其他芯片可能是空闲的。
  霍夫有了一个想法:为什么不能用一块通用的芯片加上程序来实现几块芯片的功能呢?当需要某种功能时,只需要把实现该功能的一段程序代码(称为子程序)加载到通用芯片上,其功能与专用芯片会完全一样。
  经过几天的思考后,霍夫画出了计算器的新的体系结构图,其中包含4块芯片:一块通用处理器芯片,实现所有的计算和控制功能;一块可读写内存(RAM)芯片, 用来存放数据;一块只读内存(ROM)芯片,用来存放程序;一块输入输出芯片,实现键入数据和操作命令、打印结果等等功能。
  看完这个故事后,可以总结:CPU是一种用来代替专用集成电路的器件(这只是我的理解,不同人有不同理解,这个就智者见智了,我在接下来的例子中也会说明我的想法)。
  然后考虑如下这个例子:
  例1-1:  mov eax,0 repeat:inc eax jmp repeat
  例1-2:  int main() { unsigned int i = 0; while(1) i++; }
  例1-3:
  可以看到,以上三个例子都产生了一个从0不断增加的序列,而且前两个例子会一直加到溢出又从0开始(这个取决于计算机的字长也就是多少位的CPU,eax是 32位寄存器所以必然是加到4294967295然后回0,而后面那个c程序则看不同编译器和不同平台不一样),后面那个例子则看你用的是什么样的加法器和多少个D触发器
  那问题就来了,我假设要一个递减的序列怎么办呢?前两个例子很好解释,我直接改代码不就得了:
  例2-1:  mov eax,0 repeat:dec eax jmp repeat
  例2-2:  int main() { unsigned int i = 0; while(1) i--; }
  你只需要轻轻敲击键盘,修改了代码之后,它就会如你所愿的执行。
  但是后面那个例子怎么办呢?可能你已经想到办法了:如例2-3所示。
  例2-3:
  问题就来了,你在键盘上敲两下可不能改变实际电路!上面(例1-3)中是个加法器,但是跑到这里却变成了减法器(例2-3)!
  这样的话,你就得再做一个电路,一个用来算加法,一个用来算减法,可是两个电路代表你得用更多的电路和芯片,你花的钱就得更多,要是你不能同时使用这两个电路你就花了两份钱却只干了一件事!
  这个问题能被解决吗?答案是能!
  请看例3:
  这个例子中使用了一个加法器一个减法器,没比上面的电路省(显然…难道你想用减法器做加法器的功能?不可能吧!当然,加上一个负数的补码确实就是减去 一个数,但是这里先不考虑这种问题),多了一组多路器,少了一组D触发器。总的来说,优势还是明显的(两块电路板和一块电路板的差别)。
  而sel信号就是用来选择的(0是递增,1是递减)。相关文章:CPU如何进行数字加法。
  如果我们把sel信号看做"程序"的话,这个电路就像一个"CPU"能根据"程序"执行不同的"操作",这样的话,通过"程序"(sel信号),这个电路就能够实现复用。
  根据上面的结论,我认为(仅仅是个人认为啊~):程序就是硬件电路的延伸!
  而CPU的基本思想,我认为就是这样的。
  接下来我们就分析CPU的结构和各个部件,然后实现这个CPU。
  什么是单周期CPU,什么是多周期CPU,什么是RISC,什么是CISC
  首先大家得有时钟的概念:这个问题不好解释 啊…可以理解为家里面的机械钟,上上电池之后就会滴答滴答走,而它"滴答滴答"的速度就是频率,滴答一下用的时间就是周期,而人的工作,下班, 吃饭和学习娱乐都是按照时钟的指示来进行的(熬夜的网瘾少年不算),一般来说,时钟信号都是由晶体振荡器产生的,0101交替的信号(低电平和高电平)。
  数字电路都需要一个"时钟"来驱动,就像演奏交响乐的时候需要一个指挥家在前面指挥一样,所有的人都会跟着指挥的拍子来演奏,就像数字电路中所有的部件都会跟着时钟节拍工作一样。
  如下是一个理想的时钟信号:(注意是理想的)。
  当然,实际的时钟信号可能远没有这么理想,可能上升沿是斜的,而且占空比也可能不是50%,有抖动,有偏移(相对于两个器件),可能因为导线的寄生电容效应变得走形。
  上面那段如果没听懂也没关系~~~反正就是告诉你,实际的时钟信号测出来肯定没这么标准。
  而 cpu的工作频率,是外频与倍频的积(cpu究竟怎么算频率,其实这个我也不太清楚呵呵),因为cpu是通过外部的晶振产生一个时钟信号,然后再通过内部 的电路(锁相环),倍频至需要的频率。当然,有人问,为什么要这么麻烦呢?直接在电路外边做个时钟晶振能产生那么高的时钟信号就可以了嘛,这个是可以的, 在某些简单的系统上(例如51单片姬)就是这样的,但是计算姬的cpu比较复杂,因为一些原因所以必须要做到cpu内。
  下面简单说一下CPU的两种指令集:CISC和RISC。
  说下我的看法(个人看法,如有错误还请高手指正):
  RISC是Reduced Instruction Set Computer,精简指令集计算机,典型例子是MIPS处理器。
  CISC 是Complex Instruction Set Compute,复杂指令集计算机,典型例子是x86系列处理器(当然现在的x86指令还是当初cisc的指令,但是实际处理器的结构都已经变成了 risc结构了,risc的结构实现流水线等特性比较容易,在计算机前的你如果用的是intel某系列的处理器,则它使用的指令集看上去还是像cisc的 指令,但是实际上你的cpu的结构已经是risc的了)。  嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。点击这里找小助理0元领取:加微信领取资料
  一般CISC的处理器需要用微指令配合运行,而RISC全部是通过硬连线实现的, 也就是说,当cisc的处理器在执行你的程序前,还得先从另外一个rom里面读出一些数据来"指导"处理器怎么处理你的命令,所以cisc效率比较低,而 risc是完全通过部件和部件之间的连接实现某种功能,极大的提高了工作效率,而且为流水线结构的出现提供了基础。cisc的寄存器数量较少,指令能够实 现一些比较特殊的功能,例如8086的一些寄存器:
  ax,bx,cx,dx,si,di等;段寄存器有:cs,ds,es,ss等。相对的指令功能比较特殊,例如xlat将bx中的值作为基地址,al中的值作为偏移,在内存中寻址到的数据送到al当中(以ds为段寄存器)
  而risc的处理器则通用寄存器比较多,而指令的功能可以稍微弱一点,例如:
  以nios嵌入式处理器来说明,nios处理器有32个通用寄存器(r0~r31),而指令功能相对x86的弱一些,而且x86进行内存访问是直接使用mov指令,nios处理器读内存用的是load,写内存用的是store,
  二者响应中断的方式也不一样,举一个典型的例子,x86的处理器将中断向量表放在了内存的最低地址(0-1023,每个中断向量占四个字节),能容纳256 个中断(以实模式的8086举例)响应中断时,将中断号对应的地址上的cs和ip的值装入到cs和ip寄存器而将原来的地址保存,并且保存状态寄存器然后 进入中断处理,而risc则拥有一个共同的中断响应函数,这个函数会根据中断号找到程序向系统注册的函数的地址,并且调用这个函数。一般来说而是用的 cisc指令的长度是不定的,例如x86的xor ax,bx对应机器码是0x31d8、而push ax是0x50、pop cx是0x59。而risc的指令确是定长的,例如32位。
  相关文章推荐:CPU怎么识别我们写的代码?如果还有不清楚的…自行百度,要理解这些概念需要一点时间。
  一个CPU的基本结构以及必要组件
  这个例子引用自DE2开发板套件带的光盘上的Lab Exercise 9,我们从图中可以看到,一个CPU包含了通用寄存器组R0~R7,一个ALU(算术逻辑单元),指令寄存器IR,控制器(一般这部分是一个有限状态机或 者是用微指令实现),还有就是数据通路(图中的连线)。当然真正的CPU不可能只包含这么一点点组件,这是一个模型CPU,也就是说只是说明CPU的原 理,真正复杂的CPU要涉及到很多复杂的结构和时序,例如虚拟模式需要使用一些特殊的寄存器、为了支持分页需要使用页表寄存器等,为了加速内存的访问需要 使用TLB,加速数据和指令的访问而使用data cache和instruction cache等等…当然,那都是后面该考虑的,所以我们先从这个简单的部分开始讲起。
  例子中能实现如下指令:
  mv指令将Ry的数据转移到Rx中,mvi将立即数D转移到Rx当中,add将Rx和Ry的和放到Rx中,sub同上,不过执行的是减法。
  首先来说明mv指令是如何执行的:mv指令将Ry的值移入Rx寄存器当中,这两个寄存器都是由一组D触发器构成,而D触发器的个数取决于寄存器的宽度,就像 32位机、64位机这样,那他们的寄存器使用的D触发器的个数就是不一样的。当执行mv rx,ry时,中间的多路器(图中最大的那个multiplexer)选通Ry,让Ry寄存器驱动总线,这个时候Bus上的信号就是Ry的值;然后再看到 R0~R7上分别有R0in~R7in信号,这个信号是使能信号,当这个信号有效时,在上升沿此触发器会将din的数据输入,所以说到这里大家一定想到 了,这个时候Rx触发器上的Din信号就会变为有效,这样过了一个时钟周期后Ry的值就被送到了Rx当中。
  与mv指令类似,mvi指令也将一个数据送入Rx当中,只不过这次的数据存在指令当中,是立即数,所以Rx的Din信号会变为有效,而多路器会选择IR中的数据,因为mvi指令的立即数存在指令当中。并且进行一定处理,例如扩展等。
  add 指令会让多路器先选择Rx,然后Ain信号有效,这样一个时钟周期后,Rx数据被送入Alu的A寄存器当中,这时多路器选择Ry,addsub信号为 add以指示ALU进行加法操作,Gin有效让G寄存器存放运算结果,然后再过一个时钟周期G当中的数据就是Rx与Ry的和,这时多路器再选择 Gin,Rx的Din有效,过了一个时钟周期后数据就被存放到Rx当中了。
  sub的过程与add差不多,不过addsub信号是sub指示ALU进行减法。
  我做的CPU模型
  下面我就将我做的CPU模型的RTL网表发出来,代码我会上传的,但是这个还只能进行仿真,因为设计 的时候理念有问题,出现了异步设计,而且出现了将状态机的输出作为另一个器件的时钟端的错误,所以这个模型只能用于仿真。我用的synplify pro综合出的RTL,而状态转移图是用的Quartus的FSM Viewer截下来的。
  首先是整个系统的概览:
  这个比上面的那个简单模型复杂多了吧!但是别担心,其实这个只是上面的那个CPU变得稍微复杂了一点,这个和上面那个不同的地方还有:这个CPU是一个多周期CPU而上面的Lab Exercise是一个单周期的CPU
  下图是程序计数器(PC),也就是常见x86处理器里面的ip(instruction poiniter):
  红色部分就是pc了,后面是一个三态桥,连接到了总线上面,这里的数据有时候是要送到地址总线,用于寻内存中的数据,以便完成Instruction Fetch过程。有时候又要送到通用寄存器的数据端,用于将pc的值送到其他寄存器。
  下面这个是IR(Instruction Register),这个是多周期处理器的典型特征,因为处理器在第一个周期里面将机器码从内存取出,然后存放到这个寄存器里面,后面的几个状态都是通过这个寄存器里面的数据作为指示执行操作的。
  下面介绍一下ALU,ALU是Arithmetic Logic Unit,即算术逻辑单元,这个装置的作用是进行算术操作和逻辑操作。典型的算术操作例
  如:1+1=2,11x23=253,而典型的逻辑操作例如:1 and 1=1,0 or 0 = 0,1<<3=8这种属于逻辑操作。
  而从图中大家也看得到,ALU的输出用一根很长的线连接到了后面,参考整个CPU的图的话,会发现这些线连到了通用寄存器上面,这是为了让运算的结果存放回 去,例如你用add eax,1的时候,eax的值被加上1然后放回eax,所以ALU的运算结果要用反馈送回到通用寄存器,而ALU的输入也应该有通用寄存器的输出。
  下面再介绍ADDRMUX:
  这个部件是用来选择地址的,右边的输出是CPU的地址总线,而CPU的地址总线就已经送出CPU了(也就是你能够在芯片的外表上看到引脚了),CPU的地址总线是送到存储器的地址端的,而现代的计算机系统实际上是相当复杂的,所以其实你家的计算机上CPU是通过北桥芯片访问内存的(当然也有将内存控制器做到 CPU里面的)左边是地址的来源,地址的来源即有通用寄存器,也有程序计数器,还有一个是直接从IR里面送出,这是因为有的立即数里面也包含内存地址信息。
  最后介绍通用寄存器:
  通用寄存器的作用就是用来保存中间值或者用于运算,例如  add eax,2
  相当于eax+2然后送回eax。
  最后介绍一下状态机,这个部分就是CPU的"灵魂",如果说有了上面那些部件CPU有了一副"躯体"的话,这一部分就是CPU的"灵魂"了:
  状态机基本上与系统所有的组件都连接到一起了,因为上面所说的所有动作的执行,都需要状态机的控制,状态机其实就是由一部分触发器构成的记忆电路和另外一部 分组合逻辑构成的次态译码电路构成,还有根据当前状态和输入进行译码的部分用于控制各个部件,下面是教科书上的典型FSM结构:
  而我们用的状态机状态转移图如下:
  因为这个处理器设计的很简单,所以没有出现很多状态,当处理器经历完以上的状态之后,处理器就执行完了一条指令。
  有的CISC的处理器用微指令进行控制,作用和状态机相近,这种结构出现在一些比较古老的处理器上,因为那个时候的设计工具和方法没有现在的先进,所以往往 改动硬件是困难的和高成本的,所以用微指令的话,做好了硬件的结构,要是需要改动只要修改微指令就好了,而现在的电子技术很发达,设计工具也很完备,所以 就有很多直接通过硬连线实现的处理器。
  好马配好鞍,有了处理器,我们就得给它配上一个好的程序,下面我们就用自己设计的处理器进行求和,从1加到100,因为我们没有设计编译器,也没有设计汇编器,所以程序只能用机器码写出,示例程序如下:
  我们不妨先写出程序的汇编代码:  mov [ADDR],r0;r0 = 0 mov r1,100 lop:add r2,r1 sub r1,1 cmp r1,0 jz ext mov r4,4 jmp r4(lop) ext:mov [ADDR],r2 jmp $
  先将内存中存放数据的地址清零,这样才能存放等下送来的结果,然后将r1寄存器存入循环次数(也就是求和的上限)。然后再将r1的值加到r2中来,r2其实就是放求和的寄存器,最后我们会将r2中的值送到内存中的某个地址存放的。
  然后将r1减去1,看看是否为0?如果为0则说明求和结束了,如果不是0则说明还要继续,结束后程序就跳到ext部分将结果存放到内存中某个地址(例子中给 的是49152也就是二进制的1100000000000000b),最后jmp $是为了让程序停在这一行,防止程序跑飞(跑飞的程序危害很大!有可能吧数据当代码或者把代码当数据!)
  转换成VerilogHDL语言如下:  module memory ( input [15:0] addr, inout [15:0] data, input rw ); reg [15:0] data_ram[0:16"b1111_1111_1111_1111]; integer i; initial begin for (i = 0; i <= 16"b1111_1111_1111_1111; i = i + 1) data_ram[i] = $random(); data_ram[0] = 16"b1000000100000000; //mov [ADDR],r0;r0 = 0 data_ram[1] = 16"b1100000000000000; //ADDR data_ram[2] = 16"b1000000010001000; //mov r1,100 data_ram[3] = 100; //100 //data_ram[2] = 16"b1110011001000000; data_ram[4] = 16"b0010000100010001; //lop:add r2,r1 data_ram[5] = 16"b1110000011001000; //sub r1,1 data_ram[6] = 16"b0000000000000001; //1 data_ram[7] = 16"b1110000000001000; //cmp r1,0 data_ram[8] = 16"b0000000000000000; //0 data_ram[9] = 16"b1110011010000000; //jz ext data_ram[10] = 16"b0000000000000011; //+3 offset(ext) data_ram[11] = 16"b1000000010100000;//mov r4,4 data_ram[12] = 16"b0000000000000100; data_ram[13] = 16"b0110011001100000;//jmp r4(lop) data_ram[14] = 16"b1000000100000010;//ext:mov [ADDR],r2 data_ram[15] = 16"b1100000000000000;//ADDR data_ram[16] = 16"b1110011001000000;//jmp $ data_ram[17] = 16"b1111111111111110;//-2 offset($) /*data_ram[0] = 16"b1000000010000000; //mov r0,imm data_ram[1] = 16"b0011111111111111; //imm data_ram[2] = 16"b0000000001111000; //mov r7,r0 data_ram[3] = 16"b1000000010011000; //mov r3,0 data_ram[4] = 16"b0000000000000000; data_ram[5] = 16"b1000000010100000; //mov r4,code of jmp r5 data_ram[6] = 16"b0110011001101000; //jmp r5 data_ram[7] = 16"b0000000101011100; //mov [r3],r4 data_ram[8] = 16"b1000000011110000; //mov r6,[0] data_ram[9] = 16"b0000000000000000; //[0] data_ram[10]= 16"b1000000100000110; //mov [255],r6 data_ram[11]= 16"b0000000011111111; data_ram[12]= 16"b0110011001011000; //jmp r3 */ end always @ (addr or rw or data) if (rw) data_ram[addr] = data; assign data = rw ? 16"hzzzz : data_ram[addr]; endmodule
  设计中CPU外围还需要一个内存设备(Memory),我用HDL对其建模,初始化的时候每个内存地址上对应的数据都初始化为随机的,然后只有从0开始的一系列地址被初始化为我写的代码,机器码对应的汇编指令在注释中已经给出。
  然后是结果,结果应该是r2从0变化到5050(1+2+3+......+100=5050)
  而r1则从100变化到0,变化到0后程序将进入死循环,停止在jmp $那一条。这是仿真开始的时候:
  大家可以看到初始化后,d0~d7都变成了0,这是r0~r7寄存器的Q端,而state_current和state_next则是状态机的现态和状态机 的次态,cpu的各个部件都通过这个状态机受到控制。状态名出现的顺序和上面的FSM Viewer的连线顺序是一样的。
  而且大家可以看到,d2从0变化到了0x64也就是十进制100,说明已经执行了第一次加法了。
  再来看看仿真结束:
  这时候d1变化到了0而d2变化到了0x13ba(十进制的5050),说明程序已经在我们设计的处理器里面运行并且成功的得出了结果!
  最后给出一些我用到的指令(跟x86的很像):  add dst,src 将src和dst相加并且送到dst寄存器中 mov [addr],src 将src的值送到以addr位地址的内存单元 sub dst,src 将dst减去src并且送到dst中去 cmp dst,src 将dst减去src 然后不送到dst中 只改变标志位 jz dst 当zf=1时(即上次的算术操作结果为0)则跳转到dst中去原文作者: STM32嵌入式开发
  原文标题:PID到底是个啥?讲个故事告诉你
  原文链接:https://mp.weixin.qq.com/s/iE88qv3SFzAf2NjUGGeuPw

1个月带薪假期?盘点频频升级的字节跳动福利想进入大公司享受好福利,还是先练就一身硬本领吧。最近一段时间,大家都在提寒冬,在今年,不仅阿里京东传出了缩招的消息,就连华为这样的大牛公司也传出停止社招的消息。消息一出来,马上有人外资撤离中国?真相是,加工厂变实验室芯片巨头高通公司在北京和上海设立研发中心,在深圳设立其全球首个创新中心特斯拉在上海不仅建设了超级工厂,还设立了以整车开发为基础的研发创新中心施耐德电气在北京上海深圳西安建立了四大研甩法拉利总裁,不愿当C罗老板娘的朱珠是不是真ampampquot名媛ampampquot人人都说,条条大路通罗马,可是如果你有一个身为开国将军的爷爷,还有一个身价百亿的父亲,那么你就可以用实力证明,别人需要走很远才有可能达到的地方,你一出生就已经到了!而朱珠,就是这样南非游记(8)约翰内斯堡失落之城皇宫酒店比林斯堡野生动物保护区与非洲最著名的综合娱乐场所太阳城只有一坡之隔。今晚我们入住太阳城的太阳城酒店(TheSunCityHotel),这是一家五星级酒店。酒店的大门。酒店的徽标。光福州永泰打造精酿啤酒小镇总投资约20亿元近日,永泰县劳德巴赫精酿啤酒小镇项目开工奠基仪式在城峰镇太原村举行。该项目总投资约20亿元,总用地面积170亩。据介绍,该啤酒小镇项目是按照德国工业4。0和4A级工业旅游景区标准,割了双眼皮像变了个人?这5位明星双眼皮做的很成功,不妨看看如今随着医学技术的不断发展,很多人都会通过医美手术来提升自己的颜值,尤其是双眼皮手术已成为年轻群体中普遍接受的一个整容项目。由于人种和种族的关系,不只是中国人,整个东方人的双眼皮都吃芹菜真的降血压嘛?不少高血压患者都会经常的吃芹菜,还会榨汁喝,而且有的人吃完真的血压降下去了,这到底是不是真的,今天就从背后的逻辑上讲一下。其实芹菜中含有非常丰富的维生素和膳食纤维,是能够对脂肪和糖注意!常憋尿会引起六大疾病1。尿路感染长时间憋尿会使膀胱内的尿液越积越多,含有细菌和有毒物质的尿液未能及时排出,就容易引起膀胱炎尿道炎等疾病。严重时,尿路感染还能向上蔓延到肾脏,引起肾盂肾炎,甚至影响到肾功失眠眼干脱发贫血过敏性鼻炎,8个验方应对小毛病失眠眼干脱发贫血过敏性鼻炎这些常见的健康小困扰,推荐几个简单的中医药方法调理,可以试试!润燥上海中医药大学附属龙华医院皮肤科主任医师宋瑜2019年在健康时报刊文表示,当皮肤干燥粗糙睡前随笔有关面试小露珠明天有两场面试,心里有点忐忑,感觉已经离开职场很久了,天天穿家居服灰头土脸的,都忘了怎么穿衣打扮了,很多东西都得重新学习。最近面试让我感受到,作为一个职场人,得体的穿上了年纪要管住嘴,这4种食物要少吃,医生劝告,别不听劝上了年纪要管住嘴,这4种食物要少吃,医生劝告,吃得越多疾病越多,别不听劝随着年龄的增长,疾病会变得越来越多,这是因为体质下降,加上免疫力受到了影响,但是有些老年人身体十分硬朗,虽然于铁成赢家密码是啥?乐山胜利石堰双双入选天府旅游名村于铁成文10月21日,四川省第四批天府旅游名县候选县(市区)和第二批天府旅游名镇名村名单的通知公布,乐山金口河区胜利村和夹江县石堰村双双上榜。当真是好事,也很不容易。应魅力乐山小伙湖北恩施清江烟云造仙境,红花石林天上人清江烟云造仙境,红花石林天上人。2006年拍摄天下游人何处去,路童遥指红花峡。清江南岸的恩施新塘,风景迷人,风情醉人,真是一个值得游玩的好地方。这里的红花石林,是形成于1。4亿年前走进马岛,带你看看马岛的真实现状马岛的全称是马尔纳维斯群岛,位于大西洋的南部,面积为1。22万平方公里,这个岛屿虽地处偏远,但是相当富裕,人均GDP为48411美元,马岛的常住人口有3000人,全境有200个岛屿从种风景到卖风景一株花的四重效应国庆前,位于宁夏固原市原州区三营镇的刘姥姥农庄,百亩向日葵采收结束。庄园主刘玲细数一株花带来的四重经济效应景观花海成为网红打卡点,盛夏时节游人如织向日葵鲜切花市场供不应求,一株花能千年古刹南安灵应寺灵应寺坐落在南安市洪梅镇,是一座千年古刹。我们的车驶到灵应寺的停车场,映入眼帘的是两块大石头,上面写着南安灵应省级森林公园3A旅游区。沿着幽静的石头路走上去,来到天王殿,天王殿的前过去10年,武汉6个新城区哪个发展最快,哪个还在原地踏步?最近看到武汉很多区都在讲各自过去10年的变化,感觉每个区进步都很快。比如东西湖,一下子成为了武汉最有潜力的开发区,已然跟光谷经开挤上了一个赛道!再比如黄陂,连续三年县域经济规模第一成年人结束一段关系的方式米兰昆德拉在生活在别处中写过一句话遇见是两个人的事,离开却是一个人的决定。这是一个流行离开的世界,但是我们都不擅长告别。成年人的世界里,结束一段关系,往往不是声嘶力竭地争吵,而是默女孩起名清波锦绣的女孩名,松间白月,竹下香泉2022年出生的小女孩,她们都是一只可爱的小老虎。我们无法做到十全十美,不过,每个人也都会有自身的优点与长处。因此,家长们在给虎宝宝们取名时,可以根据老虎本身灵活可爱的特点,帮助虎秋意浓大唐芙蓉园银杏叶已变黄大唐芙蓉园是在原唐代芙蓉园遗址以北,仿照唐代皇家园林式样建造的,全方位展示盛唐风貌的大型皇家园林式文化主题公园。大唐芙蓉园内建有紫云楼仕女馆御宴宫杏园芳林苑凤鸣九天剧院唐市等许多仿30强来了!2022环球旅游文化小姐郭焱煜环球旅游频道向阳而生,逐光而行因为旅行,所以遇见我们的30强来了再次PICK环球旅游文化小姐姐2022环球旅游文化小姐30强郭焱煜青春健康时尚睿智2022,美出你的影响力相约环球感免隔离入港30天,香港机场空无一人,港人直呼国际游客太少下面这张对比图表示了香港旅游业的现状,下图是发生疫情前香港最繁忙的机场游客数量,上天是实行免隔离入境30天的机场,可以看到门可罗雀,对比天壤之别,港人看了心痛,游客都去哪里了?免隔
贵州深山最原始民族,女人上衣只有两片,时而春光乍泄下面小编要说的是位于贵州深山老林的少数部落。(此处已添加小程序,请到今日头条客户端查看)听说这里的女孩子只穿两片衣服,好像有点春光乍现,来这里游玩的男士觉得尴尬。大家都知道,云南,以技术驱动物流改革,以科技赋能传统物流行业货运全面放开,全国有着庞大基数的第三方物流企业有不少开始向网络货运转变,再加上生产制造企业供应链企业以及互联网平台等玩家的活跃,网络货运的发展总体呈现出蓬勃发展的态势。点击输入图片行业知识国产芯片啥段位?飞腾华为鲲鹏芯片这些,能突围?就算国产芯片跟老美比,像39年波兰骑兵对阵装甲部队。但咱发展快。后面华为被卡脖子的压力会减轻,队友开始吸引火力。国内与华为鲲鹏芯片技术接近的公司,由原先没有,变成好几家。听业内朋友10行业逾80项行业数据指数在广州南沙发布发布现场南沙区政府供图中新网广州1月16日电(王坚舒霞)据广州市南沙区政府15日消息,全国首个数据交易领域的行业数据指数发布平台已在南沙上线,并集中发布了涵盖10个行业的逾80项行今年春晚名单出来了,主持人你认识几个?今年春晚主持人阵容出来了,竟然没有李思思主持。春晚主持人李思思从2012年开始,已经主持了9届春晚,2017年因为生二胎,错过了一届,2020年,不知何故,又错过一届,今年春晚她依一个人这样对你,就要赶紧绝交,完全没有留下来的必要了人这一辈子,如果连你自己都不懂得保护自己,心疼自己,那别人又怎么会去保护你呢?不管是谈恋爱还是交朋友,你首先要记得,凡是那些只会给你带来委屈和苦难的人,尤其是你为了他们付出了很多,情人,是命里的缘分人生在世命也运也布大道于天下施善念于人心虽无修行身亦是修行人洞明修行苦方开修行门众生之相在冰雪姐妹演唱的歌曲缘中,有这样一段歌词,其内容这样写道阿妈曾经说我们来到人间是前世修来的福黎明终会来临的名言1信念是鸟,它在黎明仍然黑暗之际,感觉到了光明,唱出了歌。2遇到了困难,不要埋怨自己,不要指责他人,不要放弃信心,不要逃避责任,而是要一起来战胜困难!3三年的同学友谊浓郁香醇,甜进孤寂男女孤独的是身体,寂寞的是心灵。孤独是浅层和表像的,寂寞是深层和无形的。男人总害怕孤独,女人常感到寂寞。男人依靠身体的接触来排遣孤独,女人通过心灵的交流来抚慰寂寞。孤独是外人眼里的形单生命中的人这一生,周遭的人来了一波又一波,世界上的人那么多,不是每一个人都会走到我们身边来。谈及我们重要的人,我们是感慨的热烈的温暖的有爱的充满力量的责任的。然而许许多多时刻,因为习以为常,美国制定登月计划,11年6次登月成功,为何之后50年不再登月?1961年5月25日,美国总统肯尼迪公开向全世界宣布,美国已经制定了以太阳神命名的阿波罗载人登月计划。到1969年7月,阿波罗号11号飞船成功载着三名宇航员登陆月球,人类首次实现了