MATLAB生成 FPGA代码

2023-11-10

写作时间:
2020-12-13
标题:
使用 HDL Coder 将 MATLAB 转换为 FPGA
目录:
1.从 MATLAB 生成 HDL 代码
2.MATLAB 到硬件工作流
3.MATLAB 算法示例

正文:

1.从 MATLAB 生成 HDL 代码
FPGA 在通用处理器(GPP)和专用集成电路(ASIC)之间提供了很好的折中方案。GPP 是完全可编程的,但在功率和性能方面效率较低;
ASIC 可实现专用的功能,并展现出最佳的功率和性能特性,但需要极其昂贵的设计验证和实现周期。
FPGA 也用于 ASIC 工作流中的原型设计,以进行硬件验证和早期软件开发。

由于在运行高吞吐量、高性能的应用程序时,性能有了大幅度的提高,算法设计者越来越多地使用 FPGA 而不是传统的处理器来原型化和验证创新。
然而,由于 MATLAB 简单易用的编程模型和丰富的分析和可视化能力,许多算法都是在其中实现的。
当针对 FPGA 或 ASIC 时,这些 MATLAB 算法必须手动转换为 HDL

对于许多精通软件编程的算法开发人员来说,掌握 FPGA 设计工作流是一项挑战。
与软件算法开发不同,硬件开发要求并行思想
存在的其他障碍包括:学习 VHDL 或 Verilog 语言,掌握 FPGA 供应商的 IDE,理解深奥的术语,如“多周期路径”和“延迟平衡”等。

在这篇文章中,我将介绍一个从 MATLAB 转换为 FPGA 的简单路径。
我将展示如何从 MATLAB 算法自动生成 HDL 代码,在 FPGA 上实现 HDL 代码,并使用 MATLAB 来验证您的 HDL 代码

2.MATLAB 到硬件工作流

将 MATLAB 设计转换为硬件的过程包括以下步骤:
1. 在 MATLAB 中建模您的算法——使用 MATLAB 来模拟、调试、迭代测试并优化设计。
2. 生成 HDL 代码——自动创建用于 FPGA 原型的 HDL 代码。
3. 验证 HDL 代码——重用您的 MATLAB test bench 来验证生成的 HDL 代码。
4. 创建和验证 FPGA 原型——在 FPGA 上实现和验证您的设计。

将 MATLAB 转换为硬件存在一些独特的挑战。
MATLAB 代码是过程性的,可以高度抽象;它可以使用浮点数据,并且没有时间概念。复杂的循环可以从矩阵运算和工具箱函数推断出来。
在硬件中实现 MATLAB 代码包含以下操作:
1)将浮点 MATLAB 代码转换为具有优化位宽的定点 MATLAB 代码,以实现高效的硬件生成。
2)识别程序结构并将其映射到并发的经过面积和速度优化的硬件操作上。
3)通过添加时钟和时钟率来调度硬件中的操作,引入时间的概念
4)创建资源共享架构来实现昂贵的操作符,如乘数和 for 循环体。
5)将大型持久化数组映射到硬件中的块RAM


HDL Coder™ 可通过工作流自动化简化上述任务。


3.MATLAB 算法示例

让我们用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 pixel data
    histInd = pixel_in + 1;
elseif y_in == height && x_in == 0 % first column of height+1
    histInd = 1;
elseif y_in >= height % vertical blanking period
    histInd = min(histInd + 1, 2^8);
elseif y_in < height % horizontal blanking - do nothing
    histInd = 1;
end
%Read histogram
histValRead = histogram(histInd);
%Read transfer function
transValRead = transferFunc(histInd);
%If valid part of frame add one to pixel bin and keep transfer func val
if y_in < height && x_in < width
    histValWrite = histValRead + 1; %Add pixel to bin
    transValWrite = transValRead; %Write back same value
    cumSum = 0;
elseif y_in >= height %In blanking time index through all bins and reset to zero
    histValWrite = 0;
    transValWrite = cumSum + histValRead;
    cumSum = transValWrite;
else
    histValWrite = histValRead;
    transValWrite = transValRead;
end
%Write histogram
histogram(histInd) = histValWrite;
%Write transfer function
transferFunc(histInd) = transValWrite;
pixel_out = transValRead;

