Post

《各类脚本工具语言记录》

《各类脚本工具语言记录》

时序图工具WaveDrom Hitchhiker’s Guide to the WaveDrom

vitis_user_guide: User Managed Mode in Vitis Unified Embedded IDE • Vitis Tutorials: Embedded Software • 阅读器 • AMD 技术信息门户

verilog在tb中的一些操作

仿真的一些数据

//-------------------- example1 --------------------// 只需要通过修改txt,不用重新编译来仿真
file = $fopen("AAA.csv", "r"); 
cnt  = 0;
while (!$feof(file))  begin
  $fscanf(file, "%f,%f", timeBai[cnt], dat_vector[cnt]); //读取所有行,匹配格式为%f,%f
  cnt ++;
 end
$fclose(file);
//-------------------- example2 --------------------// 这个很有意思啊
看下面代码,这里通过txt来控制cmd及对应数据

SVA

sva写在rtl(设计)里面 不要写在tb里面

`ifdef SVA
 Bis0: assert property(Evt_b0)
 else
  $error("b is not 0 @ %t", $time);
 Bis1: assert property(Evt_b1)
  else
   $display("b is not 1 @ %t", $time);
 property Evt_b0;
  @(posedge clk) a |-> ##1 ~b;       
 endproperty

 property Evt_b1;
  @(posedge clk) (rst_n && ~a) |-> ##1 b;
 endproperty
`endif
//下图展示了在verdi中查看SVA

SVA

scala语法

参数声明格式

1
virtualChannelParams: Seq[UserVirtualChannelParams] = Seq(UserVirtualChannelParams())

在这里,Seq[UserVirtualChannelParams]类型注解,用于指定参数 virtualChannelParams 的类型。它不是返回类型的定义。

在 Scala 中,参数的声明格式通常是:参数名: 参数类型 = 默认值

1
channelGen: Parameters => ChannelOutwardNode => ChannelOutwardNode = p => u => u

在这里也是,参数类型为Parameters => ChannelOutwardNode => ChannelOutwardNode,该类型为一个函数。接受Parameters并返回一个xx函数,xx函数接受一个类型为 ChannelOutwardNode 的参数,最终返回一个类型为 ChannelOutwardNode 的值。

cuda

核函数产生的所有线程统称为grid,brid包含多个Block,一个Block包含多个threads,配置线程用 <<<grid_size, block_size>>>来表示<<<num_block,num_threads_inBlock>>>

每个线程的唯一标识由这两个«<grid_size, block_size»>确定
gridDim.x:该变量的数值等于执行配置中变量grid_size的值;
blockDim.x:该变量的数值等于执行配置中变量block_size的值;
blockldx.x: 该变量指定一个线程在一个网格中的线程块索引值,范围为0~gridDim.x-1;
threadldx.x: 该变量指定一个线程在一个线程块中的线程索引值,范围为0~ blockDim.x-1

多维网格和线程块:dim3 grid_size(Gx, Gy, Gz) dim3 block_size(Bx, By, Bz)

#一维网格 一维线程块
int bid = blockldx.y* gridDim.x + blockldx.x;
int tid = threadldx.y* blockDim.x + threadldx.x; 
#二维
int blockld = blockldx.x + blockld.y * gridDim.x; //Block的唯一id
int threadld = threadldx.y *blockDim.x + threadldx.x; //当前Block中的唯一线程id
int id = blockld * (blockDim.x * blockDim.y) + threadld;
#多维线程块中的线程索引:
int bid = blockldx.z * gridDim.x * gridDim.y + blockldx.y* gridDin.x + blockldx.x;
int tid = threadldx.z * blockDim.x * blockDim.y + threadldx.y* blockDim.x + threadldx.x;

tcl

vivado的tcl用法

  • 变量置换:set y [expr $x+100]
  • 赋值:set b ${a.1}
  • List:list 1 2 {3 4}

Makefile

  1. 关于部分makefile的路径管理
    • \$(abspath ./sim_c/include)

      abspath函数会将给定的相对路径转换为绝对路径。在这个例子中,./sim_c/include是一个相对路径,$(abspath ./sim_c/include)会将其转换为绝对路径

    • \$(addprefix -I, $(INC_PATH))

      :函数会将指定的前缀-I添加到INC_PATH变量中的每个路径前面

    • $@

      1
      2
      3
      4
      
      target: dependency1 dependency2
       echo "Target is $@"  # target
       echo "First dependency is $<" # dependency1
       echo "All dependencies are $^" # dependency1 dependency2
      

python

官方帮助: https://docs.python.org/zh-cn/3/

python正则表达匹配规则

  • r'/\*.*$ r'^.*\*/'
  • ^表示行的开始,
  • .*表示任何字符(除了换行符)0次或多次
  • re.sub('//.*$','',lines[i]) 替换
  • re.findall(r'/\*',lines[i]) 找到所有匹配模式,返回元组列表
  • re.search(pattern, string, flags)描整个字符串并返回第一个成功的匹配。
This post is licensed under CC BY 4.0 by the author.