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人脸追踪,求大神帮助我这个菜