Repository navigation
Releases: JayceVane/SV-Tools
Release list
v4.0.0-beta.2
SV Tools 4.0.0-beta.2
这是4.0的预览版,包含此前4.1 alpha开发阶段的电路查看器及格式化完善。正式版目标统一为4.0.0;当前仅通过GitHub Release发布Windows x64产物,不发布VS Code Marketplace。旧4.0.0-preview.1保留。
安装
下载svtools-v4.0.0-beta.2-win32-x64.vsix,在VS Code或兼容IDE中选择“从VSIX安装”,完成后重载窗口并重新生成电路。最低VS Code 1.106,使用兼容的Node/V8运行时。包中包含原生模块和离线Yosys,无需安装Rust或Python。独立CLI为svtools.exe,另附原生模块与SHA256SUMS.txt。
若已安装4.0.0-preview.1或4.1.0-alpha系列,SemVer会将本次版本视为回退,需手动安装VSIX并确认替换,必要时先卸载旧版;功能包含上述开发成果。
本次变化
- 内置固定YoWASP Yosys,默认Slang前端支持合法SystemVerilog时序声明;自动收集工作区子模块与包依赖,并在失败时提供原文件行列及完整日志。
- 独立电路模型、ELK正交布局与SVG交互视图,提供层级下钻、搜索、网络高亮和源码定位。编辑器右上角默认Yosys;RTL右键Vivado查看当前文件模块,工程面板继续使用工程top,原工程只读。
- 时序单元按实际类型与参数绘制时钟触发沿和控制极性;总线粗线、单比特细线,多比特端口显示位数,总线位宽标记可点击并避让文字。
- 按帧更新相机,视口外SVG按需挂载,总览简化细节;选中和搜索只更新变化对象,改善复杂图交互。
- 修复generate内多个always与assign之后的模块例化对齐,以及带注释选区的分类和不支持的正则。新增Aurora结构Golden回归,继续强制保全空格、Tab、CR、LF之外的所有字符及顺序。
- 保留此前4.0预览的标准目录补全、100/500MiB VCD查看、二维mem、浮点显示格式和Vivado工程管理改进。
验证与边界
本轮只调整版本与交付文档,运行逻辑与4.1.0-alpha9一致。发布构建执行152个JS文件语法检查、20组Golden共40项、既有Node516项(515通过、1可选跳过)、电路154项及Rust125项回归;Node22/24由分支CI复验。
此前已用真实内置Slang/Yosys、Vivado 2022.1及实际Qoder的Electron Node运行时核对编译、布局和原生ABI;正式页面在Edge155验证明暗主题、总线标签点击、避让与缩放。它们不等于完整IDE Webview宿主验收,仍需实际工程使用反馈。
复杂图基准为本机合成事件,不能保证任意设计或宿主60fps。总线标记带来初始化成本,详细性能样本见docs/V4_1_ALPHA9.md。当前按模块查看并有容量预算;Vivado为平坦RTL,尚无局部逻辑锥、增量布局或领域数据分页,未知单元不猜测时序极性。FSDB仍取消,Vivado IP管理仍在后续计划。
配置与操作见docs/CIRCUIT.md,本轮验证与完整修改清单见docs/V4_BETA2.md。
v4.0.0-preview.1
SV Tools 4.0.0-preview.1
这是基于 3.5.0 的首个 4.0 公开预览版,汇总 alpha1–alpha13 的开发成果。发布渠道为 GitHub Release,安装包仅针对 Windows x64;尚未发布到 VS Code Marketplace。
安装
下载 svtools-v4.0.0-preview.1-win32-x64.vsix,在 VS Code 扩展页执行“从 VSIX 安装”。VSIX 已包含当前平台原生模块,无需自行编译 Rust。独立 CLI 为 svtools.exe,另附 .node 模块和 SHA256SUMS.txt 校验清单。
本次变化
- 格式化器拆分词法扫描、结构状态和布局职责,修复 always 触发头及嵌套 if 条件紧凑。所有格式化入口强制保全 ASCII 空格、Tab、CR、LF 之外的字符及其顺序;不安全候选保留原文。
- 补全按 Verilog/SystemVerilog 版本及 UVM 1.2/1800.2 公开目录组织,增加作用域、成员、参数化类型和工程 include 索引。它仍是容错代码补全,不等同于完整编译器详细化。
- VCD 改用 Worker 流式解析和有界存储,按可见行与时间窗查询;支持二维 mem、双游标、精确边沿、分组、多选排序及可拖动栏宽/analog 行高。
- 显示格式归入子菜单,支持 FP64、FP32、TF32、BF16、FP16 和 IEEE 风格 FP8(E3M4)。明暗主题、值标签和紧凑菜单同步调整。
- 工具链统一任务取消、阶段成败和有界日志,避免失败后显示旧波形。修复 Vivado 空工程面板,统一工程选择、真实文件集与操作后验证。
验证与边界
发布构建通过 104 个 JS 文件语法检查、19 个 golden(38 断言)、510 项 Node 合同及 121 项 Rust 测试。此前使用真实 VS Code、Icarus、Vivado/XSim 和 100/500 MiB VCD 验证关键路径,详见仓库 docs/V4_ALPHA*.md。
500 MiB 生成 VCD 在本机热缓存下加载约 5.33 秒、RSS 峰值约 485 MiB;事件密度会影响资源用量,不保证任意同尺寸文件的表现。
已知限制:旧赋值对齐入口的正则异常会安全回退原文;GNU 风格与关闭行内紧凑的特定转换组合仍可能出现两轮缩进漂移。FSDB 已取消;Vivado IP 添加仍在后续计划。电路结构查看器属于下一版本,本安装包不包含该功能。其它平台及完整用户工程尚需进一步验收。
v3.5.0 —— Vivado 工程管理侧边栏
Added
- Vivado 工程管理侧边栏(活动栏 $(chip)):.xpr 文件树按模块实例依赖组织;右键加入/移出/top 设置/src↔sim 移动(写操作按 .xpr 重解析事实校验,杜绝 Vivado batch 假成功);top 级快捷操作区(xelab/综合/综合报告/布局布线/布局布线报告/时序报告/Bitstream);报告独立页面展示,观感对齐 Vivado、明暗主题跟随
- OOC 综合读序修复:read_verilog 前 package 文件前置 + import 拓扑排序(修复 Synth 8-36 'pkg' is not declared);综合前强制刷新设计单元索引
- 波形查看器、器件选型页明暗主题适配
Fixed
- 格式化五连修:声明对齐按空行分组(各组独立列宽);带数组维度的声明不再被无维度行名字列宽推远(
mirror_q [$]多 2 空格);例化声明区不再输出localparam parameter重复关键字;always 块赋值分号贴合表达式(i_data ;→i_data;,运算符列对齐保留);begin/end 块内 assign 组间空行保留(非幂等根因) - 波形查看器总线值徽章配色:亮色主题下深棕字叠深底对比度约 2:1 看不清,改固定浅橘 + 深底,明暗主题均 ≥7:1
- golden 用例扩充至 18 个;门禁 golden 36/36、cargo 70/70、宿主 14/14
附件:svtools-3.5.0.vsix(扩展安装包)、svtools.exe(Windows CLI)。完整条目见 CHANGELOG。
v3.4.8
新增
- xvlog lint 引擎可选(
svtools.lint.engine):iverilog(默认)/ xvlog 一键切换,VRFC 诊断进 Problems 面板 - xelab 详细化检查:编辑器工具栏按钮手动触发,依赖迭代自动补齐缺失定义文件(≤6 轮),捕捉类型/端口/位宽/未定义引用等深度错误
- UVM 工程自动支持:检测到 UVM 即自动附加
-L UVM/-i <uvm 源码目录>/ xelab--timescale,无需手动配置 - 设计单元索引扩展到 module/interface/package/program;单文件 lint 自动补依赖,跨文件引用不再误报语法错
- 仿真运行中状态栏/编辑器工具栏出现停止按钮
修复
- vvp 仿真实时输出:Cygwin 构建管道下块缓冲导致「无输出」,
stdbuf -oL强制行缓冲 - 停止仿真不留孤儿:cygwin exec 换 PID 的三重击杀;Vivado/xvlog 超时改按进程树终止(xsim 停不掉根因)
- xsim 仿真 run all 被 wave 配置块阻断(动态数组等不可 trace 对象场景)
- xvlog prj 顺序:package 必须在 importer 之前,补入依赖 prepend 修正
完整变更见 CHANGELOG。
安装:VS Code 用户下载 .vsix 后 code --install-extension svtools-3.4.8.vsix;CLI 用户可直接下载 svtools.exe(格式化器,svtools format <file>)。
v3.4.7
v3.4.7
新增
- **
pragma protect 加密区逐字节透传**(Xilinx/Synopsys 加密 IP,如*_syn_rfs.v):BASE64 载荷行长是编码规范的一部分,重排会破坏解密;且长串无;`/关键字的行使对齐器二次方变慢——万行加密文件(ibert/ila 等)格式化 45+ 分钟不返回,透传后 81ms 且输出与输入逐字节一致(未闭合区域同样透传) - 端口/参数表名称列间距配置
svtools.portNameGap(1–8,默认 2,CLI--port-name-gap):模块/接口头端口表与 task/function 参数表统一适用 - CI 门禁(PR 上跑 golden 测试)、npm scripts(
npm test/npm run build:native)、45 项配置设置面板分组
修复
- 端口/参数表名称列距随组宽在 2..5 间漂移(按缩进取整所致),改为可配置固定间距
- 连续单行模块例化粘连与误展开(实例行被误判为声明)
- for 头空格归一化覆盖
begin块状体(此前 task 内块状 for 头乱空格不删,与单行 for 风格分裂) - for 归一化破坏字符串字面量(
"a=b c"曾被改成"a = b c");并入inlineCompact开关 - CRLF 输入的 protect 段间空行丢失
stripEmptyLine配置从未传给原生模块
完整变更见 CHANGELOG。
附件:
svtools-3.4.7.vsix(插件包)、svtools.exe(CLI 格式化器,Windows x64)。源码安装需npm install && npm run build:native。
v3.4.6 — 空行规则统一裁决 + 双轨对齐架构 + 格式化规范
格式化引擎大版本修复
新增
- 格式化规范
docs/FORMAT_SPEC.md:格式化器唯一权威行为定义(空行/缩进/对齐/单行保留全量规则) - 单行/多行双轨对齐架构:用户未换行的语句走单行紧凑,显式换行的走多行列对齐
- 行内紧凑开关
svtools.inlineCompact(默认开):else $error("x", $time);→else $error("x", $time);,单行例化保持单行并紧凑 - 行间紧凑开关
svtools.blankCompact(默认开):块内无空行、块间空行分隔;关闭则保持用户空行且格式化绝不新增空行 - CLI
--no-inline-compact/--no-blank-compact
修复
- 空行规则统一裁决(此前 task/covergroup/clocking 体首尾被插入空行、modport 续行误判致空行整段被删)
- sequence/property 块头空行;体内多余空格归一化(
property p;→property p;) - 单行写法保留:单行 constraint / 参数列表 / 模块例化不再被展开
end else if的 else 落第 0 列(generate 链非幂等根因)- 对齐分组空行敏感导致的二次格式化列宽漂移(sfp_dma_rx 等 7 文件)
$display在wait fork后被从字符串处断行;属性 + 行中块注释的;甩行- SV 验证代码六处破坏(类/约束/covergroup/clocking/SVA/fork)
质量
- golden 用例 7 → 14 个(28 项断言全绿,含幂等)
- 实测工程幂等校验 38 → 120 文件:111/120 稳定
- 格式化器内部空行伪影源头全部消除
v3.4.5 — 格式化引擎对齐校对基准(CRLF/语句拆行/case 对齐等修复)
v3.4.5 — 格式化引擎对齐校对基准
格式化引擎按用户手工校对后的 golden 基准(example/target/)全面对齐,node test/golden_test.js 7 用例 14 项全绿(含幂等双检),真实工程样例(aurora / test_comprehensive 等)输出零漂移。
Fixed
- CRLF 输入产生伪空行:preprocess 入口统一行尾归一——此前
\r被语句拆分当作行内剩余内容,每条语句后多出空行,同一文件 LF/CRLF 输出不一致 - 语句拆行规则:单行
begin ... end紧凑写法整行保留;begin后同行有语句且无闭合end才断行;endcase/end前有内容时断行(end end拆两行) - case 项对齐此前从未生效:对齐正则含
(?!:)前瞻,Rust regex 不支持导致整趟对齐被静默跳过;改为无前瞻正则 + 紧凑/规范双模式(紧凑风格保留4'd0:result<=x;,一句一行时补运算符空格result <= x;) - 续行空白压缩破坏既有对齐:仅对破行表达式中间片段(行尾悬空运算符)压缩空格,完整语句行(assign 组 / case 项 / 实例端口)原样保留
- 行续接(反斜杠结尾)被拆断:宏 / 断言多行语句整行保留
- 语句块内赋值列对齐:for / if 体等语句块的
<=/=操作符列对齐 - 单行 for 头运算符空格规范化:
for(int i=0;i<len;i++) sum+=data[i];→for(int i = 0; i < len; i++) sum += data[i]; - modport 按方向拆行:
modport master(output a,b,input c);→output a, b,与input c两行 - 紧凑声明参与对齐:
logic[ID_W-1:0] awid;参与声明对齐(位宽右对齐、名字/分号列);带初值的保持原样 - interface 端口丢空格:
axi_if.master axi不再被格式化成axi_if.masteraxi
Added
- golden 格式化用例扩充至 7 个(新增 ex1.1 条件块展开、ex5 参数注释列对齐、ex6 声明对齐 / modport / interface 端口),全部含幂等校验
附件
svtools-3.4.5.vsix— VSCode 扩展安装包svtools.exe— Rust CLI 格式化器(Windows x64,svtools --version→ 3.4.5)
v3.4.4 — 格式化器严重 bug 修复 + Golden 测试基建
v3.4.4 — 格式化器严重 bug 修复 + Golden 测试基建
本版修复三处会破坏代码语义的参数列表格式化 bug(值被改写/丢失、逗号丢失、参数整个消失),并建立 golden 格式化回归测试基建。
🐛 修复
module/interface #(...) 参数列表三处严重破坏
- 参数值错位/丢失:参数对齐重建误输出"当前值与下一个参数值的字典序最小者"——
parameter BC = DATA_WIDTH>>3会被改写成= 0,最后一个参数值变成空 - 尾逗号丢失:
parameter A = 16 ,// comment形态下,逗号判定被行尾注释遮挡且被补到注释之后;现按去注释文本判定、插在注释之前 - 同行多参数整体丢失:
parameter ADDR_W=32,parameter ID_W=4同行写多个参数时只识别第一个,其余在格式化后消失;现已全部保留
assign 表达式破行(issue #3)
assign x = (或行尾||等悬空运算符的破行不再被错误切断,格式化后不再多出空行
✨ 新增
- Golden 格式化测试基建:
example/放格式化前输入、example/target/放期望输出,node test/golden_test.js自动比对 + 幂等双检;含 issue #3、aurora 参数注释、interface 同行参数等回归用例,后续格式化问题按此流程持续加用例
安装:附件 svtools-3.4.4.vsix(扩展)与 svtools.exe(Rust CLI 格式化器);Open VSX / Marketplace 同步更新。
完整变更: CHANGELOG.md
v3.4.3 — Vivado 工具链集成 + 中文本地化 + 波形查看器增强
v3.4.3 — Vivado 工具链集成 + 中文本地化 + 波形查看器增强
svtools 正式成为 FPGA 仿真调试的完整入口:Icarus Verilog + Vivado 双仿真引擎、一键创建 Vivado 工程、内置波形查看器持续打磨。
✨ 新增
Vivado TCL 集成与工程创建
- TCL 脚本运行:命令面板或
.tcl标签页右上角 ▶ 按钮,batch 模式执行,流式输出、状态栏指示、停止/超时 - 工程创建向导:工程名 → 目录 → 文件多选(按工程结构模板预分类)→ 器件选型详情页(系列/封装/速度筛选联动 + 搜索联想 + 表格排序;器件库首次经
get_parts自动导出缓存)→ 顶层模块自动识别 - 工程结构模板(
svtools.vivado.structure):默认src/rtl→ RTL、sim/tb→ 测试台、xdc→ 约束、prj→ 工程目录,glob 可完全自定义 - 标签页快捷按钮:sv/v 文件 ▶ 仿真(选 Icarus Verilog / Vivado xsim,xsim 自动把当前文件置为仿真顶层,默认跑到
$finish);有 Vivado 工程时 ⊕ 加入/移出工程(左键添加/右键移出) - Vivado 自动探测(配置 →
XILINX_VIVADO→PATH→ 常见安装位置)
配置与命令中文本地化
- 设置界面与命令面板的标题/描述跟随 VSCode 界面语言自动切换中英文(42 项配置 + 20 个命令)
波形查看器
- 总线跳变 X 交叉:陡峭对角交叉线(Vivado 风格),密集跳变不再有"波浪"视觉
- x/z 分色:x 红、z 深蓝
- 全名切换入口加到波形区底部工具栏(信号树收起也能用);滚轮方向区分(上下滚信号行 / 左右滚或 Shift+滚轮平移时间轴)
- 名称栏拖拽调序、Ctrl 单选/Shift 范围多选、分组可命名(聚拢到首成员位置)
🐛 修复
- 工程创建向导崩溃(
openTextDocument打开不存在的脚本文件) - xsim 仿真被 1000ns 截断(现默认
run all跑到$finish) - timescale 单位变体兼容(
sec/nsec等长写法)+ 无法识别时显式提示 - 总线实心色块、波形区多选分组入口、折叠层级无法展开等(3.4.2 系列修复)
安装:附件 svtools-3.4.3.vsix(扩展)与 svtools.exe(Rust CLI 格式化器);Open VSX / Marketplace 同步更新。
完整变更: CHANGELOG.md
v3.4.2 — Icarus Verilog 工具链集成 + 内置 VCD 波形查看器
v3.4.2 — Icarus Verilog 工具链集成 + 内置 VCD 波形查看器
本版将 svtools 从格式化工具升级为 FPGA 仿真调试入口:输入时自动语法检查、一键仿真、双击 .vcd 直接看波形,全部零外部依赖(波形查看器为纯 Canvas 渲染)。
✨ 新增
Icarus Verilog 集成:语法检查与仿真验证
- 自动 lint:输入(防抖)/ 打开 / 保存
.v/.sv时自动运行iverilog -tnull,诊断进入 Problems 面板;未保存的缓冲区内容经临时文件参与检查 - 跨文件模块解析:工作区目录自动加入
-y/-I,模块名与文件名不一致时按模块索引自动补编译(最多 3 轮迭代) - 一键仿真:状态栏 ▶ / 命令面板 "Icarus Verilog: Run Simulation",编译 + vvp 流式输出,支持停止与超时
- 工具链自愈:自动探测 iverilog(配置 →
IVERILOG_HOME→PATH);Cygwin 构建缺cygwin1.dll时自动定位同级 Cygwin 注入 PATH
内置 VCD 波形查看器
- 双击
.vcd直接以波形面板打开(.vcd 默认编辑器),标签页右上角波形 ↔ 文本一键切换;仿真产出波形后自动打开 - 信号管理:层级信号树(折叠/展开/双击单独显示模块)、常量开关(默认隐藏、显示沉底)、名称排序/按模块分组
- 多选与分组:Ctrl+点击单选加/减、Shift+点击范围多选(树与波形行统一);右键分组——组员聚拢到第一个成员位置(其余行相对序不变,Vivado 式),组可命名(建组后原位输入),支持重命名/解除
- 拖拽调序:按住名称栏上下拖拽调整行顺序(手动排序优先),虚线箭头指示插入位
- 显示格式:右键二级菜单切换 Hex / Bin / Dec / SDec / Analog 模拟量(阶梯折线自动量程),模拟量行底边可拖拽调高(24~240px)
- 全名/简称切换:名称栏显示完整层级路径或短名,全名模式自动加宽
- 边沿导航 + 吸附:点击自动吸附 8px 内最近跳变,◀ 沿 / 沿 ▶ 或 ←/→ 键跳沿并自动居中
- 滚轮方向区分:上下滚=滚动信号行,左右滚(或 Shift+滚轮)=平移时间轴,Ctrl+滚轮缩放
- 视口窗口渲染:数十亿 ticks 时间跨度流畅缩放,刻度尺按
$timescale换算真实物理时间
🐛 修复
- 总线信号被渲染成实心色块(
drawBus形参错位导致填充色失效) - 波形区 Shift 多选与分组此前只能从信号树触发
- 手动 lint 清除缓存的工具链探测失败状态,环境修复后无需重载窗口
- 波形面板折叠层级后无法再次展开
安装:附件 svtools-3.4.2.vsix 可直接下载安装;Open VSX / VS Code Marketplace 同步更新。
完整变更: CHANGELOG.md