私は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言語、またはコードを書いた方法のためですか?
問題は言語ではありません。このツールは、各言語のフロントエンドごとに異なるオプティマイザを使用します。最適値は約13個のLUTです。 – Paebbels
@Paebbels LUTのサイズによって異なります... – JHBonarius
@JHBonariusはい、私は彼がLUT6の代わりにLUT4を使用する古いザイリンクスデバイスを使用していないと仮定します。 – Paebbels