MATLAB: Do I get an error while trying to compare two numbers of FIXDT data type in the Embedded Matlab Block comparison operator in Simulink 7.3 (R2009a)

fifixdtsimulinkufixuint8

I am comparing two fixed point signals inside of an Embedded MATLAB Block, one of type fixdt(0,9,0), and one of type fixdt(0,7,0), as below:
function y = fcn(u1,u2)
%#eml
if u1>u2
y = 1;
else
y=0;
end
However, if I change either one to data type fixdt(0,8,0), Simulink changes the data type to a uint8 (not a ufix8), and the Embedded MATLAB block cannot perform the operation. I get the following error:
In fi > non-fi, the non-fi must be a constant.
Function 'Embedded MATLAB Function1' (#104.33.38), line 3, column 4:
"u1>u2"

Best Answer

This is expected behavior. To get the Embedded MATLAB block to recognize this signal as an FI object, please perform the following steps:
There is drop-down menu in the EML Ports and Data Manager that says "Treat these inherited Simulink signal types as fi objects" - select "Fixed-point & integer" for this parameter.
Similarly:
fixdt(1,8,0) -> int8
fixdt(0,16,0) -> uint16
fixdt(1,16,0) -> int16
fixdt(0,32,0) -> uint32
fixdt(1,32,0) -> int32
fixdt(0,64,0) -> uint64 AND
fixdt(1,64,0) -> int64
If your wordlength is not 8,16,32 or 64 (when fraction length is 0), only then is the type treated as a non-builtin fixed-point type.
Alternately, you can use the following comparison in your EML code:
if u1 > fi(u2,0,8,0)