HDL Coder Variable Size Matrix

2 vues (au cours des 30 derniers jours)
Caner KOREL
Caner KOREL le 17 Nov 2022
Commenté : Hau le 13 Fév 2025
Hello, I'm trying to do matrix multipication in fpga. For this, I would like to convert my .m function given below.
function y=sindy_product(x1,x2)%mxn . nxk
y=zeros(1,225);%mxk
iteration=1;
coder.varsize('A',[1 1000001]);
coder.varsize('B',[1 1000001]);
for i = 1:1000001:1000001*15%n,mxn
for j =1:15%k
A=x1(i:i+1000001-1);%n
B=x2(j:15:1000001*15);%k,nxk
C=0;
for k = 1:1000001
C=C+A(k)*B(k);
end
y(iteration)=C;
iteration=iteration+1;
end
end
end
Error I get:
sindy_product_fixpt:17Error'B' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:20Error'A' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'A' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:20Error'B' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:20Error'A' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'B' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'A' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'varargin_1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'var1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'A' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:16Error'var1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'var1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'B' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:17Error'var1' : Error: variable-size matrix type is not supported for HDL code generation.sindy_product_fixpt:0ErrorMATLAB HDL Coder failed in the code generation phase. See HDL Coder conformance report.
I use matricies' row vector form because hdl coder doesnt allow to use matrix form. I think my all the variables have constant size but i still get the variable-size matrix error.

Réponse acceptée

Ryan Baird
Ryan Baird le 18 Nov 2022
coder.varsize is declaring a variable size matrix:
Initializing the matrix with the zeros function may solve your issue.
  1 commentaire
Hau
Hau le 13 Fév 2025
I have read the problem and read the proposal solution and i write this code but i still have the same problem. Can i have some ideas ?
function out = test(in, n, intrlv)
% Define the maximum possible input length (adjust to your needs)
max_len = 100;
% Pre-allocate output array with a fixed size
out = zeros(1, max_len);
% Calculate the block size
bl_n = n * intrlv;
% Calculate the maximum number of blocks (fixed size)
max_blocks = max_len / bl_n;
% Loop through each block with fixed indexing
for b = 1:max_blocks
% Calculate the index range (fixed)
idx_start = (b-1) * bl_n + 1;
idx_end = b * bl_n;
% Ensure indices are within the input length
if idx_end <= length(in)
% Copy the block to the output
out(idx_start:idx_end) = in(idx_start:idx_end);
end
end
end

Connectez-vous pour commenter.

Plus de réponses (1)

Kiran Kintali
Kiran Kintali le 17 Nov 2022
Can you share your design and testbench and the project file used?
Thanks

Catégories

En savoir plus sur HDL Code Generation dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by