agentee

シミュレーション

ロジックシミュレーション

回路図のネットリストからデジタル部を直接シミュレーション: 74シリーズモデル、刺激、アサーション、セットアップとホールドチェック、VCD出力。

ロジックシミュレーションは、回路図のネットリストからデジタル部分を直接実行します。レイアウトは不要なため、設計の初期段階に適しています。配置を行う前に、カウンタがカウントし、デコーダがデコードし、オープンドレインバスが応答することを確認できます。

1つ始める

agentee new sim counter --kind logic

スターターには、クロック、リセット、クロック付きアサーションが含まれており、自分のネットに名前を変更できます。ロジック例 には、完成した2つが含まれています。これは counter で、74HC161が10 MHzのクロックをカウントし、74HC138に入力しています。

name = "counter"
kind = "logic"
schematic = "counter"
duration = "2us"
ignore = ["J1", "J2"]
record = ["CLK", "RST_N", "Q3", "Q2", "Q1", "Q0", "TC"]

[[stimulus]]
net = "CLK"
clock = { period = "100ns", duty = 0.5, phase = "50ns" }

[[stimulus]]
net = "RST_N"
steps = [["0ns", 0], ["120ns", 1]]

[[expect]]
nets = ["Q3", "Q2", "Q1", "Q0"]
clock = "CLK"
edge = "rising"
sequence = [0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2]

[[expect]]
nets = ["Y7_N", "Y6_N", "Y5_N", "Y4_N", "Y3_N", "Y2_N", "Y1_N", "Y0_N"]
at = "600ns"
value = "11011111"

[[expect]]
net = "TC"
at = "1600ns"
value = 1
agentee sim counter
agentee show sim:counter
agentee render sim:counter -o counter.png
assertions passed   6 of 6
assertions failed   0
contention          0   strong drivers disagreeing
timing violations   0   setup, hold, recovery, removal
cells               5   18 nets
events              130 to 2us

実行は、結果とVCD波形をスペックの隣に書き出します。波形ビューアで開くことができます。

Waveforms of the counter simulation

刺激

  • clock は phase まで低レベルで、その後各 period の duty 分だけ高レベルになります。
  • steps は時間順の [time, level] ペアで、レベルは0、1、"x"、"z" です。
  • constant はネットを1つのレベルに保ちます。

刺激は、そのネットを強力なドライバとして駆動します。電源ネットでは、レールを置き換えます。

アサーション

  • at は、その時刻までにすべてが安定した後に、ネットまたはバスを読み取ります。
  • sequence は、クロックの各クリーンエッジの直前にネットを読み取ります。これにより、レジスタ出力は、エッジが来た時点での状態として見えます。from は、それより前のエッジをスキップします。
  • バスの値は、数値または 0、1、x、z、-(任意)の文字列で、MSBが先頭です。

チェックは、結果が最新である間、失敗したアサーション、競合、タイミング違反をすべてシミュレーションのエラーとしてリストします。

セルになるもの

  • 電源ネットと電源シンボルは定数ソースです。GND、VSS、VEE、0V の名前は0、それ以外は1です。
  • 0オーム抵抗、ジャンパ、ネットタイは、そのネットを結合します。レールからネットへの抵抗は、プルアップまたはプルダウン、弱いドライバです。
  • コンデンサ、インダクタ、ダイオード、LED、テストポイント、水晶発振器などは対象外です。
  • 値またはシンボル名に74シリーズの品番を持つ部品は、ピン番号で組み込みモデルに一致します。74HC00、SN74LVC1G08DBVR、CD74HCT04Eはすべて一致します。ライブラリには一般的なゲート、フリップフロップ、ラッチ、バッファ、138デコーダ、161および163カウンタ、164および595シフトレジスタ、単一およびデュアルゲートのLVC部品が含まれます。オープンドレイン部品は低レベルにプルするか、開放します。
  • 値またはシンボルがプリミティブ名(NAND、DFF、MUX2など)の部品は、ピンを名前で対応付けます。
  • それ以外の部品は、ignoreに含まれているか、[[parts]]モデルがある場合を除き、その部品名を指定したエラーになります。

ファミリの文字がタイミングを決定します。HCは遅延10 ns、セットアップ15 ns、LVCは4 nsと3 ns、LSは15 nsと20 nsで、リカバリとリムーバルはTIとNexperiaのデータシートに基づいています。ロジックリファレンスに完全なテーブルと出典があります。

自作モデル

[[parts]]
ref = "U7"
primitive = "nand"
pins = { A = "1", B = "2", Y = "3" }
delay = "3ns"

[[parts]]
ref = "U9"
inputs = ["1", "2", "3"]
outputs = ["4"]
truth = ["000 1", "1-- 0", "01- z"]

部品には、ピンを対応付けたプリミティブ、primitive = "74HC244"で借用したライブラリのピンアウトライン、または最初の一致行が優先される真値表を割り当てます。

タイミング違反

フリップフロップ、カウンタ、シフトレジスタは、クロック入力に対してセットアップとホールドを、非同期リセットに対してリカバリとリムーバルをチェックします。違反が発生すると、Verilogモデルと同様に、セルはxになります。正常にクロックまたはリセットされるまで続きます。on_violation = "keep"では、違反を報告し、サンプリングした値を保持します。

エンジンは0、1、x、zの4レベルを保持します。強い駆動源が一致しない場合、xと競合になります。プルは、強い駆動源がオンでない場合のみ有効です。ゲートは、未知の入力が結果に影響する場合にのみxになります。ANDゲートに0を入力しても、出力は0のままです。

インターフェース内

ロジックシミュレーションはインターフェースの測定項目になり、シミュレーションに失敗がある間、チェックは失敗します。

[[interfaces.measure]]
sim = "i2c-bus"

このガイドを改善する · エージェント向けMarkdown