Verilogのプリプロセッサを試しに作ってみた

Verilogプリプロセッサを試しに作ってみました。

今はifdef/else/endifくらいしか対応していないのでほぼ使えませんが、一応risc vのソースコードに適用できてました。 以下にソースコードと実行方法を示します。

ソースコード

RTL_View/rtl_preprocess.py at develop · moamoai/RTL_View · GitHub

実行方法

python rtl_preprocess.py --file ${RTL_FILE}

ステートマシン図

finite_state_machine NORMAL NORMAL IF_TRUE IF_TRUE NORMAL->IF_TRUE ifdef true IF_FALSE IF_FALSE NORMAL->IF_FALSE ifdef false EL_FALSE EL_FALSE IF_TRUE->EL_FALSE else EL_TRUE EL_TRUE IF_FALSE->EL_TRUE else EL_FALSE->NORMAL endif EL_TRUE->NORMAL endif

各状態での実行内容

  • NORMAL
    • none
  • IF_TRUE
    • print
  • IF_FALSE
    • not print
  • EL_TRUE
    • print
  • IF_FALSE
    • not print
  • EL_FALSE
    • print

ツール対応状況

あとは以下表の×の項目に対応させれば完成と。

Compiler directives Verilog - LRM 対応状況
‘celldefine [19.1] -
‘default_nettype [19.2] -
‘define [19.3]
‘else [19.4]
‘elsif [19.4] ×
‘endcelldefine [19.1] -
‘endif [19.4]
‘ifdef [19.4]
‘ifndef [19.4] ×
‘include [19.5] ×
‘line [19.7] -
‘nounconnected_drive [19.9] -
‘resetall [19.6] -
‘timescale [19.8] -