Sensitivity List
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 48/90。
センシティビティリストは、alwaysブロックにいつ実行するかを指示します。これは@記号の後のかっこ内に記述します。
センシティビティリストは、alwaysブロックをトリガーする信号またはイベントの集合です。リスト内のいずれかの信号がchangesすると、ブロックがexecutesします。
構文:
always @(sensitivity_list) begin
// リスト内の信号が変化したときにコードが実行される
end感度リストの種類
| 種類 | 構文 | ブロックが executes するタイミング |
|---|---|---|
| すべての signals(組み合わせ回路) | always @(*) | 内部のいずれかの信号が changes したとき |
| 特定の signals | always @(a or b) | a または b が changes したとき |
| エッジトリガー(順序回路) | always @(posedge clk) | clock の rising edge で |
| 複数の edges | always @(posedge clk or posedge reset) | clock edge または reset edge で |
オプション 1:すべての信号 (*)
組み合わせ論理にとって最も安全で、最も一般的です。
always @(*) begin
out = a & b; // a または b が変化したときに実行される
end* は、ブロック内で読み取られるすべての signals を自動的に含めます。
オプション 2: 特定の信号
always @(a or b) begin
out = a & b; // a または b が変化したときに実行される
endsignal を1つ記述し忘れると、その signal が changes したときにシミュレーションで output が更新されないため、シミュレーションは合成されたハードウェアと一致しなくなります。
オプション 3: エッジトリガー (posedge)
always @(posedge clk) begin
q <= d; // クロックの立ち上がりエッジで動作する
end立ち上がりエッジには posedge を、立ち下がりエッジには negedge を使用します。
オプション 4: 複数のエッジ
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endclock edge または reset edge で Runs。
よくある間違い
| 間違い | なぜ間違いか |
|---|---|
always @(a or b or c) だが、dを使用している | dが不足 → シミュレーションでoutputが古いままになる(sim/synthの不一致) |
always @(posedge clk or reset) | resetにposedgeがない |
always @(clk) | flip-flopにはposedge clkを使用する必要がある |
チャレンジ
行うこと:
- このフリップフロップが動作するように、正しい感度リストを追加してください。ブロックは
clkの立ち上がりエッジで実行される必要があります。
自分で試してみよう
module flipflop (
input clk,
input d,
output reg q
);
always @(______) begin
q <= d;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