- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)