仿真波形vcd文件格式解析以及从vcd生成tb的办法(附代码)

1vcd格式解析

  1. 文件头,包含时间,version,组件,timescale,scope,变量 等信息
  2. 每类信息可以多行显示,每类信息以“$”开头,比如 $ data, $version, $comment, $timescale 等等,以 $end 结束
  3. 文件头以$enddefinitions $end结束
  4. 波形部分第一行是#时间 然后是变量的值,在vcd里会把变量用特殊符号表示,具体在文件头重用 $var wire 1 ! xx $end 表示,比如这里就用"!“代表 XX 宽度为1。然后在波形部分的第一行通常是 #0 1! 0#之类的表示,意思是在0时刻,“!”代表的信号是1,”#"代表的信号是0,平常还有双引号,这里没法打印出来,就不写了
  5. 波形剩下的部分是#time, 0或者1 然后接某符号,这个意思是这个信号变了,如果在这一时刻,多个信号变了,就在这一行写多个符号和响应的值
  6. 上面就是vcd的简单解析,是不是很简单?值得注意的一点,是时间用的是绝对时间,不是相对时间,改成tb的时候要注意
  7. vcd的截图在这里插入图片描述

2.现在是vcd转tb
总体来说是进行行扫描,如果转csv就要维护一张二维表,如果转tb的话,因为仿真环境自带保持的效果,反而比较简单,因为上面vcd里抓的信号比较少,就没有专门写脚本解析文件头。下面上代码

imort re
tt = 0
f=open("inc.v","w")
ss = ""
signal1 = ""
signal2 = ""
signal3 = ""
delta_t = 0
last_t = 0
with open("test.vcd","r") as file:
    lines = file.readlines()
for line in lines:
    if line[0] != 's':
        for index,letter in enumerate(line):
            if letter == '!':
                signal1 = line[index-1]
            if letter == '"':
                signal2 = line[index-1]
            if letter == '#' and index >1
                signal3 = line[index-1]
        match = re.search(r'#(\d+)\s',line)
        if match :
            tt = int(match.group(1))
            delta_t = tt - last_t
            s = "#"+str(delta_t)+";"
            f.write(s)
            s = "signa1 = "+signal1+" ; signal2 = "+signal2+"; signal3 = "+signal3+" ;\n"
            last_t = tt
            f.write(s)
f.close()

生成的文件效果大概就是
#***;signal1 = ;signal2=;signal3 = *
现在还不是一个tb,我们只要再写一段代码就搞定了

module testbench();
reg signal1;
reg signal2;
reg signal3:
initial
begin
    `include "inc.v"
    $finish;
end
initial
begin
    $fsdbDumpfile("test.fsdb")
    $fsdbDumpvars(testbench,0);
end

如此vcd文件就转换成tb了

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值