Clear Filters
Clear Filters

[Fixed Point Converter] 1000 bit fraction length at 2^x if x is loaded from .mat file?

4 views (last 30 days)
I got a problem with code like this in the fixed-point converter:
function out = dut(in)
S = coder.load('constants.mat');
out = in+2^S.exponent;
function [] = storeConstants()
exponent = 8;
exArgs = {8};
fc = coder.config('fixpt');
fc.TestBenchName = 'dut_tb';
codegen -float2fixed fc -args exArgs dut
Reproduction steps:
run storeConstants and then convert.
The fixed-point converter automatically uses a fraction length of 1000 for the power of two operation.
As this is just a simple bitshift in hardware, I cannot see the purpose of this high precision. How can
I disable this huge fraction length?

Accepted Answer

Jan Siegmund
Jan Siegmund on 15 Apr 2020
A temporary fix is using bitsll as recommended here:
For efficient HDL code generation, use the Fixed-Point Designer functions bitsll, bitsrl, or bitsra instead of bitshift.
So i exchanged
out = in+2^S.exponent;
out = in+bitsll(uint8(1),S.exponent);
Uint8 being used, because I want the result to be unsigned, because it needs to be used in a divider.
  1 Comment
Kiran Kintali
Kiran Kintali on 18 Apr 2020
Thank you for the inputs. We will see if we can generate this recommendation during the automatic conversion process in a future release.

Sign in to comment.

More Answers (1)

zhang zheng
zhang zheng on 13 Apr 2020
i also sometimes find fixedpoint-tool is not easy to understand. i often first convert m-code from float point to fixed point, and then convert them to hdl code or c code.
Jan Siegmund
Jan Siegmund on 15 Apr 2020
So you mean converting to fixed-point, then editing the bad parts of the fixed-point code by hand and then converting to code?
But this 1000 fraction length only occurs, if the exponent is loaded from a .mat file, so I expect it to be a bug.

Sign in to comment.




Community Treasure Hunt

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

Start Hunting!