matlab相语法,学会System Generator(10)——支持的MATLAB语法
本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制。本文将介绍System Generator支持的所有MATLAB语法。
限于篇幅,本文只记录了经常用到或相对重要的内容,更详细的信息可以参考xilinx官方文档ug958->第一章->MCode小节。
MCode block特性
MCode用于在Simulink环境下执行MATLAB函数。MCode的名称与管脚即为函数名称与函数接口。在将System Generator设计导出到FPGA时,软件会将MATLAB代码转换为对应的HDL模型。MCode经常用于实现一些简单的算法功能、有限状态机和控制逻辑。
调用的MATLAB函数必须遵循以下三条基本规则:
所有的输入和输出必须是Xilinx的定点数据类型(xfix);
至少包含一个输出;
M文件应在MATLAB的搜索路径下,或与slx模型文件在同一目录。
当初次使用MCode时,会自动调用一个示例文件xlmax.m。博主建议先在slx文件目录下创建好新的m文件,再用Browse定位。
支持的MATLAB语法
1.所支持的MATLAB语法结构包括:
赋值(等号左边只能有一个变量);
if/else/elseif end语法(条件表达式必须是判断true/false或1/0);
switch语法(case只能选择常量)、for语法;
加法、减法、乘法、除法(除数必须是2的N次幂,因为可以转换为移位),除此之外,不支持其它算术表达式
关系运算符(、>=、==、~=)
逻辑运算符(&、|、~)
2.所支持的MATLAB函数及其功能列在下表:
xfix数据类型
xfix有三种数据类型:无符号定点数(xlUnsigned)、带符号定点数(xlSigned)、布尔值(xlBoolean)。使用xl_arith()判断数据类型时分别返回1、2、3。需要注意几点:
使用关系运算符得到的结果是布尔类型;
布尔变量不能进行算术操作;
逻辑运算符只能用于布尔变量
编写MATLAB代码时,仍然可以使用整数、浮点数、布尔值来定义常量。整数和布尔值都会自动转换为xifix类型;浮点数需要用xfix()函数转换。xfix()函数还可以完成不同xifix数据类型的转换,其基本形式为:
x = xfix(type_spec, value);
value为待转换的数,type_spec为转换后的数据类型。比如将浮点数π转换为xfix类型:
x = xfix({xlSigned, 20, 16, xlRound, xlWrap}, 3.1415926);
转换后为Fix_20_16格式,Round量化,Wrap溢出(前面的文章中已经解释了这些含义)。量化方式可设置为xlTruncate、xlRound和xlRoundBBanker;溢出方式可设置为xlWrap、xlSaturate、xlThrowOverflow。
xl_state状态变量
在整个仿真过程中,一个MATLAB函数会执行多次,必须保证其中的状态变量在每次执行完时保留其值(类似与C++语言中的static静态变量),否则无法正确实现控制功能。
状态变量在MATLAB中需要用persistent关键词和xl_state函数定义,如下所示:
persistent s, s = xl_state(0, {xlSigned, 4, 0});
该函数有两个参数:第一个0表示状态初始值,必须是常数;第二个参数是状态变量的数据类型,与xfix函数中的type_spec用法相同。状态变量还可以是一个向量,并且拥有许多配套的函数,ug958中给出了多个使用xl_state完成的设计实例。
确保变量被正确转换
MATLAB是一种顺序执行代码,众所周知,HDL代码是并行执行的代码。为了能让MATLAB代码成功的转换为HDL模型,就要确保MATLAB用到的变量也能正确的转换(原文档描述为Variable Availability)。具体来讲就是要保证所有的变量在MATLAB语法的不同分支条件下都能够得到赋值。
ug958给出了一个示例代码:
function [x, y, z] = test1(a, b)
x = a;
if a>b
x = a + b; y = a;
end
switch a
case 0
z = a + b;
case 1
z = a - b;
end
其中y变量只在“if a>b”的条件下赋值,而不清楚另一种情况下怎么办;z变量在switch的其它情况下也不知道该怎么办(switch没有otherwise)。在执行时MATLAB都会报错。x变量虽然也没有在if对应的else条件中赋值,但其已经提前赋值“x=a”,这样在else时会默认保留原值,该变量满足Variable Availability。
文章来源:FPGADesigner的博客
*本文由作者授权转发,如需转载请联系作者本人
matlab相语法,学会System Generator(10)——支持的MATLAB语法相关推荐
- matlab的.m语法,学会System Generator(10)——支持的MATLAB语法
本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...
- Vivado安装找不到matlab,vivado安装System Generator不支持新版Matlab怎么办?
按照Xilinx的作风,Vivado只支持最近两年3个版本的Matlab,当前最新版vivado 2018.3只支持2017a,2017b,2018a,连matlab 2018b都不支持 System ...
- Vivado与matlab系统开发设计 system generator(1)入门与安装
Vivado与matlab系统开发设计 system generator(1)入门与安装 今天由"82年的程序媛"本媛给大侠带来FPGA设计 vivado 与 matlab系统开发 ...
- 学会System Generator(10)支持的MATLAB语法
本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...
- system generator结合高版本matlab的使用
system generator 使用的时候需要结合matlab才能正确打开.2019.1Vivado可以支持2017以及以上全部版本的的matlab.所以其实如果我们电脑里有新版的matlab,是不 ...
- 学会System Generator(22)图像采集与输出(数据流方法)
本文是该系列的第22篇.上一篇介绍了使用Image From File和Video Viewer完成图像的采集和输出,并将两部分分别打包为子系统,使其具有通用性.本文将介绍如何使用Simulink提供 ...
- 学会System Generator(2)数字滤波器设计
本文是该系列的第2篇,上一篇介绍了System Generator的基本知识以及软件的安装.本文将以一个简单的数字滤波器的设计为主题,介绍Sysgem Generator的完整设计流程,同时详细介绍使 ...
- MATLAB设置x为0到10所有数,MATLAB教学_10数值微积分
本文学习视频地址:https://www.bilibili.com/video/av68228488?p=10 课堂PPT以及本人学习代码已上传. 本文学习内容: 多项式的微分和积分 数值的微分和积分 ...
- 基于FPGA的图像处理(一)--System Generator介绍
计算机视觉系统通常需要进行大量的信息处理才能够得到所需要的信息.目前主要有CPU.GPU.ASIC.DSP.FPGA等计算平台. 常用的计算机视觉系统通过通用计算机进行视觉信息处理,但是,由于CPU的 ...
最新文章
- iis6中FTP配置的技巧和细节
- 收到贺卡和礼物的处理方法
- redis使用指南(一)
- Android 性能优化案例
- python属于什么专业类别-关于python:1D CNN用于分类
- 每日算法系列【LeetCode 1250】检查「好数组」
- java怎么将文件传到服务器,Java文件传到服务器
- 锐浪报表数据源access_锐浪报表应用系列三
- 多维向量空间中点到线的距离公式
- Win11想运行老游戏怎么设置
- c++卸载工具_卸载软件同时清除软件注册表里面的信息,也许这款软件能够帮助你...
- linux卷组大小查看,Linux逻辑卷,卷组管理
- 让旧Mac免费获得 iWork 套件的秘籍
- uniapp开发微信小程序,开发者工具、真机预览都没问题,唯独预览、体验版在手机上列表顺序错乱,用的localeCompare做的中文排序,终于找到问题并解决掉了,记录一下子
- nginx + uwsgi 搭建PYHTON web应用
- 如何用python一键去除图片、PDF水印?
- 100多个优秀的互联网编程学习平台整理。
- 怎么在sqlyog设置表的外键
- 流量抑制及风暴控制配置命令
- 前端开发icon高清图标搜索、下载网站