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