Clock Generation
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 71/90。
クロックは、一定の間隔で0と1の間を継続的にtoggleする信号です。クロックは、フリップフロップやカウンターなどの順序論理に不可欠です。
なぜクロックを生成するのか
テストベンチでは、順序回路をテストするためにクロックが必要です。クロックは、フリップフロップ、レジスタ、ステートマシンの動作を駆動します。
クロックを生成する方法
| 方法 | 説明 |
|---|---|
always と # 遅延 | 最も一般的な方法 |
forever ループ | 代替方法 |
repeat ループ | 固定回数の cycles に使用 |
方法1:遅延を伴うalwaysブロック
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;clk = 0(時刻 0)- 5
timeunits ごとに、clkが切り替わる
- Period = 10 time units
- Frequency = 1/10 = 0.1 per time unit
方法 2:無限ループ
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endalwaysメソッドと同じ結果です。
方法 3:固定サイクル数だけ繰り返す
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
end正確に 10 個のクロックエッジ(5 完全サイクル)を生成してから停止します。
チャレンジ
4 time units ごと(period = 8 time units)に切り替わる clock を生成するために、不足しているコードを追加してください。
実行すること:
initialblock を使用して、time 0 でclkを 0 に初期化する- delay を伴う
alwaysblock を使用して、4 time units ごとにclkを切り替える
自分で試してみよう
module clock_challenge;
reg clk;
// TODO: ステップ1 - clk = 0 に設定する initial ブロックを追加
// TODO: ステップ2 - 4 時間単位ごとに clk をトグルする always ブロックを追加
initial begin
$monitor("Time %0t: clk = %b", $time, clk);
#20;
$display("Clock generated for 20 time units");
$finish;
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 Design13Timing And Delays
What Are DelaysGate DelaysAssignment DelaysTimescale DirectiveClock GenerationRecap - Timing Control5Operators 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オンラインコンパイラ