Skip to content

Latest commit

 

History

History
227 lines (179 loc) · 7.07 KB

File metadata and controls

227 lines (179 loc) · 7.07 KB

HTTP API リファレンス

English

ベース URL(ローカル開発時): http://localhost:8000

GET /

案内用のルートです。 本サービスは API 専用で、ユーザーインターフェイスはフロントエンドが別途配信します。

レスポンス 200 OK

{
  "service": "ModView API",
  "version": "0.1.0",
  "message": "This is the backend API. Open the frontend UI instead - ...",
  "endpoints": ["POST /api/parse", "GET /api/health", "GET /docs"]
}

GET /api/health

ヘルスチェックと Verible の利用可否の確認です。

レスポンス 200 OK

{ "status": "ok", "version": "0.1.0", "verible": true }

version はバックエンドアプリケーションのバージョンです(リポジトリの CHANGELOG を参照)。 verible-verilog-syntax バイナリが見つからない場合、veriblefalse になります。

POST /api/parse

1 つ以上の SystemVerilog ファイルを解析し、抽出した設計を返します。

リクエストmultipart/form-data

フィールド 必須 説明
files File[] はい .sv / .v のソースファイル
top string いいえ トップモジュール名のヒント。top_candidates の先頭に並べ替えられます

上限は 1 リクエストあたり 20 000 ファイル1 ファイル 50 MB合計 500 MB です。 ディレクトリ単位のアップロードが可能なのは、このファイル数の上限によります。 上限は multipart ボディの読み取り時に適用されるため、大きすぎるリクエストはファイルがディスクに書き出される前に拒否されます。

レスポンスの構造

200 のレスポンスは常に同じ 3 つのキーを持ちます。

キー 説明
status "ok" | "partial" | "error" 下記参照
errors 配列 構文エラー 1 件につき 1 要素。空の場合もあります
design オブジェクト 抽出された設計。3 つの状態すべてで返されます

status の値は次の 3 つです。

  • ok:すべてのファイルを解析できました。 errors は空です。
  • partial:一部のファイルは失敗したものの、少なくとも 1 つのモジュールを抽出できました。 クライアントは図の描画とエラー一覧の提示を同時に行えます。
  • error:ファイルの解析に失敗し、モジュールが 1 つも残りませんでした。 描画できるものがありません。

成功(200 OK

{
  "status": "ok",
  "errors": [],
  "design": {
    "modules": {
      "cpu_top": {
        "name": "cpu_top",
        "ports": [
          { "name": "clk",    "direction": "input",  "width": 1 },
          { "name": "data_o", "direction": "output", "width": 32, "msb": 31, "lsb": 0 }
        ],
        "parameters": { "WIDTH": "32" }
      }
    },
    "top_candidates": ["cpu_top"],
    "instances_by_parent": {
      "cpu_top": [
        {
          "instance_name": "u_alu",
          "module_name": "alu",
          "parameters": {},
          "connections": [
            { "port_name": "y", "signal": "alu_out" }
          ]
        }
      ]
    },
    "interfaces": {},
    "interface_instances_by_parent": {}
  }
}

widthmsblsb は、定数のパック範囲([31:0])から導出されます。 [WIDTH-1:0] のようなパラメータ化された範囲は width: 1 にフォールバックします。

interface のサポート

<interface>.<modport> <name> 形式で宣言されたポート(例: pcie_avst_if.slave tx)は、direction: "interface" と結び付け情報を伴って返されます。

{
  "name": "tx",
  "direction": "interface",
  "width": 1,
  "interface_name": "pcie_avst_if",
  "modport": "slave"
}

.bus(axi_bus.master) のように書かれた接続では、結び付け情報は接続側に付きます。

{
  "port_name": "bus",
  "signal": "axi_bus.master",
  "interface_instance": "axi_bus",
  "modport": "master"
}

interface_instancemodport、および interface_namemodport は、該当しない場合には省略されます。 そのため通常の信号接続は、上の成功例に示した 2 キーの形のままです。

interface の宣言そのものは design.interfaces に入ります。

{
  "interfaces": {
    "axi_if": {
      "name": "axi_if",
      "signals": [{ "name": "cmd", "width": 8, "msb": 7, "lsb": 0 }],
      "modports": {
        "master": {
          "name": "master",
          "signals": [{ "name": "cmd", "direction": "output" }]
        }
      },
      "parameters": {}
    }
  },
  "interface_instances_by_parent": {
    "cpu_top": [
      { "instance_name": "axi_bus", "interface_name": "axi_if", "parameters": {} }
    ]
  }
}

部分的な解析(200 OK

一部のファイルは失敗したものの、解析できたモジュールは返されます。

{
  "status": "partial",
  "errors": [
    { "file": "broken.sv", "line": 42, "column": 8, "message": "syntax error (parse)" }
  ],
  "design": { "modules": { "cpu_top": { "...": "..." } }, "...": "..." }
}

構文エラー(200 OK

構文エラーは HTTP の失敗としては扱いません。 利用できるものが何も残らなかった場合、statuserror となり、design は空のコレクションを含みます。

{
  "status": "error",
  "errors": [
    { "file": "cpu.sv", "line": 42, "column": 8, "message": "syntax error (parse)" }
  ],
  "design": {
    "modules": {},
    "top_candidates": [],
    "instances_by_parent": {},
    "interfaces": {},
    "interface_instances_by_parent": {}
  }
}

不正なリクエスト(400 Bad Request

ファイルのないリクエスト、未対応の拡張子、サイズ上限の超過で返されます。 アプリケーション自身のエラーは message を使います。

{ "status": "error", "message": "unsupported file type: notes.txt" }

multipart ボディの読み取り中に発生した失敗は捕捉され、先頭に multipart parse error: を付けて同じ形で返されます。 ハンドラに到達する前にフレームワークが拒否した場合は、代わりに FastAPI の detail キーが使われます。

{ "detail": "..." }

したがってクライアントは message を先に読み、なければ detail にフォールバックします。 同梱のフロントエンドクライアントはそのように実装されています。

Verible が見つからない(500 Internal Server Error

{ "error": "verible not found" }

環境変数

変数 既定値 用途
VERIBLE_BIN verible-verilog-syntax Verible バイナリのパスまたは名前
SVMV_CORS_ORIGINS * 許可する CORS オリジン(カンマ区切り)