diff --git a/book/ja/06_development_environment/01_project_configuration.html b/book/ja/06_development_environment/01_project_configuration.html index 83136798..1e4542ae 100644 --- a/book/ja/06_development_environment/01_project_configuration.html +++ b/book/ja/06_development_environment/01_project_configuration.html @@ -337,8 +337,9 @@
targe
source
– ソースコードと同じディレクトリ
directory
– 特定のディレクトリ
+bundle
– 特定のファイル
-directory
を指定する場合は、ターゲットディレクトリを path
キーで指定します。
+directory
あるいは bundle
を指定する場合は、ターゲットパスを path
キーで指定します。
[build]
target = {type = "directory", path = "[dst dir]"}
diff --git a/book/ja/print.html b/book/ja/print.html
index 4cf1cbad..3514ea28 100644
--- a/book/ja/print.html
+++ b/book/ja/print.html
@@ -1785,8 +1785,9 @@ targe
source
– ソースコードと同じディレクトリ
directory
– 特定のディレクトリ
+bundle
– 特定のファイル
-directory
を指定する場合は、ターゲットディレクトリを path
キーで指定します。
+directory
あるいは bundle
を指定する場合は、ターゲットパスを path
キーで指定します。
[build]
target = {type = "directory", path = "[dst dir]"}
diff --git a/book/ja/searchindex.js b/book/ja/searchindex.js
index 22e3d315..74f4960a 100644
--- a/book/ja/searchindex.js
+++ b/book/ja/searchindex.js
@@ -1 +1 @@
-Object.assign(window.search, {"doc_urls":["01_introduction.html#ハードウェア記述言語-veryl","01_introduction.html#最適化された構文","01_introduction.html#相互運用性","01_introduction.html#生産性","02_features.html#特徴","02_features.html#real-time-diagnostics","02_features.html#auto-formatting","02_features.html#integrated-test","02_features.html#dependency-management","02_features.html#trailing-comma","02_features.html#abstraction-of-clock-and-reset","02_features.html#documentation-comment","02_features.html#compound-assignment-operator-in-always_ff","02_features.html#individual-namespace-of-enum-variant","02_features.html#repeat-of-concatenation","02_features.html#if--case-expression","02_features.html#range-based-for--inside--outside","02_features.html#msb-notation","02_features.html#let-statement","02_features.html#named-block","02_features.html#visibility-control","03_getting_started.html#はじめに","03_getting_started/01_installation.html#インストール","03_getting_started/01_installation.html#要件","03_getting_started/01_installation.html#インストール方法の選択","03_getting_started/01_installation.html#バイナリのダウンロード","03_getting_started/01_installation.html#cargo","03_getting_started/01_installation.html#エディタ設定","03_getting_started/01_installation.html#visual-studio-code","03_getting_started/01_installation.html#vim--neovim","03_getting_started/01_installation.html#そのほかのエディタ","03_getting_started/02_hello_world.html#hello-world","03_getting_started/02_hello_world.html#プロジェクトを作る","03_getting_started/02_hello_world.html#コードを書く","03_getting_started/02_hello_world.html#ビルドする","04_code_examples.html#コード例","04_code_examples/01_module.html#モジュール","04_code_examples/02_instantiation.html#インスタンス","04_code_examples/03_interface.html#インターフェース","04_code_examples/04_package.html#パッケージ","05_language_reference.html#言語リファレンス","05_language_reference/01_source_code_structure.html#ソースコードの構造","05_language_reference/02_lexical_structure.html#字句構造","05_language_reference/02_lexical_structure.html#エンコーディング","05_language_reference/02_lexical_structure.html#空白","05_language_reference/02_lexical_structure.html#コメント","05_language_reference/02_lexical_structure.html#ドキュメンテーションコメント","05_language_reference/02_lexical_structure.html#識別子","05_language_reference/02_lexical_structure.html#文字列","05_language_reference/02_lexical_structure/01_operator.html#演算子","05_language_reference/02_lexical_structure/02_number.html#数値","05_language_reference/02_lexical_structure/02_number.html#整数","05_language_reference/02_lexical_structure/02_number.html#全ビットのセット","05_language_reference/02_lexical_structure/02_number.html#幅なし整数","05_language_reference/02_lexical_structure/02_number.html#指定ビットのセット","05_language_reference/02_lexical_structure/02_number.html#浮動小数点数","05_language_reference/02_lexical_structure/03_array_literal.html#配列リテラル","05_language_reference/03_data_type.html#データ型","05_language_reference/03_data_type/01_builtin_type.html#組み込み型","05_language_reference/03_data_type/01_builtin_type.html#幅指定可能な4値データ型","05_language_reference/03_data_type/01_builtin_type.html#幅指定可能な2値データ型","05_language_reference/03_data_type/01_builtin_type.html#整数型","05_language_reference/03_data_type/01_builtin_type.html#浮動小数点数型","05_language_reference/03_data_type/01_builtin_type.html#文字列型","05_language_reference/03_data_type/01_builtin_type.html#type型","05_language_reference/03_data_type/02_user_defined_type.html#ユーザ定義型","05_language_reference/03_data_type/02_user_defined_type.html#構造体","05_language_reference/03_data_type/02_user_defined_type.html#列挙型","05_language_reference/03_data_type/02_user_defined_type.html#ユニオン","05_language_reference/03_data_type/02_user_defined_type.html#型定義","05_language_reference/03_data_type/03_array.html#配列","05_language_reference/04_expression.html#式","05_language_reference/04_expression/01_operator_precedence.html#演算子の優先順位","05_language_reference/04_expression/02_function_call.html#関数呼び出し","05_language_reference/04_expression/03_concatenation.html#連結","05_language_reference/04_expression/04_if.html#if","05_language_reference/04_expression/05_case.html#case","05_language_reference/04_expression/06_bit_select.html#ビット選択","05_language_reference/04_expression/07_range.html#範囲","05_language_reference/04_expression/08_msb_lsb.html#msb--lsb","05_language_reference/04_expression/09_inside_outside.html#inside--outside","05_language_reference/05_statement.html#文","05_language_reference/05_statement/01_assignment.html#代入","05_language_reference/05_statement/02_function_call.html#関数呼び出し","05_language_reference/05_statement/03_if.html#if","05_language_reference/05_statement/04_case.html#case","05_language_reference/05_statement/05_for.html#for","05_language_reference/05_statement/06_return.html#return","05_language_reference/05_statement/07_let.html#let","05_language_reference/06_declaration.html#宣言","05_language_reference/06_declaration/01_variable.html#変数","05_language_reference/06_declaration/02_parameter.html#パラメータ","05_language_reference/06_declaration/03_register.html#レジスタ","05_language_reference/06_declaration/04_combinational.html#組み合わせ回路","05_language_reference/06_declaration/05_assign.html#assign","05_language_reference/06_declaration/06_function.html#関数","05_language_reference/06_declaration/07_initial_final.html#initial--final","05_language_reference/06_declaration/08_attribute.html#アトリビュート","05_language_reference/06_declaration/08_attribute.html#sv-アトリビュート","05_language_reference/06_declaration/09_generate.html#生成","05_language_reference/06_declaration/10_instantiation.html#インスタンス","05_language_reference/06_declaration/11_named_block.html#名前付きブロック","05_language_reference/07_module.html#モジュール","05_language_reference/08_interface.html#インターフェース","05_language_reference/09_package.html#パッケージ","05_language_reference/10_systemverilog_interoperation.html#systemverilogとの相互運用","05_language_reference/11_visibility.html#可視性","05_language_reference/12_foreign_language_integration.html#他言語組み込み","05_language_reference/12_foreign_language_integration.html#embed-宣言","05_language_reference/12_foreign_language_integration.html#include-宣言","05_language_reference/13_integrated_test.html#組み込みテスト","06_development_environment.html#開発環境","06_development_environment/01_project_configuration.html#プロジェクト設定","06_development_environment/01_project_configuration.html#the-project-section","06_development_environment/01_project_configuration.html#the-name-field","06_development_environment/01_project_configuration.html#the-version-field","06_development_environment/01_project_configuration.html#the-authors-field","06_development_environment/01_project_configuration.html#the-description-field","06_development_environment/01_project_configuration.html#the-license-field","06_development_environment/01_project_configuration.html#the-repository-field","06_development_environment/01_project_configuration.html#the-build-section","06_development_environment/01_project_configuration.html#the-clock_type-field","06_development_environment/01_project_configuration.html#the-reset_type-field","06_development_environment/01_project_configuration.html#the-filelist_type-field","06_development_environment/01_project_configuration.html#the-target-field","06_development_environment/01_project_configuration.html#the-implicit_parameter_types-field","06_development_environment/01_project_configuration.html#the-omit_project_prefix-field","06_development_environment/01_project_configuration.html#the-strip_comments-field","06_development_environment/01_project_configuration.html#the-format-section","06_development_environment/01_project_configuration.html#the-lint-section","06_development_environment/01_project_configuration.html#the-test-section","06_development_environment/01_project_configuration.html#the-publish-section","06_development_environment/01_project_configuration.html#the-dependencies-section","06_development_environment/02_dependencies.html#依存関係","06_development_environment/02_dependencies.html#依存関係の使用","06_development_environment/02_dependencies.html#バージョン要求","06_development_environment/03_publish_project.html#プロジェクトを公開する","06_development_environment/03_publish_project.html#バージョンを上げる","06_development_environment/03_publish_project.html#設定","06_development_environment/04_directory_layout.html#ディレクトリ構成","06_development_environment/04_directory_layout.html#単一のソースディレクトリ","06_development_environment/04_directory_layout.html#単一のソースとターゲットディレクトリ","06_development_environment/04_directory_layout.html#マルチソースディレクトリ","06_development_environment/04_directory_layout.html#gitignore-について","06_development_environment/05_formatter.html#フォーマッタ","06_development_environment/06_linter.html#リンタ","06_development_environment/06_linter.html#lintnaming-セクション","06_development_environment/07_simulator.html#シミュレータ","06_development_environment/07_simulator.html#test-セクション","06_development_environment/07_simulator.html#testverilator-セクション","06_development_environment/07_simulator.html#testvcs-セクション","06_development_environment/07_simulator.html#testvivado-セクション","06_development_environment/08_language_server.html#言語サーバ","06_development_environment/09_compatibility.html#互換性","06_development_environment/09_compatibility.html#vivado","06_development_environment/09_compatibility.html#文字列パラメータ","06_development_environment/10_documentation.html#ドキュメンテーション","06_development_environment/11_github_action.html#github-action","07_appendix.html#補遺","07_appendix/01_formal_syntax.html#構文","07_appendix/02_semantic_error.html#セマンティックエラー","07_appendix/02_semantic_error.html#duplicated_identifier","07_appendix/02_semantic_error.html#invalid_allow","07_appendix/02_semantic_error.html#invalid_direction","07_appendix/02_semantic_error.html#invalid_identifier","07_appendix/02_semantic_error.html#invalid_lsb","07_appendix/02_semantic_error.html#invalid_msb","07_appendix/02_semantic_error.html#invalid_number_character","07_appendix/02_semantic_error.html#invalid_statement","07_appendix/02_semantic_error.html#invalid_system_function","07_appendix/02_semantic_error.html#mismatch_arity","07_appendix/02_semantic_error.html#mismatch_attribute_args","07_appendix/02_semantic_error.html#mismatch_type","07_appendix/02_semantic_error.html#missing_if_reset","07_appendix/02_semantic_error.html#missing_port","07_appendix/02_semantic_error.html#missing_reset_signal","07_appendix/02_semantic_error.html#missing_reset_statement","07_appendix/02_semantic_error.html#too_large_enum_variant","07_appendix/02_semantic_error.html#too_large_number","07_appendix/02_semantic_error.html#too_much_enum_variant","07_appendix/02_semantic_error.html#undefined_identifier","07_appendix/02_semantic_error.html#unknown_attribute","07_appendix/02_semantic_error.html#unknown_member","07_appendix/02_semantic_error.html#unknown_msb","07_appendix/02_semantic_error.html#unknown_port","07_appendix/02_semantic_error.html#unused_variable"],"index":{"documentStore":{"docInfo":{"0":{"body":3,"breadcrumbs":1,"title":1},"1":{"body":0,"breadcrumbs":0,"title":0},"10":{"body":18,"breadcrumbs":0,"title":0},"100":{"body":21,"breadcrumbs":3,"title":0},"101":{"body":10,"breadcrumbs":3,"title":0},"102":{"body":31,"breadcrumbs":2,"title":0},"103":{"body":27,"breadcrumbs":2,"title":0},"104":{"body":7,"breadcrumbs":2,"title":0},"105":{"body":17,"breadcrumbs":4,"title":1},"106":{"body":11,"breadcrumbs":2,"title":0},"107":{"body":0,"breadcrumbs":2,"title":0},"108":{"body":13,"breadcrumbs":3,"title":1},"109":{"body":4,"breadcrumbs":3,"title":1},"11":{"body":20,"breadcrumbs":0,"title":0},"110":{"body":21,"breadcrumbs":2,"title":0},"111":{"body":0,"breadcrumbs":0,"title":0},"112":{"body":21,"breadcrumbs":2,"title":0},"113":{"body":4,"breadcrumbs":3,"title":1},"114":{"body":2,"breadcrumbs":3,"title":1},"115":{"body":4,"breadcrumbs":3,"title":1},"116":{"body":9,"breadcrumbs":3,"title":1},"117":{"body":1,"breadcrumbs":3,"title":1},"118":{"body":10,"breadcrumbs":3,"title":1},"119":{"body":5,"breadcrumbs":3,"title":1},"12":{"body":20,"breadcrumbs":1,"title":1},"120":{"body":1,"breadcrumbs":3,"title":1},"121":{"body":3,"breadcrumbs":3,"title":1},"122":{"body":5,"breadcrumbs":3,"title":1},"123":{"body":5,"breadcrumbs":3,"title":1},"124":{"body":12,"breadcrumbs":3,"title":1},"125":{"body":8,"breadcrumbs":3,"title":1},"126":{"body":6,"breadcrumbs":3,"title":1},"127":{"body":6,"breadcrumbs":3,"title":1},"128":{"body":1,"breadcrumbs":3,"title":1},"129":{"body":1,"breadcrumbs":3,"title":1},"13":{"body":20,"breadcrumbs":1,"title":1},"130":{"body":1,"breadcrumbs":3,"title":1},"131":{"body":1,"breadcrumbs":3,"title":1},"132":{"body":1,"breadcrumbs":3,"title":1},"133":{"body":25,"breadcrumbs":2,"title":0},"134":{"body":26,"breadcrumbs":2,"title":0},"135":{"body":20,"breadcrumbs":2,"title":0},"136":{"body":54,"breadcrumbs":2,"title":0},"137":{"body":39,"breadcrumbs":2,"title":0},"138":{"body":16,"breadcrumbs":2,"title":0},"139":{"body":1,"breadcrumbs":2,"title":0},"14":{"body":17,"breadcrumbs":1,"title":1},"140":{"body":36,"breadcrumbs":2,"title":0},"141":{"body":25,"breadcrumbs":2,"title":0},"142":{"body":24,"breadcrumbs":2,"title":0},"143":{"body":7,"breadcrumbs":3,"title":1},"144":{"body":9,"breadcrumbs":2,"title":0},"145":{"body":9,"breadcrumbs":2,"title":0},"146":{"body":171,"breadcrumbs":3,"title":1},"147":{"body":14,"breadcrumbs":2,"title":0},"148":{"body":5,"breadcrumbs":3,"title":1},"149":{"body":4,"breadcrumbs":3,"title":1},"15":{"body":28,"breadcrumbs":1,"title":1},"150":{"body":4,"breadcrumbs":3,"title":1},"151":{"body":7,"breadcrumbs":3,"title":1},"152":{"body":4,"breadcrumbs":2,"title":0},"153":{"body":2,"breadcrumbs":2,"title":0},"154":{"body":0,"breadcrumbs":3,"title":1},"155":{"body":10,"breadcrumbs":2,"title":0},"156":{"body":72,"breadcrumbs":2,"title":0},"157":{"body":56,"breadcrumbs":6,"title":2},"158":{"body":0,"breadcrumbs":0,"title":0},"159":{"body":1989,"breadcrumbs":1,"title":0},"16":{"body":28,"breadcrumbs":2,"title":2},"160":{"body":0,"breadcrumbs":1,"title":0},"161":{"body":0,"breadcrumbs":2,"title":1},"162":{"body":0,"breadcrumbs":2,"title":1},"163":{"body":0,"breadcrumbs":2,"title":1},"164":{"body":0,"breadcrumbs":2,"title":1},"165":{"body":0,"breadcrumbs":2,"title":1},"166":{"body":0,"breadcrumbs":2,"title":1},"167":{"body":0,"breadcrumbs":2,"title":1},"168":{"body":0,"breadcrumbs":2,"title":1},"169":{"body":0,"breadcrumbs":2,"title":1},"17":{"body":18,"breadcrumbs":1,"title":1},"170":{"body":0,"breadcrumbs":2,"title":1},"171":{"body":0,"breadcrumbs":2,"title":1},"172":{"body":0,"breadcrumbs":2,"title":1},"173":{"body":0,"breadcrumbs":2,"title":1},"174":{"body":0,"breadcrumbs":2,"title":1},"175":{"body":0,"breadcrumbs":2,"title":1},"176":{"body":0,"breadcrumbs":2,"title":1},"177":{"body":0,"breadcrumbs":2,"title":1},"178":{"body":0,"breadcrumbs":2,"title":1},"179":{"body":0,"breadcrumbs":2,"title":1},"18":{"body":22,"breadcrumbs":0,"title":0},"180":{"body":0,"breadcrumbs":2,"title":1},"181":{"body":0,"breadcrumbs":2,"title":1},"182":{"body":0,"breadcrumbs":2,"title":1},"183":{"body":0,"breadcrumbs":2,"title":1},"184":{"body":0,"breadcrumbs":2,"title":1},"185":{"body":0,"breadcrumbs":2,"title":1},"19":{"body":7,"breadcrumbs":0,"title":0},"2":{"body":0,"breadcrumbs":0,"title":0},"20":{"body":14,"breadcrumbs":0,"title":0},"21":{"body":2,"breadcrumbs":0,"title":0},"22":{"body":3,"breadcrumbs":2,"title":0},"23":{"body":3,"breadcrumbs":2,"title":0},"24":{"body":0,"breadcrumbs":2,"title":0},"25":{"body":0,"breadcrumbs":2,"title":0},"26":{"body":6,"breadcrumbs":3,"title":1},"27":{"body":5,"breadcrumbs":2,"title":0},"28":{"body":11,"breadcrumbs":5,"title":3},"29":{"body":7,"breadcrumbs":4,"title":2},"3":{"body":0,"breadcrumbs":0,"title":0},"30":{"body":2,"breadcrumbs":2,"title":0},"31":{"body":0,"breadcrumbs":6,"title":2},"32":{"body":25,"breadcrumbs":4,"title":0},"33":{"body":20,"breadcrumbs":4,"title":0},"34":{"body":44,"breadcrumbs":4,"title":0},"35":{"body":20,"breadcrumbs":0,"title":0},"36":{"body":66,"breadcrumbs":2,"title":0},"37":{"body":57,"breadcrumbs":2,"title":0},"38":{"body":56,"breadcrumbs":2,"title":0},"39":{"body":24,"breadcrumbs":2,"title":0},"4":{"body":7,"breadcrumbs":0,"title":0},"40":{"body":1,"breadcrumbs":0,"title":0},"41":{"body":12,"breadcrumbs":2,"title":0},"42":{"body":1,"breadcrumbs":2,"title":0},"43":{"body":3,"breadcrumbs":2,"title":0},"44":{"body":2,"breadcrumbs":2,"title":0},"45":{"body":0,"breadcrumbs":2,"title":0},"46":{"body":0,"breadcrumbs":2,"title":0},"47":{"body":7,"breadcrumbs":2,"title":0},"48":{"body":3,"breadcrumbs":2,"title":0},"49":{"body":68,"breadcrumbs":4,"title":0},"5":{"body":3,"breadcrumbs":0,"title":0},"50":{"body":0,"breadcrumbs":4,"title":0},"51":{"body":14,"breadcrumbs":4,"title":0},"52":{"body":10,"breadcrumbs":4,"title":0},"53":{"body":18,"breadcrumbs":4,"title":0},"54":{"body":18,"breadcrumbs":4,"title":0},"55":{"body":5,"breadcrumbs":4,"title":0},"56":{"body":24,"breadcrumbs":4,"title":0},"57":{"body":0,"breadcrumbs":2,"title":0},"58":{"body":0,"breadcrumbs":4,"title":0},"59":{"body":18,"breadcrumbs":5,"title":1},"6":{"body":2,"breadcrumbs":0,"title":0},"60":{"body":18,"breadcrumbs":5,"title":1},"61":{"body":18,"breadcrumbs":4,"title":0},"62":{"body":19,"breadcrumbs":4,"title":0},"63":{"body":6,"breadcrumbs":4,"title":0},"64":{"body":17,"breadcrumbs":5,"title":1},"65":{"body":0,"breadcrumbs":4,"title":0},"66":{"body":22,"breadcrumbs":4,"title":0},"67":{"body":17,"breadcrumbs":4,"title":0},"68":{"body":24,"breadcrumbs":4,"title":0},"69":{"body":13,"breadcrumbs":4,"title":0},"7":{"body":15,"breadcrumbs":0,"title":0},"70":{"body":85,"breadcrumbs":4,"title":0},"71":{"body":0,"breadcrumbs":2,"title":0},"72":{"body":1,"breadcrumbs":3,"title":0},"73":{"body":13,"breadcrumbs":3,"title":0},"74":{"body":20,"breadcrumbs":3,"title":0},"75":{"body":14,"breadcrumbs":3,"title":0},"76":{"body":26,"breadcrumbs":5,"title":1},"77":{"body":16,"breadcrumbs":3,"title":0},"78":{"body":9,"breadcrumbs":3,"title":0},"79":{"body":18,"breadcrumbs":7,"title":2},"8":{"body":4,"breadcrumbs":0,"title":0},"80":{"body":29,"breadcrumbs":7,"title":2},"81":{"body":2,"breadcrumbs":2,"title":0},"82":{"body":34,"breadcrumbs":3,"title":0},"83":{"body":5,"breadcrumbs":3,"title":0},"84":{"body":16,"breadcrumbs":3,"title":0},"85":{"body":26,"breadcrumbs":5,"title":1},"86":{"body":10,"breadcrumbs":3,"title":0},"87":{"body":9,"breadcrumbs":5,"title":1},"88":{"body":35,"breadcrumbs":3,"title":0},"89":{"body":0,"breadcrumbs":2,"title":0},"9":{"body":20,"breadcrumbs":0,"title":0},"90":{"body":21,"breadcrumbs":3,"title":0},"91":{"body":11,"breadcrumbs":3,"title":0},"92":{"body":31,"breadcrumbs":3,"title":0},"93":{"body":11,"breadcrumbs":3,"title":0},"94":{"body":7,"breadcrumbs":5,"title":1},"95":{"body":24,"breadcrumbs":3,"title":0},"96":{"body":8,"breadcrumbs":7,"title":2},"97":{"body":0,"breadcrumbs":3,"title":0},"98":{"body":13,"breadcrumbs":4,"title":1},"99":{"body":14,"breadcrumbs":3,"title":0}},"docs":{"0":{"body":"Veryl Veryl は SystemVerilog をベースに設計されたハードウェア記述言語であり、以下のような特徴があります。","breadcrumbs":"概要 » ハードウェア記述言語 Veryl","id":"0","title":"ハードウェア記述言語 Veryl"},"1":{"body":"Verylは、SystemVerilogの経験者にとって親しみやすい基本構文に基づきながら、論理設計に最適化された構文を採用しています。この最適化には、たとえば合成可能性の保証やシミュレーション結果の一致の保証、頻出する定型文を簡素化する多数の構文などの提供が含まれます。このアプローチにより、学習の容易さ、設計プロセスの信頼性と効率の向上、およびコードの記述の容易さが実現されます。","breadcrumbs":"概要 » 最適化された構文","id":"1","title":"最適化された構文"},"10":{"body":"クロックの極性やリセットの極性と同期性を構文上指定する必要はなく、ビルド時の設定で指定することができます。これにより同じVerylのコードからASIC向けの負極性・非同期リセットとFPGA向けの正極性・同期リセットのそれぞれのコードを生成することができます。 SystemVerilog\nVeryl always_ff @ (posedge i_clk or negedge i_rst_n) begin if (!i_rst_n) begin end else begin end\nend always_ff (i_clk, i_rst) { if_reset { } else { }\n}","breadcrumbs":"特徴 » クロックとリセットの抽象化","id":"10","title":"クロックとリセットの抽象化"},"100":{"body":"inst キーワードはモジュールやインターフェースのインスタンス化を表します。インスタンスの名前は inst の後に、インスタンスの型は : の後に書きます。#() でパラメータオーバーライドを、() でポート接続を表します。 module ModuleA #( param paramA: u32 = 1,\n) { var a: logic<10>; var b: logic<10>; inst instB: ModuleB #( paramA , // 名前によるパラメータ代入 paramB: 10, ) ( a , // 名前によるポート接続 bb: b, );\n}","breadcrumbs":"Language Reference » Declaration » インスタンス » インスタンス","id":"100","title":"インスタンス"},"101":{"body":"{} ブロックにラベルを付けることができます。そのような名前付きブロックは独立した名前空間を持ちます。 module ModuleA { :labelA { var _a: logic<10>; } :labelB { var _a: logic<10>; }\n}","breadcrumbs":"Language Reference » Declaration » 名前付きブロック » 名前付きブロック","id":"101","title":"名前付きブロック"},"102":{"body":"モジュールはソースコードの最上位コンポーネントの1つです。モジュールはオーバーライド可能なパラメータ、接続ポート、内部ロジックを持ちます。 オーバーライド可能なパラメータは #() 内で宣言できます。それぞれのパラメータ宣言は param キーワードで始まり、識別子、:、パラメータの型、デフォルト値で構成されます。 接続ポートは () 内で宣言できます。それぞれのポート宣言は識別子、:、ポートの方向、ポートの型で構成されます。利用可能なポート方向は以下の通りです。 input:入力ポート output:出力ポート inout:双方向ポート modport:インターフェースのmodport module ModuleA #( param ParamA: u32 = 0, param ParamB: u32 = 0,\n) ( a: input logic, b: input logic, c: input logic, x: output logic,\n) { always_comb { if c { x = a; } else { x = b; } }\n}","breadcrumbs":"Language Reference » モジュール » モジュール","id":"102","title":"モジュール"},"103":{"body":"インターフェースはソースコードの最上位コンポーネントの1つです。インターフェースはオーバーライド可能なパラメータ、インターフェース定義を持ちます。 オーバーライド可能なパラメータについてはモジュールと同じです。 インターフェース定義では modport を宣言することができます。modport はモジュールのポート宣言で、ポートを束ねて接続するために使うことができます。 interface InterfaceA #( param ParamA: u32 = 0, param ParamB: u32 = 0,\n) { var a: logic; var b: logic; modport master { a: output, b: input , } modport slave { b: input , a: output, }\n}","breadcrumbs":"Language Reference » インターフェース » インターフェース","id":"103","title":"インターフェース"},"104":{"body":"パッケージはソースコードの最上位コンポーネントの1つです。パッケージはパラメータや関数などいくつかの宣言をまとめることができます。 パッケージ内の要素にアクセスするには、:: 記号を使って PackageA::ParamA のようにします。 package PackageA { local ParamA: u32 = 0;\n}","breadcrumbs":"Language Reference » パッケージ » パッケージ","id":"104","title":"パッケージ"},"105":{"body":"SystemVerilogの要素にアクセスする場合は $sv 名前空間を使えます。例えば、SystemVerilogソースコードの \"ModuleA\" は $sv::ModuleA です。Veryl はこれらの要素が実際に存在するかどうかは確認しません。 module ModuleA { let _a: logic = $sv::PackageA::ParamA; inst b: $sv::ModuleB (); inst c: $sv::InterfaceC ();\n}","breadcrumbs":"Language Reference » SystemVerilogとの相互運用 » SystemVerilogとの相互運用","id":"105","title":"SystemVerilogとの相互運用"},"106":{"body":"デフォルトではプロジェクトのトップレベルアイテム(モジュール、インターフェース、パッケージ)はプライベートです。プライベートとは他のプロジェクトから参照できないことを意味します。 pub キーワードによって他のプロジェクトから見えるように指定することができます。veryl doc コマンドはパブリックなアイテムの ドキュメント のみを生成します。 pub module ModuleA {\n} pub interface InterfaceA {\n} pub package PackageA {\n}","breadcrumbs":"Language Reference » 可視性 » 可視性","id":"106","title":"可視性"},"107":{"body":"","breadcrumbs":"Language Reference » 他言語組み込み » 他言語組み込み","id":"107","title":"他言語組み込み"},"108":{"body":"embed 宣言により他言語をコードに埋め込むことができます。embed 宣言の第一引数は埋め込み方法です。以下の方法がサポートされています。 inline: コードをそのまま展開する コードブロックは lang{{{ で始まり、}}} で終わります。以下の lang 指示子がサポートされています。 sv: SystemVerilog embed (inline) sv{{{ module ModuleSv; endmodule\n}}}","breadcrumbs":"Language Reference » 他言語組み込み » embed 宣言","id":"108","title":"embed 宣言"},"109":{"body":"include 宣言により他言語のファイルを含めることができます。include 宣言の第一引数は embed 宣言と同じです。第二引数はソースコードからの相対ファイルパスです。 include(inline, \"module.sv\");","breadcrumbs":"Language Reference » 他言語組み込み » include 宣言","id":"109","title":"include 宣言"},"11":{"body":"ドキュメンテーションコメントとしてモジュールの説明を書いておくとドキュメントを自動生成することができます。単なるテキストだけでなく、マークダウン形式や WaveDrom による波形記述を使用することができます。 SystemVerilog\nVeryl // コメント\nmodule ModuleA;\nendmodule /// Documentation comment written by Markdown\n///\n/// * list\n/// * list\n/// /// ```wavedrom\n/// { signal: [{ name: \"Alfa\", wave: \"01.zx=ud.23.456789\" }] }\n/// ```\nmodule ModuleA {\n}","breadcrumbs":"特徴 » ドキュメンテーションコメント","id":"11","title":"ドキュメンテーションコメント"},"110":{"body":"組み込みテストは #[test(test_name)] アトリビュートでマークすることができます。マークされたブロックはテストとして認識され、 veryl test コマンドによって実行されます。ブロックのトップレベルモジュールはテスト名と同じでなければなりません。 以下の例では SystemVerilog のソースコードを embed 宣言で埋め込み、テストとしてマークしています。 #[test(test1)]\nembed (inline) sv{{{ module test1; initial begin assert (0) else $error(\"error\"); end endmodule\n}}} veryl test で使用される RTLシミュレータについては シミュレータ を参照してください。","breadcrumbs":"Language Reference » 組み込みテスト » 組み込みテスト","id":"110","title":"組み込みテスト"},"111":{"body":"この章ではプロジェクト設定や開発ツールなど開発環境について説明します。","breadcrumbs":"開発環境 » 開発環境","id":"111","title":"開発環境"},"112":{"body":"[project] --- プロジェクト定義 name --- プロジェクトの名前 version --- プロジェクトのバージョン authors --- プロジェクトの作者 description --- プロジェクトの説明 license --- プロジェクトのライセンス repository --- プロジェクトのリポジトリの URL [build] --- ビルド設定 clock_type --- クロックタイプ reset_type --- リセットタイプ filelist_type --- ファイルリストのタイプ target --- 出力方法 implicit_parameter_types --- 暗黙のパラメータ型を有効にするかどうか omit_project_prefix --- プロジェクト名のプレフィックスを省略するかどうか strip_comments --- コメントを削除するかどうか [format] --- フォーマット設定 [lint] --- リント設定 [test] --- テスト設定 [publish] --- 公開設定 [dependencies] --- ライブラリの依存関係","breadcrumbs":"Development Environment » プロジェクト設定 » プロジェクト設定","id":"112","title":"プロジェクト設定"},"113":{"body":"Veryl.toml の最初のセクションは [project] です。name と version は必須です。","breadcrumbs":"Development Environment » プロジェクト設定 » [project] セクション","id":"113","title":"[project] セクション"},"114":{"body":"プロジェクト名は生成されるコードのプレフィックスに使われます。そのためプロジェクト名はアルファベットか _ で始まり、英数字と_ しか使ってはいけません。","breadcrumbs":"Development Environment » プロジェクト設定 » name フィールド","id":"114","title":"name フィールド"},"115":{"body":"プロジェクトのバージョンは セマンティックバージョニング に従います。バージョンは以下の3つの数字からなります。 メジャー -- 互換性のない変更時に上げる マイナー -- 互換性のある機能追加時に上げる バッチ -- 互換性のあるバグ修正時に上げる [project]\nversion = \"0.1.0\"","breadcrumbs":"Development Environment » プロジェクト設定 » version フィールド","id":"115","title":"version フィールド"},"116":{"body":"オプションの authors フィールドにはこのプロジェクトの作者である人や組織を配列にリストアップします。配列内の各文字列のフォーマットは自由です。名前のみ、Eメールアドレスのみ、名前と括弧で囲んだEメールアドレスといった形式がよく使われます。 [project]\nauthors = [\"Fnu Lnu\", \"anonymous@example.com\", \"Fnu Lnu \"]","breadcrumbs":"Development Environment » プロジェクト設定 » authors フィールド","id":"116","title":"authors フィールド"},"117":{"body":"description はプロジェクトの短い説明です。マークダウンではなくプレーンテキスト形式で書きます。","breadcrumbs":"Development Environment » プロジェクト設定 » description フィールド","id":"117","title":"description フィールド"},"118":{"body":"license フィールドはこのプロジェクトがどのライセンスで公開されているかを指定します。指定する文字列は SPDX 2.3 license expression に従ってください。 [project]\nlicense = \"MIT OR Apache-2.0\"","breadcrumbs":"Development Environment » プロジェクト設定 » license フィールド","id":"118","title":"license フィールド"},"119":{"body":"repository フィールドはプロジェクトのソースリポジトリへのURLです。 [project]\nrepository = \"https://github.com/veryl-lang/veryl\"","breadcrumbs":"Development Environment » プロジェクト設定 » repository フィールド","id":"119","title":"repository フィールド"},"12":{"body":"ノンブロッキング専用の代入演算子はなく、always_ff 内ではノンブロッキング代入が、 always_comb 内ではブロッキング代入が推論されます。そのため always_ff 内でも always_comb 内と同様に様々な複合代入演算子を使用することができます。 SystemVerilog\nVeryl always_ff @ (posedge i_clk) begin if (a) begin x <= x + 1; end\nend always_ff (i_clk) { if a { x += 1; }\n}","breadcrumbs":"特徴 » always_ff での複合代入演算子","id":"12","title":"always_ff での複合代入演算子"},"120":{"body":"[build] セクションはコード生成の設定です。","breadcrumbs":"Development Environment » プロジェクト設定 » [build] セクション","id":"120","title":"[build] セクション"},"121":{"body":"clock_type フィールドはフリップフロップを駆動するクロックエッジを指定します。 posedge -- 立ち上がりエッジ negedge -- 立ち下がりエッジ","breadcrumbs":"Development Environment » プロジェクト設定 » clock_type フィールド","id":"121","title":"clock_type フィールド"},"122":{"body":"reset_type フィールドはリセットの極性と同期性を指定します。 async_low -- 非同期・負極性 async_high -- 非同期・正極性 sync_low -- 同期・負極性 sync_high -- 同期・正極性","breadcrumbs":"Development Environment » プロジェクト設定 » reset_type フィールド","id":"122","title":"reset_type フィールド"},"123":{"body":"filelist_type フィールドはファイルリストのフォーマットを指定します。 absolute -- プレーンテキスト形式の絶対パスのリスト relative -- プレーンテキスト形式の相対パスのリスト flgen -- flgen 形式のファイルリスト","breadcrumbs":"Development Environment » プロジェクト設定 » filelist_type フィールド","id":"123","title":"filelist_type フィールド"},"124":{"body":"target フィールドはコードの生成先を指定します。 source -- ソースコードと同じディレクトリ directory -- 特定のディレクトリ directory を指定する場合は、ターゲットディレクトリを path キーで指定します。 [build]\ntarget = {type = \"directory\", path = \"[dst dir]\"}","breadcrumbs":"Development Environment » プロジェクト設定 » target フィールド","id":"124","title":"target フィールド"},"125":{"body":"implicit_parameter_types フィールドは生成コードの parameter 宣言で省略する型をリストアップします。いくつかのEDAツールでは特定の型(例えば string)を parameter 宣言で使うことができないためです。例えば string を指定する場合は以下のようにします。 [build]\nimplicit_parameter_types = [\"string\"]","breadcrumbs":"Development Environment » プロジェクト設定 » implicit_parameter_types フィールド","id":"125","title":"implicit_parameter_types フィールド"},"126":{"body":"omit_project_prefix が true のとき、モジュール・インターフェース・パッケージ名のプロジェクトプレフィックスは省略されます。この値はデフォルトで false です。 [build]\nomit_project_prefix = true","breadcrumbs":"Development Environment » プロジェクト設定 » omit_project_prefix フィールド","id":"126","title":"omit_project_prefix フィールド"},"127":{"body":"strip_comments が true のとき、コメント出力は省略されます。この値はデフォルトで false です。 [build]\nstrip_comments = true","breadcrumbs":"Development Environment » プロジェクト設定 » strip_comments フィールド","id":"127","title":"strip_comments フィールド"},"128":{"body":"[format] セクションはコードフォーマッターの設定です。詳細は こちら 。","breadcrumbs":"Development Environment » プロジェクト設定 » [format] セクション","id":"128","title":"[format] セクション"},"129":{"body":"[lint] セクションはリンタの設定です。詳細は こちら 。","breadcrumbs":"Development Environment » プロジェクト設定 » [lint] セクション","id":"129","title":"[lint] セクション"},"13":{"body":"enumのバリアントはenum毎に独立した名前空間を持っており意図しない名前の衝突を防ぐことができます。 SystemVerilog\nVeryl typedef enum logic[1:0] { MemberA, MemberB\n} EnumA; EnumA a;\nassign a = MemberA; enum EnumA: logic<2> { MemberA, MemberB\n} var a: EnumA;\nassign a = EnumA::MemberA;","breadcrumbs":"特徴 » 独立した名前空間を持つenumバリアント","id":"13","title":"独立した名前空間を持つenumバリアント"},"130":{"body":"[test] セクションはRTLシミュレータによるテストの設定です。詳細は こちら 。","breadcrumbs":"Development Environment » プロジェクト設定 » [test] セクション","id":"130","title":"[test] セクション"},"131":{"body":"[publish] セクションはプロジェクト公開の設定です。詳細は こちら 。","breadcrumbs":"Development Environment » プロジェクト設定 » [publish] セクション","id":"131","title":"[publish] セクション"},"132":{"body":"[dependencies] セクションはライブラリの依存関係です。詳細は こちら 。","breadcrumbs":"Development Environment » プロジェクト設定 » [dependencies] セクション","id":"132","title":"[dependencies] セクション"},"133":{"body":"他の Veryl プロジェクトへの依存関係をプロジェクトに追加したい場合、Veryl.toml に [dependencies] セクションを追加します。エントリの左辺は依存関係へのパス、右辺はバージョンです。 [dependencies]\n\"https://github.com/veryl-lang/sample\" = \"0.1.0\" デフォルトでは依存関係の名前空間はそのプロジェクト名と同じです。もし名前空間を指定したい場合は、 name フィールドを使います。 [dependencies]\n\"https://github.com/veryl-lang/sample\" = {version = \"0.1.0\", name = \"veryl_sample_alt\"} 同じ依存関係の複数のバージョンを使う場合は、以下のようにそれぞれの名前を指定できます。 [dependencies]\n\"https://github.com/veryl-lang/sample\" = [ {version = \"0.1.0\", name = \"veryl_sample1\"}, {version = \"0.2.0\", name = \"veryl_sample2\"},\n]","breadcrumbs":"Development Environment » 依存関係 » 依存関係","id":"133","title":"依存関係"},"134":{"body":"Veryl.toml に依存関係を追加したあとは、その依存関係の module、interface、packageを使うことができます。以下は veryl_sample の依存関係に含まれる delay モジュールを使った例です。 module ModuleA ( i_clk : input logic, i_rst_n: input logic, i_d : input logic, o_d : output logic,\n) { inst u_delay: veryl_sample::delay ( i_clk , i_rst_n, i_d , o_d , );\n} 注:上記のコードのプレイボタンの結果は依存関係解決を行わないので正確ではありません。実際のモジュール名は veryl_samlle_delay になります。","breadcrumbs":"Development Environment » 依存関係 » 依存関係の使用","id":"134","title":"依存関係の使用"},"135":{"body":"[dependencies] セクションの version フィールドはバージョン要求を示します。例えば、version = \"0.1.0\" は 0.1.0 と互換性のある最新バージョンを意味します。互換性は セマンティックバージョニング で判定されます。バージョンは以下の3つの部分からなります。 メジャー バージョンはAPI非互換な変更 マイナー バージョンは互換性のある機能追加 パッチ バージョンは互換性のあるバグ修正 もし メジャー バージョンが 0 なら、マイナー が非互換変更と解釈されます。 バージョン 0.1.0、0.1.1、0.2.0があった場合、0.1.1 が選択されます。これは以下のように決定されます。 0.1.0 は 0.1.0 と互換性がある 0.1.1 は 0.1.0 と互換性がある 0.2.0 は 0.1.0 と互換性がない 0.1.1 は互換性のある最新バージョン version フィールドは =0.1.0 のような指定も可能です。詳細は Rust のバージョン要求についてのドキュメントを参照してください。 Specifying Dependencies .","breadcrumbs":"Development Environment » 依存関係 » バージョン要求","id":"135","title":"バージョン要求"},"136":{"body":"プロジェクトを公開するには veryl publish コマンドを使います。公開とはバージョン番号とgitのリビジョンを紐づけることです。 $ veryl publish\n[INFO ] Publishing release (0.2.1 @ 297bc6b24c5ceca9e648c3ea5e01011c67d7efe7)\n[INFO ] Writing metadata ([path to project]/Veryl.pub) veryl publish は以下のように公開されたバージョンの情報を含んだ Veryl.pub というファイルを生成します。 [[releases]]\nversion = \"0.2.1\"\nrevision = \"297bc6b24c5ceca9e648c3ea5e01011c67d7efe7\" Veryl.pub と生成した後、gitのadd、commit、pushを行えば公開手続きは完了です。gitブランチはデフォルトブランチでなければなりません。これは Veryl が Veryl.pub をデフォルトブランチから探すためです。 $ git add Veryl.pub\n$ git commit -m \"Publish\"\n$ git push Veryl.toml の [publish] セクションに publish_commit を設定して自動コミットを有効にすれば、gitのaddとcommitが自動で実行されます。 $ veryl publish\n[INFO ] Publishing release (0.2.1 @ 297bc6b24c5ceca9e648c3ea5e01011c67d7efe7)\n[INFO ] Writing metadata ([path to project]/Veryl.pub)\n[INFO ] Committing metadata ([path to project]/Veryl.pub)","breadcrumbs":"Development Environment » プロジェクトを公開する » プロジェクトを公開する","id":"136","title":"プロジェクトを公開する"},"137":{"body":"--bump オプションを使うと公開と同時にバージョンを上げることもできます。公開と同様に、Veryl.toml の[publish] セクションに bump_commit を設定すれば自動でcommitされます。 $ veryl publish --bump patch\n[INFO ] Bumping version (0.2.1 -> 0.2.2)\n[INFO ] Updating version field ([path to project]/Veryl.toml)\n[INFO ] Committing metadata ([path to project]/Veryl.toml)\n[INFO ] Publishing release (0.2.2 @ 159dee3b3f93d3a999d8bac4c6d26d51476b178a)\n[INFO ] Writing metadata ([path to project]/Veryl.pub)\n[INFO ] Committing metadata ([path to project]/Veryl.pub)","breadcrumbs":"Development Environment » プロジェクトを公開する » バージョンを上げる","id":"137","title":"バージョンを上げる"},"138":{"body":"[publish]\nbump_commit = true\nbump_commit_message = \"Bump\" 設定 設定値 デフォルト 説明 bump_commit ブーリアン false バージョンアップ後の自動コミット publish_commit ブーリアン false 公開後の自動コミット bump_commit_mesasge 文字列 \"chore: Bump version\" バージョンアップ後のコミットメッセージ publish_commit_mesasge 文字列 \"chore: Publish\" 公開後のコミットメッセージ","breadcrumbs":"Development Environment » プロジェクトを公開する » 設定","id":"138","title":"設定"},"139":{"body":"Veryl は任意のディレクトリ構成をサポートしています。これは独立したプロジェクトと他のプロジェクトに組み込まれたプロジェクトでは最適なディレクトリ構成が異なるためです。 この節ではいくつかのディレクトリ構成パターンを示します。","breadcrumbs":"Development Environment » ディレクトリ構成 » ディレクトリ構成","id":"139","title":"ディレクトリ構成"},"14":{"body":"ビット連結における繰り返し記述として明示的な repeat 記法を採用し、 複雑な {} の組み合わせより可読性が向上しています。 SystemVerilog\nVeryl logic [31:0] a;\nassign a = {{2{X[9:0]}}, {12{Y}}}; var a: logic<32>;\nassign a = {X[9:0] repeat 2, Y repeat 12};","breadcrumbs":"特徴 » ビット連結における repeat","id":"14","title":"ビット連結における repeat"},"140":{"body":"このパターンでは全てのソースコードは src ディレクトリに配置されます。src 以下のサブディレクトリの構成は自由です。 $ tree\n.\n|-- src\n| |-- module_a.veryl\n| `-- module_b\n| |-- module_b.veryl\n| `-- module_c.veryl\n`-- Veryl.toml 2 directories, 4 files Veryl は全ての *.veryl ファイルを収集し、デフォルトではソースと同じディレクトリにコードを生成します。この挙動は以下の設定で明示することもできます。 [build]\ntarget = \"source\" veryl build を実行するとディレクトリ構成は以下のようになります。 $ tree\n.\n|-- dependencies\n|-- prj.f\n|-- src\n| |-- module_a.sv\n| |-- module_a.veryl\n| `-- module_b\n| |-- module_b.sv\n| |-- module_b.veryl\n| |-- module_c.sv\n| `-- module_c.veryl\n`-- Veryl.toml 3 directories, 8 files","breadcrumbs":"Development Environment » ディレクトリ構成 » 単一のソースディレクトリ","id":"140","title":"単一のソースディレクトリ"},"141":{"body":"生成されたコードを1つのディレクトリに入れたい場合、Veryl.toml の [build] セクションで target を以下のように設定します。 [build]\ntarget = {type = \"directory\", path = \"target\"} ディレクトリ構成は以下のようになります。 $ tree\n.\n|-- dependencies\n|-- prj.f\n|-- src\n| |-- module_a.veryl\n| `-- module_b\n| |-- module_b.veryl\n| `-- module_c.veryl\n|-- target\n| |-- module_a.sv\n| |-- module_b.sv\n| `-- module_c.sv\n`-- Veryl.toml 4 directories, 8 files","breadcrumbs":"Development Environment » ディレクトリ構成 » 単一のソースとターゲットディレクトリ","id":"141","title":"単一のソースとターゲットディレクトリ"},"142":{"body":"既存の SystemVerilog プロジェクトに Veryl のプロジェクトを組み込む場合、以下のような構成にすることもできます。 $ tree\n.\n|-- dependencies\n|-- module_a\n| |-- module_a.sv\n| `-- module_a.veryl\n|-- module_b\n| |-- module_b.sv\n| |-- module_b.veryl\n| |-- module_c.sv\n| `-- module_c.veryl\n|-- prj.f\n|-- sv_module_x\n| `-- sv_module_x.sv\n|-- sv_module_y\n| `-- sv_module_y.sv\n`-- Veryl.toml 5 directories, 10 files 生成された prj.f は生成されたソースコードを全てリストアップしているので、既存の SystemVerilog ファイルリストと一緒に使うことができます。","breadcrumbs":"Development Environment » ディレクトリ構成 » マルチソースディレクトリ","id":"142","title":"マルチソースディレクトリ"},"143":{"body":"Veryl はデフォルトの .gitignore を提供しません。これはプロジェクト毎にどのファイルを無視する必要があるかが変わるためです。 .gitignore の候補としては以下が考えられます。 dependencies/ target/ *.sv *.f","breadcrumbs":"Development Environment » ディレクトリ構成 » .gitignore について","id":"143","title":".gitignore について"},"144":{"body":"veryl fmt コマンドでソースコードをフォーマットできます。あるいは言語サーバの textDocument/formatting 要求によるフォーマットにも対応しています。 設定可能な項目は以下の通りです。これは Veryl.toml の [format] セクションで指定できます。 [format]\nindent_width = 4 設定 設定値 説明 indent_width 整数 インデントのスペース幅","breadcrumbs":"Development Environment » フォーマッタ » フォーマッタ","id":"144","title":"フォーマッタ"},"145":{"body":"veryl check あるいは veryl build でリントチェックができます。あるいは言語サーバはリアルタイムでのチェックを行います。 設定可能な項目は以下の通りです。これは Veryl.toml の [lint] セクションで指定できます。 [lint.naming]\ncase_enum = \"snake\"","breadcrumbs":"Development Environment » リンタ » リンタ","id":"145","title":"リンタ"},"146":{"body":"このセクションは命名規則の設定です。 設定 設定値 説明 case_enum ケースタイプ [1] enum のケーススタイル case_function ケースタイプ [1] function のケーススタイル case_instance ケースタイプ [1] インスタンスのケーススタイル case_interface ケースタイプ [1] interface のケーススタイル case_modport ケースタイプ [1] modport のケーススタイル case_module ケースタイプ [1] module のケーススタイル case_package ケースタイプ [1] package のケーススタイル case_parameter ケースタイプ [1] parameter のケーススタイル case_port_inout ケースタイプ [1] inout ポートのケーススタイル case_port_input ケースタイプ [1] input ポートのケーススタイル case_port_modport ケースタイプ [1] modport ポートのケーススタイル case_port_output ケースタイプ [1] output ポートのケーススタイル case_reg ケースタイプ [1] レジスタ変数 [2] のケーススタイル case_struct ケースタイプ [1] struct のケーススタイル case_wire ケースタイプ [1] ワイヤ変数 [3] のケーススタイル prefix_enum 文字列 enum のプレフィックス prefix_function 文字列 function のプレフィックス prefix_instance 文字列 インスタンスのプレフィックス prefix_interface 文字列 interface のプレフィックス prefix_modport 文字列 modport のプレフィックス prefix_module 文字列 module のプレフィックス prefix_package 文字列 package のプレフィックス prefix_parameter 文字列 parameter のプレフィックス prefix_port_inout 文字列 inout ポートのプレフィックス prefix_port_input 文字列 input ポートのプレフィックス prefix_port_modport 文字列 modport ポートのプレフィックス prefix_port_output 文字列 output ポートのプレフィックス prefix_reg 文字列 レジスタ変数 [2] のプレフィックス prefix_struct 文字列 struct のプレフィックス prefix_wire 文字列 ワイヤ変数 [3] のプレフィックス re_forbidden_enum 正規表現 [4] enum の禁止正規表現 re_forbidden_function 正規表現 [4] function の禁止正規表現 re_forbidden_instance 正規表現 [4] インスタンスの禁止正規表現 re_forbidden_interface 正規表現 [4] interface の禁止正規表現 re_forbidden_modport 正規表現 [4] modport の禁止正規表現 re_forbidden_module 正規表現 [4] module の禁止正規表現 re_forbidden_package 正規表現 [4] package の禁止正規表現 re_forbidden_parameter 正規表現 [4] parameter の禁止正規表現 re_forbidden_port_inout 正規表現 [4] inout ポートの禁止正規表現 re_forbidden_port_input 正規表現 [4] input ポートの禁止正規表現 re_forbidden_port_modport 正規表現 [4] modport ポートの禁止正規表現 re_forbidden_port_output 正規表現 [4] output ポートの禁止正規表現 re_forbidden_reg 正規表現 [4] レジスタ変数 [2] の禁止正規表現 re_forbidden_struct 正規表現 [4] struct の禁止正規表現 re_forbidden_wire 正規表現 [4] ワイヤ変数 [3] の禁止正規表現 re_required_enum 正規表現 [4] enum の必須正規表現 re_required_function 正規表現 [4] function の必須正規表現 re_required_instance 正規表現 [4] インスタンスの必須正規表現 re_required_interface 正規表現 [4] interface の必須正規表現 re_required_modport 正規表現 [4] modport の必須正規表現 re_required_module 正規表現 [4] module の必須正規表現 re_required_package 正規表現 [4] package の必須正規表現 re_required_parameter 正規表現 [4] parameter の必須正規表現 re_required_port_inout 正規表現 [4] inout ポートの必須正規表現 re_required_port_input 正規表現 [4] input ポートの必須正規表現 re_required_port_modport 正規表現 [4] modport ポートの必須正規表現 re_required_port_output 正規表現 [4] output ポートの必須正規表現 re_required_reg 正規表現 [4] レジスタ変数 [2] の必須正規表現 re_required_struct 正規表現 [4] struct の必須正規表現 re_required_wire 正規表現 [4] ワイヤ変数 [3] の必須正規表現 設定可能な値は以下です。 \"snake\" -- snake_case \"screaming_snake\" -- SCREAMING_SNAKE_CASE \"lower_camel\" -- lowerCamelCase \"upper_camel\" -- UpperCamelCase \".*\"のような正規表現です。使用可能な構文は こちら . レジスタ変数とは always_ff で代入される変数です。合成フェーズでフリップフロップにマップされます。 ワイヤ変数とは always_comb で代入される変数です。合成フェーズでワイヤにマップされます。","breadcrumbs":"Development Environment » リンタ » [lint.naming] セクション","id":"146","title":"[lint.naming] セクション"},"147":{"body":"RTLシミュレータによるテストは veryl test で実行することができます。サポートされているシミュレータは以下の通りです。 Verilator Synopsys VCS AMD Vivado Simulator Verilatorはデフォルトのシミュレータです。Veryl.tomlやコマンドラインオプションでシミュレータが指定されていない場合に使用されます。 設定可能な項目は以下の通りです。これは Veryl.toml の [test] セクションで指定できます。 [test]\nsimulator = \"vcs\"","breadcrumbs":"Development Environment » シミュレータ » シミュレータ","id":"147","title":"シミュレータ"},"148":{"body":"このセクションはテストの設定です。 設定 設定値 説明 simulator シミュレータ名 [1] デフォルトのシミュレータ 設定可能な値は以下です。 \"verilator\" \"vcs\" \"vivado\"","breadcrumbs":"Development Environment » シミュレータ » [test] セクション","id":"148","title":"[test] セクション"},"149":{"body":"このセクションはVerilatorによるテストの設定です。 設定 設定値 説明 compile_args [文字列] verilator コマンドへの追加の引数 simulate_args [文字列] シミュレーションバイナリへの追加の引数","breadcrumbs":"Development Environment » シミュレータ » [test.verilator] セクション","id":"149","title":"[test.verilator] セクション"},"15":{"body":"三項演算子の代わりに if 式と case 式を採用することで、比較するアイテム数が多い場合の可読性が向上します。 SystemVerilog\nVeryl logic a;\nassign a = X == 0 ? Y0 : X == 1 ? Y1 : X == 2 ? Y2 : Y3; var a: logic;\nassign a = case X { 0 : Y0, 1 : Y1, 2 : Y2, default: Y3,\n};","breadcrumbs":"特徴 » if / case 式","id":"15","title":"if / case 式"},"150":{"body":"このセクションはVCSによるテストの設定です。 設定 設定値 説明 compile_args [文字列] vcs コマンドへの追加の引数 simulate_args [文字列] シミュレーションバイナリへの追加の引数","breadcrumbs":"Development Environment » シミュレータ » [test.vcs] セクション","id":"150","title":"[test.vcs] セクション"},"151":{"body":"このセクションはVivadoによるテストの設定です。 設定 設定値 説明 compile_args [文字列] xvlog コマンドへの追加の引数 elaborate_args [文字列] xelab コマンドへの追加の引数 simulate_args [文字列] xsim コマンドへの追加の引数","breadcrumbs":"Development Environment » シミュレータ » [test.vivado] セクション","id":"151","title":"[test.vivado] セクション"},"152":{"body":"veryl-ls は言語サーバのバイナリです。使用するにはエディタの設定やプラグインが必要です。 設定可能な項目は以下の通りです。これは各エディタの設定から指定できます。 設定 設定値 デフォルト 説明 useOperatorCompletion ブーリアン false 演算子(例 '>:', '>>')の補完を有効にする","breadcrumbs":"Development Environment » 言語サーバ » 言語サーバ","id":"152","title":"言語サーバ"},"153":{"body":"いくつかのツールはサポートしていない SystemVerilog 構文があります。これをサポートするために、 Veryl.toml の設定でコード生成をカスタマイズすることができます。","breadcrumbs":"Development Environment » 互換性 » 互換性","id":"153","title":"互換性"},"154":{"body":"","breadcrumbs":"Development Environment » 互換性 » Vivado","id":"154","title":"Vivado"},"155":{"body":"Vivadoは string 型の parameter をサポートしていません。 parameter string a = \"A\"; その場合は implicit_parameter_types を設定してください。 [build]\nimplicit_parameter_types = [\"string\"] 設定すると生成コードは以下のようになります。 parameter a = \"A\";","breadcrumbs":"Development Environment » 互換性 » 文字列パラメータ","id":"155","title":"文字列パラメータ"},"156":{"body":"プロジェクトのドキュメントは veryl doc コマンドで生成することができます。全てのパブリックなモジュールとインターフェース、パッケージがリストアップされます。(参照 可視性 ) 詳細な説明を書きたい場合はドキュメンテーションコメントを追加することもできます。ドキュメンテーションコメントでは マークダウン 記法を使えます。 WaveDrom による波形記述もサポートされています。wavedrom コードブロック内で、WaveDromの構文を記述することができます。構文の詳細は チュートリアル を参照してください。 /// The detailed description of ModuleA\n///\n/// * list item0\n/// * list item1\n///\n/// ```wavedrom\n/// {signal: [\n/// {name: 'clk', wave: 'p.....|...'},\n/// {name: 'dat', wave: 'x.345x|=.x', data: ['head', 'body', 'tail', 'data']},\n/// {name: 'req', wave: '0.1..0|1.0'},\n/// {},\n/// {name: 'ack', wave: '1.....|01.'}\n///\n/// ]}\n/// ```\npub module ModuleA #( /// Data width param ParamA: u32 = 1, local ParamB: u32 = 1,\n) ( i_clk : input logic , /// Clock i_rst_n: input logic , /// Reset i_data : input logic, /// Data input o_data : output logic, /// Data output\n) {} 設定可能な項目は以下の通りです。これは Veryl.toml の [doc] セクションで指定できます。 [doc]\npath = \"document\" 設定 設定値 デフォルト 説明 path 文字列 \"doc\" 出力ディレクトリへのパス","breadcrumbs":"Development Environment » ドキュメンテーション » ドキュメンテーション","id":"156","title":"ドキュメンテーション"},"157":{"body":"ビルド済みのVerylバイナリをダウンロードするための公式GitHub actionが提供されています。 https://github.com/marketplace/actions/setup-veryl GitHub actionスクリプトの例は以下の通りです。 フォーマットとビルドチェック name: Check\non: [push, pull_request]\njobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: veryl-lang/setup-veryl@v1 - run: veryl fmt --check - run: veryl check GitHub Pagesからドキュメントを公開する name: Deploy\non: [push]\njobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: veryl-lang/setup-veryl@v1 - run: veryl doc - uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: doc","breadcrumbs":"Development Environment » GitHub Action » GitHub Action","id":"157","title":"GitHub Action"},"158":{"body":"","breadcrumbs":"補遺 » 補遺","id":"158","title":"補遺"},"159":{"body":"Veryl のパーサはパーサジェネレータ parol を使っています。以下の parol の構文定義が正式な構文です。 %start Veryl\n%title \"Veryl grammar\"\n%comment \"Empty grammar generated by `parol`\"\n%user_type VerylToken = crate::veryl_token::VerylToken\n%user_type Token = crate::veryl_token::Token %scanner Embed { %auto_newline_off %auto_ws_off\n} %% // ----------------------------------------------------------------------------\n// Terminal\n// ---------------------------------------------------------------------------- // Longest match should be first CommentsTerm : \"(?:(?:(?://.*(?:\\r\\n|\\r|\\n|$))|(?:(?ms)/\\u{2a}.*?\\u{2a}/))\\s*)+\" : Token;\nStringLiteralTerm : \"\\u{0022}(?:\\\\[\\u{0022}\\\\/bfnrt]|u[0-9a-fA-F]{4}|[^\\u{0022}\\\\\\u0000-\\u001F])*\\u{0022}\": Token;\nExponentTerm : /[0-9]+(?:_[0-9]+)*\\.[0-9]+(?:_[0-9]+)*[eE][+-]?[0-9]+(?:_[0-9]+)*/ : Token;\nFixedPointTerm : /[0-9]+(?:_[0-9]+)*\\.[0-9]+(?:_[0-9]+)*/ : Token;\nBasedTerm : /(?:[0-9]+(?:_[0-9]+)*)?'[bodh][0-9a-fA-FxzXZ]+(?:_[0-9a-fA-FxzXZ]+)*/ : Token;\nAllBitTerm : /(?:[0-9]+(?:_[0-9]+)*)?'[01xzXZ]/ : Token;\nBaseLessTerm : /[0-9]+(?:_[0-9]+)*/ : Token;\nMinusColonTerm : '-:' : Token;\nMinusGTTerm : '->' : Token;\nPlusColonTerm : '+:' : Token;\nAssignmentOperatorTerm: \"\\+=|-=|\\*=|/=|%=|&=|\\|=|\\^=|<<=|>>=|<<<=|>>>=\" : Token;\nOperator11Term : \"\\*\\*\" : Token;\nOperator10Term : \"/|%\" : Token;\nOperator09Term : \"\\+|-\" : Token;\nOperator08Term : \"<<<|>>>|<<|>>\" : Token;\nOperator07Term : \"<=|>=|<:|>:\" : Token;\nOperator06Term : \"===|==\\?|!==|!=\\?|==|!=\" : Token;\nOperator02Term : \"&&\" : Token;\nOperator01Term : \"\\|\\|\" : Token;\nOperator05Term : \"&\" : Token;\nOperator04Term : \"\\^~|\\^|~\\^\" : Token;\nOperator03Term : \"\\|\" : Token;\nUnaryOperatorTerm : \"~&|~\\||!|~\" : Token;\nColonColonTerm : '::' : Token;\nColonTerm : ':' : Token;\nCommaTerm : ',' : Token;\nDotDotEquTerm : '..=' : Token;\nDotDotTerm : '..' : Token;\nDotTerm : '.' : Token;\nEquTerm : '=' : Token;\nHashTerm : '#' : Token;\nLAngleTerm : '<' : Token;\nQuoteLBraceTerm : \"'\\{\" : Token;\nLBraceTerm :