これはVHDLのタグが付けられているため、ツールを完全にバイパスして、ストレートVHDLポートを確認する価値があります。これには数分しかかかりませんでした。これは3つの部分に分かれています。
1)VHDLには、配列をポートパラメータとして使用するには、名前付き型(int_array)である必要があるという癖があります。(Cには、配列を渡す別の癖があります。そうではなく、代わりにポインターを渡します)
package Types is
type int_array is array (natural range <>) of integer;
end Types;
package body Types is
end Types;
2)作業を行うビット:Cコードをコメントとして残して、それらがどれほど密接に対応しているかを示します。
use Work.Types.all;
-- int main (const int tab[N], int* out)
entity MinArray is
Generic ( N : Natural);
Port ( Tab : in int_array;
Output : out integer );
end MinArray;
architecture Behavioral of MinArray is
-- int k = 0, i=1;
-- for( i = 1; i < N; i++)
-- {
-- if(tab[i] < tab[k])
-- k = i;
-- }
-- *out = tab[k];
-- return 0;
--}
begin
Process(Tab) is
variable k : natural;
begin
k := 1;
for i in tab'range loop
if tab(i) < tab(k) then
k := i;
end if;
end loop;
Output <= tab(k);
end process;
end Behavioral;
3)テストハーネス:
use Work.Types.all;
ENTITY tester IS
Port ( Minimum : out integer );
END tester;
ARCHITECTURE behavior OF tester IS
--#define N 16
-- static const int tab[N] = {98,-39,-327,439,950,-2097,-1674,9883,9883,-1674,-2097,950,439,-327,-39,98};
constant N : natural := 16;
constant tab : int_array (1 to N) := (98,-39,-327,439,950,-2097,-1674,9883,9883,-1674,-2097,950,439,-327,-39,98 );
BEGIN
uut: entity work.MinArray
Generic Map (N => N)
PORT MAP(
Tab => Tab,
Output => Minimum );
END;
これはすべてザイリンクスXSTで合成可能であることに注意してください。
Advanced HDL Synthesis Report
Macro Statistics
# RAMs : 1
32x32-bit single-port distributed Read Only RAM : 1
# Comparators : 15
32-bit comparator greater : 15
# Multiplexers : 32
1-bit 2-to-1 multiplexer : 24
2-bit 2-to-1 multiplexer : 1
3-bit 2-to-1 multiplexer : 4
4-bit 2-to-1 multiplexer : 3
ただし(入力テーブルは定数配列であるため)、上記のハードウェアはすべて最適化段階で表示されなくなります。
現在、高位合成で重要なことの1つは、さまざまな単語幅などのさまざまなデータ型を調査することです。テストデータの保存に必要な15ビットワードなど。これを調べるために、「Types」パッケージを次のように変更してみましょう。
type small_int is range -16384 to 16383;
type int_array is array (natural range <>) of small_int;
また、出力ポートタイプをsmall_intに変更しました。また、統合レポートからわかるように、ハードウェアの使用量はそれに応じて削減されています。
Macro Statistics
# RAMs : 1
32x15-bit single-port distributed Read Only RAM : 1
# Comparators : 15
15-bit comparator greater : 15
# Multiplexers : 32
1-bit 2-to-1 multiplexer : 24
2-bit 2-to-1 multiplexer : 1
3-bit 2-to-1 multiplexer : 4
4-bit 2-to-1 multiplexer : 3
したがって、おそらく問題は、Cツールを使用すると、カスタムの単語幅のようにデザインスペースを簡単に探索できるかどうかということです。