




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习Vivado第4章lab1接口综合概述接口综合是将RTL接口添加到C设计的过程。另外还把物理接口添加到RTL设计中,接口综合包括了相关联的I/O协议,容许数据通过接口传输并自动与内部优化的逻辑同步。本教程由4实验练习组成涵盖的主要功能和接口综合。Lab1: 查看函数的返回和块级协议Lab2: 理解默认端口的I/O协议,并学会怎么选择I/O协议Lab3: 查看一下数组端口实现,可以进行分区。Lab4: 为设计创建一个优化的实现并添加AXI4接口教程设计描述从xilinx网站下载教程的设计文件,参考信息中获取教程设计。本教程使用教程目录中的设计文件Vivado_HLS_Tutorial Int
2、erface_Synthesis。关于实验使用前两个实验室在本教程中的示例的设计很简单,这有助于将焦点保持在接口。最后两个实验练习使用多通道累加器。本教程介绍如何实现采用高层次综合实现I/O端口和协议。在实验4中,创建一个在Lab3中使用最优实现的设计接口综合 lab1:块级I/O协议概述这个实验解释了什么是块级I/O协议,并控制它们重点:在本教程中的图片和命令假定了教程数据目录Vivado_HLS_Tutorial被解压并放置在c:vivado_HLS_Tutorial如果教程数据路径解压到不同的位置,或者在linux系统上,调整路径名称指向你选择放置Vivado_HLS_Tutorial目
3、录位置。步骤1:创建并打开工程1.打开Vivado HLS 命令提示符a.在windows系统中,采用StartAll ProgramsXilinx Design ToolsVivado2014.2Vivado HLSVivado HLS 2014.2 Command Prompt,如下图b.在linux系统下,打开新的shell,2. 用命令提示符窗口,如图55,把接口综合教程的路径变为lab13. 执行TCL并建立vivado HLS Project,采用的是vivado_hlsf run_hls.tcl如图55所示4. 当vivado HLS 完成,在用户界面里打开工程。用vivado_
4、hlsp vivado_hlsp adders_prj命令打开,如图56步骤2:创建和查看默认的块级I/O协议1 在源文件夹中双击adders.c,打开源代码,并查看如图57这个例子用了一个简单的设计,把焦点集中在I/O实现上(在设计中没有逻辑)这段代码的重要点如下:编译格式的指令被添加到源代码中,为了防止任何I/O协议被综合成为一些数据结构(inA,inB,和inC),I / O端口的协议将在接下来的实验练习中复习。这个函数返回一个值并且从这个函数中只有唯一的输出。正如在后面的练习,不是所有的函数都返回一个值。在本实验练习中讨论该函数返回创建的端口。2 用工具栏中的按钮执行Run C Syn
5、thesis命令,或Solution菜单当综合完成,综合报告会自动打开3 查看RTL接口,滚动到综合报告摘要的结尾处。接口摘要和Outline选项卡如图58有三种类型的端口可以查看设计完成花费超过一个时钟周期,因此时钟和复位已经添加到设计中:ap_clk和ap_rst.这两个信号都是一位输入。块级I/O协议为了控制RTL设计已经添加端口:ap_start,ap_done,ap_idle和ap_ready。这些端口随后会被详细说明设计还有4个数据端口输入端口In1,In2和In3,都是32位输入,和指定I/O协议的ap_done(如在图58中指定的指令)该设计还具有对函数返回一个32位的输出端口
6、,ap_return。块级I / O协议允许通过附加的端口、独立数据I / O端口对RTL设计进行控制。但此I / O协议是与函数本身相关联,不与任何数据端口相关联。默认的块级I/O协议被称为ap_ctrl_hs。图58显示了这个协议是与函数的返回值相关联(即 使函数中的代码没有指定返回值这也可以)表1概括了用于块级I / O协议ap_ctrl_hs的信号的行为。注:解释一下使用术语“交易”。在高层次综合的情况下,一个事务是相当于一个执行C函数(或在综合RTL设计中的等效操作)应用 描述 ap_start该信号控制模块执行,逻辑为1时设计开始运行。 它应保持逻辑1直到相应的输出握手ap_rea
7、dy被置位。当ap_ready变高时,决定了是否继续保持ap_start置位并执行其他事物或设置ap_start为逻辑0,当前事务的结束时允许设计暂停,。 如果在ap_ready为逻辑1 之前ap_start被置为低,设计有可能没有把所有输入端口读完,并可能拖延下一个输入读取操作。 ap_ready这个输出信号表明设计已经准备好接受新数据 当准备好接受新的输入时,ap_ready信号设置为逻辑1。表明所有为这次事物的输入读已经完成。 如果设计不是流水线操作,直到下一次事物才开始执行新的读。 这个信号是用来决定何时在端口上用新的值,决定是否用一个ap_start输入信号来启动一个新的事务。 如果
8、ap_start信号没有被设置为高,当设计在当前事务完成中所有的操作,这个信号变为低电平。 ap_done这个信号表明设计在当前的事务中完成所有的操作。输出逻辑1表明设计已经完成了这个事务的所有操作。因为在事务结束时,该信号为逻辑1还表示ap_return端口上的数据是有效的。 不是所有的函数都有函数返回值,因此并非所有的RTL设计都有一个ap_return端口 ap_idle这个信号表示设计正在操作或闲置状态(无操作)。 输出端口上用逻辑1表明是空闲状态。一旦设计开始运行,该信号为低电平。 该信号为高电平时,设计完成操作,未进行任何进一步的操作。 您可以通过查看由RTL协同仿真生成的跟踪文件
9、,观察这些信号的行为。这是在教程的RTL验证所讨论的,但图59示出了用于当前合成的结果的波形。图59的波形图,表现了块级I/O信号的行为设计直到ap_start设置为逻辑1才开始启动。通过设置端口ap_idle为低,表明设计不再空闲展示了五个事务,首先3个输入值(10,20,和30)被各自用在端口in1,in2和in3.输出信号ap_ready变为高表明设计准备好在下个时钟下接受新输入。输出信号ap_done表明设计结束,输出端口ap_return的值是有效(首先输出值 60,是三个输入的和)因为ap_start保持高电平,下一次事务开始于下一个时钟周期。注意:在RTL的协同仿真,所有的设计和
10、端口输入控制信号始终处于启用状态。例如,在图59的信号ap_start始终是高的。在第二个事务,观察ap_return端口,在这个端口上第一个输出的值是70,直到ap_done信号为高电平这个结果才有效。步骤3:改变块级I/O协议默认的块级I/O协议是ap_ctrl_hs协议(控制握手协议),在这一步中,您可以创建新的解决方案和改变这个协议。1. 从工具栏或者工程菜单选择新解决方案(New Solution)来创建一个新的解决方案。2. 保持所有新解决方案对话框所有设定,这些设定都是默认的,点击完成3. 在信息窗口中选择C源代码标签(或如果C源代码关闭重新打开)4. 激活指令选项卡(Direc
11、tives tab),选择顶层函数,如图60所示因为块级I/O协议与函数相关联,您必须通过选定顶层函数来指定他们。5. 在指令选项卡中,鼠标移到顶层函数adders上,右键单击,然后选择插入指令Insert Directives。打开指令编辑器对话框。图61展示的对话框,对话框中的下拉菜单为了激活接口模式。下来菜单为块级接口协议展示了三种选择 ap_ctrl_none: 没有块级I/O控制协议 ap_ctrl_hs: 块级I/O控制握手协议,我们已经采用的 ap_ctrl_chain: 块级I/O协议的控制链。这个I/O协议主要是用于把流水线块链接在一起。块级I/O协议ap_ctrl_chai
12、n不包含在这个教程中。这个协议与ap_ctrl_hs协议类似,但增加了额外的输入信 号,ap_continue,它必须为高,当ap_done为了继续下次事务被置位时。这允许下游模块在系统上施加回压,并进一步停止处理,这是不能接受 新的数据。6. 在Directives Editor对话框中的DestinationEditor部分中,选择Source File默认情况下,指令被放置在directives.tcl文件。在这个例子中,该指令被放置在现有的I / O指令的源文件中。7. 从下拉菜单中选择ap_ctrl_none8. 点击OK源文件现在有新的指令,在源文件代码和指令选项卡中都是高亮的。如
13、图62新指令表示与函数参数/接口相关联被称为返回。所有接口指令与函数参数相连接。对于块级I/O协议,返回参数被用于具体的块级接口。如果函数在源代码里没有返回参数也是可能的。Figure 62: Block-Level Interface Directive ap_ctrl_none在工具栏里点击Run C Synthesis按钮,或者用菜单SolutionRun C Synthesis来综合设计。在源文件中添加的指令改变的源文件。图62所示源文件名为*adders.c。这个标记表明文件已经更改,但没有保存。10. 点击YES 来接受对源文件的更改。当报告打开时,接口概述出现,如图63Figur
14、e 63: Interface summary for ap_ctrl_none当接口协议ap_ctrl_none被采用时,没有块级接口协议被添加到设计中。仅有诸如clock、reset和data端口。注意,也没有ap_done信号,consumer模块接收来自ap_return的数据,当数据有效时,ap_return端口现在不能表明另外,RTL协同仿真的功能需要一个块级I/O协议,为了自动协同仿真安排测试平台和RTL设计。任何试图用RTL协同仿真的结果在下面的错误信息中,停止RTL协同仿真(理解上有误差)E SIM-345 Cosim only supports the following
15、ap_ctrl_none designs: (1) combinational designs; (2) pipelined design with task interval of 1; (3) designs with array streaming or hls_stream ports.E SIM-4 * C/RTL co-simulation finished: FAIL *退出vivado HLS GUI返回命令提示框学习Vivado第4章lab2接口I/O协议概述这个实验解释了怎么指定具体的端口I/O协议。1. 在lab1中用Vivado HLS命令提示符,更改为lab2目录,如
16、图642. 键入vivado_hls -f run_hls.tcl来创建新的Vivado HLS工程Figure 64: Setup for Interface Synthesis Lab 23. 键入vivado_hls -p adders_io_prj 来打开vivado HLS 用户界面工程4. 打开源代码如图65Figure 65: C Code for Interface Synthesis Lab 2 本练习的源代码是与lab1类似。出于同样的原因使用简单的代码,它有助于聚焦在接口的行为,而不是核心逻辑。这一次,代码没有一个函数的返回,取代函数输出的是通过指针参数* in_out1
17、输出。这也提供了机会,探索双向(输入输出)端口的接口选项。 I / O协议的类型,你可以通过接口综合添加到C函数的参数取决于参数类型。这些选项在Vivado高层次综合用户指南(UG902)有完整描述。在本实施例中的指针参数既是输入和输出的功能。在RTL设计中,该参数被实现为单独的输入和输出端口。对于图65所示的代码,每个函数参数可能的选项在下表中被描述函数参数 I/O协议选择 In1 和 In2按值传递的参数都可以用下面的I / O协议来实现 Ap_none:没有I/O协议,这个是默认的输入 Ap_stable:无I/O协议 Ap_ack:实现与相关的输出端口确认 Ap_val:实现与相关的输
18、入有效端口 Ap_hs:实现了两个输入有效和输出端口确认。 In_out1按引用传递的输出可以用下面的I/O协议实现 Ap_none:没有I/O协议,这个是默认的输入 Ap_stable:无I/O协议 Ap_ack:实现与相关的输出端口确认 Ap_val:实现与相关输出的有效端口,这个是默认的输出 ap_ovld:实现与相关输出有效端口,(任何INOUT端口的输入部分没有有效的端口) ap_hs:实现所有输入有效端口和输出响应端口 ap_fifo:FIFO接口与相关输出写入,输入FIFO满端口 ap_bus:Vivado HLS总线接口协议 在实验1中应用的端口指令实际上不是必需的,因为AP_
19、NONE是使用这些C参数的默认I/ O协议。在这个练习中给出了指令,以避免处理任何默认或不是默认的I / O端口协议的行为。 在本练习中,您将实现一系列的I / O协议。步骤2:端口具体的I/O协议1. 保证能在信息窗口中看见C源代码2. 激活指令选项卡(Directives tab)并选择输入参数in1(input argument in1),如图66Figure 66: Adding Port I/O Protocols3. 右击并选择插入指令(Insert Directives)4. 当指令编辑窗口打开,使指令下来框为INTERFACEa. 保持目标是默认值,这次,指令被存储在direc
20、tives.tcl文件中。b. 从模式下来菜单选择ap_valc. 点击OK5. 选择参数 in2 ,添加一个接口指令指定I/O协议为ap_ack6. 选择参数in_out1并添加一个接口指令I/0协议为ap_hs7. 在资源管理器窗口中,扩展约束文件夹,并双击打开directives.tcl文件,如图67Figure 67: Directives for Lab 28. 综合设计9. 当文件打开时,查看接口概述,如图68Figure 68: Interface summary for Lab 2 设计有时钟和复位 默认块级I/O协议信号是存在的 端口 in1被以数据端口而实现,并伴随输入有效
21、信号 数据在in1端口上,仅读。当端口in1_ap_vld为有效高 端口 in2被综合为数据端口,并与输出响应信号相关联 当端口in2被读时,端口 in2_ap_ack将被置高 inout_i定义为inout1参数的输入部分,与输入有效端口inout1_i_ap_val相关联,并且输出响应端口inout1_i_ap_ack inout1参数输出部分定义为inout_o,与输出有效端口inout1_o_ap_val相关联,并输入响应端口inout1_o_ap_ack.10. 退出vivado HLS GUI 并且返回命令提示口学习Vivado第4章lab3实现数组的RTL接口概述 这个练习说明了
22、在函数中的数组参数,你可以实现不同种类的RTL端口步骤1:创建和打开工程 1.在先前的lab中用Vivado HLS命令提示符,更改为lab3目录2.键入vivado_hls -f run_hls.tcl来创建新的Vivado HLS工程3.键入vivado_hls p array_io_prj 来打开vivado HLS 用户界面工程4.打开源代码如图69此设计具有一个输入数组和一个输出数组。在C源代码中的注释说明了输入数组中的数据是如何有序作为一个通道和通道是怎么被计算的。理解设计,您还可以查看试验平台和文件result.golden.dat的输入和输出数据。Figure 69: C Co
23、de for Interface Synthesis Lab 3步骤2:综合函数参数数组为RAM端口 在这一步中,查看数组端口是怎么综合成RAM端口的。1综合设计,当报告打开时查看接口简介。接口简介表明了在C 源代码中的数组参数是怎么综合成默认的RAM端口的。设计有时钟,复位和默认的块级I/O协议ap_ctrl_hs(注意在报告中的时钟) d_o参数已经综合成RAM端口(I/O协议ap_memory)数据端口(d_o_d0)地址端口(d_o_address0)芯片使能控制端口(d_o_ce0)和写使能端口(do_we0) d_i参数已经被综合成类似RAM接口,但有输入数据端口(d_i_q0)没
24、有写使能端口,因为接口仅读数据。在这两种情况下,数据端宽度是在C源代码中的数据值的宽度(在这种情况下的16位整数),并且地址端口的宽度已被自动调整大小匹配到的地址必须被存取的次数(5位的为32个地址)。把数组综合成RAM端口是默认的,您可以控制这些端口怎么用一些其他的选择去实现。在实验3中的其余步骤演示这些选项: 采用单端口RAM和双端口RAM接口 采用FIFO接口 分割成离散的端口步骤3:采用双端口RAM和FIFO接口 高层次综合让你可以指定RAM接口为单端口还是双端口。如果你不做出这样的选择,Vivado HLS 会自动分析设计和选择端口的数量,以便产生最大的数据速率。第二步用的单端口RA
25、M接口,因为在源代码中的for循环是默认的保持不展开,该循环每次迭代依次执行: 读输入端口 从内部RAM中读累计的结果 和累计并且新数据写入到内部RAM中 把结果写到输出端口 重复循环的下一次迭代这确保单一输入读和输出写入以往需要。即使采用多个输入和输出时,内部逻辑可以不采用额外端口。注意:如果你指定了双端口RAM并且Vivado HLS 能确定必须只能用单端口,会使用单端口覆盖双端口规范。在这个设计,如果你想用多RTL端口实现数组参数,首先得事情你必须展开for循环,并容许内部操作是并行的,否则多端口没有好处:没有展开的for循环可以确保在每次读时有一个数据被读。1 从工具栏中选择New S
26、olution或者从工程菜单来创建新的解决方案2 设置默认,点击Finish3 保证C源代码在信息窗口中可见4 在指令选项卡中,选择for循环,在for循环上并右击打开Directives Editor对话框。a. 在指令编辑对话框中激活指令下来菜单在上部并选择展开b. 指令编辑如图71,点击OK下次,为输入读指定双端口RAM,资源指令指示RAM连接到接口的类型。5 在指令选项卡中,选择port d_i并右击打开指令编辑对话框a. 在指令编辑中在上部激活指令下拉菜单并选择RESOURCE(in Dirctive)b. 点击 core options 框并选择RAM_2P_BRAMc. 确认在指
27、令编辑对话框中的设定,如图72,点击OK使用FIFO接口实现输出端口6 在指令选项卡(Directive)中,选择d_o,并右击打开Directives Editor对话框a. 在指令编辑对话框中,保持指令为Interface(接口)b. 从模式下拉菜单中,选择ap_fifo.c. 点击OK在Directive 标签展示了指令已经应用到设计中如图737 综合设计当报告在信息窗口中打开时,接口摘要如图74 设计有标准的时钟、复位、和块级I/O端口 数组参数d_o已经综合成16位宽数据接口的FIFO接口(d_o_din),并且有相关联的输出写(d_o_write)和输入FIFO满(d_o_full
28、)端口 参数d_i 已经实现为双端口RAM接口根据使用的双端口RAM接口,设计能接受两倍于原始设计输入数据的速率。但采用单端口FIFO接口的输出数据速率和先前的一样。步骤:分区RAM和FIFO阵列接口 在这步中,您可以学习到分区数组接口如何划分为任意接口数量1. 从工具栏中选择New Solution或者从工程菜单来创建新的解决方案2. 设置默认,点击Finish3. 保证C源代码在信息窗口中可见4. 在指令标签中,选择d_o并右击打开Directives Editor对话框a. 在指令标签对话框上部激活指令下拉菜单,并选择ARRAY_PARTITIONb. 点击类型下拉菜单,并选择块,为了将
29、分布式数组综合成块c. 在Factor对话框中,输入值d. 指令编辑如图所示,点击现在,输入数组分为两大块(不是个)在指令标签中,选择d_i并重复前面的步骤,但这次分区端口factor用指令标签展示了现在应用在设计中的指令综合设计当报告在信息窗口中打开,接口摘要如图显示 设计有标准的时钟、复位、和块级I/O端口 数组参数d_o已经综合成四个分离的FIFO接口 参数d_i 已经实现为两个分离RAM接口,每一个都是用双端口,(如果你看到个分离RAM接口,确认分区因素d_i是2,而不是4)。如果输入端口d_i被划分为四个,仅需要为每个端口分配单端口RAM接口。因为输出端口只能一次输出四个值,一次读个
30、输入,没有什么好处。在本教程中对数组的最后一步是完全分割的阵列。步骤:全分区数组接口 这一步向您展示了如何分割数组接口为单独的端口. 从工具栏中选择New Solution或者从工程菜单来创建新的解决方案. 设置默认,点击Finish。包括从solution3拷贝现存的指令. 保证C源代码在信息窗口中可见. 在指令标签中,为d_o选择已存在的分区指令. 右击,并选择Modify Directive在指令编辑对话框中a激活Type下拉菜单,改变分区格式为Completeb. 在因素(Factor)对话框中,你可以删除,或保留。这个因素对这种分区类型没有作用。c. 指令编辑如图,点击在指令标签中,
31、选择d_i并重复前面的步骤,完成对d_i的全分区或者,您可以删除d_i指定资源的指令。如果阵列被划分为单独的元素,指定了一个内存资源的资源指令将被忽略。指令标签展示了应用在设计中的指令综合设计当报告在信息窗口中打开,查看接口摘要,注意以下: 设计有标准的时钟、复位、和块级I/O端口 数组参数d_o已经综合成个分离的FIFO接口 用个分离的表口对参数d_i 的已经,因为为输入默认接没有I/O协议。他们有I/O协议ap_none尽管该教程的焦点在专门的I/O接口上,在这一点上是值得研究四种解决方案在性能上的差异。10. 从工具栏里选择比较报告,或从工程菜单中打开方案的比较11在Solution S
32、election Dialog框中,为四种解决方案中每种添加选择方案框如图8112点击OK打开解决方案的比较报告(图82),它表明solution4,为每个阵列元素试用了唯一的端口,比以前的解决方案快得多。内部逻辑可以尽可能快的获得数据,只要它需要访问数据。(这里是因为端口的访问没有性能瓶颈。)鼠标滑轮往下滑查看比较报告(图83),并注意与更多的I / O端口解决方案(解决方案2,3和4),允许更多的并行处理但也用相当多的资源在接下来的练习中,用端口和资源之间的最佳平衡,您将实现同样的设计。除了实现这个优化,接下来的练习中展示了如何把AXI4接口添加到设计中。13退出Vivado HLS界面并
33、返回到命令提示符。学习Vivado第4章lab4实现AXI4接口概述这个练习说明了在I/O端口中指定AXI4总线接口,这个练习除了增加AXI4接口外还展示了如何创建一个用接口和逻辑指令一起优化的设计。步骤1:创建和打开工程1.在先前的lab中用Vivado HLS命令提示符,更改为lab4目录2.键入vivado_hls -f run_hls.tcl来创建新的Vivado HLS工程3.键入vivado_hls -p axi_interfaces_prj 来打开vivado HLS 用户界面工程4.打开源代码如图84此设计用的是和Lab3一样的源代码,并在设计重命名axi_interfaces
34、步骤2:创建采用AXI4 流接口的一个优化设计在这种设计最佳性能实现中,每个通道的数据将进行并行处理,每个通道以专用硬件实现。理解的关键是如何最好地执行这种优化,是要认识到在输入和输出数组中的通道让他们自己成为循环分区。循环分区是Vivado HLS用户指南中有全面的解释(UG902,但基本上意味着每个数组元素,又存储在不同分区中。)在本练习中,您指定的数组参数,以实现为AXI4流接口。如果该数组被划分成多个通道,你可以通过在并行设计中为每个端口元素实现相同的流接口。最后,如果在I / O端口被配置为提供和利用通道数据时,for循环的局部展开可以为每个通道确保专用硬件处理。首先,分区阵列:1:
35、保证C源代码在信息窗口中打开2:在指令标签中,选择d_o并右击打开指令编辑对话框。a. 选择上部Directives中的下拉菜单,并选择ARRAY_PARTITIONb. 点击Type的下拉菜单,并指定为cyclic分区c. 在Factor对话框中,输入8,创建8个分区(这个结果在8个端口中)d. 在指令编辑对话框中填充如图85,点击OK3:在指令标签中,选择d_o并右击打开Directives Editor对话框a. 激活上部Directives下拉菜单,选择INTERFACEb. 点击Mode下拉菜单,指定axis接口c. 点击OK4:在指令标签中,选择d_i并重复上述步骤2和步骤3。a.
36、 应用cyclic分区并且Factor为8b. 应用axis接口5:下一步,对for循环进行局部展开和流水线操作。a. 在指令标签中,选择For_Loop并且右击打开Directives Editor对话框b. 激活上部的Directives下拉菜单,选择UNROLLI 选择因素8(factor 8)部分展开for循环,这等同于重写C代码以每一次循环迭代中执行8个循环体的复制(其中,新的循环仅在总执行用于四次迭代,而不是32)。II 点击OKc. 在指令标签中,选择For_loop并右击打开Directives Editor对话框。I 激活上部的Directives下拉菜单,并选择PIPELINEII 保持间隔空白,让他默认为1III 选择enable loop rewinding(使能重复循环)IV 点击OK当设计顶层是循环,你可以用选择流水线重复,这个通知vivado HLS 在RTL实现中,这个循环连续运行(与功能和功能重新启动周期没有结束
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年九年级语文上册 第一单元 第1课《沁园春 雪》教学设计1 新人教版
- 九年级化学下册 第8单元 金属和金属材料 课题3 金属资源的利用和保护 第2课时 金属资源的保护教学设计 (新版)新人教版
- 6营养要均衡 教学设计-2024-2025学年科学四年级上册教科版
- 自考现代教育技术实践课
- 联合申报合作协议
- ICU专科护理评审方法课件
- 《第五单元 唱歌 其多列》(教学设计)-2023-2024学年人教版(2012)音乐一年级下册
- 2024-2025版新教材高中化学 第1章 第1节 第1课时 物质的分类及物质的转化教学设计 新人教版必修第一册
- 七年级信息技术 8.3制作基本动画教学设计 人教新课标版
- 统计学培训课件
- 小学生数据分析课件
- 术后镇痛规范与流程
- 《瓣膜性心脏病》课件
- 植入式静脉给药装置护理技术课件
- 2025年甘肃农垦集团招聘笔试参考题库含答案解析
- 2024年01月湖南2024岳阳市农商银行系统招考员工笔试历年参考题库附带答案详解
- 2025年泰隆银行招聘笔试参考题库含答案解析
- 5.1导数的概念及其意义(同步练习)(含解析)-【一堂好课】2022-2023学年高二数学同步名师重点课堂(人教A版2019选择性必修第二册)
- 09《战国策》第八-整本书阅读系列《经典常谈》名著阅读与练习(解析版)
- 卫星通信干扰分析-洞察分析
- 《小儿白血病》课件
评论
0/150
提交评论