tag 标签: 模块重用

相关博文
  • 热度 3
    2024-5-2 09:51
    852 次阅读|
    0 个评论
    可重用模块设计教程 概述 SiPM读出测试系统后端硬件重新规划了一块测试板,读出系统送出的信号在该测试板上进行处理,该测试板将替换之前的信号处理系统。测试板使用了Intel的Cyclone 10 GX器件,具体型号为10CGX220。 之前信号处理系统用于上一代整机处理,信号处理分为数字和数据处理两大块,新设计的测试板将之前的数字与数据处理合并为一块,所以之前的两个不同的模块逻辑设计需要合并一起,而当初两个模块分别由不同的逻辑工程师编写,为了合并一起,需要用到Intel的增量编译,这里仅借用可重用模块设计来对子模块进行导出和导入。 可重用模块设计方法及概览 Intel的an839以Arria 10开发板为基础进行了简单介绍,并形成了一个可重用模块设计教程。该教程介绍了两种可重用方法,一种是子核分区重用,另外一种是根分区重用技术。我们更关注与子核分区重用技术,所以这里主要讨论子核分区重用技术在CYCLONE10 GX器件上的应用。 An839教程以开发人者和使用者两种角色来介绍子核心和根分区重用流程。从更高顶层来看,子核心分区和根分区的重用流程是相似的。这两个流程都将设计分区转换为.qdb文件导出导入,进行保留和重用。开发人员在开发人员项目中定义、编译和保留可重用模块,使用者在一个或多个使用者项目中复用可重用块及其自己的逻辑。 子核分区重用技术-开发者教程 本教程基于可重用模块是之前已经开发完成并得到验证并使用过的模块,开发者教程通过介绍子核分区设计的几个流程,这些流程类似IP开发一样,可复用模块完成前期代码规划、并完成逻辑布局布线、划分成单个分区,最后将该可复用模块导出到.qdb文件,这样使用者就可以拿来重复使用。 如图1所示,展示了子核分区重用设计流程框图。 图1:子核分区重用流程框图 子核分区重用还需要向使用者提供一个黑匣子文件。黑匣子件只是定义了使用者项目中用于综合的模块信号端口以及这些端口使用的接口类型。编译器会忽略黑匣子文件中包含的任何其他RTL。将黑匣子文件作为源文件添加到使用者项目中。同时将导出的.qdb文件分配给使用者设计中对应的分区。.qdb文件包含开发者编译快照中的所有信息。然后,使用者可以在其项目中重新使用这些编译结果。综合快照仅包括综合结果。最终快照包括综合、布局和布线结果。具体,可以根据实际情况进行选择和设置。 该教程具体可以包含下述步骤: 步骤1:给重用模块定义一个子核分区 步骤2:编译和导出子核分区 步骤3:为重用模块创建黑匣子文件 步骤4:将上述2个步骤创建的文件复制并传导到使用者工程 步骤5:硬件验证(可选) 实际我们关注的仅为前3个步骤,后续步骤还需要与使用者进行协同,另外需要注意的是重用模块对外端口定义需要双方进行协调一致。下面着重介绍前3个步骤。 步骤1:给重用模块定义子核分区 首先打开开发者工程,该工程可以只包含重用子模块,也可以包含其它众多逻辑子模块,但是需要注意将重用子模块单独定义,有利于给其进行分区。 其次,将打开的工程进行综合,如图2所示,在编译面板重,可以双击“Analysis&Synthesis”对工程进行综合,其实也可以单击综合按钮,这里不再赘述。 图2:编译面板(Compilation Dashboard) 如图2所示,综合完成后,编译面板重,综合对应的项目前出现绿色的勾选图标,表示综合成功完成,如果综合出错,则会出现红叉标识。 综合成功完成后,找到工程导航器(Project Navigator)页面,在“层次”选项卡中找到重用模块,并在该模块上单击鼠标右键(如图3所示),指向“设计分区”,然后选择“默认分区类型”。之后会在用户指定的重用模块实例旁边会显示一个设计分区图标,如图3所示,目标模块是u_blinding_led。 图3:给重用模块创建分区(左侧为an839实例,右侧为C10GX实例) 如果要查看和编辑工程项目中的所有设计分区,可以从Assign菜单项中找到并打开 设计分区窗口,如图4所示。您也可以在此窗口中定义新分区,或者指定编译后自动导出分区。 图4:打开的设计分区窗口 而在QPP22.4版本中打开的设计分区窗口,如图4-1所示,窗口默认条目与图4产生了些微差别(这个其实是可以通过Quartus软件对其进行个性化配置的),根据an839介绍,工程全编译后保留的是Final网表,而在图4-1中,可以指定保留的网表类型,比如是保留综合网表,还是Final网表等。 图4-1:QPP22.4打开的设计分区窗口 步骤2:编译和导出子核分区 这一步不复杂,完成分区划分后,可以对工程进行全编译,这样每个分区可以依据分配约束定义得到其相应的编译快照。需要注意的是只有分区才会在编译后获得快照,未分配的模块其“快照”按钮都是灰色的。然后,就是分区编译后的导出,用户在熟悉以后可以通过约束在每次编译自动导出,这里关注的是教程学习,所以仅介绍手动导出分区。 在图2所示的编译面板中找到全编译项(Compile Design),双击即可完成全编译。全编译后的编译面板如图5所示,编译完成后,设计者必须要关注各个编译步骤的标识,确认工程编译是否存在任何问题。 图5:全编译完成后的编译面板 完成全编译后,确认编译没有问题,找到Project菜单,选择导出设计分区命令(Export Design Partition),弹出图6所示的窗口。在分区名称中选择目标分区,编译快照选择最终快照(Final)。在文件名称区域指定导出的.qdb文件名称。 图6:导出设计分区窗口 步骤3:为分区产生黑匣子文件 当使用者要使用可重用模块的时候,需要在自己的工程中加入一个黑匣子文件,该黑匣子文件定义了重用模块的输入输出端口。这有点象我们在进行HDL逻辑设计的时候,首先需要定义个实体(Entity),并未实体定义输入输出端口,一个黑匣子文件就是一个空的实体定义。Intel在an839中有关模块重用技术使用了System Verilog语言,这样子核模块逻辑源文件文件就是*.sv,而不是通常使用VHDL的*.vhd或使用Verilog的时候的*.v文件。在实际使用中,我们更多的使用这两种语言,所以在产生的黑匣子文件要做出对应调整。 创建黑匣子文件的具体步骤是,首先从File菜单或工程工具按钮中找到“新建”命令(new),从弹出的窗口的设计文件中选择新建SystemVerilog HDL File,单机OK生成一个只包含对应子核分区端口定义的空文件,代码如下所示。 module blinking_led ( output value, input clock ); endmodule 将上述黑匣子文件保存到*_bb.sv文件当中,需要注意的是,在保存该文件的时候禁用“将该文件加入当前工程”选项,大家知道Quartus每次有新文件产生的时候都会进行这类提示,由于黑匣子文件不会在开发者工程中使用,所以不需要选择这个选项,如图7所示。 图7:禁止加入文件到当前工程 子核分区重用技术-使用者教程 将上述产生的.qdb文件和黑匣子文件拷贝到使用者工程目录下,使用者就是在自己的工程中使用该子核分区模块了。作为一个子核分区使用者,当其收到由开发者提供的子核分区可重用模块对应的上述文件后,首先需要将黑匣子文件加入工程,并为子核模块对应的分区指定由开发者提供的对应.qdb文件。由于.qdb文件包含了网表信息,所以双方需要使用相同器件型号和同样的QPP开发软件版本。这个要求对应用户来说还是比较难受的,至少对应我们来说是这样的,比如我们现在双方就在使用不同的QPP版本,一边使用的是22.4,一边使用的是23.2版本。还有我从Cyclone器件导出的.qdb文件难道就无法用于Stratix或Arria器件?后期找时间可以对此进行验证一下。图8显示了双方文件交互情况。 图8:重用模块设计开发者和使用者之间的文件交互 该教程具体可以包含下述步骤: 步骤1:使用者给工程加入重用模块文件并对工程进行综合 步骤2:给对应重用模块创建分区 步骤3:设计全编译 步骤4:硬件验证(可选) 可以使用脚本和命令方式自动执行上述第一和第二个步骤,具体脚本命令如下所示: #Create the partition set_instance_assignment -name PARTITION blinking_led - to u_blinking_led -entity top #Assign the .qdb file to the partition set_instance_assignment -name QDB_FILE_PARTITION blinking_led .qdb \ - to u_blinking_led -entity top #Add the BB file to the file list set_global_assignment -name SYSTEMVERILOG_FILE blinking_led_bb .sv 这里不再对上述步骤进行赘述,只是对分区的QDB文件指定进行简单介绍。加入文件综合后,可以参考上述开发者流程,给目标模块创建分区,然后打开类似图4那样的设计分区窗口,给刚刚创建的重用模块指定.qdb文件,如9所示。未指定QDB文件之前图中粉色虚线框中应该是空白的,可以双击该区域,然后单击浏览图标“(…)”找到从开发者传导过来的QDB文件。 图9:在设计分区窗口中分配QDB文件 参考 an839 Design Block Resue Tutorial for Intel Arria 10 FPGA Dev Board