How do I convert an unsigned integer to a signed integer without causing an overflow or using TYPECAST in Simulink 7.9 (R2012a)?

55 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

MathWorks Support Team
MathWorks Support Team el 19 de Sept. de 2013
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.

Más respuestas (1)

Kiran Kintali
Kiran Kintali el 17 de Mayo de 2014
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

Categorías

Más información sobre Configure and View Diagnostics en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2012a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by