2016-03-07 62 views
0

我已經制作了一個Matlab程序,用於檢測2個圓圈是否相互交叉並輸出交叉點的座標。現在,我試圖將代碼轉換爲vhdl來實現FPGA。使用HDL Workflow Advisor將matlab代碼轉換爲vhdl

我的一個代碼中的函數那裏仍然是在HDL流程顧問的錯誤是:

function theta = angle2Points(p1,p2) 
%ANGLE2POINTS Compute horizontal angle between 2 points 
% 
% ALPHA = angle2Points(P1, P2), 
% Pi are either [1*2] arrays, or [N*2] arrays, in this case ALPHA is a 
% [N*1] array. The angle computed is the horizontal angle of the line 
% (P1 P2) 
% Result is always given in radians, between 0 and 2*pi. 
% 
% See Also: 
% points2d, angles2d, angle3points, normalizeAngle, vectorAngle 
% 
% 
% --------- 

dp = zeros(1,2); 
% angle of line (P2 P1), between 0 and 2*pi. 
dp = p2 - (size(p2, 1) * p1) 
theta = mod(atan2(dp(:,2), dp(:,1)) + 2*pi, 2*pi) 

的錯誤:

  1. 變量 'P1'。不支持變量大小的數據。
  2. 變量'p2'。不支持變量大小的數據。
  3. 變量'theta'。不支持變量大小的數據。

一個小測試文件,模擬輸入數據:

% P = [x,y] 
P1 = [0,3]; 
P2 = [5,10]; 
f=angle2Points(P1,P2); 

P1 = [0,3]; 
P2 = [5,3]; 
f2=angle2Points(P1,P2 

在工作流顧問我收到:可變大小數據不支持 - 錯誤1號線。

我理解這是因爲像C這樣的靜態類型語言必須能夠在編譯時確定變量屬性,而在Matlab中它是動態發生的。

我想就如何正確地重寫代碼以使其準備好hdl這個簡單的函數一些幫助。

預先感謝

回答

0

編碼器抱怨因爲你有兩個輸入端的可變以及可變大小輸入(P1可以是2×2 1×2或)。你需要做的是編寫你的功能,以便它需要p1p2,並且它們是已知的大小(1 x 2)。

function theta = angle2Points(p1, p2)  
    % angle of line (P2 P1), between 0 and 2*pi. 
    dp = p2 - (size(p2, 1) * p1) 
    theta = mod(atan2(dp(:,2), dp(:,1)) + 2*pi, 2*pi) 
end 

您還需要更新所有調用此函數的函數,以使它們兼容。

作爲一個方面說明,您不必預先分配變量,除非您將數據放入循環結構中。如果您只是簡單地指定整個變量(即上面的dp),則不需要任何預分配。

+0

那麼,在其他函數中,我通過給它們默認值來初始化變量。但仍然發生相同的錯誤 – user3488736

+0

@ user3488736你是怎麼做到的? MATLAB沒有默認值的概念。 – Suever

+0

@ user3488736請將該代碼放入您的問題中,而不是在您的評論中......我無法讀取它 – Suever