Altifigence Academy

2 / 37 · 概念

信号とポート:幅・方向・時間の取り決め

インターフェースを読み、組合せ出力と状態出力の検証基準を分けます。

ポート一覧を回路の取り決めとして読む

input logic [7:0] data は、8 ビットを同時に伝えるポートです。八つの値が順に届くという意味ではありません。logic 型だけで記憶素子が生じるわけでもありません。組合せ代入で駆動するか、エッジに基づく順序ブロックで駆動するかが、ハードウェアの動作を決めます。

信号を読むときは幅と方向に加え、いつ有効か、誰が駆動するか、リセット後の値は何かを確認します。この情報がないと、各モジュールが正しくても、接続したシステムは誤ることがあります。

同じ MUX にも二種類の出力があります

このコースの実習では、選択結果 y と、それを記憶した sampled_y を一緒に観測します。

y(t)=s(t)‾a(t)+s(t)b(t)y(t)=\overline{s(t)}a(t)+s(t)b(t)
qk+1=y(tk−)q_{k+1}=y(t_k^-)

最初の式は組合せ機能、二つ目はエッジ直前に安定した y を記憶する理想同期モデルです。両出力を無条件に同じ瞬間の入力と比べると、正常なレジスタレジスタ 複数ビットの状態を記憶する回路です。このコースの同期式レジスタは、クロックエッジで定められた入力を記憶します。 詳しく見るを誤りと判定してしまいます。

SystemVerilog
assign y = sel ? b : a;
always_ff @(posedge clk) sampled_y <= y;

シミュレータには、同じ時刻内でもイベントの処理順があります。実素子には setupセットアップ 取り込みクロックエッジの前に、入力データが安定していなければならない最小時間です。違反すると記憶結果を保証できません。 詳しく見る/hold と clock-to-Q 遅延があります。二つの式はこれらの違いを消すものではなく、機能検証で使う観測時点を明確にする出発点です。

矢印はデータ依存関係です。a・b・sel が変わると組合せ出力 y が先に変わりますが、sampled_y は立上りエッジ立上りエッジ クロックが 0 から 1 に変わる瞬間です。CLK=1 の区間全体を指すレベルとは区別します。 詳しく見るでだけ新しい値を記憶します。

組合せ出力と記憶出力の境界
  1. a · b · sel: 同時に与える入力
  2. MUX → y: 現在の選択信号で計算
  3. DFF → sampled_y: 立上りエッジで y を記憶

検討する問い

  • sel は 0/1 が確定した入力ですか、それとも非同期の外部信号ですか。
  • y の変化後、sampled_y と比較するのは次の有効エッジ以降ですか。
  • sampled_y の初期値はリセットリセット 状態を仕様で定めた初期値に戻す制御です。同期式か非同期式か、他の制御より優先されるかを合わせて定めます。 詳しく見るで定めますか、それともツールの初期化設定を使いますか。

実習で明示する初期値は、再現可能な 0/1 モデルのための設定です。それが実チップの電源投入時の動作を保証すると解釈してはいけません。

自分で考えてみましょう

クロックエッジ間で a が 0 から 1 に変わり、sel=0 を保ちます。y と sampled_y はそれぞれいつ変わりますか。

解説を見る

組合せ出力 y は、その組合せ経路の評価または伝搬後に変わります。sampled_y は、その値を取り込む次の立上りエッジで更新されます。実回路ではエッジ付近の入力変化が setup/hold の問題になるため、この単純モデルだけで安全性を判断しません。

選択はこのブラウザに適用されます。フッターからいつでも変更できます。