埃里克•Cigan MathWorks
本视频是演示使用SoC Blockset™在FPGA硬件逻辑和嵌入式处理器之间设计数据路径的系统方法系列的一部分。应用程序通常在硬件逻辑和片上系统(SoC)设备上的嵌入式处理器之间进行分区,以满足吞吐量、延迟和处理需求。
学习设计和模拟由FPGA和处理器算法以及内存接口组成的整个应用程序。您将看到如何使用SoC Blockset中的块来建模共享外部内存,以及如何使用SoC Blockset来测量不同形式的延迟,以及内存缓冲区中的数据丢失。
通过使用模拟执行这些分析,您可以比仅使用硬件更好地了解设计。在实现硬件之前,您可以发现吞吐量损失、延迟和示例丢失等问题。
在本视频中,我们将展示如何使用SoC Blockset来建模和模拟硬件效果,当设计从FPGA到处理器的数据路径时。
通过在开发应用程序时模拟硬件效果,您可以评估总体性能,而无需将应用程序加载到开发板上。此外,与使用开发板相比,使用模拟可以更清楚地了解应用程序,因此您可以更快地识别问题并测试潜在的解决方案。
这是我们正在设计的应用程序的初始模型。它从外部来源获取正弦数据流,将其分为低或高频信号,并照亮低或高频探测器光。
我们将用拨动开关选择低高频信号进行测试。为了测试的目的,我们将在FPGA中生成测试信号。FPGA过滤输入流,然后将数据传递到缓冲区。这个初始模型使用一个简单的理想缓冲区,这足以用于检查算法。处理器对一帧数据进行操作,检测信号,并打开相应的检测器灯。
我们可以看到模型运行。在模拟中,我们可以在低频和高频测试信号之间切换,我们看到探测器发光二极管亮起来。这个模拟验证了算法,但是现在我们想在DDR内存中加入缓冲的硬件效果,就像我们在硬件中配置它一样。SoC Blockset包括帮助我们的块和模板。
考虑我们应用程序的这个图。测试信号由FPGA以100 kHz的速率采样。处理器每10毫秒处理一帧数据。由于数据从FPGA异步传输到处理器,我们在FPGA内存和DDR内存中插入一个FIFO。这里的虚线表示背压。这发生在内存缓冲区填满时,可能需要更多的数据留在FPGA的FIFO中,直到缓冲区被刷新。
以下是设计必须满足的两个要求:
当我们试图满足这些要求时,我们将关注两个参数:帧大小和缓冲区的数量。
我们使用来自SoC块集的块来更准确地建模这个设计的架构。
首先,我们使用800个样本的帧大小,每个样本消耗4个字节。我们还指定内存区域将由11个缓冲区组成。我们设置了内存通道块的参数并进行了仿真。
在仿真过程中,我们可以切换输入信号之间的低高频信号。我们可以看到来自处理器的数据输出信号,看到频率的变化,我们可以看到指示灯相应的变化。我们运行了100秒的模拟时间,这个模型已经运行完成了。
我们打开内存通道块,它被用来测量每帧的延迟时间。如图所示,进入仿真几秒钟后,延迟达到100毫秒的范围。最大允许的延迟是100毫秒,所以这个设计与延迟要求相差不大。既然我们已经接近要求了,就让我们暂时继续吧。
另一个要求是不能超过1 / 10000的样本被丢弃。使用SoC Blockset,可以对模型进行测量,以便我们能够确定是否有样本被丢弃。我们可以从顶部的图表中看到,缓冲区使用在模拟过程中3秒左右开始增加,并增加到5.5秒左右。中间的图表描绘了FIFO的使用情况,底部的图表描绘了被丢弃的样本数量。
在大约5.8秒时,先进先出开始稳定地下降样本。在100秒结束时,大约有900个样本被丢弃,我们可以看到,在每10秒的周期内,大约有100个样本被丢弃。这几乎是正确的,一万分之一。由于这个设计不能很好地满足任何规格,让我们尝试改变内存配置。
我们将把帧大小从800个样品增加到1000个样品,并将缓冲区的数量从11个减少到9个。然后我们用新的参数重新运行模拟。
一旦模拟完成,我们可以打开内存通道块。在这种情况下,延迟在模拟进行到大约23秒时达到峰值,此时达到约78毫秒的延迟。记住,允许的最大延迟是100毫秒,所以现在我们在这个限制下很安全。
然后我们再检查一下,是否在10000个样品中掉落少于1个的要求之内。当我们看三个相同的变量时,我们可以看到没有任何样本被丢弃。这意味着我们现在的设计满足了我们的两个需求。
现在我们已经使用了SoC Blockset模拟来确定帧大小和缓冲区的数量,我们准备在FPGA板上实现硬件设计,在那里我们可以使用SoC Blockset执行进一步的测试,以验证我们的模拟结果。
总而言之,我们使用SoC Blockset来增强带有硬件效果的算法模型,这样我们就可以使用仿真来查看不同的帧大小和缓冲区数量如何影响性能。
通过在硬件架构上模拟算法,我们能够在硬件上实现之前发现延迟和样本丢失等问题。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。