FPGA开发之算法开发 system Generator( 五 )


图1-10 简单移位模块仿真结果示意图
5.自动生成代码,得到的文件如下所列 。
(
din,
dout1,
dout2
);
input [15:0] din;
[15:0] dout1;
[15:0] dout2;
wire [15:0] ;
wire [15:0] ;
wire [15:0] ;
= din;

FPGA开发之算法开发 system Generator

文章插图
dout1 = ;
dout2 = ;
mcode (
.e(1'b0),
.lk(1'b0),
.lr(1'b0),
.in(),
.sh3(),
.sh2()
);
五、子系统的建立和使用
设计经常作为大型HDL设计的一部分,本节就介绍如何使用 来建立子系统模块,以及如何在整个系统中对其进行仿真 。
1.子系统的建立以及仿真方法
子系统就是HDL语言中的模块,也类似于C++语言中的函数,是有效执行自顶向下设计的必备手段 。如果将一个复杂设计完全在一个单独设计中实现,则该设计的验证和复查工作将是设计人员的噩梦 。此外,从设计复用的角度讲,子系统可以IP核的方式为多个设计使用,具有高的可重用性,能节省大系统的开发时间 。
建立子系统最简单的方法就是利用NGC二进制网表文件,将 设计封装成一个单独的二进制模块,这样综合工具将其作为黑盒子看待 。在建立子系统时,管脚约束不能在模块中定义,同样时钟管脚也不能在 模块中定义,应通过网表编辑器来指定物理约束,这是因为NGC网表中不仅包括了逻辑设计,还包括了设计的约束信息 。在复杂系统中建立子系统的设计流程如下所示:
图1-11 建立子系统的设计流程
1)NGC网表文件
如图1-11所示,生成NGC网表是建立子系统的第一步 。在 标志中将编译生成文件类型选为NGC List,如图1-12所示 。如果设计中有时钟驱动电路,点击后,会在目标文件夹生成“_cw.ngc”文件,否则会生成“.ngc”文件,其中就是设计的名字 。NGC网表文件包括设计中所有的逻辑和约束信息,这意味着将 生成的所有HDL文件、内核以及约束等文件封装成一个单独的文件 。
图7-22 选择编译生成文件类型
2)设计规则
在复杂系统中使用子模块时,必须遵循下面两条规则 。
首先,不能在子模块设计文件中出现“ In”、“ Out”以及 标志模块,否则工具会产生下面的警告:
: :483 -"LOC" on "clk" is on the wrong type of
.see theGuide for moreon this
.
其次,不能在综合的时候往NGC网表文件中插入I/O缓存器,否则会报错 。I/O缓存器只能在顶层模块中使用 。
3)逻辑综合
当使用子系统的NGC网表文件综合时,其流程如图1-13所示 。NGC模块可在顶层模块中以黑盒子的方式直接例化 。为了简化该过程,当通过NGC目标编译后,提供了HDL例化模板,保存在设计路径,且以“_cw.veo”命名 。当选择VHDL语言时,则其模板名为“_cw.vho” 。
图1-13 综合时的流程图
4)仿真
把 模型编译成NGC目标后,生成的HDL文件却只能完成HDL仿真,不能在ISE中综合 。由于HDL文件不能包含在工程中,如果要在HDL仿真器中运行整个设计,就必须指定用户.do文件 。除了HDL文件之外,还需要将内存初始化文件(.mif)和系数文件(.coe)和HDL文件放在同一文件夹中 。
2.可配置子系统的建立
可配置子系统是一类可以作为标准元件使用的模块,但又和标准元件模块不同,其存在多种可选功能,每一种功能都可以实现,可以让用户灵活选择 。以可配置FIR滤波器为例,实现快速滤波器需要很多资源,而许多低速的滤波器却只需要相对很少的资源,将其做成可配置的模块,就可以允许用户根据实际情况在速度和硬件代价之间做出最优平衡 。这体现了可配置子模块最大的优势 。