MATLAB Test Bench 示例
下面是一个 test bench,用于验证算法是否对示例图像起作用。
(注意,此 testbench 使用 Image Processing Toolbox 的内置函数来读取原始图像,并在均衡后绘制转换的图像。)
type mlhdlc_heq_tb.m

%% Test bench for Histogram Equalization Algorithm
clear mlhdlc_heq;
testFile = 'office.png';
RGB = imread(testFile);
% Get intensity part of color image
YCBCR = rgb2ycbcr(RGB);
imgOrig = YCBCR(:,:,1);
[height, width] = size(imgOrig);
imgOut = zeros(height,width);
hBlank = 20;
% make sure we have enough vertical blanking to filter the histogram
vBlank = ceil(2^14/(width+hBlank));
for frame = 1:2
    disp(['working on frame: ', num2str(frame)]);
    for y_in = 0:height+vBlank-1
        %disp(['frame: ', num2str(frame), ' of 2, row: ', num2str(y_in)]);
        for x_in = 0:width+hBlank-1
            if x_in < width && y_in < height
                pixel_in = double(imgOrig(y_in+1, x_in+1));
            else
                pixel_in = 0;
            end
             [pixel_out] = mlhdlc_heq(x_in, y_in, pixel_in, width, height);
             if x_in < width && y_in < height
                 imgOut(y_in+1,x_in+1) = pixel_out;
             end
         end
     end
 end
% Make color image from equalized intensity image
% Rescale image
imgOut = double(imgOut);
imgOut(:) = imgOut/max(imgOut(:));
imgOut = uint8(imgOut*255);
YCBCR(:,:,1) = imgOut;
RGBOut = ycbcr2rgb(YCBCR);
figure(1)
subplot(2,2,1); imshow(RGB, []);
title('Original Image');
subplot(2,2,2); imshow(RGBOut, []);
title('Equalized Image');
subplot(2,2,3); hist(double(imgOrig(:)),2^14-1);
title('Histogram of original Image');
subplot(2,2,4); hist(double(imgOut(:)),2^14-1);
title('Histogram of equalized Image');

我们来仿真一下此算法,看看结果。

mlhdlc_heq_tb

在这里插入图片描述
HDL Workflow Advisor

HDL Workflow Advisor(请参见下面的快照)有助于自动执行步骤,并提供从MATLAB到硬件的引导。
您可以在 Workflow Advisor 的左窗格中看到工作流的以下关键步骤:

  1. 定点转换
  2. HDL 代码生成
  3. HDL 验证
  4. HDL 综合与分析
    在这里插入图片描述
    我们来详细看看工作流中的每个步骤。
    定点转换
    信号处理应用程序通常使用 MATLAB 中的浮点运算来实现。但是,出于功耗、成本和性能的原因,在面向硬件时,需要将这些算法转换为使用定点运算。定点转换非常具有挑战性并且非常耗时,通常需要占用整个设计和实施时间的 25% 到 50%。HDL Coder™ 中用于浮点到定点自动转换的工作流可以极大地简化和加速转换过程。
    浮点到定点转换工作流包括以下步骤:

1)验证浮点设计与代码生成兼容。
2) 根据计算范围,通过模拟 test bench 或通过静态分析(将传播设计范围以计算所有变量的派生范围)提出定点类型。
3)通过应用建议的定点类型生成定点 MATLAB 代码。
4) 验证生成的定点代码,并将生成的定点代码的数值精度与原始浮点代码进行比较。
请注意,此步骤是可选的。如果您的 MATLAB 设计已在定点实现,则可以跳过此步骤。

HDL 代码生成
HDL 代码生成步骤通过定点 MATLAB 代码生成 HDL 代码。
您可以生成实现 MATLAB 设计的 VHDL 或 Verilog 代码。
除了生成可综合的HDL代码外,HDL Coder™ 还可生成各种报告,包括可帮助您在 MATLAB 代码和生成的 HDL 代码之间导航的可跟踪报告,以及在算法级别显示实现设计所需硬件资源(加法器、乘法器和 RAM)的资源利用率报告。
在代码生成期间,您可以指定各种优化选项来探索设计空间,而无需修改算法。在下面的“设计空间探索和优化选项”部分中,您可以看到如何修改代码生成选项以及如何针对速度或面积来优化设计。

