




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章 嵌入式微处理器,主要内容,1 ARM CPU ISA的发展历史 2 典型ARM CPU Core体系结构 3 ARM编程模型 本章部分内容可以参考: ,ARM公司,成立于1990年11月 前身为 Acorn计算机公司 主要设计ARM系列RISC处理器内核 授权ARM内核给生产和销售半导体的合作伙伴 ARM 公司不生产芯片 另外也提供基于ARM架构的开发设计技术 软件工具, 评估板, 调试工具,应用软件,总线架构, 外围设备单元,等等,ARM CPU Core概述,ARM内核是一种32/64位RISC微处理器,具有功耗低、性价比高、代码密度高等三大特色。ARM处理器具有RISC体系结构的典型特征: 体积小、低功耗、低成本、高性能; 支持Thumb(16位)/ARM(32位)双指令集,能很好地兼容8位/16位器件; 大量使用寄存器,指令执行速度更快; 大多数数据操作都在寄存器中完成 寻址方式灵活简单,执行效率高 指令长度固定 所有指令都可以条件执行,以增大执行吞吐量。,2.1 ARM CPU ISA的发展历史,ARM CPU的指令集体系ISA(即ARM Instruction Set Architecture)从最初的V1版本发展到现在,先后出现了V1, V2, V3, V4, V4T, V5TE, V5TEJ, V6, V7,V8等主要的版本。 ARM V1V3版本的处理器未得到大量应用,ARM处理器的大量广泛应用是从其V4版本开始的 V7系列CPU被称作CorTex系列 到目前V8是最新的版本, 可以选择64或32执行状态。64执行状态针对64位处理技术,引入了一个全新指令集A64,可以存取大虚拟地址空间。,Development of the ARM Architecture,-ARM V4,ARMV4是目前支持的最老的架构,是基于32-bit地址空间的32-bit指令集。ARMv4除了支持ARMv3的指令外还扩展了: 支持halfword的存取 支持byte和halfword的符号扩展读 支持Thumb指令 提供Thumb和Normal状态的转换指令 进一步的明确了会引起Undefined异常的指令 对以前的26bits体系结构的CPU不再兼容,- ARMv4T,ARMv4T增加了16-bit Thumb 指令集,这样使得编译器能产生紧凑代码(相对于32-bit代码,内存能节省到35%以上)并保持32-bit系统的好处。 Thumb在处理器中仍然要扩展为标准的32位ARM指令来运行。用户采用16位Thumb指令集最大的好处就是可以获得更高的代码密度和降低功耗。,- ARM V5TE,1999年推出ARMv5TE其增强了Thumb体系,增强的Thumb体系增加了一个新的指令同时改进了Thumb/ARM相互作用、编译能力和混合及匹配ARM与Thumb例程,以更好地平衡代码空间和性能 并在ARM ISA上扩展了增强的DSP 指令集: 增强的DSP指令包括支持饱和算术(saturated arithmetic), 并且针对Audio DSP应用提高了70%性能。E扩展表示在通用的CPU上提供DSP能力。,- ARMv5TEJ,2000年推出ARMv5TEJ,增加了Jazelle扩展以支持Java加速技术(处理器指令层对JAVA加速)。 Jazelle技术比仅仅基于软件的JVM性能提高近8倍的性能减少了80的功耗。,- ARMv6,2001年推出ARMv6,它在许多方面做了改进如内存系统、异常处理和较好地支持多处理器。 SIMD扩展使得广大的软件应用如Video和Audio codec的性能提高了4倍。 Thumb-2和TrustZone 技术也用于ARMv6中。ARMv6第一个实现是2002年春推出的ARM1136J(F)-STM处理器,2003年又推出了 ARM1156T2(F)-S 和ARM1176JZ(F)-S处理器。,- ARMv7,ARMv7定义了3种不同的处理器配置(processor profiles): Profile A是面向复杂、基于虚拟内存的OS和应用的 Profile R是针对实时系统的 Profile M是针对低成本应用的优化的微控制器的。 所有ARMv7 profiles实现Thumb-2技术,比纯32位代码少使用31%的内存,高出38%的性能。同时还包括了NEON技术的扩展提高DSP和多媒体处理吞吐量400 ,并提供浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要。 关于ARM架构发展可以参考:,- ARMv8,2011年11月,ARM公司发布了新一代处理器架构ARM V8,ARM的首个64位架构。 在继承了V7架构的基础上,可以选择64或32执行状态。64执行状态针对64位处理技术,引入了一个全新指令集A64,可以存取大虚拟地址空间; 运用ARMv8指令集的产品: ARM 12年十月发布了Cortex-A53 and Cortex-A57 核心。 13年苹果基于V8架构的Apple 7使用在了iPhone 5S上。,ARM/Thumb的命名规范(Classic命名),由于ARM的每个版本都有一系列的可变版本,其命名规范(Classic命名)如下: 以ARMv开头 ARM指令集的版本号(15) 可变功能标识(T表示支持Thumb指令,M-表示支持乘法指令,E 增强型DSP指令,J Java加速器Jazelle,SIMD ARM媒体功能扩展),但是ARMv4和其上的版本缺省都支持M功能,因此ARMv4和其上的版本的标识中可以不用标识M. 如果3中描述的功能不存在,则在该功能标识符前加x,ARM处理器命名(Classic命名),采用上述的架构,形成一系列的处理器。有时候还要区分处理器核和处理器系列。不过,在这里其实不用区分太细,毕竟这是功能的小部分的变化,核心是相同的。 规则:ARMxyzTDMIEJF-S x - 处理器系列 y - 存储管理/保护单元 z - cache T - 支持Thumb指令集 D - 支持片上调试 M - 支持快速乘法器 I - 支持Embedded ICE,支持嵌入式跟踪调试 E - 支持增强型DSP指令 J - 支持Jazelle F - 具备向量浮点单元VFP -S - 可综合版本 如ARM7TDMI,ARM处理器的分类(现在常用命名),结构体系版本(Architecture) ARM v4T ARM v5TE ARM v6 ARM Cortex (v7),Processor Family ARM7 ARM9 ARM10 ARM11 ARM Cortex,按应用特征分类(定义3种不同的处理器配置) 应用处理器 Application Processor 实时控制处理器 Real-time Controller 微控制器 Micro-controller,特征:MMU, Cache 最快频率、最高性能、合理功耗,特征:MPU, Cache 实时响应、合理性能、较低功耗,特征:no sub-memory system 一般性能、最低成本、极低功耗,Embedded Processors,Embedded Processors,Which architecture is your processor?,作业二,1、查找资料确定自己的手机的CPU型号,是哪个厂家生产的,CPU是ARM的哪种体系结构版本?CPU有何特别的技术,简要介绍各种技术。以及此CPU其它性能指标。 10月28号晚20点之前交给学习委员,学习委员统一打包发给我。超过截止时间则没有本次作业成绩。 作业文件命名规则:学号-姓名-作业X 作业评分标准大概是从格式排版,到内容完整度、深度等方面考核,还有要看是否是经过多个资料整理分析的,还是直接复制一段网上文字的,根据这些评分。,作业二,作业二评分标准: 1、型号、厂家、体系结构版本各10分,共30分 2 、特别的技术 30分 3 、性能指标 25分 4、格式及排版 10分 5、作业命名规范 5分 其中2点,你的CPU中包含的特别的技术要有对应的解释,如Thumb、 NEON、 Jazelle、ARM TrustZone等。,- ARM Family,ARM7 Family,ARM9 Family,ARM10 Family,ARM11 Family,150DMIPS,300 DMIPS,500 DMIPS,1000 DMIPS,ARM Cortex Family,ARM Architecture,已广泛应用的ARM处理器,ARM7 世界上最为广泛使用的 CPU 之一 100MHz ARM9 100-300MHz,ARM11 芯片,ARM11 300-700+ MHz SIMD 指令扩展支持更丰富的多媒体应用 40多家授权芯片公司,FOMA N902i First ARM11 based phone,OMAP2420,i.MX31/i.MX31L,高性能的ARM嵌入式处理器,处理器提供超过2 DMIPS/MHZ 的性能 运行于 1GHz 频率 (90nm or 65nm 制造工艺) 功耗小于 300mW,ARM Cortex A8 Application Processor,Cortex系列处理器(命名及)对比,ARM Cortex A8 Application Processor,Cortex-M3 实现 $1 ARM芯片,ARM Cortex Architecture Thumb-2 ISA 3 Stage Pipeline 1.22 DMIPS/MHz 30% over ARM7TDMI 33K gates 30% smaller than ARM7TDMI,Luminary Micro的Stellaris系列MCU产品售价仅1美元,ARM Cortex-M3 微控制器内核,专门针对MCU应用领域而设计,突出低成本、低功耗和高效率。,生产ARM处理器的主要厂家,TI (德州仪器) Omap3430 Cortex-A8核600MHz (诺基亚N96) Omap3530 Cortex-A8核600MHz ARM+DSP双核 Samsung(三星) S5PC100 Cortex-A8核 600MHz (iPhone 3GS和M9都应用此芯片) S5PC110/S5PV210 Cortex-A8核 1GHZ Freescale(飞思卡尔) i.MX512/ i.MX513/ i.MX515 Cortex-A8核600MHz1GHz(在多款上网本中得到应用),生产ARM处理器的主要厂家,Marvell(马维尔) PXA930 800MHz Cortex-A8核 ARMADA 500/600/1000系列 Sheeva PJ4核心 1GHz1.2GHz(支持ARMv7指令集,架构异同) Qualcomm(高通) QSD8650A/ QSD8672(Snapdragon系列) 1.3G1.5G scorpion核心(支持ARMv7指令,架构异同) 骁龙400系列( Cortex-A7 ) MSM8928-红米NOTE 4G Nvidia(英伟达) Tegra ARM11核 700MHz Tegra2 (下一代产品) Cortex A8(或A9)核 MTK(联发科MediaTek) MTK MT6592八核, Cortex-A7 1.4-2GHZ 红米NOTE,主要内容,1 ARM CPU ISA的发展历史 2 典型ARM CPU Core体系结构 3 ARM编程模型,2.2 典型ARM CPU体系结构结构特征,ARM内核采用RISC体系结构。ARM体系结构的主要特征如下: (1)大量的寄存器,并可以用于多种用途。 (2)采用Load/Store体系结构。 (3)每条指令都条件执行。 (4)采用多寄存器的Load/Store指令。 (5)单周期指令内同时完成移位操作和ALU。 (6)通过协处理器指令集来扩展ARM指令集。 (7)体系支持Thumb指令集,2.2典型的ARM CPU CoreARM7TDMI结构,ARM7TDMI,Thumb 架构扩展, 提供两个独立的指令集: ARM 指令,均为 32位 Thumb指令,均为 16位 两种运行状态,用来选择哪个指令集被执行,内核具有Debug扩展结构,增强乘法器 (32x8) 支持64位结果,EmbeddedICE 逻辑,3 级流水线 冯诺依曼架构 CPI(Cycle Per Instruction) 约为1.9,乘法器,指令 解码,地址 自增器,nRESET,nMREQ,SEQ,ABORT,nIRQ,nFIQ,nRW,MAS1:0,LOCK,nCPI,CPA,CPB,nWAIT,MCLK,nOPC,BIGEND,ISYNC,nTRANS,nM4:0,D31:0,桶 移位器,32 位 ALU,DBE,写数据 寄存器,读数据 寄存器,地址寄存器,寄存器 Bank,A31:0,ABE,及,控制 逻辑,PC Update,解码站,指令 解压缩,Incrementer,P C,A B u s,B B u s,A L U B u s,ARM7TDMI Core的结构,ARM7TDMI引脚逻辑图,ARM7TDMI指令流水线,为增加处理器指令流的速度,ARM7 系列使用3级流水线。 允许多个操作同时处理,而非顺序执行。 PC指向正被取指的指令,而非正在执行的指令。,从存储器中读取指令,解码指令中用到的寄存器,寄存器读(从寄存器Bank) 移位及ALU操作 寄存器写(到寄存器Bank ),PC PC,PC - 4 PC-2,PC - 8 PC - 4,ARM Thumb,ARM9TDMI指令流水线,Instruction Fetch,Shift + ALU,Memory Access,Reg Write,Reg Read,Reg Decode,FETCH,DECODE,EXECUTE,MEMORY,WRITE,ARM9TDMI,ARM or Thumb Inst Decode,Reg Select,Reg Read,Shift,ALU,Reg Write,ThumbARM decompress,ARM decode,Instruction Fetch,FETCH,DECODE,EXECUTE,ARM7TDMI,理想的3级流水线(ARM7TDMI:无访存操作),ARM的参有LDR指令流水线,Cortex-A8的指令流水线(13级),本节重点,1、ARM架构发展史,2,3,ARM处理器特点,ARM ISA的版本情况,ISA命名规则,ARM处理器命名规则:ARM7TDMI,1,4,ARM处理器分类:M、R、A,本节重点,2、 ARM典型CPU,2,ARM 7的结构,ARM7的三级流水线,1,主要内容,1 ARM CPU ISA的发展历史 2 典型ARM CPU Core体系结构 3 ARM编程模型,2.3.1数据宽度(类型),数据类型 字节型数据(Byte):数据宽度为8bits 半字数据类型(HalfWord):数据宽度为16bits,存取式必须以2字节对齐的方式 字数据类型(Word):数据宽度为32bits,存取式必须以4字节对齐的方式,2.3.2工作状态和工作模式工作状态,处理器有两种工作状态: ARM:32位,执行字对准的ARM指令 Thumb:16位,执行半字对准的Thumb指令 ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容,2.3.2工作状态和工作模式工作状态,进入Thumb状态: 执行BX指令,并设置操作数寄存器的状态(位0)为1。 在Thumb状态进入异常(IRQ, FIQ, UNDEF, ABORT,SWI etc.),当异常处理返回时自动转换到Thumb状态 进入ARM状态: 执行BX指令,并设置操作数寄存器的状态(位0)为0。 进入异常时,将PC放入异常模式链接寄存器中,从异常向量地址开始执行也可进入ARM状态,;从Arm状态切换到Thumb状态 LDR R0,=Lable+1 BX R0 ;从Thumb状态切换到ARM状态 LDR R0,=Lable BX R0,地址最低位为1,表示切换到Thumb状态,地址最低位为0,表示切换到ARM状态,跳转地址标号,作业三,查找资料,撰写分析说明,回答以下问题: ARM跳转指令有几种?分析为什么由跳转到Thumb状态要用BX指令?为什么地址最后要“+1”?ARM指令是不是对齐的?是什么对齐的?指令为什么需要对齐?有什么好处? 说明:可以参考资料,但不能全部直接复制粘贴,问题回答缺一个扣一个的分,回答不准确的也扣分。格式乱七八糟的也会扣分。 作业文件命名规则:学号-姓名-作业三,2.3.2工作状态和工作模式 工作模式,Cortex-A8内核的处理器模式,2.3.2工作状态和工作模式工作模式,User模式,程序不能访问有些受保护的资源,只能通过异常的形式来改变CPU的当前运行模式,特权模式可以存取系统中的任何资源,System模式,与User模式的运行环境一样 但是它可以不受任何限制的访问任何资源 该模式主要用于运行系统中的一些特权任务,FIQ模式,IRQ模式,Supervisor模式,Abort模式,Undefined模式,异常模式:主要是在外部中断或者程序执行非法操作时会触发,Monitor模式,2.3.3寄存器 ARM寄存器概述,ARM Cortex-A8处理器有40个32位寄存器寄存器 32个通用寄存器 1个程序计数器 7个状态寄存器 这些寄存器不能同时看到 不同的处理器状态和工作模式确定哪些寄存器是对编程者是可见的。,ARM微处理器: ARM Cortex-A寄存器,ARM 有40个32-Bits长的寄存器: 32个通用寄存器(完全通用,用于存放数据或地址) 1个PC( program counter) 1个CPSR(current program status register) 6个SPSR(saved program status registers) 当前处理器的模式决定着哪组寄存器可操作. 任何模式都可以存取: 相应的r0-r12(除FIQ模式外共用-FIQ只共用r0-r7) 相应的 r13 (the stack pointer, sp) 和 r14 (the link register, lr) r15 ( the program counter, pc),所有模式共用。 CPSR(current program status register, cpsr),所有模式共用 特权模式 (除system模式) 还可以存取: 相应的 spsr (saved program status register),ARM微处理器: Thumb State寄存器,Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为: 8个通用寄存器R0R7; 程序计数器(PC); 堆栈指针(SP); 链接寄存器(LR); 有条件访问程序状态寄存器( CPSR)。,ARM微处理器: Thumb State寄存器,ARM State 与Thumb State寄存器关系,低寄存器,高寄存器,注意:在发生异常时,处理器自动进入ARM状态。,处理器模式与寄存器的关系,异常发生时伴随的模式切换意味着, 被调用的异常处理程序会访问: 它自己的堆栈指针 (SP_) 它自己的链接寄存器 (LR_) 它自己的备份程序状态寄存器 (SPSR_) 如果是FIQ异常处理, 5个其它的通用状态寄存器 (r8_FIQ to r12_FIQ) 其它寄存器和原来模式下的寄存器是相同的,2.3.3寄存器 通用寄存器,通用寄存器是R0-R15的寄存器,分为三类 没有对应影子寄存器的寄存器R0-R7 有对应影子寄存器的寄存器R8-R14 程序计数器R15 (或者PC) 影子寄存器是指该寄存器在不同的模式下对应的物理寄存器,2.3.3寄存器 通用寄存器,R0-R7 所有模式下,R0-R7所对应的物理寄存器都是相同的 这八个寄存器是真正意义上的通用寄存器,ARM体系结构中对它们没有作任何特殊的假设,它们的功能都是等同的。 在中断或者异常处理程序中一般都需要对这几个寄存器进行保存。,2.3.3寄存器 通用寄存器,R8-R14 访问的物理寄存器取决于当前的处理器模式,若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。 R8-R12各有两组物理寄存器:一组为FIQ模式,另一组是除FIQ以外的其他模式。 R13-R14各有6个分组的物理寄存器,一个用于用户模式和系统模式,其他5个分别用于5种异常模式。 R13(也被称为SP指针)被用作栈指针,通常在系统初始化时需要对所有模式下的SP指针赋值,当CPU在不同的模式时栈指针会被自动切换成相应模式下的值。 R14有两个用途,一是在调用子程序时用于保存调用返回地址,二是在发生异常时用于保存异常返回地址。,不同模式下堆栈指针的初始化,在系统初始化(即系统复位)时需要初始化各模式分组的堆栈指针寄存器R13(R13_svc、R13_irq、R13_fiq、R13_abt和R13_und ),这样才能在进入不同的模式时自动切换使用不同的堆栈空间。初始化时需注意堆栈指针必须保持8字节对齐。,;中断模式堆栈的设置(涉及到CPSR格式和MSR指令) MSR CPSR_c, #0x000000D2 ;切换到中断模式 LDR R1, = IrqStack MOV SP, R1 ;设置中断模式堆栈指针 ;快速中断模式堆栈的设置 MSR CPSR_c, #0x000000D1 ;切换到快速中断模式 LDR R1, = FiqStack MOV SP, R1 ;设置快速中断模式堆栈指针 ;中止模式堆栈的设置 ,链接寄存器R14(LR)-1,R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址; 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。,链接寄存器R14-2,R14寄存器与子程序调用,MOV PC,LR,R14(地址A),1.程序A执行过程中调用程序B;,操作流程,2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;,3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;,链接寄存器R14-3,R14寄存器与异常发生,异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。,R14寄存器注意要点,当发生异常嵌套时,这些异常之间可能会发生冲突。 例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。,链接寄存器R14-4,R14寄存器注意要点,a,return,地址A,1.执行用户模式下的程序;,2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;,3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;,未被破坏,链接寄存器R14-4,R14寄存器注意要点,a,地址A,1.执行用户模式下的程序;,2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;,3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;,未被破坏,a,return,地址B,4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序;,5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;,被破坏,6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;,return,return,解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。,2.3.3寄存器 通用寄存器,R15 用作程序计数器(PC),可以被读写 读到的PC的值是PC当前值加8(2个指令的长度,三级流水线情况下),写PC则转移到写入地址执行程序。 ARM state:4字节对齐,最低两位 bits 1:0永远为0(V4以上版本,V3以下是把写入值与0XFFFFFFFC与操作) THUMB state:2字节对齐,最低位bit 0为0 注:ARM存储器按字节组织,2.3.3寄存器 程序状态寄存器,ARM7TDMI内核包含1个CPSR(当前程序状态寄存器)和5个供异常处理程序使用的SPSR。CPSR在所有的模式下都是可以读写的,反映了当前处理器的状态,其包含:: 4个条件标志(负(N)、零(Z)、进位(C)和溢出(V) ) 2个中断使能标志 5个当前处理器的模式编码位 其它的一些状态和控制标志(ARM/Thumb),条件位: N = Negative result from ALU Z = Zero result from ALU C = ALU op
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 写作考试必考题目及答案
- 小游击队员题目及答案
- 因为有了我作文400字小学作文13篇
- 专业培训合作协议书合同
- 我的爸爸200字10篇范文
- 时间与管理课件思路
- 时政课课件教学课件
- 时代城汽车知识培训课件
- 夸父逐日扩写600字(7篇)
- 我选择放弃作文800字7篇
- 《氧化还原反应》完整版课件
- 人工智能导论课件
- 有效沟通:金字塔原则课件
- 做一名新时代的优秀教师课件
- 苏科版三年级上册劳动第二课《学定时》课件(定稿)
- 中国古代的美育思想课件
- 日周月安全检查记录表
- 风力发电项目报价清单 (风机基础等)
- 重庆物业服务收费管理办法-重庆物价局
- GA∕T 1046-2013 居民身份证指纹采集基本规程
- (高清正版)SL 310-2019 村镇供水工程技术规范(完整版)
评论
0/150
提交评论