杰克·埃里克森MathWorks
连接MATLAB®和仿真软金宝app件®数字硬件设计和验证已经帮助许多客户(示例如下)缩短了他们的时间表,提高了他们的验证生产力,并在他们的FPGA、ASIC或SoC设计过程中交付了更高质量的结果。虽然这个工作流可能看起来与您现有的工作流非常不同,但您可以在实现直接利益的同时增量地采用它。
学习如何:
本文概述了用于开始的经过验证的方法,以及典型的采用路径。
您可能听说过我们的一个或多个客户讨论将MATLAB和Simulink连接到他们的FPGA、ASIC或SoC设计工作流的好处。金宝app你可能会想,这离你今天的位置还有很长的路要走。但是所有这些客户一开始都采用了一两个功能来帮助解决他们最紧迫的挑战之一,并逐步构建他们的完整工作流。
我们将首先展示构建一个更具协作性和互联性的芯片设计环境的高层次好处,但主要关注的是如何开始,以及我们看到客户采取的一些更常见的第一步,以及他们从那里走到哪里。然后,我们将总结一位客户的真实体验。
如果我们看看今天的芯片设计项目,使用Mentor Graphics和Wilson Research Group提供的优秀调查数据,这些项目中有67%落后于计划。
再看看最大的瓶颈,最突出的一个是验证,平均超过项目时间的50%,但最常见的是,ASIC是60-70%,而FPGA大约是50-60%。
尽管付出了这么多努力,75%的ASIC项目仍然需要转制,直接成本高达数百万美元,但更糟糕的是,这可能会导致你的计划拖延数月。
同样的调查显示,84%的FPGA项目仍然看到非平凡的bug逃逸到生产中。很多人认为这没什么大不了的,因为FPGA毕竟是“现场可编程”的,但如果它在太空中的卫星上,就很难重新编程。如果它是在一个产品中,比如工厂的检查设备,那么它可能会导致生产线关闭,或者你可能不得不召回一个产品。最后,你真的不想让硬件漏洞逃逸到飞机和汽车里。
这一切的根源在于,芯片设计是一个复杂的过程,需要关键贡献[和]许多专业技能。但它们都有自己的工具和环境,太多的项目依赖于手动通信技术,如手写规范文档或会议,以获得成功。当信息不完整时,在本地做出假设或决策,往往会导致只有在项目结束时系统才会出现的问题,而解决这些问题的成本很高。正如Allegro Microsystems的Jaimie所指出的那样,这使得敏捷地适应不断变化的需求几乎不可能,他设计的混合信号汽车传感器ASIC无疑是一种具有严格质量要求的多学科产品,但它们也需要敏捷地为每个汽车制造商开发定制功能。
如果您熟悉基于模型的设计,这看起来可能很熟悉。如果没有,也不要担心。
通常在今天,这个早期部分只是系统和算法设计师,他们关注的是“我在做什么?”,以及“我做的东西对吗?””或验证。然后他们将这些规范交给不同的实现工程师,让他们独立地工作以“实现它”,并验证他们“实现了正确的”。如果一个或多个团体出于某种原因做出了这些地方决定,就会导致问题,直到发现时才为时已晚。
我们所缺少的关键是将实现知识引入到早期阶段,在他们开始执行之前,尽早地弄清楚“我们将如何实现它”和“它是否能够工作”,当然,在实现各个部分时,还要不断地重新集成。它让这种联系让一切运转起来,这就是我们现在关注的。
所以,让我们从我们的客户通常采取的一般方法开始。
从根本上说,我们想把算法放到硬件上。首先,我们可能需要调整它们以处理连续的数据流,在满足功能和吞吐量需求的同时,尽可能提高硬件资源的使用效率,这通常包括将数据量化到定点。我们的许多信号处理、无线和视频/图像处理客户主要使用MATLAB,当然,MATLAB对于探索数学、操纵数据集和编程控制非常有用。但如果你的目标是硬件,它可以并行处理,这需要管理并行路径的时间,Simulink很适合。金宝app对于体系结构的可视化以及定点数据类型如何通过操作传播,它也很好。这两种环境很好地结合在一起,所以我们可以利用两者的优点,并在优化算法时平稳过渡。
通常第一步是分区。很多时候,算法和它们的测试在同一个MATLAB脚本中交织在一起。因此,我们需要区分哪些是针对硬件的。这也是帮助构建更健壮和自动化测试环境的良好实践。在这个例子中,我们使用了一种脉冲检测算法,它非常简单,它将信号与匹配滤波器相关联,在匹配的地方产生峰值。这将是硬件设计。剩下的部分将是输入刺激的测试台,我们将不详细介绍,还有分析,目前只是一些可视化和fprintf语句。
专注于算法——它取一个完整的信号,通过滤波器运行它,然后max函数找到全局峰值。但在硬件方面,我们有源源不断的数据流。所以我们需要调整算法来处理这个问题。
我们将在Simulink中构建这个,同时使用金宝app一些MATLAB。我们仍然可以使用相同的测试环境,从“from Workspace”块中获取输入,并通过“To Workspace”块将其发送回来。对于滤波器,我们有一个流式FIR块——这很简单。然后我们需要找到大小的平方,然后我们可以把它构建成实数和虚数平行的平方。现在,为了找到最大值,我们只需要存储最近11个样本的滚动缓冲区。
这在MATLAB中很容易编程,所以我们可以使用MATLAB函数块,通过检查中间样本是否大于其他样本,也高于最小阈值来确定这11个样本的峰值。因为这是不断流,它输出一个脉冲,以表示这个中间样本是识别的峰值。
现在,从验证的角度来看,我们已经将设计与刺激和分析分开了。这将允许我们交换任何版本的优化设计,并仍然与黄金参考算法进行比较。验证工程师通常称这种功能为“计分板”。注意,我们添加了一些自检功能;这将允许我们批量运行模拟,并轻松地检查结果。
此时,您可以实际生成组件来启动RTL验证过程。还记得验证消耗了多少进度吗?通过自动生成测试和黄金参考模型来帮助这个过程,可以帮助他们更早地开始,而不必开发和调试自己的版本。这是用SystemVerilog包装的C代码,因此它可以在任何SystemVerilog模拟器中本机运行。因为它是自动生成的,所以您可以将其视为规范的可执行版本,当设计更改时,您只需重新生成即可。这是开始生成模型的一种非常简单的方法——它适用于任何可以从MATLAB或Simulink生成C代码的地方。金宝app
如果RTL仿真发现不匹配,可以通过连接到RTL仿真的共同仿真MATLAB或Simulink进行调试。因为您有用于算法和RTL的实时模拟器,所以您可以看到两侧的调试可见性,金宝app并且它们以锁定的方式运行。考虑到所有这些,您可能不会以这种方式运行回归,但是当您需要与实际的黄金参考算法进行比较时,调试问题确实很有帮助。
类似于为流行为调整算法,下一个改进级别是添加硬件架构。有很多架构级别的决策会影响硬件性能和资源使用,这确实需要硬件设计人员的专业知识。这里展示了一些示例—为了找到复杂滤波器输出的大小,您使用了勾股定理,但是平方根操作在硬件资源和延迟方面非常昂贵。知道我们只需要找到一组值中的最大值,我们就可以跳过这一步——所以这是硬件实现知识与算法知识一起工作的地方,可以让你更有效地获得好的结果。
一个简单的例子是选择FFT实现选项,在FFT块上可以设置基数、如何实现复数乘法以及添加管道级。
而针对硬件通常需要定点量化来减少资源的使用。但这降低了精度,因此在效率和精度之间进行权衡,这可能成为一个耗时的来回过程。但我们有一些方法可以帮助自动化这个过程,并将其推向融合,所以这是我们看到客户作为第一步采用的另一个功能。
第一种方法是手动转换输入,并让Simulink适当地通过逻辑传播。金宝app在这个例子中,我们将输入设置为18位的乘法,以确保它们映射到FPGA上的DSP片。输出可以通过默认传播增长,但我们在下一阶段将总和的输出减少到18位。这就是Simulink的可视金宝app化真正派上用场的地方。这种方法是一个很好的平衡起点,您可以通过一些小的调整来收敛。
如果您需要对数据类型进行更细粒度的控制,定点设计器可以帮助您实现自动化和管理。它将引导您完成模拟代表性测试样本、收集数据范围的步骤,然后为这些数据范围提出定点类型,您可以按原样使用或调整,然后使用这些类型进行模拟,以与双精度进行比较,以查看结果是否在公差范围内。它还将查看溢出/下溢情况,如图所示。
第三种选择是使用HDL Coder使用本机浮点操作生成硬件。这对于加速更敏感的运算的量子化是有用的。以这个简单的例子为例,显然有人花费了大量时间构建查找表,以计算具有30位精度的32位输入的正弦-余弦运算。为了节省大量时间,您可以在这里使用单精度数据类型,并生成执行本地浮点正弦-余弦计算的硬件。是的,就硬件资源而言,查找表将更有效,但如果您只想使用硬件,而且您有大量的资源,那么这种方法将花费更少的时间。
在这种情况下,HDL编码器实际上可以共享正弦和余弦硬件资源。它支持金宝app广泛的操作和优化,因此您可以在不牺牲准确性的情况下在硬件中实现这些操作。这对于高动态范围的计算尤其有用。您可以将其用于整个设计,也可以将其用于如下所示的孤立区域。它生成与目标无关的RTL。
Demcon将此功能用于外科器械的精确电机控制算法。您可以在这里看到他们的结果,它确实使用了更多的硬件资源,但开发工作量减少了五倍。有关更多详细信息,您可以在MathWorks网站上查看他们的用户故事。
是的,一旦你得到一个点,你有一个流算法与硬件架构和数字,为你的实现工作,它是相当容易生成合成VHDL或Verilog使用HDL编码器。有数百个硬件准备块,您可以使用嵌入式MATLAB代码或statflow图表,这样更有效—例如,用于复杂的控制逻辑。您可以使用许多硬件专业知识来探索和控制优化,或者使用默认值来快速入门。我们设置了许多内置目标,包括映射到各种axis总线接口,并且能够创建自定义目标。在高层进行设计的真正好的部分是探索、更改和生成代码,而不必担心手工编码错误。
这些axis总线接口通常是硬件子系统与其他芯片级子系统和处理器上的软件通信的方式,通常需要对使用这些协议通信的延迟进行建模。类似地,使用外部内存需要通过具有延迟的内存控制器进行读写,这可能会影响硬件架构和算法的功能。SoC Blockset提供了这些效果的仿真模型,所以您可以模拟真实的环境,并在您进入硬件或甚至在您在硬件和软件之间划分之前得到它。
最后,让我们回顾一下我们的客户示例。
这些是Allegro看到的结果;他们现在在Simulink中一起设计和模拟模拟和数字功能,尽早调试问题,并使用实现细节对其进行优化,不断集成改进的模型以进行验证。金宝app这使得他们仍然可以并行地进行开发,同时不断地一起验证所有内容,以消除后期的意外。一旦他们得到了一个可实现的模型,他们就会生成可合成的RTL以进入实现,他们还会为他们的验证环境生成DPI组件。Jaimie在录制的MATLAB Expo视频中提供了更多细节。我鼓励你们去看看。
要开始使用基于模型的设计来实现硬件,最好采用增量方法,通过算法和硬件设计之间的协作,用实现细节划分和精炼算法,从验证模型开始,或者从固定点转换开始,从小投资中获得早期回报。这不仅会消除那些沟通问题,而且通过让这些人一起工作,您将得到一个更好的整体设计。当您变得更加适应并转向可以为之生成合成RTL的设计时,您将能够灵活地为更改的需求轻松地重新生成。
如果你有兴趣了解更多关于如何最好地开始,例如验证通过定点转换,或者通过改进MATLAB算法来实现硬件实现,您可以从这些资源中获得这些技术的更多细节,或者您可以直接与我们联系,如这里所示。