VHDLを使って気になっていたことがあるのでちょっと実験してみました。
気になっていた事というのは、「コンポーネントとして設計した部品のデータ幅を使用時に変えることが出来るか」という点です。たとえば、DDSをコンポーネントとしたときに、利用する度に12bit, 16bitのようにかえられるでしょうか。
「そりゃ変えられるでしょう」
と、当然思いますが、なにしろVHDLはいろいろ予想を裏切ってくれたのできちんと実験してみました。
作ったのは以下のようなコンポーネントです。
-------------------------------------------------------------------------------- -- Entity: num_std_test -- Date:2016-09-18 -- Author: takemasa -- -- Description: -------------------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity generic_test is generic ( maxbit :integer; d : in signed(maxbit downto 0) ); port ( a : in signed(maxbit downto 0); b : in signed(maxbit downto 0); c : out signed(maxbit downto 0) ); end generic_test; architecture rtl of generic_test is begin c <= a + b + d; end rtl;
内部では他ビット精度の演算をしていますが、ビット数はgenericの引数として与えられるmaxbitによって変えることが出来ます。また、genericが引数として受取る値のビット幅が変えられるかどうかも確かめられます。これがコンパイルを通ればOKです。
結果はコンパイルOKでした。当然と言えば当然の結果です。