matlab相语法,学会System Generator(10)——支持的MATLAB语法
本文是該系列的第10篇,上一篇介紹了在System Generator設(shè)計中使用MCode模塊調(diào)用MATLAB代碼來完成邏輯控制。本文將介紹System Generator支持的所有MATLAB語法。
限于篇幅,本文只記錄了經(jīng)常用到或相對重要的內(nèi)容,更詳細的信息可以參考xilinx官方文檔ug958->第一章->MCode小節(jié)。
MCode block特性
MCode用于在Simulink環(huán)境下執(zhí)行MATLAB函數(shù)。MCode的名稱與管腳即為函數(shù)名稱與函數(shù)接口。在將System Generator設(shè)計導(dǎo)出到FPGA時,軟件會將MATLAB代碼轉(zhuǎn)換為對應(yīng)的HDL模型。MCode經(jīng)常用于實現(xiàn)一些簡單的算法功能、有限狀態(tài)機和控制邏輯。
調(diào)用的MATLAB函數(shù)必須遵循以下三條基本規(guī)則:
所有的輸入和輸出必須是Xilinx的定點數(shù)據(jù)類型(xfix);
至少包含一個輸出;
M文件應(yīng)在MATLAB的搜索路徑下,或與slx模型文件在同一目錄。
當初次使用MCode時,會自動調(diào)用一個示例文件xlmax.m。博主建議先在slx文件目錄下創(chuàng)建好新的m文件,再用Browse定位。
支持的MATLAB語法
1.所支持的MATLAB語法結(jié)構(gòu)包括:
賦值(等號左邊只能有一個變量);
if/else/elseif end語法(條件表達式必須是判斷true/false或1/0);
switch語法(case只能選擇常量)、for語法;
加法、減法、乘法、除法(除數(shù)必須是2的N次冪,因為可以轉(zhuǎn)換為移位),除此之外,不支持其它算術(shù)表達式
關(guān)系運算符(、>=、==、~=)
邏輯運算符(&、|、~)
2.所支持的MATLAB函數(shù)及其功能列在下表:
xfix數(shù)據(jù)類型
xfix有三種數(shù)據(jù)類型:無符號定點數(shù)(xlUnsigned)、帶符號定點數(shù)(xlSigned)、布爾值(xlBoolean)。使用xl_arith()判斷數(shù)據(jù)類型時分別返回1、2、3。需要注意幾點:
使用關(guān)系運算符得到的結(jié)果是布爾類型;
布爾變量不能進行算術(shù)操作;
邏輯運算符只能用于布爾變量
編寫MATLAB代碼時,仍然可以使用整數(shù)、浮點數(shù)、布爾值來定義常量。整數(shù)和布爾值都會自動轉(zhuǎn)換為xifix類型;浮點數(shù)需要用xfix()函數(shù)轉(zhuǎn)換。xfix()函數(shù)還可以完成不同xifix數(shù)據(jù)類型的轉(zhuǎn)換,其基本形式為:
x = xfix(type_spec, value);
value為待轉(zhuǎn)換的數(shù),type_spec為轉(zhuǎn)換后的數(shù)據(jù)類型。比如將浮點數(shù)π轉(zhuǎn)換為xfix類型:
x = xfix({xlSigned, 20, 16, xlRound, xlWrap}, 3.1415926);
轉(zhuǎn)換后為Fix_20_16格式,Round量化,Wrap溢出(前面的文章中已經(jīng)解釋了這些含義)。量化方式可設(shè)置為xlTruncate、xlRound和xlRoundBBanker;溢出方式可設(shè)置為xlWrap、xlSaturate、xlThrowOverflow。
xl_state狀態(tài)變量
在整個仿真過程中,一個MATLAB函數(shù)會執(zhí)行多次,必須保證其中的狀態(tài)變量在每次執(zhí)行完時保留其值(類似與C++語言中的static靜態(tài)變量),否則無法正確實現(xiàn)控制功能。
狀態(tài)變量在MATLAB中需要用persistent關(guān)鍵詞和xl_state函數(shù)定義,如下所示:
persistent s, s = xl_state(0, {xlSigned, 4, 0});
該函數(shù)有兩個參數(shù):第一個0表示狀態(tài)初始值,必須是常數(shù);第二個參數(shù)是狀態(tài)變量的數(shù)據(jù)類型,與xfix函數(shù)中的type_spec用法相同。狀態(tài)變量還可以是一個向量,并且擁有許多配套的函數(shù),ug958中給出了多個使用xl_state完成的設(shè)計實例。
確保變量被正確轉(zhuǎn)換
MATLAB是一種順序執(zhí)行代碼,眾所周知,HDL代碼是并行執(zhí)行的代碼。為了能讓MATLAB代碼成功的轉(zhuǎn)換為HDL模型,就要確保MATLAB用到的變量也能正確的轉(zhuǎn)換(原文檔描述為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)。在執(zhí)行時MATLAB都會報錯。x變量雖然也沒有在if對應(yīng)的else條件中賦值,但其已經(jīng)提前賦值“x=a”,這樣在else時會默認保留原值,該變量滿足Variable Availability。
文章來源:FPGADesigner的博客
*本文由作者授權(quán)轉(zhuǎn)發(fā),如需轉(zhuǎn)載請聯(lián)系作者本人
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的matlab相语法,学会System Generator(10)——支持的MATLAB语法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大带宽服务器与其他服务器相比的优势是什么
- 下一篇: matlab如何excel数据,Matl