下学期我将进入我的最后一年(电气和计算机工程),我正在寻找嵌入式系统或硬件设计的毕业项目。我的教授建议我搜索当前系统并尝试使用硬件/软件协同设计来改进它,他给了我一个“自动车牌识别系统”的例子,我可以使用 VHDL 或 verilog 的专用硬件来使系统执行更好的 。
我搜索了一下,发现一些 youtube 视频显示系统工作正常。
所以不知道有没有改进的余地。如何知道某些算法或系统是否很慢并且可以从协同设计中受益?
下学期我将进入我的最后一年(电气和计算机工程),我正在寻找嵌入式系统或硬件设计的毕业项目。我的教授建议我搜索当前系统并尝试使用硬件/软件协同设计来改进它,他给了我一个“自动车牌识别系统”的例子,我可以使用 VHDL 或 verilog 的专用硬件来使系统执行更好的 。
我搜索了一下,发现一些 youtube 视频显示系统工作正常。
所以不知道有没有改进的余地。如何知道某些算法或系统是否很慢并且可以从协同设计中受益?
我不知道什么是代码设计,但我之前做过一些verilog;我认为简单的图像(或信号)处理任务非常适合此类嵌入式系统,因为很多时候它们涉及大量数据的实时处理(最好是 SIMD 操作)。
图像处理任务通常看起来很容易,因为我们的大脑为我们进行了令人难以置信的复杂处理,但实际上它们非常具有挑战性。我认为这个挑战是重要的,而不是如果以前实施过这样的系统。我会实施霍夫变换(首先是线和圆,而不是广义的 - 它被认为是图像处理中的慢算法)并进行一些实时分割。我相信随着它的发展,这将是一项具有挑战性的任务。
如何知道某些算法或系统是否很慢并且可以从协同设计中受益?
在许多情况下,这是一个架构问题,只有通过大量经验甚至大量系统建模和分析才能回答。在其他情况下,一个信封背面的 5 分钟可以向您展示一个专门的协处理器增加了数周的工作,但没有提高性能。
硬壳的一个例子是任何现代手机处理器。看看 TI OMAP5430。请注意,它至少有 10 个不同类型的处理器(仅 PowerVR 模块就有多个执行单元)和数十个完全定制的外围设备。每当您希望从“主”CPU 中卸载某些东西时,都必须考虑潜在的总线带宽/硅面积/上市时间成本。
一个简单的案例就像你的教授提到的那样。DSP/GPU/FPGA 将执行图像处理任务,例如 2D 卷积,其速度比 CPU 快几个数量级。但是像文件管理这样的“家务”任务不是用 FPGA 可以解决的。
就您而言,我认为您的教授并不希望您做一些“真实的”事情。我认为他正在寻找的是您对 CPU/GPU/DSP 擅长什么以及定制硬件擅长什么的理解。您可能希望寻找一个有趣的小众问题,例如生物信息学中的那些。
分区时要做的第一件事是查看数据流。绘制每个“子算法”适合的位置的框图,以及输入和输出的数据。每当您必须将大量数据从一个域移动到另一个域时,就开始寻求将部分问题转移到拆分的另一侧。
例如,考虑一个图像处理管道,它进行边缘检测,然后与阈值进行比较,然后进行更多处理。边缘检测的输出将是(比如说)16 位有符号值,每个像素一个。最终输出是一个二进制图像(一个位集指示“重要”边缘的位置)。
一种(显然是幼稚的,但它说明了这一点)实现可能是在硬件中进行边缘检测,将边缘图像发送到软件,然后对其进行阈值处理。这涉及“跨越鸿沟”运送一个 16 位值的完整图像。
更好的是,在硬件上也做门槛。然后您可以移动 8 个“1 位像素”/字节。(甚至运行长度对其进行编码)。
一旦有了合理的带宽分区,您就必须确定适合每个域的块是否适合该域,或者考虑使用不同的分区。
我要补充一点,一般来说,硬件/软件协同设计在降低成本时很有用。
嵌入式系统有两个主要的成本因素:
你的产量越高,生产成本就越重要,而开发成本就变得不那么重要了。
今天,开发硬件比开发软件更难。这意味着如今协同设计解决方案的开发成本将会更高。这意味着它主要用于大批量生产。但是,您现在需要 FPGA(或类似的)来进行协同设计,而且它们的成本很高。
这意味着当必要的 FPGA 成本低于针对您的问题类型(CPU、GPU、DSP 等)的现有解决方案时,协同设计很有用,假设两种解决方案都满足您的其他要求。高性能系统(大多数情况下)就是这种情况,因为如今 FPGA 的成本很高。
因此,基本上,如果系统要大批量生产并且是高性能设备,您将需要对系统进行协同设计。
这有点简化,可能在十年左右的时间里变成错误的。正在进行从高级规范 + FPGA 价格下降的 HW/SW 综合研究。这意味着在十年左右的时间里,协同设计可能会对大多数嵌入式系统变得有用。
你最终做的任何项目,我的建议是制作一个软件版本和一个硬件版本的算法来做性能比较。您还可以对开发时间等进行比较。如果您选择发布任何内容,这将使您的项目更加科学和对其他人有帮助。盲目地认为硬件比软件快不是一个好主意,所以分析很重要。