HDL 验证
独立 HDL test bench 的生成:
HDL Coder™ 可通过您的 MATLAB 脚本生成 VHDL 和 Verilog test bench,以快速验证生成的 HDL 代码。您可以使用将激励应用于 HDL 代码的多个选项来自定义 HDL test bench。您还可以生成脚本文件,以自动执行在 HDL 模拟器中编译和模拟代码的过程。这些步骤有助于确保 MATLAB 仿真的结果与 HDL 仿真的结果相匹配。

HDL Coder™ 还与 HDL Verifier 一起使用,以自动生成两种类型的协同仿真 test bench:
1)基于 HDL 协同仿真的验证可与 MentorGraphics® ModelSim® 和 QuestaSim® 配合使用,其中 MATLAB 和 HDL 仿真可前后相接。

2)FPGA 在环仿真允许您与 FPGA 电路板严格同步地运行 MATLAB 仿真。您可以使用 MATLAB 将实际的数据输入到 FPGA 的设计中,并确保该算法在硬件中实现时能够达到预期的性能。

HDL 综合
除了与语言相关的挑战外,FPGA 编程还需要使用复杂的 EDA 工具。从 HDL 设计中生成比特流并对 FPGA 进行编程可能是一项艰巨的任务。HDL Coder™ 通过为 Xilinx® 和 Altera® 创建用生成的HDL代码配置的项目文件,可在此处提供自动化。您可以使用工作流步骤在MATLAB 环境中综合 HDL 代码,查看综合结果,并迭代 MATLAB 设计以改善综合结果。

设计空间探索和优化选项

HDL Coder™ 提供以下优化,以帮助您探索如何在设计空间的面积和速度之间进行权衡。您可以使用这些选项来探索各种架构并进行各种权衡,而不必手动重写算法。

速度优化
流水线:为了提高设计的时钟频率,HDL Coder 使您可以在设计中的各个位置插入流水线寄存器。例如,您可以在设计的输入和输出处以及在算法中给定 MATLAB 变量的输出处插入寄存器。

分布式流水线:HDL Coder 还提供了基于重定时的优化,可通过设计中的组合路径将延迟降到最小,以此自动移动插入的流水线寄存器,从而最大化时钟频率。

面积优化
RAM 映射:HDL Coder™ 将矩阵映射到硬件中的导线或寄存器。如果将持久性矩阵变量映射到寄存器,则它们会占用大量的FPGA面积。HDL Coder™会自动将持久性矩阵映射到块RAM,以提高面积效率。将MATLAB矩阵映射到块RAM的挑战在于,硬件中的块RAM通常具有一组有限的读写端口。HDL Coder™ 通过自动划分和调度矩阵读写来满足块 RAM 的端口限制,同时仍然遵循设计中的其他控制依赖性和数据依赖性来解决此问题。

资源共享:此优化可以识别并共享 MATLAB 代码中具有等效功能的乘法器操作。您可以控制设计中的乘数器共享量。

循环流:MATLAB 的 for 循环可在 VHDL 中创建一个 FOR_GENERATE 循环。循环主体在硬件中的复制次数与循环迭代次数相同。这会导致面积使用的低效。循环流优化会创建循环体的单个硬件实例,该实例在循环迭代之间进行时间多路复用。

常数乘法器优化:此设计级别的优化使用正则有符号数(CSD)技术将常数乘法器转换为移位和加法运算。

