将verilog代码转换成svg电路图的脚本
·
背景
用chisel写电路代码的时候发现模块都分散在不同的文件里面,有时候很难看清楚模块连接关系,用vivado生成电路有太慢了,所以写了个可以把chisel生成的verilog(或者systemverilog)代码生成电路模块连接图的脚本
需要预安装的环境
1.fish shell环境,代码写在fish环境中,直接保存到~/.config/fish/function/文件夹底下,命名为gen_svg.fish就可以使用
2.yosys,一个开源的数字电路综合工具,用sudo apt install yosys就可以下载
3.sv2v,一个转换systemverilog到verilog的工具,因为yosys不支持systemverilog,所以要转换systemverilog为verilog
4.netlistsvg,配合yosys使用的工具,需要用sudo npm install -g netlistsvg安装
其他运行过程中缺失的环境请根据报错自行安装
5.xdg-open
代码内容
fish function的代码如下(如果不想用fish function请自行修改脚本)
function gen_svg --wraps='' --description 'make verilog into .svg graph with colorized wires'
set verilog_file $argv[1]
if test -z "$verilog_file"
echo "用法: gen_svg your_file.v"
return 1
end
if not test -f $verilog_file
echo "文件不存在: $verilog_file"
return 1
end
if string match -q '*.sv' $verilog_file
sv2v $verilog_file > (basename $verilog_file .sv).v
set verilog_file (basename $verilog_file .sv).v
end
set base_name (basename $verilog_file .v)
set top_module $base_name
set json_file $base_name.json
set svg_file $base_name.svg
for tool in yosys netlistsvg awk sed xdg-open
if not type -q $tool
echo "缺少工具: $tool"
return 1
end
end
# Step 1: 生成 JSON
yosys -p "read_verilog $verilog_file; hierarchy -check -top $top_module; proc; opt; write_json $json_file"
# Step 2: 生成 SVG
netlistsvg $json_file -o $svg_file
# Step 3: 添加白底
if not grep -q '<rect width="100%" height="100%" fill="white"/>' $svg_file
sed -i 's|<svg[^>]*>|&\n <rect width="100%" height="100%" fill="white"/>|' $svg_file
end
# Step 4: 彩色路径着色
awk '
function randcolor() {
r = int(rand() * 256)
g = int(rand() * 256)
b = int(rand() * 256)
return sprintf("#%02x%02x%02x", r, g, b)
}
BEGIN {
srand()
}
{
if ($0 ~ /<(path|line|polyline)[^>]*>/) {
if ($0 ~ /stroke="/) {
sub(/stroke="[^"]*"/, "stroke=\"" randcolor() "\"")
} else {
sub(/<[^ >]+ /, "&stroke=\"" randcolor() "\" ")
}
}
print
}
' $svg_file > $svg_file.tmp && mv $svg_file.tmp $svg_file
# Step 5: 打开 SVG
xdg-open $svg_file &
end
复制这段代码到~/.config/fish/functions/文件夹下,命名为gen_svg.fish(名字可以自行修改)
之后执行gen_svg your_verilog_name.v(或者.sv)就可以自动生成图片并且打开
有问题欢迎在评论区提出
更多推荐



所有评论(0)