Vivado 自动维护版本信息

Vivado 自动维护的版本信息

  1. 读取和写入 verilog 文件中的宏定义
  2. 读取版本号并更新
  3. 获取日期时间并格式化

gen_version.tcl

# gen_version.tcl

proc gen_version {args} {

    proc get_defines_from_vh {file_name} {

        ## 创建空字典
        set verilog_defines [dict create]

        ## 检查文件是否存在
        if {[file exists $file_name] } {

            ## 打开文件
            catch { set fid [open $file_name r] }

            ## 检查文件是否成功打开
            if {[info exists fid]} {
                seek $fid 0 start
                while { [eof $fid] == 0} {
                    ## 从文件读取一行, 并使用正则表达式匹配 verilog 宏定义
                    if {[regexp {.*?`define\s+(.*?)\s+(.*?)$} [gets $fid] full_match key value]} {
                        ## 将 verilog 宏定义加入到字典中
                        dict set verilog_defines $key $value
                    }
                }
                close $fid
            }
        }
        return $verilog_defines
    }

    proc put_defines_to_vh {file_name verilog_defines} {

        ## 打开文件
        catch { set fid [open $file_name w] }

        ## 检查文件是否成功打开
        if {[info exists fid]} {
            seek $fid 0 start
            ## 遍历字典中所有项并按照宏定义格式写入到文件
            dict for {key value} $verilog_defines {
                puts $fid "`define $key $value"
            }

            close $fid
        }
        return 0
    }

    ## 获取工程跟目录
    set prjDir [file normal [get_property "DIRECTORY" [get_projects]]]

    ## 推断输出文件目录
    set file_name "$prjDir/src/version.vh"

    ## 检查输出目录是否存在
    if {![file exist "$prjDir/src"]} {
        file mkdir "$prjDir/src"
    }

    ## 从文件中读取宏定义数据到字典
    set verilog_defines [get_defines_from_vh $file_name]
    set new_revision_number 0

    ## 遍历字典所有项
    dict for {key value} $verilog_defines {

        ## 显示旧版本号并更新版本号
        if {[string equal COMPILE_REVISION $key] == 1} {
            set new_revision_number [expr $value + 1]
            puts "old revision number :$value"
        }

        ## 显示旧编译日期
        if {[string equal COMPILE_DATE $key] == 1} {
            set year [string range $value 0 3]
            set month [string range $value 4 5]
            set day [string range $value 6 7]
            puts "old compile date :$year-$month-$day"
        }

        ## 显示旧编译时间
        if {[string equal COMPILE_TIME $key] == 1} {
            set hour [string range $value 0 1]
            set minutes [string range $value 2 3]
            set seconds [string range $value 4 5]
            puts "old compile time :$hour:$minutes:$seconds"
        }
    }

    ## 设置新的编译日期和时间
    set new_compile_date [clock format [clock seconds] -format "32'h%Y%m%d" ]
    set new_compile_time [clock format [clock seconds] -format "32'h00%H%M%S" ]

    ## 更新字典中的宏定义数据
    dict set verilog_defines COMPILE_REVISION $new_revision_number
    dict set verilog_defines COMPILE_DATE $new_compile_date
    dict set verilog_defines COMPILE_TIME $new_compile_time

    puts "write to $file_name"
    puts "write contents $verilog_defines"

    ## 将字典中宏定义数据写入到文件中
    put_defines_to_vh $file_name $verilog_defines

    ## 将 version.vh 文件添加到当前文件组中
    if {[llength [get_files version.vh -of_objects [current_fileset]]] == 0} {
        add_files -norecurse $file_name
        update_module_reference
    }

    return 0
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vivado和Matlab的版本匹配是指在进行联合仿真和硬件/软件协同设计时,Vivado工具的版本需要与Matlab软件的版本相匹配。这样才能保证二者之间的兼容性,确保联合仿真和协同设计的正常进行。 在Vivado和Matlab的版本匹配方面,有一些需要注意的事项。首先,由于Vivado和Matlab是由不同的公司开发的软件,因此它们的版本发布可能不完全同步。因此,我们在选择Vivado和Matlab版本时,必须查找官方文档或相关技术支持的信息,以确保选用的版本是兼容的。 其次,Matlab和Vivado之间的版本匹配对于特定的功能和应用也有一定的要求。例如,如果我们需要在Matlab中使用HDL Coder生成硬件描述语言(HDL)代码,然后在Vivado中进行综合、实现和下载到FPGA中,那么需要确保选用的Vivado和Matlab版本是支持该功能的。 最后,除了版本之间的匹配外,操作系统的兼容性也需要考虑。不同版本Vivado和Matlab可能对操作系统的要求有不同的支持。因此,在选择Vivado和Matlab版本时,我们还需要考虑它们与我们使用的操作系统的兼容性。 综上所述,Vivado和Matlab的版本匹配对于联合仿真和协同设计非常重要。我们必须确保选用的Vivado和Matlab版本是兼容的,并且能满足我们的需求和应用场景。同时,我们还需注意操作系统的兼容性以及特定功能和应用的要求。只有在版本匹配的前提下,才能保证我们在联合仿真和协同设计过程中的顺利进行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值