集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 5331|回复: 14

子系统的建立和使用

[复制链接]
小舍YZ 发表于 2017-7-5 11:24:23 | 显示全部楼层 |阅读模式
子系统的建立和使用

System Generator设计经常作为大型HDL设计的一部分,本节就介绍如何使用System Generator来建立子系统模块,以及如何在整个系统中对其进行仿真。

1.子系统的建立以及仿真方法

子系统就是HDL语言中的模块,也类似于C++语言中的函数,是有效执行自顶向下设计的必备手段。如果将一个复杂设计完全在一个单独设计中实现,则该设计的验证和复查工作将是设计人员的噩梦。此外,从设计复用的角度讲,子系统可以IP核的方式为多个设计使用,具有高的可重用性,能节省大系统的开发时间。

建立子系统最简单的方法就是利用NGC二进制网表文件,将System Generator设计封装成一个单独的二进制模块,这样综合工具将其作为黑盒子看待。在建立子系统时,管脚约束不能在Gataway模块中定义,同样时钟管脚也不能在System Generator模块中定义,应通过网表编辑器来指定物理约束,这是因为NGC网表中不仅包括了逻辑设计,还包括了设计的约束信息。在复杂系统中建立子系统的设计流程如下所示:

图7-21 建立子系统的设计流程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:25:05 | 显示全部楼层
1)NGC网表文件

如图7-21所示,生成NGC网表是建立子系统的第一步。在System Generator标志中将编译生成文件类型选为NGC List,如图7-22所示。如果设计中有时钟驱动电路,点击Generate后,会在目标文件夹生成“<design>_cw.ngc”文件,否则会生成“<design>.ngc”文件,其中<design>就是设计的名字。NGC网表文件包括设计中所有的逻辑和约束信息,这意味着将System Generator生成的所有HDL文件、内核以及约束等文件封装成一个单独的文件。

图7-22 选择编译生成文件类型

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:26:17 | 显示全部楼层
2)设计规则
在复杂系统中使用子模块时,必须遵循下面两条规则。

首先,不能在子模块设计文件中出现“Gateway In”、“Gateway Out”以及System Generator标志模块,否则NGDBuild工具会产生下面的警告:

WARNING: NgdBuild:483 - Attribute "LOC" on "clk" is on the wrong type of
object. Please see the Constraints Guide for more information on this
attribute.

其次,不能在综合的时候往NGC网表文件中插入I/O缓存器,否则会报错。I/O缓存器只能在顶层模块中使用。

3)逻辑综合

当使用子系统的NGC网表文件综合时,其流程如图7-23所示。NGC模块可在顶层模块中以黑盒子的方式直接例化。为了简化该过程,当通过NGC目标编译后,System Generator提供了HDL例化模板,保存在设计路径,且以“<design>_cw.veo”命名。当选择VHDL语言时,则其模板名为“<design>_cw.vho”。

图7-23 综合时的流程图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:27:01 | 显示全部楼层
4)仿真

把System Generator模型编译成NGC目标后,生成的HDL文件却只能完成HDL仿真,不能在ISE中综合。由于HDL文件不能包含在工程中,如果要在HDL仿真器中运行整个设计,就必须指定用户.do文件。除了HDL文件之外,还需要将内存初始化文件(.mif)和系数文件(.coe)和HDL文件放在同一文件夹中。

2.可配置子系统的建立

可配置子系统是一类可以作为标准元件使用的Simulink模块,但又和标准元件模块不同,其存在多种可选功能,每一种功能都可以实现,可以让用户灵活选择。以可配置FIR滤波器为例,实现快速滤波器需要很多资源,而许多低速的滤波器却只需要相对很少的资源,将其做成可配置的模块,就可以允许用户根据实际情况在速度和硬件代价之间做出最优平衡。这体现了可配置子模块最大的优势。

1)定义一个可配置子模块

可通过新建Simulink库来定义可配置子系统,且可选模块的实现也由库来管理。下面给出新建建库的具体步骤:

(1)新建一个空白库,如图7-24所示。

图7-24 新建空白库

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:27:39 | 显示全部楼层
(2)在库里添加基本实例模块,如图7-25所示。基本实例模块可以是System Generator中的任意组件。

图7-25 添加基本实例模块

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:28:16 | 显示全部楼层
(3)在库里面添加可配置子系统模版,如图7-26所示。模版可以在Simulink库浏览器中找到,其具体位置为“Simulink/Ports & Subsystems/Configurable Subsystem”。如果有需要,用户可以修改该模版的名字。

图7-26 添加可配置子系统模块

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:29:02 | 显示全部楼层
(4)保存库文件,然后双击模版模块,会弹出如图7-27所示的属性配置界面。根据实现的需要选中相关模块的检验框。最后单击“OK”再次保存库文件。

图7-27 属性配置界面

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:29:50 | 显示全部楼层
2)使用可配置子系统
要在设计中使用可配置子系统,先按照上面的步骤定义子系统,然后打开库,将需要的模版模块拖到设计中合适的位置,这样设计中就有了可配置子系统的实例,如图7-28所示的FIR滤波器模块。

图7-28 可配置子系统实例

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:30:34 | 显示全部楼层
在实例模块上点击右键,然后选择Block Choice选项中的Xilinx DA FIR,将实例作为基础实现模块使用。如图7-29所示。

图7-29 将实例作为基础实现模块

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-5 11:31:21 | 显示全部楼层
3)在可配置子模块中添加和删除实例模块
添加和删除子系统是编辑、修改可配置子系统的基本操作,按照下面的步骤可以从可配置子系统中删除实例模块:

(1)打开并解锁子系统的库;双击模版模块,然后在弹出的用户界面中取消相应模块检验框的选定,单击“OK”就可以删除掉相应的子模块,如图7-30所示;再保存库,重新编译即可;最后仍需要在设计更新子系统。
对于添加实例模块的步骤如下:首先,打开并解锁子系统的库;然后将实例模块拖到子系统设计中,双击模版模块;在弹出的用户界面中选中所需模块检验框,单击“OK”即可,如图7-31所示;再保存库,重新编译;在已有的设计中更新子系统。

图7-30 删除子模块                                                                图7-31 添加子系统

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-28 00:49 , Processed in 0.067952 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表