Using a persistent variable array in MATLAB function for HDL Coder

7 views (last 30 days)
I have MATLAB function which calculates the two maximum numbers in an array of 4096 elements. I have a persistent array - of int32 numbers - which receives a single element from the function block and assigns it to the corresponding index. However when I try to build HDL for the subsystem that contains the MATLAB function. I receive the error "The persistent variable 'array_per' in chart '....' is of non-integer type. The option 'Support floating-point numbers' has not been set Code Genaration configuration options.
Is there a way to fix that?

Answers (1)

Tom Richter
Tom Richter on 5 Dec 2023
Hi Kaan,
it would be good if you could share your MATLAB code you try to implement using the MATLAB Function block. For me it sounds like a wrong data type setting. The array should be initialized like this:
persistent array_per
if isempty(array_per)
array_per = zeros(4096,1,'int32');
end
The array will keep the data type as long as you index only one element:
array_per(4) = input_val;
Such a big array is better implemented using RAM (only one read/write action per function call).
I also doubt that you need such a big persistent variable to get the two most max values. I would use:
  • An index counter (persistent variable)
  • two persistent variables for the index (index_max1, index_max2)
  • two persistent variables for the max values (value_max1, value_max2)
  • You compare the input_val with value_max2 and value_max1
  • You assign value_max1 to value_max2 and index_max1 to index_max2 if input_val > value_max1 and then the input_val to value_max1 and index_count to index_max1
  • ...
  • ...
  • You output results and reset all persistent variables to 0 if counter reaches max index value (e.g. 4096)
The rest is simple I guess.
I hope that helps,
Tom

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!