6

SPI ベースの IO エクスパンダ用の汎用ドライバを作成しようとしています。アイデアは、要求された IO セットアップに一致するインスタンス化で初期化値を渡すことです。

私の現在の試みは次のようになります:

entity max7301_simple is
   generic ( 
        IO_cfg : array (1 to 7) OF integer range 0 to 255 := (16#55#, 16#55#, 16#55#, 16#55#, 16#55#, 16#55#, 16#55#)
           );
     port  (
        -- Application interface :
        clk_i       :   in std_logic;        -- input clock, xx MHz.
        rst_i       :   in std_logic;        -- sync reset.
        en_i        :   in std_logic;        -- enable, forces re-init of pins on MAX7301.
        output_i    :   in std_logic_vector(27 downto 0);   --data to write to output pins on MAX7301
        irq_o       :   out std_logic;       -- IRQ, TODO: what triggers, change on inputs ?
        input_o     :   out std_logic_vector(27 downto 0);  --data read from input pins on MAX7301
        -- MAX7301 SPI interface
        sclk        :   out std_logic;        -- SPI clock
        din         :   in std_logic;        -- SPI data input
        dout        :   out std_logic;       -- SPI read data
        cs          :   out std_logic        -- SPI chip select
    );
end max7301_simple;

問題は IO_cfg 配列にあります。初期値などを使用してさまざまな試みを試みましたが、配列の指定方法を理解できないようです。

配列をジェネリックとして渡すことができることを読んだことがあると思いますが、まだうまくいきません。ザイリンクス ISE は med に「'array' の近くに構文エラーがあります」とだけ伝えますが、これは私を前進させるのに十分な情報ではありません。

どんな助けでもいただければ幸いです

このモジュールをインスタンス化するときは、常に 7 つの値が必要です。

4

3 に答える 3

5

2008 VHDL標準と事前定義された属性を使用して、もう少し一般的なアプローチを提案します。これにより、任意の長さの配列を渡すことができます。次のようにパッケージでタイプを定義します。

package data_types is
    type array_of_integers is array(natural range <>) of integer;
end package;

コードで、次のようにジェネリック配列を渡します。

generic(
    COEFFICIENTS : array_of_integers := (-1, 0, 1)
);

これで、ソフトウェアはデフォルトのインデックス スキームを使用します。これは、所定の 'left 属性で考慮することができます (参照はhttp://www.csee.umbc.edu/portal/help/VHDL/attribute.htmlにあります):

-- First coefficient
    ... <= COEFFICIENTS(COEFFICIENTS'left);
-- Second coefficient
    ... <= COEFFICIENTS(COEFFICIENTS'left + 1);

通常、この配列は何らかのループまたは生成ステートメントで使用する必要があります。

GENERATE_STATEMENT: for entry in 0 to COEFFICIENTS'length-1 generate
    out(entry) <= std_logic_vector(to_signed(COEFFICIENTS(COEFFICIENTS'left + entry), out(entry)'length));
end generate;

Quartus IIユーザー向けのちょっとした補足事項として、 .bdf回路図ファイルでジェネリック配列を使用することも可能です。パラメータ タイプをAutoに設定し、パラメータ値をA(D"-1", D"0", D"1") の形式で書き換えます。ここで、D10 進データ タイプを表します(便利なリンク: http://quartushelp.altera .com/14.0/mergedProjects/assign/asd/asd_tab_param.htm )

于 2016-08-29T11:06:56.227 に答える