跳转到主要内容
瑞苏盈科专栏
我与瑞苏盈科板卡的开发故事

Matlab

System Generator从入门到放弃(四)——利用MCode调用MATLAB代码

judy 提交于

FPGA设计中经常用到一些控制逻辑,如有限状态机(FSM),如果用各种block搭建一个FSM比较麻烦。System Generator支持调用MATLAB代码,通常可以编写MATLAB代码来实现FSM等控制逻辑,通过MCode block调用到System Generator设计中。

利用ZYNQ SOC快速打开算法验证通路(1)——MATLAB浮点数与定点二进制补码互转

judy /

<font color="#FF8000">作者:没落骑士</font>

最近本人一直在学习ZYNQ SOC的使用,目的是应对科研需要,做出通用的算法验证平台。大概思想是:ZYNQ PS端负责与MATLAB等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更新硬件算法模块配置寄存器内容,同时可计算分析PL端算法实现性能指标。PL端的FPGA逻辑则负责算法的硬件实现,以探索高效并行硬件架构。为此本人后续会持续编写《利用ZYNQ SOC快速打开算法验证通路》系列专题博文,在各个阶段进行些基础性总结。

  MATLAB中数据为双精度浮点型,因此打开算法验证通路的第一步即为MATLAB中浮点数与定点二进制补码之间的相互转换。在之前的博文:《FPGA与MATLAB数据交互高效率验证算法——仿真阶段》中提到过两种数值表示方式之间的转换,但为了便于testbench仿真,MATLAB写和读的文件均为txt文本文件。在算法板级验证中,数据应以未经过ASCII码编码的二进制数据方式被处理。这里涉及到MATLAB函数fscanf和fprintf以及函数fread和fwrite的区别,前两个分别为读和写文本文件,后两个则是读写二进制文件。

使用 MATLAB 和 Simulink 实现你的机器人创意

judy /

机器人技术研究人员和工程师可以使用 MATLAB 和 Simulink 设计和优化算法,为真实系统建立模型,并自动生成代码——所有过程均在一个软件环境下完成。

MATLAB 和 Simulink 可以实现:
<li>用您开发的算法连接并控制您的机器人</li>
<li>开发与硬件无关的算法并连接到机器人操作系统(ROS)</li>
<li>连接一系列传感器和执行机构,以便发送控制信号或分析多种类型的数据</li>
<li>为嵌入式目标(如微控制器、FPGA、PLC 和 GPU)自动生成 C/C++、VHDL/Verilog、ST 语言和 CUDA 等语言的代码,无需手动编码</li>
<li>使用预建硬件支持包连接Arduino 和 Raspberry Pi 等低成本硬件</li>
<li>创建可共享的代码和应用程序,简化设计评审过程</li>
<li>使用已有代码对接现有机器人系统</li>

学会System Generator(10)——支持的MATLAB语法

judy /

本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制。本文将介绍System Generator支持的所有MATLAB语法。

限于篇幅,本文只记录了经常用到或相对重要的内容,更详细的信息可以参考xilinx官方文档ug958->第一章->MCode小节。

<strong>MCode block特性</strong>
MCode用于在Simulink环境下执行MATLAB函数。MCode的名称与管脚即为函数名称与函数接口。在将System Generator设计导出到FPGA时,软件会将MATLAB代码转换为对应的HDL模型。MCode经常用于实现一些简单的算法功能、有限状态机和控制逻辑。

调用的MATLAB函数必须遵循以下三条基本规则:
<li>所有的输入和输出必须是Xilinx的定点数据类型(xfix);</li>
<li>至少包含一个输出;</li>
<li>M文件应在MATLAB的搜索路径下,或与slx模型文件在同一目录。</li>

学会System Generator(9)——MCode调用MATLAB代码

judy /

本文是该系列的第9篇。FPGA设计中经常用到一些控制逻辑,如有限状态机(FSM),如果用各种block搭建一个FSM比较麻烦。System Generator支持调用MATLAB代码,通常可以编写MATLAB代码来实现FSM等控制逻辑,通过MCode block调用到System Generator设计中。

本文将使用MATLAB代码设计一个FSM,对“1011”这个序列进行检测。序列检测应该是很多Verilog/VHDL学习者在学习FSM时接触到的一个简单设计。本文将以该设计在System Generator中的实现为主题,介绍MCode的使用。

本设计使用到的block
1.Xilinx block:
MCode(->Index):调用MATLAB函数

2.其它block:
Repeating Sequence Stair(Simulink->Sources):生成序列

这里给出了设计中用到的所有block在库中的路径,后文不再提及(前文用过的block没有给出;同一block会包含在多个库中,为了寻找方便这里只列出一个路径)。