2

VHDLのジェネリックパラメータの後にエンティティポートのサイズを変更したいと思います。

これが私のエンティティ宣言です:

library ieee;
use ieee.std_logic_1164.all;
use IEEE.math_real.all;
use ieee.numeric_std.all;

entity counter is
generic( 
    ticks   : natural := 10
);
port(
        clk : in  std_logic;
        f_v : in std_logic_vector(natural(FLOOR(LOG2(Real(ticks)))) downto 0); --forced value
        res : in std_logic;
          z : out std_logic_vector(natural(FLOOR(LOG2(Real(ticks)))) downto 0)
);
end counter;

具体的には、カウンターエンティティをインスタンス化するときに、関数nest natural(FLOOR(LOG2(Real(ticks))))の後にf_vzのサイズを設定します。

コードはコンパイルされますが、シンボルファイルを生成しようとすると、次のエラーメッセージが表示されます

Error (10017): Can't create symbol/include/instantiation/component file for entity "counter" because port "f_v" has an unsupported type    

Error (10017): Can't create symbol/include/instantiation/component file for entity "counter" because port "z" has an unsupported type

アルテラQuartusII9.1WebEditionを使用しています。

どうすればこれを機能させることができますか?

4

1 に答える 1

2

これは、Quartus II 12.1(フルバージョン)を使用している場合に機能します。VHDLに関しては、有効で合成可能に見えるコードと、合成ツールが実際に理解できるコードとの間に違いがあることを前もって知っておく必要があります。このような問題は、古いツールや、非標準的な方法で何かをしようとしたり、一般的に使用されていない言語の機能を使用したりするときによく発生します。あなたの場合、ツールはrealタイプに問題がある可能性が高いです。私はどちらかをお勧めします:

  1. QuartusIIの最新バージョンへのアップグレード
  2. 代わりに、ポートの幅をジェネリックとして渡す
  3. ライブラリから独自のlog2関数を使用する(これが私が行うことです)。
于 2013-01-23T14:28:55.007 に答える