2017-11-04 12 views
1

私はVerilogとvhdlの2つのコードを持っています。これは16ビットの2進数で1つのコードの数を数えます。どちらも同じことですが、ザイリンクスISEを使用して合成した後、私は異なる合成レポートを取得します。VHDLとVerilogで同じ設計です。しかし、スピードとリソースの使用方法は異なりますか?

Verilogコード:

module num_ones_for(
    input [15:0] A, 
    output reg [4:0] ones 
    ); 

integer i; 

[email protected](A) 
begin 
    ones = 0; //initialize count variable. 
    for(i=0;i<16;i=i+1) //for all the bits. 
     ones = ones + A[i]; //Add the bit to the count. 
end 

endmodule 

VHDLコード:

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 
use IEEE.NUMERIC_STD.ALL; 

entity num_ones_for is 
    Port (A : in STD_LOGIC_VECTOR (15 downto 0); 
      ones : out STD_LOGIC_VECTOR (4 downto 0)); 
end num_ones_for; 

architecture Behavioral of num_ones_for is 

begin 

process(A) 
variable count : unsigned(4 downto 0) := "00000"; 
begin 
    count := "00000"; --initialize count variable. 
    for i in 0 to 15 loop --for all the bits. 
     count := count + ("0000" & A(i)); --Add the bit to the count. 
    end loop; 
    ones <= std_logic_vector(count); --assign the count to output. 
end process; 

end Behavioral; 

LUTのVHDLおよびVerilogで使用されるの数 - 25、回路の20 併用遅延 - 3.330 NS 2.597nsです。

ご覧のとおり、Verilogコードははるかに効率的です。何故ですか?

唯一の違いは、VHDLコードのMSB側に4つのゼロが追加されていることです。しかし、そうしないと、VHDLがエラーをスローするからです。

これは、私が使用しているツール、またはHDL言語、またはコードを書いた方法のためですか?

+1

問題は言語ではありません。このツールは、各言語のフロントエンドごとに異なるオプティマイザを使用します。最適値は約13個のLUTです。 – Paebbels

+0

@Paebbels LUTのサイズによって異なります... – JHBonarius

+0

@JHBonariusはい、私は彼がLUT6の代わりにLUT4を使用する古いザイリンクスデバイスを使用していないと仮定します。 – Paebbels

答えて

0

結論に達する前に、いくつかの異なる実験を試す必要があります。しかし私の見解では、Verilogは最も重要な容量/面積/性能設計でより頻繁に使用されています。そのため、研究努力の大半はまずVerilog言語ツールを扱うことになります。

+1

VHDLはどのようなプロジェクトに使用されていますか? – vipin

+0

@ dave_59:ベンダーが言語フロントエンドから直接翻訳した場合、私は驚くでしょう - 中間表現から翻訳する可能性が高いです。 3〜4年前にさまざまな基本構造とFSMのザイリンクスのXSTをチェックしていましたが、出力は両方の言語でほぼ同じでしたが、FSMではマイナーなVHDLが勝っていました。私はVerilogとVHDLのASICを行ってきましたが、誰もQORに基づいて言語を選択することはありませんでした。 – EML

関連する問題