最佳实践方法
现在,我们来看几个在面向 FPGA 来编写 MATLAB 代码时的最佳实践方法。
编写 MATLAB 设计时:
使用支持 HDL 代码生成的 MATLAB 代码生成子集。
使顶层接口尽可能简单。顶层功能的大小、类型和复杂性决定了在硬件中实现的芯片接口。
不要将大量并行数据传递到设计中。并行数据需要芯片上的大量 IO 引脚,并且可能无法综合。在典型的图像处理设计中,您应该将像素输入串行化,并在算法内部缓冲它们。
编写 MATLAB test bench 时:
从 test bench 函数调用设计。
彻底执行设计。这对于浮点到定点转换尤为重要,其中 HDL Coder™ 会根据 test bench 分配给变量的值来确定算法中变量的范围。您可以重复使用此测试工作台来生成 HDL test bench,以测试所生成的硬件。
在代码生成之前用 test bench 对设计进行仿真,以确保没有仿真错误,并确保所有必需的文件都在路径中。
结论
HDL Coder™ 提供了在 FPGA 中实现算法的无缝工作流。在本文中,我向您展示了如何采用 MATLAB 图像处理算法、将其转换为定点、生成 HDL 代码、使用 test bench 验证生成的 HDL 代码,以及最终综合设计并在硬件中实现它。
通过本文对 HDL Coder™ 以及 MATLAB 转 HDL 代码生成和验证框架的简要介绍,我们希望能助您了解如何开始快速实施 MATLAB 设计和目标 FPGA。


THE END~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB生成 FPGA代码 的相关文章

  • testt

    test
  • visio2016企业批量授权版本的激活方式

    首先先下载visio2016的企业批量授权版本 下载地址 用window的资源管理器打开压缩包 点击setup exe 之后默认安装 接下来就是激活的过程 win r快捷键 输入cmd cd C Program Files Microsof
  • anaconda 安装 for macOSX

    步骤 1 登陆官网 https www anaconda com 2 点击 get started 开始 3 选择下载 下载 4 根据自己的电脑来选择下载的方式 我用的是mac所以就选择这个 这里有两种选择 其实都可以 选择一个就行 4 1
  • osgEarth的Rex引擎原理分析(二十一)创建瓦片模型过程详解

    目标 十七 中问题47 瓦片模型的作用是负责管理瓦片中的影像 高程等图层信息 这些信息的获取最终通过createTileModel函数来实现 负责维护瓦片版本等 应当是每一个瓦片都对应有一个瓦片模型 这个瓦片模型是在瓦片请求过程中创建的 具
  • 面试最常被问的 Java 后端题目及参考答案

    一 Java 基础篇 1 Object 有哪些常用方法 大致说一下每个方法的含义 2 Java 创建对象有几种方式 3 获取一个类对象的方式有哪些 4 ArrayList 和 LinkedList 的区别有哪些 5 用过 ArrayList
  • next.js中引入sass

    第一步 安装sass npm install save zeit next sass node sass 第二步 在项目根目录添加 next config js 文件 用于指示Next加载对用的功能 const withSass requi
  • 基础软件与开发语言开源论坛

    ChinaOSC 2022基础软件与开发语言开源技术论坛将于8月20日 14 00 18 00在陕西省西安高新国际会议中心召开 论坛邀请到在操作系统 中间件等基础软件领域 以及编程语言领域深耕多年的开源专家 深度分享开源软件研发的创新之路
  • 【Pandas总结】第九节 Pandas_累计与分组 pd.groupby()

    文章目录 一 数据准备 二 累计值计算 2 1 df describe 2 2 常用统计值 三 分组 pd groupby 四 更多的使用方法 aggregate filter transform apply 4 1 aggregate 4
  • [Kafka] - Kafka Java Producer代码实现

    根据业务需要可以使用Kafka提供的Java Producer API进行产生数据 并将产生的数据发送到Kafka对应Topic的对应分区中 入口类为 Producer Kafka的Producer API主要提供下列三个方法 public
  • webview拦截垃圾电信运营商的广告方法

    mWebView setWebViewClient new WebViewClient Override public boolean shouldOverrideUrlLoading WebView view String url if
  • terminated 线程_Java中如何正确地中断一个线程?

    本文主要整理了关于线程中断的相关知识点 1 线程的状态 NEW 新建 一个尚未启动的线程处于这一状态 A thread that has not yet started is in this state RUNNABLE 可运行 一个正在
  • QT实现塔防游戏

    在基本功能实现后 对游戏进行优化 主要有以下几部分 实现传奇的升级 实现传奇的移除 绘画出波数与血量 实现游戏的暂停与回到选关关卡 实现游戏的胜利与失败 1 实现传奇的升级 创建一个selectbutton2类 ifndef SELECTB
  • 【华为OD机试真题 Python】多个数组合并

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • 如何让RecyclerView滑动到底部?

    在做这个功能时 使用scroll的任何一个方法 发现它每次都只滑到了一半 今天终于解决了 解决方法如下 LinearLayoutManager linearLayoutManager LinearLayoutManager recycler
  • 【批量注册组件】

    自动的批量注册组件 大致步骤 使用 require 提供的函数 context 加载某一个目录下的所有 vue 后缀的文件 然后 context 函数会返回一个导入函数 importFn 它又一个属性 keys 获取所有的文件路径 通过文件
  • 不得不读

    本次总共收集了8位大牛的8篇精品文章 内容涉及设计 验证 行业研究 ICer职场生活等各方面 欢迎大家点击阅读并关注 1 酒酒拿下四五十万的真实大厂面试经历 作者介绍 酒酒成电研三在读 自学算法leetcode刷题 双修IC验证 斩获互联网
  • 程序中难以捉摸的错误如何自动检测?Parasoft Insure++ v2021.1发布!

    Parasoft Insure 是用于 C 和 C 应用程序的自动化运行时应用程序测试工具 可检测难以捉摸的错误 例如内存损坏 内存泄漏 内存分配错误 变量初始化错误 变量定义冲突 指针错误 库错误 I O 错误 和逻辑错误 Parasof
  • Python网络爬虫使用教程

    文章目录 一 URL资源抓取 1 urllib 2 requests 3 requests html 二 正则表达式 三 数据解析 1 Beautiful Soup 2 lxml 3 selectolax 四 自动化爬虫selenium 五
  • 汉字的区码和位码

    写于2016年12月08日 汉字的区码和位码 由于国标码是四位十六进制 为了便于交流 大家常用的是四位十进制的区位码 所有的国标汉字与符号组成一个94 94的矩阵 在此方阵中 每一行称为一个 区 每一列称为一个 位 因此 这个方阵实际上组成

