UVM宏解释+odt文件转doc+merge命令和difflib+python调用命令+clog2和系统函数+java添加classpath++ ${1+$@}的用法+uvm1.1和uvm1.2的starting_phase+add_reg和configuration的属性控制

UVM宏解释

UVM_DISABLE_AUTO_ITEM_RECORDING

https://blog.csdn.net/MGoop/article/details/127295965
item record的方法主要是用于记录事务信息的,原理是调用accept_tr, begin_tr, end_tr。似乎和波形上显示出各个事务相关。
默认情况下,在调用get_next_item()和item_done()时自动执行项目记录。然而,这只适用于简单的、按顺序的阻塞事务执行。对于流水线和乱序事务执行,驱动程序必须关闭此自动记录,并在适当的时间点显式调用uvm_transaction::accept_tr、uvm_transaction::begin_tr和uvm_transaction::end_tr。该方法在run_phase()方法的开头调用。一旦禁用,将无法重新启用。为了向前兼容,可以通过定义UVM_DISABLE_AUTO_ITEM_RECORDING来全局关闭记录。

UVM_PACKER_MAX_BYTES

在UVM的源码中:uvm-1.2\src\macros\uvm_global_defines.svh
大小4k

//------------------------
//
// MACRO: `UVM_MAX_STREAMBITS
//
// Defines the maximum bit vector size for integral types. 
// Used to set uvm_bitstream_t

`ifndef UVM_MAX_STREAMBITS
 `define UVM_MAX_STREAMBITS 4096
`endif


// MACRO: `UVM_PACKER_MAX_BYTES
//
// Defines the maximum bytes to allocate for packing an object using
// the <uvm_packer>. Default is <`UVM_MAX_STREAMBITS>, in ~bytes~.

`ifndef UVM_PACKER_MAX_BYTES
 `define UVM_PACKER_MAX_BYTES `UVM_MAX_STREAMBITS
`endif

odt文件转doc

https://blog.csdn.net/weixin_41712499/article/details/107656792
使用libreoffice的软件:

libreoffice --headless --convert-to doc path-to-your-doc.doc

merge命令和difflib

https://www.uc23.net/command/337.html
merge命令是三个操作数的命令,操作参数分别是:mod1.txt orig.txt mod2.txt,合并结果存入mod1.txt文件中。如果是使用python脚本,则使用difflib库实现合并,后者的合并只需要mod1.txt和mod2.txt。

merge 例子

假设我们有一个名为orig.txt的文件,其中包含以下内容。

Apples are red.
Oranges are orange.
Blueberries are delicious.

新建一个文件mod1.txt,是修改后的版本orig.txt:

Apples are obviously red.
Oranges are blue.
Blueberries are delicious.

新建mod2.txt的文件,也是orig.txt的修改版本:

Apples are obviously red.
Oranges are NOT blue.
Blueberries are delicious.

然后运行合并,如下所示:

merge mod1.txt orig.txt mod2.txt

它将分析所有三个文件,写入mod1.txt,并显示以下警告:
merge: warning: conflicts during merge
这意味着合并成功,但是我们应该意识到存在冲突。如果打开mod1.txt(默认情况下是写入合并的文件),则会发现它现在包含以下文本:

<<<<<<< mod1.txt
Apples are obviously red.
Oranges are blue.
=======
Apples are obviously red.
Oranges are NOT blue.
>>>>>>> mod2.txt
Blueberries are delicious.

由我们决定保留哪个,然后手动对文件进行编辑。

difflib的例子

由gpt生成,原理大体可用。

import difflib

def merge_files(file1_content, file2_content):
    differ = difflib.Differ()
    diff = list(differ.compare(file1_content.splitlines(), file2_content.splitlines()))

    merged_content = []
    for line in diff:
        if line.startswith('? '):  # Lines that are common to both files
            merged_content.append(line[2:])
        elif line.startswith('- '):  # Lines unique to file1
            merged_content.append(line[2:])
        elif line.startswith('+ '):  # Lines unique to file2
            merged_content.append(line[2:])
        else:  # Lines common to both files
            merged_content.append(line[2:])

    return '\n'.join(merged_content)

# 读取两个文件的内容
with open('file1.txt', 'r') as file1:
    file1_content = file1.read()

with open('file2.txt', 'r') as file2:
    file2_content = file2.read()

# 合并文件内容并显示
merged_content = merge_files(file1_content, file2_content)
print(merged_content)

python调用命令

python调用命令的标准写法popen

subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)中的shell=True必须

import subprocess

# 示例1: 执行一个简单的命令
command = "echo Hello, World!"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# 等待子进程执行完毕
return_code = process.wait()

# 获取标准输出和标准错误
stdout, stderr = process.communicate()

print(f"返回码: {return_code}")
print(f"标准输出: {stdout}")
print(f"标准错误: {stderr}")

# 示例2: 执行带参数的命令
command_with_args = ["echo", "Hello, World!"]
process_with_args = subprocess.Popen(command_with_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

# 等待子进程执行完毕
return_code_with_args = process_with_args.wait()

# 获取标准输出和标准错误
stdout_with_args, stderr_with_args = process_with_args.communicate()

print(f"返回码(带参数): {return_code_with_args}")
print(f"标准输出(带参数): {stdout_with_args}")
print(f"标准错误(带参数): {stderr_with_args}")

python调用process的实时输出

import subprocess
def run_shell(shell):
    cmd = subprocess.Popen(shell, stdin=subprocess.PIPE, stderr=subprocess.PIPE,
                           stdout=subprocess.PIPE, universal_newlines=True, shell=True, bufsize=1)
    # 实时输出
    while True:
        line = cmd.stdout.readline()
        print(line, end='')
        if subprocess.Popen.poll(cmd) == 0:  # 判断子进程是否结束
            break
    return cmd.returncode
if __name__ == '__main__':
    print(run_shell("ping www.baidu.com"))

clog2和系统函数

https://blog.csdn.net/wuzhikaidetb/article/details/121853295
\(clog2是Verilog--2005标准新增的一个系统函数,功能就是对输入整数实现以2为底取对数,其结果向上取整(如5.5取6)。 \)clog2系统函数在Vivado实现的是以e为底取对数,而不是2。

java添加classpath

类似:
/usr/shared:/usr/local/bin:/home/liaoxuefeng/bin
https://www.liaoxuefeng.com/wiki/1252599548343744/1260466914339296
https://en.wikipedia.org/wiki/Java_class_file#General_layout

${1+$@}的用法

\({1+"\)@"}语法首先测试是否设置了\(1,也就是说,是否存在参数。 如果是,那么这个表达式将被替换为整个“\)@”参数列表。
如果不是,那么它将坍缩成空而不是空参数。
其实就是一个普通的字符串替换语法,没有什么神奇的地方。用处其实也不多。之前是为了检查空参数,防止循环中出现打印空参数,但是现在都不需要这种了。

uvm1.1和uvm1.2的starting_phase

uvm1.2应该也有default sequence的方法启动sequence,但是uvm1.2通过get_starting_phase的方式取得。可以从vip的sequence代码中发现这样。
image

add_reg和configuration的属性控制

共同控制。
image

posted @ 2024-03-12 08:46  大浪淘沙、  阅读(18)  评论(0编辑  收藏  举报