ステートマシンの書き方と、それには直接関係ないけれど知っておくと特になることのまとめ。
Verilog HDLは、宣言なしで登場した名前を1bit幅のwireとして勝手に解釈しますが、moduleの前に`default_nettype noneを書いておけばそれを禁止できます。 代入の左辺のbit幅が足りず桁あふれするせいでまともに動かない、という厄介なバグを、コンパイルの段階で検出できるありがたいおまじないです。 なお、XilinxのIPコアのソースなどは`default_nettypeがwireであることを前提に作られているものがあるので、endmoduleの後に`default_nettype wireを 書いておくのも忘れないようにしましょう(Verilog HDLのプリプロセッサ制御文は、ほかのソースファイルの記述にまで影響を与えます)。
一例として、ここに載せてあるソースの命名規則を以下に示します。
種類 | 命名 | 備考 |
入力ポート | I_~ | ポートは全部大文字 |
出力ポート | O_~ | |
入出力ポート | IO_~ | |
パラメータ | G_~ | VHDLのGenericに由来 |
localparam | C_~ | VHDLのConstantに由来 |
FFを推論するもの | r_~ | |
組み合わせ出力を推論するもの | w_~ | wireのみでなく、reg w_~というパターンもあり |
負論理 | ~_N | |
イネーブル信号 | ~_ENA | 少し長いが、_ENだと負論理と区別しにくいので |
ステートマシンを書くとき、always @(*)節の中に少しでも書き忘れがあるとラッチが推論される回路になってしまいます。 組み合わせ回路になるようにするには、以下のようにする必要があります。
ラッチが推論されていないことを確かめるには、ソースを眺めるよりもツールで合成をしてWarningを調べるほうが確実です。 以下に、各ツールでラッチが生成されたとき出るWarningをまとめます。
ツール | メッセージ |
Xilinx XST | WARNING:Xst:737 - Found n-bit latch for signal <信号名> |
Xilinx Vivado | |
Altera QuartusII |
- PK -シdGレワ statemachine/sim_howto.txtユUIoモ@セ煇呼uXツ"ミr@4R$汎度Db#{レ深ニ?U?メス M*払エ??_猩クI!!.紅??凩雋Nld姜嚶YチX#6オH|鍛Mカユ1「リハリネLハgムケネコHリーアェ?肆骨ER:Eミ痺㍽「嫌ニiモメ`:堺ェ?lck
- kェ「pwァケサネンwワ?"?了サ?3KMEケBヘフレヌムアp慴~ゥネルイWyワ?簧?ワ?ィqウ%ホnqウ?リ 睾gャロ莅黏o澈元wホZ
- w7/Dホ」 l灯?塘bt(ャ?寞ロマkby<量昞&?ホ鷏?Zソロ3 d忍?妥暈t舊hW|峙イキリ皰・キ檐6@;?ンI[・ハA9、「゙zナッ??ッpロk}wワY?賽ャ、o 颶咏YB?Bィ~R鎚h ZSユシR8{ンラ゙ハウ@ァーN?$5ゥ$b寸ムQbリ>ースIメトクョDチォk捉?%Fハ>V?ェタN?|,ミq,#?・9゚トh権P琺リelチB,ュ嫡家&B ?ヤH{fレ?揉W,タフィ軏ヲ;巫ス"w繒ハc嵜?aRJ[/゚タ`ェ.l8ャ「Qワヘstケヘンw]ヘ_eヘヌ-丗ユケOケサ柀 _UB?⑯PシサQヘン-②ヌV ヤフ銈。`ーf縫G?拉?晗yテab?ルzaCT溝Dデ チ+?)?最cカ~R寵X?L樺&4y ?x3?yャ??jノX??ェh?J_コ?ナ:HフsiハT*|$ナ7?ル*美゚ク=jノ4リn+⊇Sリ"i3"6ノネ$NCクSコfワ;ワ刧;I5[?o??q#?S」ム?M0コ?j?ヌ<轂ヤロ,{/゚ネS」Pm:q?籐ォラ"妖龍ぼ赤テ廟@?>{??WC?タ|燒 メW檄?k竈ミヘ?リ !ツ?ケ
- ?O[7hィ癸l"ケ?[[ks^gt?pノ3@t$?\?@モqKc梺mNQ^HMY%嶌cユwPK =シdG statemachine/verilog/PK <シdG statemachine/verilog/isim/PK dG「ロョ ユ
- " statemachine/verilog/isim/Rakefile抃駭モ@?洫X\ I! ?P粘
- ・ オQ米?ゥc寛ヘQ.qS@@)gT?? ・ウク?俤酷:i%??j?゚|3;脂?トト(nFqコ、痰焦zミ`?ネ2TサV -シ+トイMRtlャ GWー餓
- F66ォ2T~ミqリ?、еヒヲ゚;i池ナF嘘mレーqT54ャヲ嚀クレB&カー9册ァ゙W鶲S?%R??セヲ?'?
- 讎3Wゥ祥zWィ;M=亮s9 ッフ?ラ"跂?? ゙?、=?b?ュヤソ@ス?洟?リgaァ?シ7ョ琉m働
- 8屯ス チ/ンヲ琪??:K]xッS?ト錂シミ5クr掏K鮨ァ?,艢dPホッ挙7壼懾b=ヒUソ 0?o?ァ?ケ?R鐶イ_゚.7?WBリハ虎Jj<81轢3!ηOマ?gヤソKス?狄¨zヤ?g[チ藪cuミ靭0棗罇?げMカ8Y」?グュ゚`ヌュ=f傔、゙s 埜7 は籃驚ワテ%茱Pwサ ュWッ(ヤ;Oィォウ"鉗&硫疚|yr??睆eGv榘。>$ノrレエ5)6ー?@ァワ"UIリg偰ホセ-oロC!ヲS<ノ?畊.Aオオo実9リ?v]ソ?j3?シ?D゙C4,3?ネ]%薛ヲ?ミチ=飼ナ汽Wマッ?┝ユネム-サ?i#z。翫l9ナDZカ葯tu=階テk・x低 ?ユュ~sb$cケ??ホ,,ェ。テ?疲敦#NYキタw?9o
- ?nq>?馞qP&zIs徂瘰z碪< ,^ニフc礒3ハ筵ヲ・シ? ゥ糸sX+8zゥ"略 MネUォlアa=イ?5?
- V伺」セmhHrャBKヌ秋1x艨チ]サs9yフ‘+3ヘ]8?サ?_ハ6ニRャGロヨ氷フt4?賛萵攜OVE@D=ァlル2ウи?皺V)9ヽ)ウ?窯ゥ?」(?譬5%殄f猤チヌュ庶a?チ./mロ]l[1リ「,^/僅マメ探&c ゥ?ユQ湯[?0AD邇ュル!*鉸??ェユ髢そ@2「ロjB揉j?関Xテ:ト%ノ?ヨ,シ6 故J梃ウ?Kチ喀ョZヤレ?|崚R゙ンユ゚チモマチ?ipテ鮻.|G_?Eh9ナケ?ウ癇X1Wbト&タ-bヤC/xツゥ1TムV ヨ・PモUiXRi飲
- ウL0 Q拠。狎ユロ」BhZヘT(・cエ螢z?、G%ミト>Q巷「軻2・Tタク|シ9点NG鐺?ヤ8◆lmU3`
- ヲ,"e,ゥホム4lt?6?e炙u蒸8ゥf,l#ユ祥_姚PK =シdG statemachine/verilog/rtl/PK dGF+シェ 8 # statemachine/verilog/rtl/DELAY_SM.vュWYOQ~歙qM、?。u{ーヨ%hqK\c見オオアNIムギ;P[ZE,├ィ(A?オBフ咜ハチs吏カエ,丑ス=?薇;ロ貧?鈹炮ch停,ナ?w?8CI塚キ?ラ(Y。?ユuX?エt」茹ナ美、z底ソゥ椶%?ィ??Rレ;蚣詳?㍍^M最橈ゥHkェ「<C*:s饉゙ォム?チモ迢ェ15うu腆.ァ磧b;ィc#*?v]8ソソ?ハユkヘbェ睡?リr銀p+J(??ィヒロ}貭Yー咜」ホNTaelィ2゙?NQ悸x≫g@Jケ8Ns?c搓鮃F?ナ屈?M澁7Owク嘉硤廰 hホ?)?s JIヲコ0^-≪郭q V8xCC眤Aァ憑?kX萩?ヲdH骰k?X0ャ15 フrw?{繿/Wンハ=5ヤリカ 飾<