Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

インポート

import 宣言は他のパッケージからシンボルをインポートします。モジュール、インターフェース、パッケージの要素としてだけでなくトップレベルにも配置することができます。import 宣言の引数には package::* のようなワイルドカードパターンを使用することができます。

// ファイルスコープインポート
import $sv::SvPackage::*;

package PackageA {
    const paramA: u32 = 1;
}

module ModuleA {
    import PackageA::*;
    import PackageA::paramA;
}

package::{a, b} のように波括弧の中に列挙することで、1つのパッケージから複数のシンボルを一度に import できます。

package PackageA {
    const paramA: u32 = 1;
    const paramB: u32 = 2;
}

module ModuleA {
    import PackageA::{paramA, paramB};
}

インポート宣言によるシンボルのインポートは、そのインポート宣言が置かれた名前空間内の任意の場所から参照できます。

package PackageA {
    const WIDTH: u32 = 8;
}

module ModuleA (
    i_d: input  logic<WIDTH>, // 有効な参照
    o_d: output logic<WIDTH>, // 有効な参照
) {
    import PackageA::WIDTH;

    let d: logic<WIDTH> = i_d; // 有効な参照
    assign o_d = d;
}

enumのメンバーも、個別に、波括弧のリストとして、あるいは wildcard により import できます。これはパッケージ内で定義された enum だけでなく、モジュールやインターフェース内でローカルに宣言された enum にも適用されます。

package PackageB {
    enum Color: logic<3> {
        Red,
        Green,
        Blue,
        White,
        Black,
    }
}

module ModuleB {
    // import a single enum member
    import PackageB::Color::Red;
    // import multiple enum members
    import PackageB::Color::{Green, Blue};
    // import all remaining members of the enum
    import PackageB::Color::*;

    var c: PackageB::Color;
    // members can be referenced without qualification
    assign c = Green;
}