2016-09-15 1 views
1

focアルゴリズムの実装のためのクラークとパークの変換のためのVerilogコードを書きたいと思います。私はVerilogを初めて使っています。私は、cos、sin関数、および実数を含む複雑な方程式のコードを書く方法を理解していません。誰かが私にスタートを与えてくれますか?私が書こうとしたVerilogコードは以下の通りです。クラークとパークの変換のためのVerilogコード

timescale 1ns/1ps 


module clarke_park(iR_i,iY_i,iB_i,theta,iD_o,iQ_o); 
output real iD_o; 
output real iQ_o; 

input real iR_i; 
input real iY_i; 
input real iB_i; 

real k = 0.66; 
output real ialpha; 
output real ibeta; 
output real iY_r;//real part 
output real iY_c;//complex part 
output real iB_r; 
output real iB_c; 
output real ibeta_r; 
output real ibeta_c; 

function sin(input real theta); 

function cos(input real theta); 

iY_r = -1*(iY_i)*(0.5); 
iY_c = (iY_i)*(0.866); 
iB_r = -1*(iB_i)*(0.5); 
iB_c = -1*(iB_i)*(0.866); 

ialpha = k*iR; 
ibeta_r = k*(0.866)*(iY_r-iB_r); 
ibeta_c = k*(0.866)*(iY_c-iB_c); 

real a1 = sin(theta); 
real a2 = cos(theta); 

iD_r = (a1*(ialpha)) + ((sin(theta))*(ibeta_r)); 
iD_c = a2*(ibeta_c); 
iQ_r = - (1*a2*(ialpha)) + (a1*(ibeta_r)); 
iQ_c = a1*(ibeta_c); 

endfunction 


assign iD_o = {iD_r,iD_c}; 
assign iQ_o = {iQ_r,iQ_c}; 

endmodule 
+1

結果を合成可能にする必要がある場合は、質問を編集することができます。 FPGAやASICでシミュレーションするのではなく、必要な場合は浮動小数点コアを使用する必要があります。 – Morgan

+0

合成可能である必要はなく、純粋にテスト目的のために開発されている。 – SACHIN

答えて

0

私はこのような何かを開始します:

module clarke_park(
    output real iD_o, 
    output real iQ_o, 

    input real iR_i, 
    input real iY_i, 
    input real iB_i, 

    output real ialpha, 
    output real ibeta, 
    output real iY_r,//real part 
    output real iY_c,//complex part 
    output real iB_r, 
    output real iB_c, 
    output real ibeta_r, 
    output real ibeta_c 
); 

localparam k = 0.66; 

ないあなたが関数でやろうとしているか確認してください。何かのように:

あなたがthetaを定義していないことに注意してください、それはあなたのポートリストにあったが、その後、入力または実数として定義されていません。

real a1; 
real a2; 

always @* begin 
    iY_r = -1*(iY_i)*(0.5); 
    iY_c = (iY_i)*(0.866); 
    iB_r = -1*(iB_i)*(0.5); 
    iB_c = -1*(iB_i)*(0.866); 

    ialpha = k*iR; 
    ibeta_r = k*(0.866)*(iY_r-iB_r); 
    ibeta_c = k*(0.866)*(iY_c-iB_c); 

    a1 = $sin(theta); 
    a2 = $cos(theta); 

    iD_r = (a1*(ialpha)) + ((sin(theta))*(ibeta_r)); 
    iD_c = a2*(ibeta_c); 
    iQ_r = - (1*a2*(ialpha)) + (a1*(ibeta_r)); 
    iQ_c = a1*(ibeta_c); 
end 

$cos$sinは、IEEE 1800から2012のセクション20.8に記載されています。

+0

実際の実数は合成不可能なので、バイナリ値をとり、上記のモジュールで使用可能な実際の値に変換する小さなVerilogモジュールを開発する必要があります。私はアルゴリズムのための10ビットの入力を使用したいが、私は複雑な方法を実装する方法を理解することができません。 Verilogでの計算。 – SACHIN

+0

あなたはシミュレーション専用だと言っていましたが、合成可能である必要はありませんでしたか? – Morgan

関連する問題