基于模型的设计迎接当今嵌入式系统设计面临的不断增加的挑战
嵌入式系统已经改变了从日常消费类电子设备到复杂的工业系统的高科技产品。随着硬件和存储器的价格日益降低,功能日益强大,嵌入式系统将变得更加普及。与此同时,设计本身也变得更加复杂。为了迎接这些趋势,工程师必须找到以更快速度有效开发软件和硬件的方法。基于模型的设计就是解决该问题的一种方法。
MathWorks 公司Simulink 产品系列,使设计人员可以在一个图形化的交互环境中应用基于模型的设计,在该环境中,设计人员还可以利用直观的模块图,对系统模型和子系统设计进行可视化处理。这些模型具备层级化结构,你可以将系统划分成功能单元。和基于文本的模型相比,这种图形化的环境可以使你更容易理解设计和子系统之间的交互。
在这篇文章中,我将以基于FPGA 的Sobel 边缘检测算法的设计和实现为例,介绍一个基于模型的设计方法。需要注意的是,你可以轻易地将这些嵌入式设计的理念应用到不同行业的各类应用中,这些行业包括航天、国防、汽车、通信、消费类电子和医疗电子设备等等。
该设计方法的中心是模型,它的四个主要组成部分分别是:
可执行的规范
设计仿真
代码生成
连续的测试和验证
本文将详细解释上面四个组成部分,并将它们应用于Sobel 边缘检测算法的设计和实现。
可执行的规范
随着设计变得更大和更加复杂,有必要首先在抽象层上对它们进行描述。Simulink 以及专用的模块(比如信号处理模块、通信模块和视频图像处理模块等),为嵌入式算法的高层描述提供了一个完美的图形化环境。系统工程师通常负责开发这种高层描述。一个高级Simulink 模型可以有多种用途:
使设计人员可以通过直接运行Simulink 模型来执行仿真
它可以用于包括测试、验证和实现在内的整个开发过程
允许开发人员在早期查明错误,从而避免开发后期耗时耗力的查错工作
消除了制备纸质规范的需求,后者更容易造成误解,取而代之的是可执行的规范
设计团队中的每一个成员都可以理解并且运行该模型,从而可以更加专注于开发主要模型的各个部分,我们把这种高级模型称为可执行规范,或者黄金参考。
说明了用于Sobel 边缘检测算法的可执行规范。该算法由两个2D 滤波器组成,每个滤波器都具有一个3x3 内核(一个滤波器估算x方向上的边缘,一个估算y 方向上的边缘)。该算法还包括两个平方运算,一个阈值运算。这个模型是实现FPGA 设计的起点。
在Simulink 环境中,你可以检查和直观观察模型内部的每个信号。注意在可执行规范中的输入和输出图像是该算法的测试向量。你可以在设计的整个过程中使用该测试向量,按照设计规范验证你的设计。因为整个设计都是在Simulink 环境中执行的,因此不需要额外的开销,将这些测试向量移植到其它应用,或者在HDL 中建立更容易造成人为错误的测试装具模块。在可执行规范中使用的测试装具模块可以用于设计的整个过程。
设计仿真
在设计可执行规范的时候,系统工程师通常并没有记住那些实现细节,而是设计符合系统行为级要求的算法。一旦系统工程师将可执行规范交给开发团队,该团队就需要对该规范进行修改,从而使设计与资源有限(比如存储器或者处理功耗)的实时嵌入式系统相适应。这些改动可能造成新设计的输出偏离原始设计。设计工程师要判定这种偏离是否在可以接受的范围之内。
在该部分,我将对该算法进行两个改动,使其更适合于硬件实现,并且演示如何根据可执行规范对设计进行连续的验证。
重新设计算法
假设开发人员决定不采用图2 中的平方运算,而是选择具备更高硬件实现效率的绝对值运算。通常情况下,模型中的这些改动是硬件实现所要求的,并且大多数情况下由设计团队中经验丰富的工程师完成。Simulink 提供了一个使设计人员可以重新设计算法和在相对较短的时间内验证设计的环境。在用绝对值运算替代平方运算以后,最后的结果并没有严格符合可执行规范中的输出,但是这种差别很小,在本例中是可以接受的。
定点实现
因为最终的目标是在FPGA 中实现该算法,对我来说我必须将双精度设计转换成定点设计。利用Simulink 很容易实现这一点。我可以使用我自己开发的双精度模型,在没有引入新模块的情况下来直接开发一个定点模型。Simulink 允许你来决定数据位的数目和数据的缩放因子以及数学运算,并且提供了用来分析系统定点运算的绝佳环境。
在定点设计中,滤波器的输入是有符号的9 位整数,输出是有符号的11 位整数。开发人员可以对与模块的内部计算有关的位宽和缩放因子进行调节。这给了设计人员很大的灵活性,从而在让输出符合可执行规范和使用最少的数据位以节省器件空间之间做出权衡。
新的设计方案和可执行规范进行比较,二者的差别以直观和数值方式表示。连续的测试和验证是基于模型的设计的一个关键部分,对于一个项目的成功至关重要。Simulink 为此提供了一个完备的环境。
细化设计
示例中,边缘检测算法的输入是一个200×100 像素的二维图像。在实时系统中,输入在大多数情况下不是矩阵而是一个串行数据流。例如,该串行数据流可以通过电荷耦合器件(CCD)产生。因此,需要对设计的结构进行改动以便边缘检测算法可以支持这种串行数据流并且对其进行二维滤波。
首先将输入图像串行化。然后,对该串行数据执行二维滤波。接着将这个数据流进行解串,使其能够和可执行规范的输出进行对比。该操作仅仅是为了底部滤波器而进行的。我同时加入两个延迟组件以补偿串行器模块中的缓冲作用。正如我所料,新设计仍然产生了和以前一样精确的结果。
该设计突出地显示了Simulink 的多速率能力。串行器的输出速率比输入速率高出20,000 倍。(请记住该图像的像素为200×100。因为图像的速率是每秒一帧图像,串行后的采样率达到每秒20,000 个样本。)图4 说明了这个经过细化后的设计方案。
实现
既然已经对Sobel 边缘检测算法里的其中一个2D 滤波器的设计进行了细化,现在我就可以将这个经过细化后的设计交给硬件工程师用HDL 去实现。在该部分可以考虑两种不同的方法。第一种方法假设硬件工程师使用VHDL或者Verilog 手动编写该滤波算法。第二种方法假设开发人员将会把上一部分的Simulink 模型转换成基于Xilinx System Generator 模块的Simulink 模型并且自动生成HDL 代码。这两种情况下,开发人员都会依据可执行规范对他们的设计进行验证,在Simulink 环境中检查他们设计方案的有效性。
人工编写HDL 代码、协仿真和验证
开发团队里HDL 设计人员可以使用2D 滤波器设计,来编写相应的VHDL 或者Verilog 代码。一旦代码编写完成,HDL 设计人员就可以通过MathWorks 公司的ModelSim 链接,在Simulink 环境中使用Modelsim 对HDL 设计进行仿真,并且将HDL 设计的输出和可执行规范的输出进行比较。注意,在这个过程中,没有必要形成入测试向量,然后从Modelsim 中提取数据送回Simulink 环境。HDL 测试平台。Simulink 通过ModelSim 链接向Modelsim 中输入测试向量,然后从Modelsim 中提取数据送回Simulink环境。HDL 设计人员可以快速验证该HDL 代码是否和可执行规范一致。图5 中的模型对ModelSim 和Simulink进行协仿真并且允许设计人员验证该VHDL 代码的有效性。正如我们所看到的,它们之间的平均差别和前一个模型一样。
图5 用ModelSim 进行协仿真
图6 使用Xilinx System Generator对图4底部窗口中所显示的滤波器进行建模
自动生成HDL和Xilinx System Generator
使用Xilinx System Generator,你还可以自动生成VHDL 或者Verilog 代码以及进行硬件在环仿真。图6 显示了一个滤波器设计(使用Xilinx SystemGenerator 模块),它等同于图4 底部窗口中所显示的滤波器。Simulink 环境中所进行的仿真是精确到每一位和每一个周期的。一旦你依据可执行规范对System Generator 的设计结果进行验证,你就可以自动生成该滤波器的可综合的VHDL 或者Verilog 代码。
结论
基于模型的设计通过提高系统开发的精度和速度,有助于你创建更好的嵌入式软件和硬件。得知自己已经查明设计错误并且达到了设计要求,你就可以信心十足地开始集成、测试和配置你的嵌入式应用。基于模型的设计提供了一个可行的解决方案,使用该方案,可以在嵌入式系统的开发过程中缩短开发周期,降低开发成本,提高设计质量,促进设计创新。了解更多信息,敬请登录网站:
www.mathworks.com/applications/dsp_comm/。
本文来源:微码科技 作者:
关于 模型设计 的相关解决方案
- 2006-12-11基于模型的设计迎接当今嵌入式系统设计面临的不断增加的挑战
模型设计 相关产品动态
模型设计 相关方案厂商
快乐大本营
无线时代来临,移动产业生态系统将发生一些根本变化。今日头条推荐“芯片是嵌入式4G技术的关键 产业生态系统将发生变化”。
想了解嵌入式开发工具的市场情况吗?先来体验下我们的在线调查吧!填写调查问卷。

