2

VHDLで関数を定義しようとしていますが、

エラー:tst.vhd(4):「サブタイプ」の近く:構文エラー

これがコードです

subtype word10 is bit_vector(9 downto 0);
subtype word8 is bit_vector(7 downto 0);

function tst (input : in word10) return word10 is
    variable tmp : word10;
    -- code here
    begin

    return tmp;
end tst;

entity tester is
end;

architecture tst of tester is
begin
end;

VHDLでコーディングするのは初めてで、エラーが何であるかわかりません。

何か案は?

4

3 に答える 3

4

問題は、定義しようとしているもの(サブタイプと関数)を、それ自体でぶらぶらするだけでなく、ライブラリユニット(パッケージまたはエンティティ)またはその他の本体の内部で宣言する必要があることです。宣言をテスターエンティティに移動してみてください(つまり、「エンティティテスターは」行の後):

entity tester is
    subtype word10 is bit_vector(9 downto 0);
    subtype word8 is bit_vector(7 downto 0);

    function tst (input : in word10) return word10 is
        variable tmp : word10;
        -- code here
        begin

        return tmp;
    end tst;
end tester;

サブタイプと関数を宣言する正確な場所は、それらを表示する必要があるスコープによって異なります。デザイン全体でアクセスできるようにする必要がある場合は、通常、それらをまとめてパッケージに宣言します。

于 2012-04-18T13:44:58.083 に答える
1

問題は、dedefinitionと。の間で関数のSUBTYPE 内部beginを定義する必要があるということです。

ただし、VHDLがプログラミング言語のようなものではなく、デザイン言語であるという事実をご存知かどうかはわかりません。コードを合成する場合は、関数を合成できるかどうかに注意する必要があります。

于 2012-04-18T13:06:33.490 に答える
1

subtypesとfunctionsは通常、packagesとpackage bodys内で宣言されます-そのコードをそのままコンパイルしようとすると、そうです、失敗します。

試してみてください(頭のてっぺんから入力しただけなので、構文のタイプミスがあるかもしれませんが、正しい考えが得られるはずです):

package mypkg is
    subtype word10 is bit_vector(9 downto 0);
    subtype word8 is bit_vector(7 downto 0);
    function tst (input : in word10) return word10;
end package;
package body mypkg is      
    function tst (input : in word10) return word10 is
        variable tmp : word10;
    begin
        -- code here
        return tmp;
    end function;
end package body;

コードを「実行」するには(ハードウェアを説明することを目的としたコードの誤称です)entity、関数を呼び出すためにシミュレーター内で「精巧に作成」する必要もありますtst。エンティティはVHDLビルディングブロックとしてはるかに使用され、プロセスはブロック内の動作をキャプチャするために使用されます。ソフトウェアの世界と同様に、関数とプロシージャはエンティティとプロセス内で頻繁に使用され、頻繁に使用される機能をキャプチャします。

于 2012-04-19T08:30:08.653 に答える