Skip to content

型変換

このページでは、celox-ts-gen がモジュール定義を生成する際に Veryl の型が TypeScript の型にどのようにマッピングされるかを説明します。

変換テーブル

Veryl の型TS の型4 値備考
clock(ポートから除外)yesaddClock() / tick() でイベントとして扱われる
resetbigintyes
logic<N>bigintyes
bit<N>bigintno2 値のみ

すべてのシグナルポート値はビット幅に関わらず bigint を使用します。これにより、すべてのシグナルで一貫した型が保証され、シグナル幅の変更時に型が変わることがなくなります。

方向とミュータビリティ

方向読み取り書き込みTS 修飾子
inputyesyes(ミュータブル)
outputyesnoreadonly
inoutyesyes(ミュータブル)

出力ポートは生成される Ports インターフェースで readonly として宣言されます。出力ポートへの代入は TypeScript のコンパイルエラーになります。

クロックポート

clock 型のポート(clock_posedgeclock_negedge を含む)は、生成される Ports インターフェースには含まれません。代わりに、モジュールの events 配列に表示され、以下で使用されます:

  • イベントベースシミュレーションでの Simulator.tick() / Simulator.event()
  • タイムベースシミュレーションでの Simulation.addClock()

配列ポート

配列ポート(例: output logic<32>[4])はインデックスアクセスを持つオブジェクトとして表現されます:

ts
interface CounterPorts {
  readonly cnt: {
    at(i: number): bigint;
    readonly length: number;
  };
}

入力配列ポートの場合、set(i, value) メソッドも生成されます:

ts
interface MyPorts {
  data: {
    at(i: number): bigint;
    set(i: number, value: bigint): void;
    readonly length: number;
  };
}

4 値と 2 値

4 値
logicyes
clockyes
resetyes
bitno

SimulatorOptionsfourState: true を有効にすると、4 値シグナルは値と一緒に追加のマスクを持ちます。マスクビットが 1 のビットは不定値(X)を示します。4 値の値を構築するには FourState() ヘルパーを使用し、アサーションには vitest マッチャー(toBeXtoBeAllXtoBeNotX)を使用してください。

詳しくは 4 値シミュレーション を参照してください。