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


2.编译约束文件
在编译一个设计时,会根据用户的配置产生相应的约束文件,通知下载配置工具如何处理设计输入,不仅可以完成更高质量的实现,还能够节省时间 。
约束文件可控的指标包括:
约束文件的格式取决于 模块的综合工具:对于XST,其文件为XCF格式;对于/ Pro,则使用NCF文件格式 。
系统时钟在 标志中设定,编译时将其写入约束文件,在实现时将其作为头等目标 。在实际设计中,常常包含速度不同的多条路径,其中速度最高的采用系统时钟约束,其余路径的驱动时钟只能通过系统时钟的整数倍分频得到 。当把设计转成硬件实现时,“ In”和“ Out”模块就变成了输入、输出端口,其管脚分配和接口数据速率必须在其参数对话框中设定,编译时会将其写入I/O时序约束文件中 。
3.HDL测试代码
通常 设计的比特宽度和工作频率都是确定的,因此仿真结果也要在硬件上精确匹配,需要将HDL仿真结果和仿真结果进行比较,才能确认HDL代码的正确性 。特别当其包含黑盒子模块时,这样的验证显得格外重要 。提供了自动生成测试代码的功能,并能给出HDL代码仿真正确与否的指示 。
假设设计的名字是,双击顶层模块的 标志,将选项设为HDL,选中 选项,然后点击选项,不仅可以生成常用的设计文件,还有下面的测试文件:
.dat文件是 将通过“ In/Out”模块的数据保存下来而形成的,其中经过输入模块的数据是测试激励,而通过输出模块的数据就是期望结果 。测试代码只是简单的封装器,将测试激励送进生成的HDL代码,然后对输出结果和期望结果完成比较,给出正确指示 。
四、 编译设计生成FPGA代码
公司提供了两种方法将设计.m文件转化为HDL设计,一种就是利用综合器;另一种就是直接利用MCode模块 。前者多应用于复杂或高速设计中,常用来完成高层次的IP核开发;而后者使用方便,支持语言的有限子集,对实现算术运算、有限状态机和逻辑控制是非常有用的 。本节内容以介绍MCode模块为主 。
MCode模块实现的是装载在里面的.m函数的功能 。此外,还能够使用的定点类型数对.m函数进行评估 。该模块使用回归状态变量以保证内部状态稳定不变,其输入、输出端口都由.m函数确定 。
要使用MCode模块,必须实现编写.m函数,且代码文件必须和 模型文件放在同一个文件夹中,或者处于路径上的文件夹中 。下面用两个实例来说明如何使用MCode模块 。
例1-1 使用编写一个简单的移位寄存器完成对输入数据乘8以及除以4的操作,并使用MCode将其编译成 直接可用的定点模块 。
.m 函数的生成是比较简单的,我们只需要 new,然后将相应的函数代码输入,并且保存即可 。
1.相关的.m函数代码为:
[lsh3, rsh2] = (din)
% [lsh3, rsh2] = (din) does a left shift 3 bits and a
% right shift 2 bits. The shiftisby
%andof power of two .
lsh3 = din * 8;
rsh2 = din / 4;
2.将.m函数添加到下列三个位置之一:
然后,新建一个 设计,添加MCode模块,双击模块,在弹出页面中,通过按键将.m函数和模型设计关联起来,如图1-8所示 。当我们想修改MCode 代码时候,我们只需要双击该模块,然后弹出属性窗口,选择 Edit M-File 即可 。
图1-8 MCode模块关联界面示意图
3.添加边界模块、Sytem 模块、正弦波测试激励以及示波器模块构成完整的设计,如图1-9所示 。
图1-9 简单移位模块设计示意图
4.运行仿真,得到的结果如图1-10所示,从中可以看出,设计是正确的,正确实现了.m文件的功能 。左图将信号放大了8倍,右图将信号缩小了4倍 。