已阅读5页,还剩74页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章设计验证 随着集成度的提高 系统的规模日益庞大且复杂 强壮的系统应有完备的验证作保障 验证工作量远大于系统设计工作量 验证工作的基本技术和方法 Page1 目前 验证一般通过仿真实现本章节中 验证和仿真不加区分 4 1验证概述 Page2 验证过程是证明设计正确的过程 验证的目的是为了保证设计实现与设计规范是一致的 保证从设计规范开始 经过一系列变换后得到的网表与最初的规范是一致的 整个变换的过程是正确的 4 1 1验证的概念 Page3 4 1验证概述 从自然语言表述的系统规范变换成完整的 可验证和无二义性的系统规范 从系统规范变换成可实现的模块设计规范 从模块设计规范变换成RTL及代码描述 从RTL代码通过综合工具变换成门级网表 从门级网表通过后端布局布线工具变换成具有延时信息的网表 FPGA设计可能包含的几个变换 Page4 4 1验证概述 验证是一个多次重复的过程 是一个不断向期望结果靠近的过程 系统规范 网表 交换 验证 Page5 4 1验证概述 验证和测试是ASIC设计流程中两个不同的环节 验证的目的则是为了确认设计符合设计规范 目前验证一般通过仿真实现 测试的目的是为了确认生产后的设计产品是否合格 正确 一般由加工厂家或封装测试厂家完成 4 1 2验证和测试 VerificationvsTest 4 1验证概述 系统规范 网表 芯片 电路设计 生产 验证 仿真 测试 对物理器件高低电平的确认不属于本教材范畴 对设计规范及功能的确认 Page6 4 1验证概述 传统的电子线路设计验证方法 4 1 3Top Down Bottom Up验证方法 目前的电子线路设计验证方法 逻辑设计 画电路图 搭建电路 测试验证 借助EDA工具在计算机上进行RTL级设计和验证 Page7 4 1 3Top Down Bottom Up验证方法 Top Down验证法 系统级验证 根据系统规范对系统进行建模 并对建立的模型进行验证 功能验证 验证设计的RTL代码应符合系统规范 主要方法 功能仿真 形式化验证为辅 门级网表验证 通过功能仿真或形式化工具检验RTL代码和综合后网表的是否相等 时序验证 验证综合后含有延时信息的网表时序是否满足要求 对于同步设计一般通过静态时序分析工具完成验证 Page8 4 1 3Top Down Bottom Up验证方法 Bottom Up验证法 模块级验证 验证模块的各种工作情况 保证每个单元的设计质量 子系统验证 系统级验证 分层次组装模块进行子系统验证直至完成系统级验证 备注 系统级验证 目标是验证整个设计的功能 验证主要集中在设计和外环境之间能否协调工作 包括一些极端情况 边界条件和错误处理等 Page9 目前主流的两类 验证技术 4 1 4验证技术 1 基于形式化的验证 通过数学的方法 证明设计的功能是否与规范一致 等价性检验 比较两个设计是否完全等价 两个网表比较 网表与RTL代码比较模型检验 根据设计的RTL代码 提取有限状态机并穷举搜索设计状态空间 验证设计特性 模型检验工具 Cadence的FormalCheck IBM的Sugar和Sypopsys的Vera 局限性很大1 设计规模越来越大复杂2 模型检验所描述的特性有限 4 1 4验证技术 2 基于TestBench的验证 目前主要的验证方式 Testbench 测试平台即 Testbench产生激励给被验证设计 DUV 或待测设计 DUT 同时检查DUV DUT输出是否满足要求 Page10 4 1 4验证技术 TB结构模型 黑盒验证法白盒验证法灰盒验证法 解释 DUV DUT DesignUnderVerificationDesignUnderTest Testbench功能 为DUV DUT提供激励信号正确实例化DUV DUT将仿真数据显示在终端或者存为文件 也可以显示在波形窗口用于分析复杂设计可以使用EDA工具 自动比较仿真结果与理想值 激励 实例化DUT 终端显示值 存成文件 波形显示 自动比较结果正确性 4 1 5仿真工具 1 仿真器 仿真器是验证中最常用的工具 仿真器试图创建一个能够模拟真实设计的工作环境 使验证工程师和设计进行交互 在设计生产之前发现设计错误 以减少损失 之所以称为仿真器 是因为它们是真实状态的一种近似 Page11 Page12 4 1 5仿真工具 验证人员在仿真器中 通过testbench为设计提供输入激励 为电路建立模拟工作环境 仿真器通过一定方式与验证人员交互 将电路的输出状态随环境变化的信息反映给验证人员 业界常用的仿真器有 Cadence的NC Verilog Synopsys的VCS和Mentor的ModelSim Page13 4 1 5仿真工具 最常见的和仿真器一起使用的验证工具 通过波形观察器的图形界面 设计人员可以直观地观察随时间变化的信号以及信号之间的相互关系 定位设计错误或测试文件的错误 2 波形观察器工具 TB运行中即统计被测设计代码的测试覆盖情况 给出报告 验证者可依据此报告分析判断验证工作的完备性 几个主要覆盖分析方面 3 代码覆盖分析工具 4 1 5仿真工具 使用代码覆盖技术必须非常了解设计细节 通过代码覆盖分析工具了解哪些语句 路径已经被执行 那些表达式已经被执行 那些过程没有被触发等等 然后修改测试程序 提高代码覆盖率 提高覆盖率可以提高测试的完备性 语句覆盖路径覆盖表达式覆盖 触发覆盖自动机覆盖 Page15 4 1 6验证计划和流程 随着设计规模的加大 验证工作量越来越大 制定验证计划或者 验证规范 是验证过程的一个重要环节 验证计划可以提高验证效率 减少验证的盲目性 制定 验证规范 在 系统设计规范 签收 signoff 后开始 Page16 4 1 6验证计划和流程 应该注意 验证工程师应与总体设计师以及设计人员一起讨论整个设计功能 模块划分 接口方式等 详尽理解设计规范 在此基础上制定 验证方案 确定需要验证的功能特性 确定验证策略 规划验证环境和验证程序的开发 确定整个验证所需的验证人员的数目 资源和时间等等 Page17 4 1 6验证计划和流程 典型的验证流程 Page18 4 1 6验证计划和流程 验证方案 的要点 验证什么 如何验证 确定设计需要验证的特性 验证内容 确定验证策略 系统级 模块级 黑 白 灰盒式验证 激励产生策略 验证响应方式 观察法 记录法 自检查法 人员 设备 环境管理安排等 确定验证方法 具体验证的步骤和方法 如自顶向下 自下向上 激励的具体方式等 4 1 6验证计划和流程 制作标准的测试组件和测试模板 个人编制相关部分的测试方案 编制 调试测试程序 进行系统测试 测试记录及分析 编制测试报告 回归测试 对发现问题修改后的设计重新测试 1 确认修改是否正确 2 修改是否影响其他设计 4 2功能验证 所谓的 验证程序 是对 待测电路 的输入序列和预期输出相应的代码集合 4 2 1验证程序 TestBench 的组成 一个典型的验证程序模型 4 2 1验证程序 TestBench 的组成 一个典型的Testbench的六个组成部分 DUV 被验证的设计 DesignUnderVerification 可能是RTL设计 也可以是网表 输入激励 产生DUV需要的各种输入信号 时序控制模块 产生TB和DUV所需的时钟信号 参考模块 产生预期信号 行为级编码模块 以验证过正确的设计 诊断记录 相关信号变化情况的记录 断言检查器 对特定的信号形式检测 编写仿真激励 1 仿真激励与被测对象的连接模块实例的端口方式 1 名称对应 将模块实例外部的信号直接对应于模块的端口名称 modulehalfadd x y sum cout endmodule名称对应halfaddu halfadd a x ax y ay sum asum cout acout 2 位置对应 外部信号按照该模块端口声明的顺序一一对应 Halfaddu halfadd b bx by bsum bcout 2 使用initial语句和always语句通常主动产生激励用initial 被动检测响应用always 前者执行一次 后者不断重复执行 在initial中多次运行一个语句块 使用嵌入循环语句 while repeat for和forever initialbeginforeverbengin endend 条件发生时执行always posedgeclk beginsiga sigb end 3 时钟 复位写法 1 普通时钟信号 产生一个周期为10的时钟parameterFAST PERIOD 10 regclk initialbeginclk 0 forever FAST PERIOD 2 clk clk end 用always产生一个周期为10的时钟parameterFAST PERIOD 10 regclk initialclk 0 always FAST PERIOD 2 clk clk 2 非50 占空比时钟parameterHi time 5 parameterLo time 10 regclk alwaysbegin Hi timeclk 0 Lo timeclk 1 end由于clk0时刻未初始化 前5纳秒输出为x 3 固定数目时钟 产生两个高脉冲parameterPulseCount 4 PERIOD 10 regclk initialbeginclk 0 repeat PulseCount PERIOD 2 clk clk end 4 异步复位信号parameterPERIOD 10 regRst n initialbeginRst n 1 PERIODRst n 0 5 PERIOD Rst n 1 endRst n为低有效 代码表示10ns时复位 复位延时50ns 5 同步复位 initialbeginRst n 1 negedgeclk 等待时钟下降沿Rst n 0 30 negedgeclk 等待时钟下降沿Rst n 1 end 另一种同步复位initialbeginRst n 1 negedgeclk 等待时钟下降沿Rst n 0 复位开始repeat 3 negedgeclk 经过3个时钟下降沿Rst n 1 复位撤销end 4 利用系统函数和系统任务 display在显示数据 display Addr b Data d add data 时序检查系统任务 setup sig d posedgeclk 1 若clk上升沿到达之前的1ns时间内sig d发生跳变 则建立时间不足告警 hold posedgeclk sig d 0 1 若clk上升沿到达之后的0 1ns时间内sig d发生跳变 则保持时间不足告警dato out random 256 从文本文件中读出和写入数据 类似C语言文件操作 搭建仿真环境 单顶层的TestBench代码 moduletestbench 测试平台顶层 时钟激励产生initialbengin end 复位激励产生initialbegin end 各种测试激励initialbengin end 设计模块实例mpiu mpi clk clk rst n rst n mpi data data mpi addr addr mpi csn csn mpi rw rw 确认仿真结果 1 直接观测波形2 观察文本输出利用系统任务打印的信息查看仿真结果 display monitor fdisplay3自动检查仿真结果 1 数据库比较法 数据库存储期望结果 2 波形比较法 存储标准波形 仿真结果与其比较 3 动态自检法 编写行为级与DUT功能一致代码 同时读入激励 比较输出结果 举例 加法器 Page22 4 2 1验证程序 TestBench 的组成 BookPage141例 一个编码器的验证 Page23 4 2 2实用构造Testbench技术 1 使用行为级代码描述验证模型 设计工程师编写的电路模型代码 要从实现的角度出发 从物理实现上考虑verilog代码的写法 写出的代码必须是可综合的 验证工程师编写的用于验证的代码不必考虑到内部的实现问题 只要按规范描述出一个设计的功能就可以了 也就是说只要建立一个设计 逻辑模型 行为模型代码的描述往往比RTL代码的描述简单的多 容易正确描述电路功能 Page24 4 2 2实用构造Testbench技术 2 使用抽象数据类型 行为级代码可以不受可综合要求的约束 可以在更高的层次上实现数据的抽象 使得验证程序编写时更方便 实数数据类型 数字滤波器的仿真例子 P148 例4 4 记录数据类型 记录是一种抽象的数据结构 可以由不同类型信息组成 可以方便的表示在具有一定结构的数据 Verilog语言本身并不支持记录结构 通过一些方法可以模拟记录的实现 Page25 记录的用法 记录的用途 在仿真中主要用于描述一定格式的数据块 创建一个没有参数的module 内部的所有变量都用寄存器类型声明 当模块实例化后 用模块中定义的变量表示记录中的域 对记录可以进行行为级的处理 准备好仿真数据 备注 行为级数据准备不占用信号时序时间 4 2 2实用构造Testbench技术 Page30 4 2 2实用构造Testbench技术 多维数组数据类型 数组类型是记录类型的特例 域等长 二维数组在设计中也用于对RAM等数据结构的建模 测试激励需要构造有固定格式的数据帧时 使用二维数组是一种较好的方法 例如SDH数据帧信元的构成等 Page31 4 2 2实用构造Testbench技术 3 编写结构化的仿真代码 行为代码通常按功能和需求划分结构 复杂的仿真功能 可以按功能划分若干个子功能 然后编写行为代码实现这些子功能 在Verilog中 可以用module function和task实现仿真代码结构化 封装是实现结构化仿真编码的主要手段 封装的主要思想是将实现的细节隐藏起来 将功能和它的实现完全分离开 只要封装的接口不变 实现的修改和优化不影响用户的使用 Page32 4 2 2实用构造Testbench技术 实现封装的几种方法 变量局部化 方法一 变量声明时局部化 尽可能地将变量的声明局部化 避免变量在其它模块间相互作用 产生不正确地结果 方法二 用task和function使变量局部化 在verilog语言中 用task和function也可以使说明局部化 Page33 4 2 2实用构造Testbench技术 integerI 全局I alwaysbeginfor I 0 I0 I I 1 begin endend alwaysbegin block 1integerI 局部Ifor I 0 I0 I I 1 begin endend Page34 4 2 2实用构造Testbench技术 实现封装的几种方法 总线功能模型BFM BusFunctionModule 总线功能模型BFM 也称为事务处理程序 transactions 描述模块 所谓BFM就是DUV和TB之间的一种抽象 它是任务的集合 集合中的每个任务完成一个特定的事务 事务可以是非常简单的操作 如内存的一次读 写 也可以是非常复杂的操作 如通信中结构化的数据包 BFM被直接链接到DUV上 TB通过 函数 功能 调用实现DUV的操作 Page35 4 2 2实用构造Testbench技术 TB BFM DUV模型 Page36 例4 11带有微机接口芯片MPI的仿真 8255 8251等 CPU接口可抽象成右图形式 根据预定义的协议 由CPUBFM产生CPU接口所需要的实际物理信号 图右侧信号 图左侧接口用特定的数据初始化一个事务 根据不同的事务 CPUBFM产生不同物理信号 把左侧的接口称为过程接口 在BFM中根据CPU接口的时序 应用task产生一次CPU读写操作所需要的各种信号 Page37 modulecpu bfm A D ALE WRB RDB CSB output 13 0 A 地址总线inout 7 0 D 双向数据总线outputALE WRB RDB CSB 控制线reg 13 0 A regALE WRB RDB CSB 定义CPU读写信号的所需要的时序参数parametertSalr 10 tSlr 5 Prd 30 tHrd 10 parametertHar 10 tVl 5 tSalw 10 tVwr 40 parametertSdw 20 tSlr 5 parameterdata width 8 addr width 14 reg data width 1 0 work reg Page38 taskrd cpu 读操作的时序 input addr width 1 0 addr begin 10A addr CSB 1 b0 tSalr tVl ALE 1 b1 tVlALE 1 B0 tSlrRDB 1 B0 Prdwork reg D RDB 1 B1 tHarA 14 hzzzz CSB 1 b1 endendtask taskwr cpu 写CPU操作input addr width 0 addr input data width 0 write value begin 10A addr CSB 1 B0 tSalw tVl ALE 1 B1 tVlALE 1 B0 tSlwWRB 1 B0 tVwr tSdw D write value WRB 1 b1 tHdwReleaseD A 14 Hzzzz CSB 1 B0 endendtaskendmodule cpu interface Page39 在测试程序中 实例化cpu bfm模块 直接和被测试的设计连接 通过层次关系调用元件的cpu任务 实现对目标器件的读写操作 moduletestbench cpu bfmcpu inst A A D D ALE ALE WRB WRB RDB RDB CSB CSB DUVDUV inst othersignal cpusignal A A D D ALE ALE WRB WRB RDB RDB CSB CSB othersignal 例4 12cpu interface的使用方法 Page40 initialbegin 300cpu inst rd cpu 14 h0010 此时cpu inst work reg中既存储了读出的数 otheroperation 1000cpu inst wr cpu 14 h0001 8 h3C otheroperationendendmodule testbench 例4 12cpu interface的使用方法 Page41 4 编写具有层次结构的仿真代码 4 2 2实用构造Testbench技术 上面的CPU接口的仿真代码例子中包含了一定的层次结构 验证工程师在最顶层 只需要写出特定的完成某项功能验证的事务序列 而这些序列中的事务去调用不同的事务处理程序 这些不同的事务处理程序又可以去调用更低层的事务处理程序 以产生CPU接口所需要的物理信号 这种层次化结构 可以为验证工程师提供一个良好的可操作环境 使他们更关注于DUV的验证而不是注意如何产生DUV接口信号 Page42 5 编写具有自检查功能的仿真程序 4 2 2实用构造Testbench技术 设计的有效性必须通过设计对激励响应的结果得以体现 有几种方式可以检查设计响应是否正确 通过人工观测DUV输出波形的结果是否正确 通过日志的方式 将一些结果输出到文件中 在仿真结束后 分析日志文件 自检查方式 Page43 6 验证代码的重用 4 2 2实用构造Testbench技术 大规模FPGA ASIC设计一般由多个层次构成 设计人员应对各个层次上的子模块逐一验证 然后将这些验证过的模块连接在一起形成高层规模较大的设计 为这些不同的子模块开发不同的验证环境需要花费大量的时间和精力 验证重用是解决这一问题的有效方法 验证人员利用大量的可重用验证模块构造出不同层次模块的验证环境 Page44 6 验证代码的重用 两种形式 4 2 2实用构造Testbench技术 同一个芯片设计中验证重用在验证的不同周期或设计的不同阶段验证代码的重用 好的验证代码可以在子模块级和系统级验证时均可重用 不同芯片设计之间的重用验证代码可以用于同一芯片的更新换代上 或用于一个包含许多标准设计模块的芯片或与以前设计有相同性的新设计中 Page45 6 验证代码的重用 4 2 2实用构造Testbench技术 重用的模块越多 所考虑的事项和投入的精力就越多 需要在验证重用所取得的效果和投入重用的资源做些平衡 仿真程序被划分成两个主要的部分 可重用的验证代码与专用的验证代码 Page46 4 3基于断言的验证 基于断言的验证是一种有效的 白盒 验证方法 它在RTL设计的源代码中监视系统的关键行为 特别是在某些特殊情况下的行为 通过断言的方法 可以增加观测点 在仿真过程中及时发现设计错误 断言中用到的概念 特性 Property 用于刻画设计特征的一些行为属性 事件 Event 验证过程的一个行为 断言 Assertion 用于监控或检查施加在设计上的一些规则和假设的一种机制 Page47 4 3基于断言的验证 用户可以用各种硬件描述语言如Verilog VHDL或SystemC等形成断言以监视设计在仿真过程中的行为 也可以利用已有的断言库 将断言直接加入到设计中 如 Accellera 推出的采用了断言思想的验证库OVL OpenVerificationLibrary 该库中用HDL语言 VHDL和Verilog 定义和实现了一些非常常用的属性声明 一些专用的硬件特性描述语言 PropertySpecificationLanguage PSL 和断言语言已经称为工业标准 并开始推向市场 例如IBM公司开发的Suger语言已被Accellera组织接受 成为PSL工业的标准 Page48 4 3基于断言的验证 断言可以有多种实现方法 最常用 最简单的方法是所谓的 叙述性 的实现方法 即在设计结构中描述断言 断言和设计中的其他结构一起并发地计算 叙述性断言实际上是一些代码 这些代码中一般包含三部分 断言的条件 报告信息 错误的严重程度以及相关的处理 例 assert always severity level options msg inst name clk reset n test expr 备注 assert always模块是Accellera组织OVL库中的标准件 详见书中page166 Page49 modulecounter 0 to 9 reset n clk defineASSERT ON1inputreset n clk reg 3 0 count always posedgeclk beginif reset n 0 count 9 count 1 b0 elsecount count 1 endassert always 0 0 error countnotwithin0and9 valid count clk reset n count 4 b0000 always断言endmodule 例4 14模9计数器中使用always断言 Page50 4 3基于断言的验证 一个断言实际上就是一段Verilog代码 用模块的形式将其封装起来 使用时直接实例化 把断言嵌入在设计中 当测试条件不成立的时候 触发该断言 在验证中使用断言的优点 节约仿真时间 一旦出现了仿真错误 可以立即停止仿真 增加了设计的可观察性 减少设计错误定位时间 可以准确而快速定位设计错误 减少人为干预 自动监控测试 Page51 4 4时序验证 时序验证的目的是为了确认物理实现的电路时序是否满足时序规范要求 时序验证的方法分为动态验证和静态验证两种 本节简单地介绍静态时序分析中的一些基本概念 备注 简介动态时序分析概念 4 4 1静态时序分析概述 静态时序分析是通过分析设计中所有可能的信号路径以确定时序约束是否满足时序规范 不依赖于激励 且可以穷尽所有路径 运行速度快 占用内存少 对于同步设计电路 仅借助于静态时序分析工具即可完成时序验证的任务 Page52 4 4时序验证 常见的静态时序分析的工具 Synopsys公司的Primetime和MentorGraphic公司的SSTVelocity是比较有影响的用于全定制IC时序分析的工具 FPGA供应商如Altera Xilinx和Actel也在其集成环境中嵌入了静态时序分析工具 Page53 四种基本时序路径 路径1 Path1 从输入管脚到D触发器的输入 路径2 Path2 从D触发器的输入到下一个D出发器的输入 路径3 Path3 从D触发器的输入到输出管脚 路径4 Path4 从输入到输出 时钟路径 clockpath 从一个时钟的输入通过一个或多个缓冲器到达一个时序元件的时钟管脚的路径 Page54 4 4 1静态时序分析概述 一条路径的延时等于在该条路径上所有元件延时和连线延时之和 静态分析工具通过反向跟踪路径终点到起点所有的延时来计算路径的传输延时 在时序分析中 禁止组合环的存在 要求所有的反馈路径都可以在时钟边界被打断 元件延时是一个门的输入到输出之间的延时 连线延时是时序分析路径上一个元件的输出到下一个元件输入之间的路径延时 寄生电容 线电阻 驱动强度等都会引起延时 一条路径的延时是由该路径的组合电路 存储元件 路径上门的扇出负载 信号之间的互连线负载 时钟的歪斜率 时钟抖动和信号的压摆率等所决定 goonfromhere06 11 22 Page55 4 4 2静态时序分析中的基本概念 1 扇入和扇出 一个逻辑门的扇入是指连接到该门输入的数目 一个逻辑门的扇出是指连接到该门输出的负载门的数目 扇出越多 延时越大 Page56 4 4 2静态时序分析中的基本概念 2 压摆率 slewrate 压摆率 slewrate 电压变化的速度 Page57 4 4 2静态时序分析中的基本概念 3 时钟歪斜 clockskew 时钟在经过时钟路径后 到达存储元件的时间存在差别 称为时钟歪斜 时序上相邻的寄存器如果时钟歪斜较大 可能在同一时钟沿上造成时间违规或不能正确锁定数据的现象 Page58 4 4 2静态时序分析中的基本概念 4 寄存器的建立 ts 和保持时间 th 寄存器的建立和保持时间的验证是静态时序分析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 扶余市招聘社区就业服务专员笔试真题2025
- 舞台灯光音响租赁合同(2026版)
- 信阳商城县选调城区义务教育学校教师笔试真题2025
- 吉林通化集安市社区就业服务专员招聘笔试真题2025
- 2026 年公路沿线塌方险情避让安全知识
- 2026 年秋季高二开学第一课高中生亲子之间有效沟通实操班会
- 2026年秋道德与法治三年级上册教学工作计划
- 《一景多拍:同一目的地用黑白、彩色、手机与无人机四种表达》
- 某汽车零部件厂生产安全准则
- 《文书与档案管理习题册》答案 - 模块1-5
- 公司适用法律法规标准清单2025年08月更新
- 煤矿信息化管理制度
- 河南省水利第一工程局集团有限公司招聘真题2024
- 中国急性缺血性卒中诊治指南(2023)解读
- 血透室规章制度
- JBT 14685-2023 无油涡旋空气压缩机 (正式版)
- 饲料学全套课件
- 彭吉象《艺术学概论》100题-考研
- 质量保证体系图
- 合同条件中英文对照版
- 灾害(地震)外伤现场救护
评论
0/150
提交评论