开启辅助访问 切换到窄版

登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 41|回复: 3

【小白向】VSCode配置Verilog开发环境

[复制链接]

5

主题

16

回帖

76

积分

版主

积分
76

论坛元老

发表于 2025-9-14 19:12:19 | 显示全部楼层 |阅读模式
本帖最后由 Esing 于 2025-9-14 23:49 编辑

转载自我的博客:VSCode配置Verilog开发环境 | Esing 的小站 我转载我自己


前置任务:
  • VSCode软件
  • 联网环境



VSCode配置:
  • 安装下列插件


其中第一个可以快速运行.v文件,第二个可以快速生成一个testbench模板,第三个则是功能强大的Verilog语言支持插件。


  • 代码格式化设置
推荐使用 Verible-verilog-formatter。下载二进制文件后记下路径,待会会用到。
进入第三个插件的设置,搜索"verible Verilog formatter",找到包含"path"的设置,填入上面的路径。
对于对齐格式等,可以参考官方文档:
  1. 用法:verible-verilog-format [选项] <文件> [<文件...>] 要从stdin中传输,请使用'-'作为<文件>。

  2. 从common/formatting/basic_format_style_init.cc获取的标志:
  3. --column_limit(格式化时要保持在其下的目标行长度限制。);默认值:100;
  4. --indentation_spaces(每个缩进级别增加的空格数。);默认值:2;
  5. --line_break_penalty(每引入一个换行符的解决方案添加的惩罚。);默认值:2;
  6. --over_column_limit_penalty(为了最小化惩罚,这表示超出列限制的基准惩罚值。超出此限制的每个字符额外惩罚1。);默认值:100;
  7. --wrap_spaces(每个wrap级别增加的空格数。这适用于在开放组节之后的第一个元素被包装时。否则,缩进级别设置为开放组运算符的列位置。);默认值:4;

  8. 从verilog/formatting/format_style_init.cc获取的标志:
  9. --assignment_statement_alignment(格式化各种赋值:{align,flush-left,preserve,infer});默认值:infer;
  10. --case_items_alignment(格式化case项:{align,flush-left,preserve,infer});默认值:infer;
  11. --class_member_variable_alignment(格式化类成员变量:{align,flush-left,preserve,infer});默认值:infer;
  12. --compact_indexing_and_selections(在索引/位选择运算符中使用紧凑的二进制表达式);默认值:true;
  13. --distribution_items_alignment(Aligh分配项:{align,flush-left,preserve,infer});默认值:infer;
  14. --enum_assignment_statement_alignment(使用枚举格式化赋值:{align,flush-left,preserve,infer});默认值:infer;
  15. --expand_coverpoints(如果为true,始终展开coverpoints。);默认值:false;
  16. --formal_parameters_alignment(格式化形式参数:{align,flush-left,preserve,infer});默认值:infer;
  17. --formal_parameters_indentation(缩进形式参数:{indent,wrap});默认值:wrap;
  18. --module_net_variable_alignment(格式化net/变量声明:{align,flush-left,preserve,infer});默认值:infer;
  19. --named_parameter_alignment(格式化命名实际参数:{align,flush-left,preserve,infer});默认值:infer;
  20. --named_parameter_indentation(缩进命名参数赋值:{indent,wrap}); 默认:wrap;
  21. --named_port_alignment(格式化命名端口连接:{align,flush-left,preserve,infer}); 默认:infer;
  22. --named_port_indentation(缩进命名端口连接:{indent,wrap}); 默认:wrap;
  23. --port_declarations_alignment(格式化端口声明:{align,flush-left,preserve,infer}); 默认:infer;
  24. --port_declarations_indentation(缩进端口声明:{indent,wrap}); 默认:wrap;
  25. --port_declarations_right_align_packed_dimensions(如果为true,在启用对齐的上下文中,打包维度将右对齐。); 默认:false;
  26. --port_declarations_right_align_unpacked_dimensions(如果为true,在启用对齐的上下文中,解包维度将右对齐。); 默认:false;
  27. --struct_union_members_alignment(格式化结构/联合成员:{align,flush-left,preserve,infer}); 默认:infer;
  28. --try_wrap_long_lines(如果为true,让格式化器尝试在需要换行的地方优化换行决策,否则保持未格式化。这是减少风险的短期措施。); 默认:false;
  29. --wrap_end_else_clauses(将end和else关键字拆分为单独的行); 默认:false;

  30. 从verilog/tools/formatter/verilog_format.cc中的标志:
  31. --failsafe_success(如果为true,即使存在输入错误或内部错误,也始终以0状态退出。在所有错误情况下,始终保留原始文本。这对于部署服务时应将故障安全行为视为成功很有用。); 默认:true;
  32. --inplace(如果为true,在成功的条件下覆盖输入文件。); 默认:false;
  33. --lines(要格式化的特定行,基于1,以逗号分隔,包括N-M范围,N是N-N的简写。默认情况下,未指定左边,所有行都启用格式化。 (可重复,累积); 默认:;
  34. --max_search_states(限制线包装优化过程中探索的搜索状态数量。);
  35. --show_equally_optimal_wrappings(如果为true,则打印找到多个最优解时的信息(stderr),但继续正常操作。);默认值:false;
  36. --show_inter_token_info(如果为true,与show_token_partition_tree一起,包括诸如间隔和断行惩罚之类的词间信息。);默认值:false;
  37. --show_largest_token_partitions(如果> 0,则打印标记分区,然后退出而不格式化输出。)默认值:0;
  38. --show_token_partition_tree(如果为true,则在标记分区后打印诊断信息,然后退出而不格式化输出。)默认值:false;
  39. --stdin_name(当使用'-'从stdin读取时,用于诊断目的的替代名称。否则会被忽略。);默认值:"<stdin>";
  40. --verbose(更详细。)默认值:false;
  41. --verify_convergence(如果为true,并且不是使用--lines逐增地格式化,则验证重新格式化的输出是否不再产生进一步的更改,即格式化是收敛的。)默认值:true;
复制代码


我自用的格式化方案(删除换行符并在配置项之间加上空格):
  1. --indentation_spaces=4
  2. --line_break_penalty=3
  3. --named_port_alignment=align
  4. --port_declarations_alignment=align
  5. --port_declarations_indentation=indent
  6. --module_net_variable_alignment=align
  7. --wrap_end_else_clauses=true
  8. --named_parameter_indentation=wrap
  9. --assignment_statement_alignment=align
  10. --wrap_end_else_clauses=true
  11. --try_wrap_long_lines=false
  12. --column_limit=75
  13. --named_parameter_alignment=align
  14. --case_items_alignment=align
  15. --enum_assignment_statement_alignment=align
  16. --named_port_indentation=indent
  17. --formal_parameters_alignment=align
  18. --formal_parameters_indentation=indent
复制代码


同时,建议将.v与.sv文件设置为“保存后自动格式化”。在VSCode的设置搜索框中填入:“@lang:verilog ”,并修改"format on save"为"true"即可。systemVerilog同理。

IVerilog配置:
iVerilog是一个用于硬件描述语言(HDL)Verilog 的开源仿真工具,小巧轻便跨平台。之所以不使用Xilinx的xvlog是因为太笨重了,而且在Linting的时候能感受到显著的延迟。当然你也可以试试,xvlog的好处是缺了参数或者语法不对还会告诉你应当怎么修改。


和上面Verible-verilog-formatter的配置方法一样,去Icarus Verilog for Windows下载安装包,安装时记得勾上Add to PATH就行。之后在插件内选择iVerilog为默认的语法解释器即可。但因为某些限制,无法做到实时检查错误,只能在每次保存完文件之后显示。



游客,如果您要查看本帖隐藏内容请回复



回复

使用道具 举报

4

主题

15

回帖

118

积分

版主

积分
118

论坛元老

发表于 2025-9-14 22:30:03 | 显示全部楼层
<s>我转载我自己</s>

BBCode也有 [ s ] 标签吧
回复

使用道具 举报

5

主题

16

回帖

76

积分

版主

积分
76

论坛元老

 楼主| 发表于 2025-9-14 23:48:58 | 显示全部楼层
null 发表于 2025-9-14 22:30
BBCode也有 [ s ] 标签吧

还真是
回复

使用道具 举报

9

主题

15

回帖

155

积分

[Lv.3]强能力者

积分
155

甘地论坛元老

发表于 2025-10-18 14:00:02 | 显示全部楼层
查看隐藏内容
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|电信科协官网

GMT+8, 2025-10-31 22:21 , Processed in 0.112595 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表