はじめに
Veryl は SystemVerilog にトランスパイルされる HDL です.公式が「学習の容易さ、設計プロセスの信頼性と効率の向上、およびコードの記述の容易さが実現されます。」と謳っているように,覚えやすく書きやすい言語です.
私は以前 FPGA 向けの UART モジュールを SystemVerilog で実装しました.このモジュールを先日 Veryl で移植しました.
本稿では,移植の際に Veryl の機能について個人的に良いなと感じた点を,SystemVerilog と比較して紹介します.
良かった機能
打鍵数が減る
SystemVerilog ではコードブロックは module
endmodule
や begin
end
などで囲った範囲でした.対して Veryl では {}
で囲った範囲です.タイプする量が減るので単純に楽です.ミスタイプする機会も減ります.
宣言が楽
SystemVerilog では2ビット以上のレジスタ等のサイズを:
で指定します.この表現は初学者にとって非常に分かりづらく,熟練者でもミスの温床になります.
logic [31:0] clock_counts;
対して Veryl ではサイズそのものを指定します.
var clock_counts : logic<32>;
多くのプログラミング言語ではむしろこの方法が一般的だと思うので,分かりやすいのではないでしょうか.
列挙型が現代的
SystemVerilog では列挙子がグローバルな名前空間に定義されます.これは名前の衝突リスクがあります.
typedef enum logic [1:0] {
STATE_WAIT = 2'h0,
STATE_RECEIVE_BITS = 2'h1,
STATE_WRITE_WORD = 2'h2
} state_t;
// state <= STATE_WAIT; // 列挙子の参照方法
対して Veryl では列挙子が列挙型を通して参照されます.名前の衝突リスクが減るので,名前が簡素になります.
enum state_t: logic<2> {
WAIT,
RECEIVE_BITS,
WRITE_WORD,
}
// state = state_t::WAIT; // 列挙子の参照方法
SystemVerilog では C 言語風の,Veryl では Rust 風の列挙型が定義できると考えれば理解がしやすいでしょう.
リセット周りが便利
SystemVerilog ではリセットも他の信号と同様に register または wire として扱います.この表現ではリセットの性質(極性と同期・非同期)によって,記述を修正する必要がありました.
module receiver_axis (
input rst,
// 省略
);
Veryl ではリセット専用の型でこの問題を解決します.これはリセットの性質を抽象化しています.
module receiver_axis (
rst : input reset,
// 省略
)
リセット型を導入すると,リセット専用の文法 if_reset
を使うことができます.
always_ff (clk) {
if_reset {
// リセット時の記述
} else {
// 省略
}
}
veryl 0.15.0 時点では,上記の記述は負極性で非同期のリセットにトランスパイルされます.
always_ff @ (posedge clk, negedge rst) begin
if (!rst) begin
// リセット時の記述
end else begin
// 省略
end
end
ここで Veryl.toml に次の記述を追加しましょう.
[build]
reset_type = "sync_high"
もう一度トランスパイルし直すと,次の SystemVerilog 記述が得られます.正極性で同期のリセットになりました.
always_ff @ (posedge clk) begin // <- negedge rst が削除された
if (rst) begin // <- リセットの論理が逆になった
// リセット時の記述
end else begin
// 省略
end
end
開発ターゲットに応じてリセットの性質は異なることがあるはずなので,このリセットの抽象化はとても便利なのではないでしょうか.
おわりに
本稿では Veryl 移植で感じた良かった点を紹介しました.Veryl は SystemVerilog が抱えていた問題や難しさを解決するよい言語だと思います.JavaScript に TypeScript がいるように,SystemVerilog にも Veryl がいると,開発体験が良いものになるのではないでしょうか.
Veryl には他にも様々な特徴がありますので,気になる方は公式サイトを見てください.また,Veryl は現在も開発中のため,紹介した機能は今後変わってゆく可能性があります.ご利用の際は最新情報をご参照ください.