シミュレーション
ロジックシミュレーション
回路図のネットリストからデジタル部を直接シミュレーション: 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 = 1agentee sim counter
agentee show sim:counter
agentee render sim:counter -o counter.pngassertions 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波形をスペックの隣に書き出します。波形ビューアで開くことができます。

刺激
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"