基于模型设计的自动代码生成

基于模型设计的自动代码生成

ID:40288577

大小:198.00 KB

页数:5页

时间:2019-07-30

基于模型设计的自动代码生成_第1页
基于模型设计的自动代码生成_第2页
基于模型设计的自动代码生成_第3页
基于模型设计的自动代码生成_第4页
基于模型设计的自动代码生成_第5页
资源描述:

《基于模型设计的自动代码生成》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于模型设计的自动代码生成高子旺 顾美康(上海师范大学信息与机电学院,上海 200234)    摘 要 介绍了基于模型设计的优点,并以Prewitt边缘检测算法的设计和实现为例,详细叙述了基于模型设计的开发流程,包括模型建立、离线仿真、自动代码生成。   关键词 基于模型设计;Simulink;HDLCoder 1 引言   传统的开发流程中,不同的部门负责不同的流程,不同部门间的交流通过文档规范容易引起二义性。各组之间的传递错误将会影响到整个开发项目的设计进度,并且测试部分只能在整个设计完成后进行,若出现问题还需要对问题的所在进行较长时间的分析、确认。如果问题出现在设计的开始阶段

2、,那整个设计的修改将是巨大的,将给设计成本、设计周期带来很大的负面影响。而基于模型的设计中,通过建立各种系统模型完整地呈现系统设计要求,帮助不同专业的工程师一起高效工作,并可在设计过程的不同阶段进行交流;在设计的各个环节都能进行测试,发现并校正错误,这将最大限度地降低整个系统的最终测试产生错误的可能,从而使设计流程实现了最佳的优化[1]。   与算法的C语言实现相比,人工编写算法的硬件描述语言不是一件易事。代码的自动生成作为基于模型设计的重要组成部分,有效地避免了人工编写代码可能产生的错误,降低了开发难度。值得注意的是,在基于FPGA的DSP开发工具中,无论是Altera的DSPBu

3、ilder还是Xilinx的SystemGenerator,将Simulink的DSP模型转换成的硬件描述语言都只限于VHDL语言,而且生成的代码可读性欠佳。本文采用Simulink®HDLCoder来完成代码的自动生成,它不仅能生成可综合的VHDL和Verrlog,而且代码结构紧凑,可读性好,独立于目标板。   下面以Prewitt边缘检测算法的设计和实现为例,详细介绍基于模型设计的开发流程。2 基于模型的设计2.1 Prewitt算法   Prewitt算子是灰度图像边缘检测中常用的3×3窗口一阶微分算子:                                     

4、     (1)                                      (2)                 

5、G

6、=

7、(P1+P4+P7)-(P3+P6+P9)

8、+

9、(P1+P2+P3)-(P7+P8+P9)

10、;要判断的P5是否为边缘点,先求出

11、G

12、;再将

13、G

14、与阈值比较,如果大于阈值,则P5为边缘点。2.2 模型的建立   根据Prewitt算法从Simulink库中调用相应的模块,再将它们连接起来,Prewitt子系统框图如图1所示。这里需要说明的是模块间的数据流。子系统的输入、输出端口均设置为八位无符号整型,每个模块的输入均继承内部规则,这样当上一模块的

15、输出改变数据类型时,模块能自动改变数据类型,使数据类型保持一致。对于加法模块的输出,需要确立的有:数据有效位宽和是否使用符号位。三个uint8数据相加的结果,有效位应为十位,少则可能发生溢出,多则造成数据位浪费;相加模块的输出作为相减模块的输入,应有符号位;这样相加模块的输出共十一位,一位符号位,十位有效位。两个数相减结果可能为负,相减模块的输出亦为f(1,11,0)。

16、u

17、模块输入继承内部规则,为sfix11,输出设置为uint8,会发生数据截断,应选中数据溢出饱和选项。子系统中的其余模块的数据类型均继承内部规则。从中我们可以看到,开发人员可以对与模块的内部计算有关的位宽进行调节。

18、这给了设计人员很大的灵活性,从而在让输出符合可执行规范和使用最少的数据位以节省器件空间之间做出权衡。图1 Prewitt子系统模型2.3 离线仿真测试   Simulink允许用户在设计的任何阶段都可对模型进行仿真测试,甚至在模型的建立阶段。图2给出了Prewitt子系统内部模块的测试验证,用常数替换子系统输入端口,在我们想知道的任意节点处放置Display模块,就可以显示我们所要的数据。在图2中,相加模块add1输出的字长为11位,add2输出的字长为10位,二者输入数据相同。对比Display2和Display3可知,add2发生了溢出,从而验证了相加模块输出位宽设置的正确性。取

19、绝对值模块Gx和Gx1的输入为-305,如果输出类型选择uint11,则输出305;为了缩小位宽,采用uint8,数据要从11位截断为8位。Gx选中了溢出饱和项,Gx1模块没有选中该项。比较Display5和Display6可知,数据从11位截断为8位时,Gx设置符合算法要求。图2 Prewitt子系统内部模块验证   整个系统的离线仿真如图3所示,离线仿真系统主要由FromWorkspace模块、DataTypeConversion模块、ToWorksp

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。