2017-05-18 15 views
-1

"generic"を設定することによって出力の数を可変にする方法を考案しているうちに、私は次の考えを思いついた。この考え方は、ルーチンが "output(X):out std_logic_vector(bits-1 downto 0);というテキストを" port "宣言内に追加するように、" port "宣言内のVHDLコードにルーチンを持たせることです。 (X)は出力ポートの数、つまりoutput1、output2などを表していることに注意してください。VHDLパーサーがコードを読み取ったとき、コンパイル時に必要な数の出力が表示されるという考えがあります。どのようにvdhlコードを自分自身にテキストを追加する

答えて

2

私が正しくあなたを理解している場合、あなたはメタプログラミングを行うとポートの一般的な数を持ってしたいことは、VHDLでは不可能ですが、あなただけの、そのために多次元配列を使用することができます。。

-- declare array type VHDL-2008-style 
-- put this in a package 
type slv_array is array(natural range<>) of std_logic_vector; 

entity test is 
generic (
    -- number of outputs, at least one output 
    num_outputs : positive := 1 
); 
port (
    my_inputs : in std_logic_vector(1 downto 0); 
    my_outputs : out slv_array(num_outputs - 1 downto 0)(1 downto 0) 
); 
end entity test; 

そうすれば、あなたはこのようなコンポーネント:

comp0 : component test 
    generic map (
     num_outputs => 1 
     ) 
    port map (
     my_inputs => "10", 
     my_outputs(0) => my_output0 
     ); 

comp1 : component test 
    generic map (
     num_outputs => 2 
     ) 
    port map (
     my_inputs => "00", 
     my_outputs(0) => my_output1 
     my_outputs(1) => my_output2 
     ); 
関連する問題