您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > 基于模型设计的自动代码生成
基于模型设计的自动代码生成高子旺顾美康(上海师范大学信息与机电学院,上海200234)摘要介绍了基于模型设计的优点,并以Prewitt边缘检测算法的设计和实现为例,详细叙述了基于模型设计的开发流程,包括模型建立、离线仿真、自动代码生成。关键词基于模型设计;Simulink;HDLCoder1引言传统的开发流程中,不同的部门负责不同的流程,不同部门间的交流通过文档规范容易引起二义性。各组之间的传递错误将会影响到整个开发项目的设计进度,并且测试部分只能在整个设计完成后进行,若出现问题还需要对问题的所在进行较长时间的分析、确认。如果问题出现在设计的开始阶段,那整个设计的修改将是巨大的,将给设计成本、设计周期带来很大的负面影响。而基于模型的设计中,通过建立各种系统模型完整地呈现系统设计要求,帮助不同专业的工程师一起高效工作,并可在设计过程的不同阶段进行交流;在设计的各个环节都能进行测试,发现并校正错误,这将最大限度地降低整个系统的最终测试产生错误的可能,从而使设计流程实现了最佳的优化[1]。与算法的C语言实现相比,人工编写算法的硬件描述语言不是一件易事。代码的自动生成作为基于模型设计的重要组成部分,有效地避免了人工编写代码可能产生的错误,降低了开发难度。值得注意的是,在基于FPGA的DSP开发工具中,无论是Altera的DSPBuilder还是Xilinx的SystemGenerator,将Simulink的DSP模型转换成的硬件描述语言都只限于VHDL语言,而且生成的代码可读性欠佳。本文采用Simulink®HDLCoder来完成代码的自动生成,它不仅能生成可综合的VHDL和Verrlog,而且代码结构紧凑,可读性好,独立于目标板。下面以Prewitt边缘检测算法的设计和实现为例,详细介绍基于模型设计的开发流程。2基于模型的设计2.1Prewitt算法Prewitt算子是灰度图像边缘检测中常用的3×3窗口一阶微分算子:(1)(2)|G|=|(P1+P4+P7)-(P3+P6+P9)|+|(P1+P2+P3)-(P7+P8+P9)|;要判断的P5是否为边缘点,先求出|G|;再将|G|与阈值比较,如果大于阈值,则P5为边缘点。2.2模型的建立根据Prewitt算法从Simulink库中调用相应的模块,再将它们连接起来,Prewitt子系统框图如图1所示。这里需要说明的是模块间的数据流。子系统的输入、输出端口均设置为八位无符号整型,每个模块的输入均继承内部规则,这样当上一模块的输出改变数据类型时,模块能自动改变数据类型,使数据类型保持一致。对于加法模块的输出,需要确立的有:数据有效位宽和是否使用符号位。三个uint8数据相加的结果,有效位应为十位,少则可能发生溢出,多则造成数据位浪费;相加模块的输出作为相减模块的输入,应有符号位;这样相加模块的输出共十一位,一位符号位,十位有效位。两个数相减结果可能为负,相减模块的输出亦为f(1,11,0)。|u|模块输入继承内部规则,为sfix11,输出设置为uint8,会发生数据截断,应选中数据溢出饱和选项。子系统中的其余模块的数据类型均继承内部规则。从中我们可以看到,开发人员可以对与模块的内部计算有关的位宽进行调节。这给了设计人员很大的灵活性,从而在让输出符合可执行规范和使用最少的数据位以节省器件空间之间做出权衡。图1Prewitt子系统模型2.3离线仿真测试Simulink允许用户在设计的任何阶段都可对模型进行仿真测试,甚至在模型的建立阶段。图2给出了Prewitt子系统内部模块的测试验证,用常数替换子系统输入端口,在我们想知道的任意节点处放置Display模块,就可以显示我们所要的数据。在图2中,相加模块add1输出的字长为11位,add2输出的字长为10位,二者输入数据相同。对比Display2和Display3可知,add2发生了溢出,从而验证了相加模块输出位宽设置的正确性。取绝对值模块Gx和Gx1的输入为-305,如果输出类型选择uint11,则输出305;为了缩小位宽,采用uint8,数据要从11位截断为8位。Gx选中了溢出饱和项,Gx1模块没有选中该项。比较Display5和Display6可知,数据从11位截断为8位时,Gx设置符合算法要求。图2Prewitt子系统内部模块验证整个系统的离线仿真如图3所示,离线仿真系统主要由FromWorkspace模块、DataTypeConversion模块、ToWorkspace模块、image_buffir子系统、Prewitt子系统构成,显示了Simulink在模型设计的层次化。FromWorkspace模块调用,事先由M文件读取并输出的640*480bmp照片灰度数据流。uint8模块将double类型的数据转换成uint8类型。image_buffer子系统实现数据的缓存,其中p2、p3、p4、p5、p6、p7、p8与p1的时间间隔分别为1、2、640、642、1280、1281、1282个时钟周期。ToWorkspace模块将边缘检测后的数据输送给MATLAB工作库,供后续的M文件生成图像。图3离线仿真系统仿真结果如图5所示,对比原照片图4,达到目的;如果没达到预期的效果,将回到Prewitt子系统的修改,再测试,直到测试满意为止。图4原照片图5检测结果2.4代码生成模型通过仿真测试和验证后就可以生成代码了,本文采用HDLCoder自动生成代码。HDLCoder能从Simulink建立的模型生成位精确、周期精准、可综合的Verilog和VHDL。生成的VHDL与IEEE1076兼容,Verilog与IEEE1364-2001兼容;生成的代码独立于目标板,同步于同一时钟域[2]。我们还可以指定某一子系统生成代码,这里我们只指定Prewitt子系统生成代码。下面给出了绝对值模块Gx对应的代码。--Absfunction:|u|--Determinetheunaryminusoftheinput--SaturationonIntegerOverflow:onunaryminus_temp=('0'&Subtract_out1)WHENSubtract_out1=10000000000ELSE-resize(Subtract_out1,12);um_Subtract_out1=(10='0',OTHERS='1')WHEN(unaryminus_temp(11)='0'ANDunaryminus_temp(10)/='0')OR(unaryminus_temp(11)='0'ANDunaryminus_temp(10DOWNTO0)=01111111111)ELSE(10='1',OTHERS='0')WHENunaryminus_temp(11)='1'ANDunaryminus_temp(10)/='1'ELSE(unaryminus_temp(10DOWNTO0));--Comparetheinputto0toseeifitisnegativenegative_Subtract_out1='1'WHEN(Subtract_out1Gx_constant_zero)ELSE'0';--Assigntheinputoritsunaryminustotheoutputbasedonwhethertheinputisnegativeornotabs_Subtract_out1=um_Subtract_out1WHEN(negative_Subtract_out1='1')ELSESubtract_out1;--Converttotheoutputdatatype--Roundmode:SaturationonInteger--Overflow:onGx_out1=(OTHERS='1')WHENabs_Subtract_out1(10)='0'ANDabs_Subtract_out1(9DOWNTO8)/=00ELSEto_unsigned(0,8)WHENabs_Subtract_out1(10)='1'ELSE(unsigned(abs_Subtract_out1(7DOWNTO0)));从上面的代码可以看出,自动生成的代码紧凑,文件小,在关键部分标有适当的注解,具有较好的可读性,这些都是Altera的DSPBuilder和Xilinx的SystemGenerator无法比拟的优点。自动生成代码后,就可以将生成的代码文件加入到项目工程中,与手工代码协同工作。3结束语本文以Prewitt边缘检测算法的设计和实现为例,详细叙述了基于模型设计的开发流程,包括模型建立、离线仿真、代码自动生成。从中我们可以看到基于模型设计使用统一的开发工具,消除了通过文档进行交流的可能,使整个开发过程变成一个螺旋型的开发过程。这种螺旋型的设计过程从本质上更接近于并行开发过程,可在开发阶段就将早期的工作模型提供给校验组和产品组,并参与到整个开发过程,有助于缩短开发周期和减小工作造价。参考文献[1]TheMathWorks.基于模型的设计能明显优化设计流程(R).北京,2007[2]TheMathWorks.DocumentforSimulink®HDLCoder(DB/OL).,2008[3]PaulF.Smith,SameerM.Prabhu,JonathanH.Friedman.建立基于模型设计文化的最佳策略(J).电子设计应用,2008,(5)[4]潘松,黄继业,王国栋.现代DSP技术(M).西安:西安电子科技大学出版社,2003收稿日期:2月18日修改日期:3月25日作者简介:高子旺(1983-),男,硕士研究生,研究方向:嵌入式系统与通信控制系统;顾美康(1954-),男,硕士生导师,研究方向:嵌入式系统与通信控制系统。
本文标题:基于模型设计的自动代码生成
链接地址:https://www.777doc.com/doc-2575601 .html