How do I convert an unsigned integer to a signed integer without causing an overflow or using TYPECAST in Simulink 7.9 (R2012a)?
42 次查看(过去 30 天)
显示 更早的评论
When complying to the DO-254 standard you must detect arithmetic overflows as errors in a Simulink model. This means that using a Data Type Conversion block to convert from an unsigned integer to a signed integer is not possible if an unsigned N-bit integer >= 2^(N - 1) is to be converted, as this will cause an overflow.
Further more when generating HDL Code a calls to the function TYPECAST are not supported.
采纳的回答
MathWorks Support Team
2013-9-19
The workaround is to carry out the conversion manually, in Simulink or in MATLAB. As an example the MATLAB code to convert a 16-bit integer is outlined below and the Simulink alternative can be found in the attached model 'convert.mdl'.
isNegative = int16(bitget(u,16));
convertedValue = int16(bitset(u,16,0)) + (-2^15)*isNegative;
The code checks the most significant bit of the unsigned integer to determine if the value will become a positive or negative signed integer.
-If positive the converted value is just a simple conversion to a signed integer as no overflow will take place.
- If negative the the first 15 bits are converted to a signed integer and the smallest signed integer value (-2^15) is added to achieve the wrapped signed value of the original unsigned integer.
0 个评论
更多回答(1 个)
Kiran Kintali
2014-5-17
Use reinterpretcast to convert an unsigned number to signed number without causing overflow. The stored integer bits of the number will be reinterpreted.
>> a = fi(7, 0,3,0);
>> a.bin
111
>> b = reinterpretcast(a, numerictype(1,3,0));
>> b.bin
111 % notice no change in stored integer bits
>> a
a =
7
>> b
b =
-1 % notice change in real world value
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Configure and View Diagnostics 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!