学会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>bx = a + b; y = a;
end
switch a
case 0z = a + b;
case 1z = a - b;
end
其中y变量只在“if a>b”的条件下赋值,而不清楚另一种情况下怎么办;z变量在switch的其它情况下也不知道该怎么办(switch没有otherwise)。在执行时MATLAB都会报错。x变量虽然也没有在if对应的else条件中赋值,但其已经提前赋值“x=a”,这样在else时会默认保留原值,该变量满足Variable Availability。
学会System Generator(10)支持的MATLAB语法相关推荐
- Vivado安装找不到matlab,vivado安装System Generator不支持新版Matlab怎么办?
按照Xilinx的作风,Vivado只支持最近两年3个版本的Matlab,当前最新版vivado 2018.3只支持2017a,2017b,2018a,连matlab 2018b都不支持 System ...
- matlab相语法,学会System Generator(10)——支持的MATLAB语法
本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制.本文将介绍System Generator支持的所有MATLAB语法. ...
- matlab的.m语法,学会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的完整设计流程,同时详细介绍使 ...
- 基于FPGA的图像处理(一)--System Generator介绍
计算机视觉系统通常需要进行大量的信息处理才能够得到所需要的信息.目前主要有CPU.GPU.ASIC.DSP.FPGA等计算平台. 常用的计算机视觉系统通过通用计算机进行视觉信息处理,但是,由于CPU的 ...
- System Generator从入门到放弃(一)-安装与使用
System Generator从入门到放弃(一)-安装与使用 文章目录 System Generator从入门到放弃(一)-安装与使用 一.安装与使用 1.简介 2.功能介绍 3.System Ge ...
- Vivado与matlab系统开发设计 system generator(1)入门与安装
Vivado与matlab系统开发设计 system generator(1)入门与安装 今天由"82年的程序媛"本媛给大侠带来FPGA设计 vivado 与 matlab系统开发 ...
最新文章
- 可用于nodejs的SuperAgent(ajax API)
- 【从零学习OpenCV 4】了解OpenCV的模块架构
- Python使用numpy包编写自定义函数计算均方误差(MSE、mean squared error)、评估回归模型和时间序列模型、解读MSE评估指标
- 00截断上传绕过_关于上传中的00截断分析
- 今日代码(20210313)--美赛代码记录
- php 预防循环发短信_php短信接口发送短信失败,罪魁祸首原来在这里
- VS和IIS的一些问题
- homestead修改php版本
- win10安装、卸载、升级tensorflow命令
- 关于计算机网络通信协议
- 一个简单的HTML网页——传统节日春节网页(HTML+CSS)
- 【阿里云生活物联网架构师专题 ④】如何在天猫精灵IOT开放平台二次开发智能设备的 H5控制面板;
- dm9000a驱动源码分析
- python爬虫和八爪鱼哪个快_八爪鱼采集器能取代python爬虫吗?
- 平行四边形 java_Java编写三角形和平行四边形
- uniapp获取视频第一帧展示,及视频的层级问题,亲测有效
- 《用户至上:用户研究方法与实践(原书第2版)》一3.1 概述
- EOS智能合约开发系列(17): 神秘的eosio.code
- windows快捷键,选中鼠标所指以上或以下内容
- 请求网站响应的文本带有乱码,原来是Content-encoding惹的祸,一文带你搞懂`Content-encoding`、`Accept-Encoding`