Matlab硬件代码(HDL)生成.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Matlab硬件代码(HDL)生成

警告:本文是雷声天下将Loren的Matlab日志翻译而成,并且添加了个人的使 用体验,只发布到新浪爱问平台上,愿意与广大网友共同学习分享,不得被用于 任何商业场合,如有违背,必将追究责任!!! 技术交流or项目探讨欢迎联系:dlbuaa@163.com Matlab硬件代码(HDL)生成 Matlab硬件代码(HDL)生成 MMaattllaabb硬硬件件代代码码((HHDDLL))生生成成 本文的原作者并不是Loren二十Mathworks公司的HDLCoder产品团队的领导者 Kiran Kintali。利用这一团队的产品可以从M代码直接生成HDL代码,本文同 时给出了多种相关的Matlab软件特性。 1.Matlab硬件代码生成工具的介绍 如果你在用Matlab对应用于FPGA或者其他ASIC现代数字信号处理或者视频和 图像处理算法建模仿真,请继续阅读 FPGA给出了通用处理器(GPP)和专用集成电路(ASIC)之间的一个很好的融合方 案。GPP是完全可编程器件,但是在功率消耗和性能上差强人意(必定不是专用 的器件啊)。ASIC用于特定的功能在功耗和性能上有优势,但是需要经历及其昂 贵的开发设计过程。FPGA同样也用于ASIC的原型设计验证过程中和软件开发中。 在应用FPGA替代传统处理器对新的算法进行的原型验证的过程中,要求高吞吐 率、高性能的应用场合越来越多。多数算法在Matlab中业已实现,同时也有相 应的可视化分析测试功能。当目标是为了 FPGA或者ASIC设计中,不得不把 Matlab算法手动地转化为HDL代码。 对于多数谙熟软件设计的编程者来说,掌握硬件FPGA开发设计过程是一种挑战。 与软件算法开发不同,硬件开发需要设计者“并行思考”。其他的困难例如:学 习VHDL或者Verilog语言、掌握FPGA生产商提供的开发软件、理解诸如“多循 环路径”、“延迟均衡”术语。 在这篇日志中,我将详细描述一条更容易的从Matlab到FPGA的路径。我将向你 们展示如何自动将Matlab算法代码生成HDL代码、在FPGA上验证代码和用 Matlab验证你的HDL代码。 2 从Matlab到硬件的工作流程 将Matlab涉及转换成硬件包含以下步骤: (1)在Matlab中对你的算法建模-使用Matlab来仿真、调试和优化设计; (2)生成HDL代码-自动生成FPGA原型的HDL代码 (3)验证HDL代码-再次使用你的Matlab test bench来验证你的FPGA设计 (4)创建和验证FPGA原型-在FPGA上应用和验证你的设计 在将Matlab“翻译”到硬件的过程中有几个特殊的困难。Matlab代码是一种面对过程的程 序,而且可以高度抽象;他可以使用浮点数据并且没有时间概念。复杂的循环可以由矩阵运 算和工具箱功能中推测出。 在硬件中应用Matlab代码包括: (1) 将浮点数Matlab代码转化为定点数Matlab代码,在这个过程中需要按照硬件生成的有 效性对比特宽度进行最优化。 (2) 将基于过程的程序辨识和映射到并发的程序,并且进行运行速度最优化。 (3) 添加时钟和时钟率来完善硬件的调度。 (4) 创建资源共享结构来实现开销极大的操作如乘法器和for-loop循环体。 (5) 将大块的数据矩阵映射到硬件的RAM中去。 Matlab HDL Coder通过自动流程简化了上述任务。 3Matlab算法例子 让我们将一个应用了直方图均衡化算法的Matlab函数来展示这个流程。这个Matlab算法增 强了图像的对比度,所以最终的效果是图像的直方图更加平坦。 文件名称:type mlhdlc_heq.m % Histogram Equalization Algorithm function [pixel_out] = mlhdlc_heq(x_in, y_in, pixel_in, width, height) persistent histogram persistent transferFunc persistent histInd persistent cumSum if isempty(histogram) histogram = zeros(1, 2^8); transferFunc = zeros(1, 2^8); histInd = 0; cumSum = 0; end % Figure out indices based on where we are in the frame if y_in height x_in width % valid pi

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档