Defining The States
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 79/90。
チャレンジ
traffic light controllerは、特定の時間間隔で異なるライトの状態(Red、Yellow、Green)を順番に切り替える有限状態機械です。finite state machine (FSM)は、限られた数のstatesのいずれかになれる回路です。入力またはタイミングに基づいて、ある状態から別の状態へ変化します。
このプロジェクトでは、単純な交差点用のtraffic light controllerを構築します。traffic lightには3つの出力があります。
| ライト | 出力 | 意味 |
|---|---|---|
| Red | red = 1 | 停止 |
| Yellow | yellow = 1 | 注意 |
| Green | green = 1 | 進行 |
ライトは次の順序で切り替わります。
Green → Yellow → Red → Green → …
タイミングシーケンス
| 状態 | 継続時間 | 次の状態 |
|---|---|---|
| Green | 30秒 | Yellow |
| Yellow | 10秒 | Red |
| Red | 40秒 | Green |
このレッスンでは、traffic light controllerの状態を定義します。
traffic lightには3つの可能な状態があります。
| 状態 | ライト | コード |
|---|---|---|
| Green | GreenライトON | 2'b00 |
| Yellow | YellowライトON | 2'b01 |
| Red | RedライトON | 2'b10 |
不足している部分を追加してモジュールを完成させてください。
行うこと:
状態のエンコーディングを定義します:0=Green、1=Yellow、2=Red
- 2ビットの
stateという名前のレジスタをDeclareします - 6ビットの
counterという名前のレジスタをDeclareします(最大40秒のタイミング用) - 組み合わせalwaysブロック
always @(*) begin ... endの内部に、case (state)を含めて出力の割り当てを追加します。red、yellow、greenはoutput regとして宣言されており、regはこのようなブロックの内部でのみ割り当てることができます。@(*)は、このブロックが読み取る値が変化するたびにブロックを再実行することを意味します。この場合はstateです。- stateが0の場合:
green = 1、yellow = 0、red = 0 - stateが1の場合:
green = 0、yellow = 1、red = 0 - stateが2の場合:
green = 0、yellow = 0、red = 1
- stateが0の場合:
自分で試してみよう
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: タスク1 - 状態レジスタを宣言する(2ビット)
// TODO: タスク2 - カウンタレジスタを宣言する(6ビット)
// TODO: タスク3 - case (state) を使用した出力の代入
// 状態 0: green=1, yellow=0, red=0
// 状態 1: green=0, yellow=1, red=0
// 状態 2: green=0, yellow=0, red=1
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オンラインコンパイラ