随机推荐

  • 字典树实现_数据结构与算法之字典树(Golang实现)

    1 字典树 算法描述 trie树的本质 就是利用字符串之间的公共前缀 将重复的前缀合并在一起 时间复杂度 构建O n 查询O k 1 1 1 算法步骤 根节点 什么都不表示 做一个字典比如a z 字母表 没一个节点包含这26个字母的字典表
  • 基于pytorch卷积人脸表情识别--毕业设计

    基于卷积神经网络的人脸表情识别 前言 毕业设计内容介绍 卷积神经网络的设计 卷积网络的模型 卷积池化过程详细说明 第一层卷积池化过程 第二层卷积池化过程 第三层卷积池化过程 全连接层过程 模型的训练过程 卷积与池化原理 模型如何训练 模型的
  • C++字符串全排列(递归法)和(迭代法)以及next_permutation底层原理详解

    目录 前言 next permutation的使用 实现全排列的两种算法 1 递归法 全排列方便理解记忆的方法 作为备用方法 实现代码 无重复元素情况 有重复元素情况 2 迭代法 next permutation底层原理 实现代码 有无重复
  • 【Makefile】Makefile 中 LINUXINCLUDE 的作用

    在驱动开发的时候 我们经常会创建很多新的头文件 这些头文件大多以 include xxx h 的形式放在源码中 而内核头文件则是以 include
  • Excel的基本操作(新手必看)

    11 文本记忆输入 先定义前两行单元格的文字 在下面的单元格中 右键 从下拉列表中选择 那么会显示前面输入的内容 12 数据的有效性验证 方式1 点击空白单元格 数据 数据验证 允许中选择序列 在来源中以 英文逗号的形式 添加 列表 方式2
  • spring boot 启动流程

    计时器开始计时 headless模式赋值 发送ApplicationAStartingEvent 配置环境模块 发送ApplicationEnvironmentPreparedEvent 打印banner 创建上下文应用对象 初始化失败分析
  • PEST分析顺丰服务需求_快递行业宏观环境分析

    快递行业宏观环境分析 宏观环境 PEST 分析 PEST 分析又称大环境分析 是研究宏观环境的有效工具 通过 Pest 分析法 公司能够剖析出自身所处的外部大环境究竟对自己的发 展是有利还是有害 以及据此作出战略规划 趋利避害 其中每一个
  • 如何处理日志文件丢失

    select group members from v log 查看日志文件的状态 select group status from v log 有状态来决定执行步骤 status active alter system checkpoin
  • ssh连接服务器协议错误,SSH服务 packet_write_wait: Connection to xxx port 22: Broken pipe错误处理...

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 http www one3 cn p 306 昨晚通过scp把其中一台服务器上面的文件传输到另一台机器上面 因为文件比较多且大
  • Rockchip CAN FD 开发文档

    Rockchip CAN FD 开发文档 前言 概述 产品版本 芯片名称 内核版本 RK356X 4 19 5 10 RK3588 5 10 目录 文章目录 Rockchip CAN FD 开发文档 toc CAN FD 驱动 驱动文件 D
  • 22. 协程与Python中的多任务异步协程

    目录 前言 协程概念 示例代码 Python编写协程程序 要用到的库函数 尝试编写异步 尝试改进函数 尝试优化代码 在爬虫领域的应用 总结 前言 本节我们介绍一个新概念 协程 协程顾名思义 是协助执行程序的过程 我们将介绍协程的概念和其在P
  • 静态地址重定位 与 动态地址重定位

    静态地址重定位 即在程序装入内存的过程中完成 是指在程序开始运行前 程序中的各个地址有关的项均已完成重定位 地址变换通常是在装入时一次完成的 以后不再改变 故成为静态重定位 优点 无需硬件支持 缺点 1 程序重定位之后就不能在内存中搬动了
  • QT定时器的使用

    QT定时器的使用 使用QTimer定时器类 1 首先创建一个定时器类的对象 QTimer timer new QTimer this 2 timer 超时后会发出timeout 信号 所以在创建好定时器对象后给其建立信号与槽 connect
  • jenkins学习笔记第五篇使用参数化解决ant+jemeter生成报告问题

    jenkins插件还是很强大的 这里用到的插件是Date Parameter 在参数化构建过程中添加参数 这里具体使用如下 可以在项目构建里 添加shell 具体引入方式如 echo DateParameter 在windows下使用的是w
  • windows node.js二进制文件的下载与配置

    1 下载 下载地址 http nodejs cn download 根据自己的电脑下载 2 将压缩包解压到你想安装的位置 3 在解压之后的文件夹中创建两个文件夹 node global npm全局安装位置 和node cache npm 缓
  • 使用Aspose在C#中将PLT转换为PDF或JPEG图像

    PLT是用于绘图仪机器的基于矢量的格式 但是 只有少数应用程序支持此格式 因此可能需要根据需要转换为更兼容的格式 使用Aspose只需几个简单的步骤即可将PLT文件转换为PDF PNG或JPEG图像 让我们学习以下部分以获取更多详细信息 在
  • 微信支付报错:用户传入的appid不正确,请联系商户处理

    微信APP支付的时候 报用户传入的appid不正确 请联系商户处理错误 解决方案 1 确保所有配置正确 2 可以检查一下签名的大小写
  • Kali--MSF-永恒之蓝详解(复现、演示、远程、后门、加壳、修复)

    目录 一 永恒之蓝概述 二 SMB协议 三 准备工作 四 漏洞复现 1 主机发现 2 端口扫描 3 利用模块 五 演示功能 1 获取cmd 2 捕获屏幕 3 上传文件 4 下载文件 5 远程登录 6 上传后门 7 免杀加壳 8 运行wann
  • 开博说明

    新开博客 开博说明 开博说明 大家好 这是我个人第一个技术博客 由于本人工作涉及金融量化方面 我会在今后的博客中主要涉及如下内容 方便有志之士一起探讨学习 也方便我个人查漏补缺 谢谢 python pandas sklearn tensor
  • MATLAB生成 FPGA代码

    写作时间 2020 12 13 标题 使用 HDL Coder 将 MATLAB 转换为 FPGA 目录 1 从 MATLAB 生成 HDL 代码 2 MATLAB 到硬件工作流 3 MATLAB 算法示例 正文 1 从 MATLAB 生成