白皮书《UVM实战》 学习摘要(二)---第三章~第四章

3.1  uvm_component与uvm_object

      ■ componentobject是UVM中两大最基本概念;    

3.1.1  uvm_component派生自uvm_object

      ■  uvm_void

uvm_object

            

      uvm_component

         ◆ uvm_component拥有uvm_object的特性,同时又有自己的一些特质;uvm_component的一些特性,uvm_object则不一定具有;

       ■ uvm_component的两大特性(uvm_object没有):

  1. 通过new的时候指定parent参数来形成一种树形的组织结构;
  2. phase的自动执行特点;  

       ■ 所有的UVM树的结点都是由uvm_component组成的,只有基于uvm_component派生的类才可能成为UVM树的结点

3.1.2  常用的派生自uvm_object的类

       ■ 除了driver、monitor、agent、model、scoreboard、env、test等component类外,几乎所有的类本质上都是uvm_object,如sequence、sequence_item、transactionconfig等;

       ■ uvm_object是一个分子uvm_component是由其搭建成的一种高级生命,而sequence_item则是由其搭建成的血液,它流通在各个高级生命(uvm_component)之间,sequence则是众多sequence_item的组合,config则是由其搭建成的用于规范高级生命uvm_component行为方式的准则;

       ■ 验证平台中,派生自uvm_object的类:

           ◆ uvm_sequence_item:所有的transaction要从uvm_sequence_item派生,transaction就是封装了一定信息的一个;uvm_sequence_item添加了很多实用的成员变量和函数/任务,从uvm_sequence_item直接派生,就可以使用这些新增加的成员变量和函数/任务;

           ◆ uvm_sequence:所有的sequence要从uvm_sequence派生一个,sequence就是sequence_item的组合;

           ◆ config:所有的config一般直接从uvm_object派生,config的主要功能就是规范验证平台的行为方式,如driver在读取总线是地址信号要持续几个时钟,片选信号从什么时候开始等;

             ◆ uvm_reg_item:它派生自uvm_sequence_item,用于register model中;

             ◆ uvm_phase:它派生自uvm_object,其主要作用为控制uvm_component的行为方式,使得uvm_component平滑地在各个不同的phase之间依次运转;        

3.1.3  常用的派生自uvm_component的类

     ■ uvm_driver:所有的driver都派生自uvm_driver,driver的功能主要就是向sequencer索要sequence_item(transaction),并将sequence_item里的信息驱动到DUT的端口上,这相当于完成了从transaction级别到DUT能够接受的端口级别的转换;

     ■ uvm_monitor: 所有的monitor都要派生在uvm_monitor,driver向DUT的pin发送数据,而monitor则是从DUT的pin接收数据,并且把接收到的数据转换成transaction级别的sequence_item,再把转换后的数据发送给scoreboard,供其比较;

     ■ uvm_sequencer: 所有的sequencer都要派生自uvm_sequencer;

     ■ uvm_scoreboard: 一般的scoreboard都要派生自uvm_scoreboard,当自己定义scoreboard时,可以直接从uvm_component派生;

     ■ reference model:reference model都是派生自uvm_component,reference model的作用就是模仿DUT,完成与DUT相同的功能;DUT是用Verilog写成的时序电路,而reference model则可以直接使用SV高级语言的特性,同时还可以通过DPI等接口调用其它语言来完成与DUT相同的功能;

     ■ uvm_agent:所有的agent要派生自uvm_agent,agent的使用主要是从可重用性的角度来考虑的,uvm_agent的最大改动是引入了一个变量is_active;

     ■ uvm_env:所有的env要派生自uvm_env,env将验证平台上用到的固定不变的component封装在一起,当要运行不同的测试用例时,只要在测试用例例化此env即可;

■ uvm_test:所有的测试用例都要派生字uvm_test或其派生类,任何一个派生出的测试用例中,都要实例化env,只有这样,当测试用例在运行的时候,才能把数据正常的发给DUT,并正常地接收DUT的数据;

3.1.4  与uvm_object相关的宏

■ uvm_object_utils:它用于把一个直接或间接派生自uvm_object的类注册到factory中;

■ uvm_object_para_utils:它用于把一个直接或间接派生自uvm_object的参数化的类注册到factory中;

  eg: 参数化的类格式

        class A #(int WIDTH = 32)  extends uvm_object;

参数化的类在代码可重用性中经常用到,尽可能使用参数化的类,它可以提高代码的可移植性;

■ uvm_object_utils_begin:当需要使用field_automation机制时,需要使用此宏;

//如果使用了此宏,又没有把任何字段使用uvm_field系列宏实现,也可以使用;

uvm_object_param_utils_begin: 与uvm_object_utils_begin宏一样,只适用与参数化,且其中某些成员变量要使用field_automatic机制实现的

uvm_object_utils_end: 它总是与uvm_object_*_begin成对出现,作为factory注册的结束标志;

3.1.5  与uvm_component相关的宏

■ uvm_component_utils:它用于把一个直接或间接派生自uvm_component的类注册到factory中;

     ■ uvm_component_param_utils:它用于把一个直接或间接派生自uvm_component的参数化的类注册到factory中;

     ■ uvm_component_utils_begin: 与uvm_object_utils_begin相似,它用于同时需要使用factory机制field_automation机制注册的类;

         ◆ 在component中使用field_automatic机制,可以直接使用如object拥有的compare、print函数,也可以自动地使用config_db来得到某些变量的值;

     ■ uvm_component_param_utils_begin: 与uvm_component_utils_begin相似,只适用与参数化,且其中某些成员变量要使用field_automatic机制实现的类;

     ■ uvm_component_utils_end: 它总是与uvm_component_*_begin成对出现,作为factory注册的结束标志;

3.1.6  uvm_component的限制

   ■ uvm_object中有clone函数,它用于分配一块内存空间,并把另一个实例复制到这块新的内存空间中,此clone函数无法用于uvm_component中,因为一旦使用后,新clone出来的类,其parent参数无法指定

      eg:

        class A extends uvm_object;

          ...

        endclass

        class my_env extends uvm_env;

            virtual function void build_phase(uvm_phase phase);

             A  a1;

             A  a2;

             a1 = new (“a1”);

             a1.data = 8’h9;

             $cast(a2 , a1.clone( ));

           endfunction

       endclass

   ■  clone = new + copy;  

    uvm_component可以使用copy函数,因为在调用copy之前,目标实例已经完成了实例化,其parent参数已经指定了;

   ■ 位于同一个父节点下的不同component,在实例化时不能使用相同的名字;

3.1.7  uvm_component与uvm_object的二元结构

    ■ uvm_component在整个仿真中是一直存在的,但发送一个transaction(激励)给DUT,此transaction(激励)可能只需要几毫秒就可以发送完,发送完,此transaction(激励)生命周期几乎就结束了;

3.2  uvm的树形结构
3.2.1  uvm_component中的parent参数

    ■ uvm

常用命令和语法速查手册

1 Linux常用命令 1

1.1 基础命令 1

1.1.1 cd 1

1.1.2 ls 1

1.1.3 mkdir 1

1.1.4 cp 1

1.1.5 touch 1

1.1.6 mv 2

1.1.7 pwd 2

1.1.8 rm 2

1.1.9 rmdir 2

1.1.10 cat 2

1.1.11 ln 3

1.1.12 chmod 3

1.1.13 which 3

1.1.14 whereis 3

1.1.15 locate 3

1.1.16 find 4

1.1.17 grep 4

1.1.18 df 4

1.1.19 du 4

1.1.20 more 4

1.1.21 less 4

1.1.22 history 5

1.1.23 echo 5

1.1.24 ps 5

1.1.25 kill 5

1.1.26 top 5

1.2 高级命令 5

1.2.1 sed 5

1.3 文件 7

1.3.1 压缩解压缩 7

1.3.2 格式转换 8

1.4 FTP命令 8

1.5 常用软件 9

1.5.1 LibreOffice 9

1.5.2 Web 10

1.5.3 Spyder 10

2 Gvim常用操作 10

2.1 进入编辑模式 10

2.2 光标移动 11

2.3 查找 11

2.4 进入命令模式 11

2.5 保存 11

2.6 跳转到某行 11

2.7 到文件头尾 11

2.8 删除 11

2.9 回退/恢复 12

2.10 替换 12

2.11 分屏 12

2.12 复制粘贴 12

2.13 折叠 12

3 SV语法 13

3.1 Array数组 13

3.1.1 数组定义 13

3.1.2 数组常用函数及功能 13

3.1.3 数组操作 16

3.2 Queue队列 17

3.2.1 队列定义 17

3.2.2 队列常用函数及功能 17

3.2.3 队列操作 18

4 LSF基础命令 19

4.1 环境配置 19

4.1.1 设置客户端 19

4.1.2 设置参数 19

4.2 提交作业 19

4.3 监控作业 20

4.3.1 bjobs 20

4.3.2 bpeed JobID 20

4.4 控制作业 20

4.4.1 bkill JobID 20

4.4.2 bstop JobID 20

4.4.3 bresume JobID 20

4.5 查看系统负载 21

4.5.1 lsload 21

4.5.2 lshosts 21

4.5.3 bqueues 21

5 SVN常用命令 21

5.1 查看SVN信息(svn info) 21

5.2 下载目录文件 (svn co ...) 21

5.3 上传目录文件 (svn add ..., svn ci ... -m ‘xxx’) 21

5.4 更新文件目录文件 (svn up) 22

5.5 切换SVN路径 (svn sw) 22

5.6 导出脱离SVN的干净目录代码(svn export ...) 22

  1. Linux常用命令
    1. 基础命令
      1. cd

命令格式:cd  [目录名]

功能解释:切换工作目录

操作示例:^_^%>  cd ../ work     //返回上一工作目录

          ^_^%>  cd ./env/sv/  //进入env/sv目录

      1. ls

命令格式:ls  [选项] [目录名]

功能解释:列出目标目录中的所有子目录和文件信息

操作示例:^_^%>  ls -a  .   //显示当前目录文件,包含隐藏文件

^_^%>  ls -l   .  //显示当前目录文件,包含操作属性,等效于ll命令

      1. mkdir

命令格式:mkdir  [选项] 目录名

功能解释:在指定位置创建一个目录

操作示例:^_^%>  mkdir work    //在当前目录下创建一个work目录

      1. cp

命令格式:cp [选项]... [-T] 源 目的

功能解释:复制文件或目录内容

操作示例:^_^%>  cp log.txt log_bak.txt        //将“log.txt”中的内容复制到文件

//“log_bak.txt”中

          ^_^%>  cp –rf ./sv/* ./tmp/          //将当前sv目录下的所有内容复制到

                                          //tmp目录中

      1. touch

命令格式:touch [选项] 文件

功能解释:创建一个不存在的文件或更改文件时间戳

操作示例:^_^%>  touch test.sv        //创建test.sv文件

      1. mv

命令格式:mv [选项] 源文件或目录 目标文件或目录

功能解释:移动文件或者将文件改名

操作示例:^_^%>  mv data.txt  data.log    //将data.txt文件名改为data.log

          ^_^%>  mv log.txt ../          //将log.txt文件移至上一级目录中

      1.  pwd

命令格式:pwd  [选项]

功能解释:查看”当前工作目录“的完整路径

操作示例:^_^%>  pwd      //显示当前目录的完整路径 

          ^_^%>  pwd -p  //显示当前路径,而非使用link创建的路径

      1.  rm

命令格式:rm  [选项]  文件…

功能解释:删除一个目录中的一个或多个文件或目录

操作示例:^_^%>  rm data.txt        //删除data.txt文件 

          ^_^%>  rm –rf ./evn/sv/*  //删除env/sv/目录下的所有内容

      1.  rmdir

命令格式:rm  [选项]  目录...

功能解释:从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限

操作示例:^_^%>  rmdir ./sv                //删除当前目录下的sv空目录

          ^_^%>  rmdir –p ./env/sv/vir_seq  //递归删除env/sv/vir_seq空目录,如果父目录//也为空,则一并删除

      1.  cat

命令格式:cat [选项] [文件]...

功能解释:连接文件或标准输入并打印

操作示例:^_^%>  cat log1.txt    //显示文件log1.txt的内容

          ^_^%>  cat –b log1.txt log2.txt >log.txt  //将log1.txt和log2.txt中的内容加上行号//合并后存入log.txt中,其中空白行不加

      1.  ln

命令格式:ln [选项文件 目标文件

功能解释:为文件创建连接,连接分为硬连接和符号连接两种,默认的连接类型是硬连接,如果要创建符号连接,必须使用“-s”选项。

操作示例:^_^%>  ln /duv/src.txt  ../../env/data/src.txt    //在env/data/下创建src.txt的符号/ /连接,连接到/duv/src.txt上

      1.  chmod

命令格式:chmod [选项] 模式 文件

功能解释: 改变文件的读写权限。只能文件属主或特权用户才能使用该功能

。模式可以是数字形式或以who opcode permission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码),可指定多中模式,以逗号分开,作为选择,我们多数用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。

操作示例:^_^%>  chmod u+x script.sh   //给属主用户增加可执行权限

          ^_^%>  chmod 751 script.sh   //给script.sh的属主分配读、写、执行(7)的权限,//给script.sh的所在组分配读、执行(5)的权限,给//其他户分配执行(1)的权限

      1.  which

命令格式:which  [选项] filename

功能解释:查看可执行文件的位置

操作示例:^_^%>  which passwd   //查看可执行文件passwd的具体路径

      1.  whereis

命令格式:whereis  [选项] filename

功能解释:查看文件的位置

操作示例:whereis passwd   //查看所有passwd文件的具体路径

      1.  locate

命令格式:locate  [选项] filename

功能解释:配合数据库查看文件的位置

操作示例:locate passwd   //在数据库中查看所有passwd文件的具体路径

      1.  find

命令格式:find 路径 [选项]

功能解释:从制定目录开始查找文件

操作示例:find ./ –name data.txt //从当前目录开始查找名为data.txt的文件

      1.  grep

命令格式:grep [选项 ] 字符串 文件路径

功能解释:在一个或多个文件中查找某个指定的字符串,如果找到则显示文件中包含改字符串的每一行

操作示例:grep uvm_error ./work/result.log //从result.log中查找字符串uvm_error。

      1.  df

命令格式:df  [选项]  [文件]

功能解释:显示文件系统给的当前占用情况

操作示例:^_^%>  df -h   //查看文件系统占用情况

      1.  du

命令格式:du  [选项]  [文件]

功能解释:显示文件或目录占用的空间大小

操作示例:^_^%>  du -sh    //显示当前目录占用空间大小(单位K字节)

      1.  more

命令格式:more  [选项] filename

功能解释:让画面在显示满一页时暂停,此时可按空格健继续显示下一个画面,或按Q键停止显示

操作示例:^_^%>  more block.log    //分页显示block.log文件内容

      1.  less

命令格式:less  [选项] filename

功能解释:用法与more命令类似,也可以用来浏览超过一页的文件所不同的是less命令除了可以按空格键向下显示文件外,还可以利用上下键来卷动文件

操作示例:^_^%>  less block.log    //分页显示block.log文件内容

      1.  history

命令格式:history

功能解释:显示历史操作信息

操作示例:^_^%>  history    //显示历史操作命令

      1.  echo

命令格式:echo [选项] 字符串

功能解释:将字符串内容送给标准输出

操作示例:^_^%>  echo “this is a test”   //在屏幕上打印this is a test字样

^_^%>  echo $DUV_PATH    / /显示宏定义$DUV_PATH的具体信息

      1.  ps

命令格式:ps  [选项]

功能解释:查看进程

操作示例:^_^%>  ps   //显示当前所有进程

^_^%>  ps –ef | more   //分页显示当前所有进程

      1.  kill

命令格式:kill  [选项] 进程号

功能解释:杀掉进程

操作示例:^_^%>  kill 323   //杀掉进程号为323的进程

      1.  top

命令格式:top

功能解释:监视进程状态

操作示例:^_^%>  top    //显示当前所有进程信息

    1. 高级命令
      1. sed

Sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据惊醒替换、删除、新增、选取等操作。

Sed命令行格式为: sed [-nefri] ‘command’输入文本

一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加

到备份文件中。

常用选项

-n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会      被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或     者动作)才会被列出来

-e直接在指令列模式上进行 sed 的动作编辑

-f直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed      动作;

-rsed 的动作支援的是延伸型正规表示法的语法(预设是基础正规表示法语法)

-i直接修改读取的档案内容,而不是由屏幕输出。

常用命令

a新增,a的后面可以接字串,而这些字串会在新的一行出现(前的下一行)

c取代,c的后面可以接字串,这些字串可以取代 n1n2 之间的行

d删除,执行删除操作,d 后面通常不接任何字符串

i插入,i的后面可以接字串,而这些字串会在新的一行出现(前的上一行);

p列印,将某个选择的内容打印来,通常 p 会与参数 sed -n 一起

s:替代执行替代操作,通常这个 s 的动作可与正则表达式一起操作。

操作示例:(假设我们有一名为my_pro.log的文件)

^_^%>  sed 1d my_pro.log      //删除第一行

^_^%>  sed ‘$d my_pro.log      //删除最后一行

^_^%>  sed ‘1, 2d my_pro.log    //删除第一行到第二行

^_^%>  sed ‘3, $d my_pro.log    //删除第三行到最后一行

^_^%>  sed ‘/test/’d my_pro.log    //删除全文中包含“test”的行

^_^%>  sed ‘1p my_pro.log      //显示第一行

^_^%>  sed ‘$p my_pro.log      //显示最后一行

^_^%>  sed ‘1, 2p my_pro.log    //显示第一行到第二行

^_^%>  sed ‘3, $p my_pro.log    //显示第三行到最后一行

^_^%>  sed ‘1a mark my_pro.log    //第一行后增加字符串“mark”

^_^%>  sed ‘1, 3a mark my_pro.log    //第一行至第三行后增加字符串“mark”

^_^%>  sed  ‘s/ok/not ok/g’ my_pro.log    //将文件中的“ok”替换为“not ok” 

^_^%>  sed  -n ‘s/ok/not ok/g’ my_pro.log    //将文件中的“ok”替换为“not ok”,//并且打印出来 

    1. 文件
      1. 压缩解压缩

语法格式:tar [主选项+辅选项] 文件或者目录

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

  1. 主选项介绍

c 创建新的文件如果用户想备份一个目录或是一些文件,就要选择这个选项。
r 把要存档的文件追加到已创建文件的尾。例如用户已经作好备份文件,又发现还有

一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加

到备份文件中。
t 列出文件的内容,查看已经备份了哪些文件。
u 更新文件用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,  

则把它追加到备份文件的最后。
x 从已创建文件中释放文件。

  1. 辅助选项介绍
    b 该选项后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。
    f 使用文件或设备,这个选项通常是必选的
    k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。
    m 在还原文件时,把所有文件的修改时间设定为现在。
    M 创建多卷的档案文件,以便在几个磁盘中存放。
    v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
    w 每一步都要求确认。
    z 用gzip来压缩/解压缩文件,加上该选项后可以将文件进行压缩,但还原时也一定要

使用该选项进行解压缩。

操作示例:

  1. 压缩

^_^%>  tar -cvf my_pro.tar *.sv 

 这条命令是将所有以.sv为后缀的文件打成一个名为my_pro.tar的包。

^_^%>  tar -czf my_pro.tar.gz *.sv

   这条命令是将所有以.sv为后缀的文件打成一个名为my_pro.tar.gz的包。

^_^%>  tar -cjf my_pro.tar.bz2 *.sv

   这条命令是将所有以.sv为后缀的文件打成一个名为my_pro.tar.bz2的包。

  1. 解压缩

^_^%>  tar -xvf my_pro.tar

 这条命令是解出my_pro.tar包中所有文件。

^_^%>  tar -xzf my_pro.tar.gz

 这条命令是解出pro.tar.gz包中所有文件。

^_^%>  tar -xjf my_pro.tar.bz2

 这条命令是解出my_pro.tar.bz2包中所有文件。

      1. 格式转换

我们有时要把在Windows操作系统下编辑的文本文件在Linux系统下使用或者再编辑,因为LinuxWindows文本文件的行结束标志不同。在Linux中,文本文件用"/n"表示回车换行,而Windows"/r/n"表示回车换行。所以在Linux中使用Windows的文本文件常常会出现错误。为了避免这种错误,Linux提供了两种文本格式相互转化的命令:dos2unixunix2dosdos2unix"/r/n"转化成"/n"unix2dos"/n"转化成"/r/n"

        1. Dos2unix ()

语法格式:dos2unix 源文件 目的文件

操作示例:^_^%>  dos2unix a.txt b.txt       //将Window下编辑的文件a.txt转换为Linux

//下的格式b.txt文件

        1. Unix2dos ()

语法格式:unix2dos 源文件 目的文件

操作示例:^_^%>  dos2unix b.txt a.txt       //将Linux下编辑的文件b.txt转换为Windows

//下的格式a.txt文件

    1. FTP命令
  1. 连接ftp服务器

语法格式:ftp [hostname| ip-address]

操作示例:连接IP地址为10.7.73.2的ftp服务器,在命令行模式下输入:

^_^%>  ftp 10.7.73.2

^_^%>  根据提示输入用户名密码

^_^%>  ls  //查看服务器上当前目录的内容

  1. 下载文件

语法格式:get [remote-file] [local-file]

操作示例:从服务器上取data.txt文件,在命令行模式下输入:

^_^%>  get data.txt

^_^%>  !ls //查看本地当前目录的内容,查看是否正常下载

  1. 上传文件

语法格式:put local-file [remote-file]

操作示例:上传report.txt文件到服务器,在命令将模式下输入:

^_^%>  put report.txt

^_^%>  ls  //查看服务器上当前目录的内容,查看是否正常上传

  1. 断开连接

语法格式:bye

操作示例:断开与与ftp服务器的连接,在命令将模式下输入:

^_^%>  bye(Enter)  //断开连接。

    1. 常用软件
      1. LibreOffice

命令格式:soffice [options] [documents]

常用选项:

--writer:启动文字处理器;

--calc:启动一个空的电子表格;

--web:启动一个空的HTML文档;

--helpwriter:获取writer帮助文件;

--helpcalc:获取电子表格帮助文件;

--writer --nologo:不显示屏幕的情况下启动LibreOffice;

--view:以只读模式打开文件;

--headless --convert-to pdf example.doc:将example.doc转换为pdf文件。

操作示例:

  1. 打开Word文件

^_^%>  soffice 123.doc   //打开123.doc文件

  1. 打开PDF文件

^_^%>  soffice 123.pdf  //打开123.pdf文件

  1. 打开Excel表格

^_^%>  soffice 123.xlsx  //打开123.xlsx文件

  1. 打开PPT演示文档

^_^%>  soffice 123.pptx  //打开123.pptx文件

  1. 打开HTML文件

^_^%>  soffice 123.html  //打开123.html文件

  1. 将文档转换为PDF格式

^_^%>  soffice --headless --convert-to pdf 123.doc  //打开123.doc转换为123.pdf

  1. 启动一个空的电子表格

^_^%>  soffice --calc   //启动一个空的电子表格

      1. Web

命令格式:/usr/lib64/firefox/firefox [options] [URL]

常用选项:

--new-table:在firefox的新标签页中加载指定URL;

--private-window:在新的隐私窗口中打开URL;

--new-window:在新的窗口中打开URL;

--browser:打开一个浏览器窗口;

--jsconsole:打开浏览器控制台;

操作示例:

  1. 打开firefox浏览器窗口

^_^%>  firefox --browser   //打开firefox浏览器窗口

  1. 在firefox的新标签页中加载指定URL

^_^%>  firefox --new-table http://localhost/test/testapp 

      //在新建标签页中加载http://localhost/test/testapp 

  1. 打开浏览器控制台

^_^%>  firefox --jsconsole   //打开浏览器控制台

      1. Spyder

命令格式:/pub/tools/others/anaconda3/bin/spyder [options] files

常用选项:

--new-instance:在spyder上运行一个新的实例;

--reset:删除所有配置文件;

--hide-console:隐藏父控制台窗口;

操作示例:

  1. 打开123.py文件

^_^%>  /pub/tools/others/anaconda3/bin/spyder 123.py   //打开123.py文件

  1. 删除所有配置文件

^_^%>  /pub/tools/others/anaconda3/bin/spyder --reset   //删除所有配置文件

  1. Gvim常用操作
    1. 进入编辑模式

操作符:  i

用法示例: 打开文件后, 输入“i”,即可进入编辑模式。

    1. 光标移动

操作符:  h, j, k, l

用法示例: 打开文件后,点击“h键”可将光标向左移动;点击“j键”可将光标向上移动;点击“k键”可将光标向右移动;点击“n键”可将光标向下移动。

    1. 查找

操作符:  /

用法示例: 打开文件后,输入“/agent\[0\]”即可查找到含有“agent[0]”关键字的行。

    1. 进入命令模式

操作符:  :

用法示例: 打开文件后,输入“:”即可进入命令模式。

    1. 保存

操作符:  :w或:!w

用法示例: 打开文件,进入命令模式后,输入“W”或者“!w”即可保存当前编辑结果。

    1. 跳转到某行

操作符:  :xx

用法示例: 打开文件,进入命令模式后,输入“55”即可跳转到55行。

    1. 到文件头尾

操作符:  gg和GG

用法示例: 打开文件后,输入“gg”可跳转到文件头;输入“GG”可跳转到文件尾。

    1. 删除

操作符:  :xxd

用法示例: 打开文件,进入命令模式后,输入“55d”,可删除55行内容;输入“2,55d”可删除第2行到第55行的内容。

    1. 回退/恢复

操作符:  u, ctrl+r

用法示例: 打开文件,执行多次保存操作后,输入“u”可回退文件到前一次编辑时的状态,连续输入可回退多次;同时输入“ctrl+r”可从回退的状态往后一编辑状态转变。 

    1. 替换

操作符:  :%s/XXX/xxx/g

用法示例: 打开文件,进入命令模式后,输入“%s/123/567/g”,可保存当前文件中所有“123”替换为“456”。

    1. 分屏

操作符:  :sp或vp

用法示例: 打开文件,进入命令模式后,输入“sp”即将当前屏幕水平分屏;输入“vp”可将当前屏幕垂直分屏。

    1. 复制粘贴

操作符:  nyy, p, ndd

用法示例: 打开文件,输入“5yy”可复制当前光标开始的5行,移动光标后输入“p”可将刚才复制的内容粘贴在当前光标处;输入“3dd”,可删除当前光标处开始的3行内容。

    1. 折叠

操作符:  zC,zO或zc,zo

用法示例: 打开文件, 输入“zO”可打开所有折叠点的折叠文件,输入“zc”可在所有折叠点折叠文件;光标移动到折叠点处,输入“zo”可展开当前折叠点;输入“zc”可在当前折叠点折叠文件。

  1. SV语法
    1. Array数组
      1.  数组定义

数组是同类元素存储在一起的单元集合,有常规数组,动态数组和关联数组之分。

可如下定义数组:

int      ai_data[3]= {1, 2, 3};       //定义有三个整型元素的数组

string    as_name[] = {“LiLei”, “HaiMeimei”};  //定义有两个元素的数组

bit [7:0]  ab[0:15];   //定义有16个元素的8bit数的数组, 等效于bit [7:0] ab[16];

      1.  数组常用函数及功能
        1. Find()

函数功能: 返回数组中满足给定条件的元素,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.find(x) with (x == 4);    //qi = {4, 4};

           qi = ai.array.find(x) with (x > 4);    //qi = {};

        1. Find_index() 

函数功能: 返回数组中给定条件的元素的索引值,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.find_index(x) with (x <= 2);    //qi = {0, 1, 6, 7};

        1. Find_first()

函数功能: 返回数组中满足条件的第一个元素,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.find_first( ) with ( item <= 5);    //qi = {1};

        1. Find_first_index()

函数功能: 返回数组中满足条件的第一个元素的索引值,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.find_first_index( ) with ( item > 3);    //qi = {3}

        1. Find_last()

函数功能: 返回数组中满足条件的最后一个元素,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.find_last( ) with ( item >= 1);    //qi = {1};

        1. Find_last_index()

函数功能: 返回数组中满足条件的最后一个元素的索引值,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.find_last_index( ) with ( item > 3);    //qi = {4}

        1. Min()

函数功能: 返回数组中的最小元素,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.min( );    //qi = {1, 1};

        1. Max()

函数功能: 返回数组中的最大元素,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.array.max( );    //qi = {4, 4};

        1. Unique()

函数功能: 返回数组中的不重复元素,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.unique( );    //qi = {1, 2, 3, 4};

        1. Unique_index()

函数功能: 返回数组中的不重复元素的索引值,返回类型为队列。

用法示例: int  ai_array[8] = {1, 2, 3, 4, 4, 3, 2, 1};

           int  qi[$];

           qi = ai.unique( );    //qi = {0, 1, 2, 3};

        1. Reverse()

函数功能: 将数组中元素的逆序排列。

用法示例: int  ai_array[5] = {2, 3, 1, 4, 8};

           ai.array.reverse( );    //ai = {8, 4, 1, ,3, 2};

        1. Sort()

函数功能:将数组中元素的从小到大排列。

用法示例: int  ai_array[5] = {2, 3, 1, 4, 8};

           ai.array.sort( );    //ai = {1, 2, 3, 4, 8};

        1. Rsort()

函数功能:将数组中元素的从大到小排列。

用法示例: int  ai_array[5] = {2, 3, 1, 4, 8};

           ai.array.rsort( );    //ai = {8, 4, 3, 2, 2};

        1. Shuffle()

函数功能: 将数组中的元素随机化排列。

用法示例: int  ai_array[5] = {2, 3, 1, 4, 8};

           ai.array.shuffle ( );    //元素任意顺序摆放;

        1. Sum()

函数功能: 将数组元素的和返回。

用法示例: int  ai_array[ ] = {1, 2, 3, 4};

           int  i_data;

           i_data = ai_array.sum ( );    // i_data == 10 == 1+2+3+4;

        1. Product()

函数功能: 将数组元素的积返回。

用法示例: int  ai_array[ ] = {1, 2, 3, 4};

           int  i_data;

           i_data = ai_array.product ( );    // i_data == 24 == 1x2x3x4;

        1. And()

函数功能: 将数组元素相与后返回。

用法示例: bit [2:0]  b_array[ ] = {1, 2, 3, 4};

           bit [2:0]  b_data;

           b_data = b_array.and ( );    //b_data == 24 == 1&&2&&3&&4;

        1. Or()

函数功能: 将数组元素的积返回。

用法示例: bit [2:0]  b_array[ ] = {1, 2, 3, 4};

           bit [2:0]  b_data;

           b_data = b_array.or ( );    //b_data == 7 == 1||2||3||4;

        1. or()

函数功能: 将数组元素的积返回。

用法示例: bit [7:0]  b_array[ ] = {1, 2, 3, 4};

           bit [7:0]  b_data;

           b_data = b_array.xor( ) with {item+4};    //b_data == 12 == 5^6^7^8;

      1.  数组操作

int  a[100:1];    // 定义有100个整数元素的数组;

int  b[];        // 定义一个动态数组;

int  c[] = new[8]; // 定义一个有8个元素的素组;

b = a;          //  将a赋值给b;

b = c;          //  将c赋值给b;

b = new[c.size()](c);  // 将c赋值给b;

c = a[8:1]          // 将a中的前8个元素赋值给c;

    1. Queue队列
      1.  队列定义

队列是同类元素按顺序存储,长度可自适应变化的一个数据集合。类似于数组,可以使用位置索引来应用其中的元素,其中索引0指示队列的第一个元素,$指示队列的最后一个元素。

可如下定义队列:

int     qi_data[$]= {1, 2, 3};       //定义有三个整型元素的队列

string   qs_name[$] = {“LeiFen”};  //定义有一个元素的字符串队列

bit     qb[$:15];                //定义一个元素个数最大为15的队列

      1.  队列常用函数及功能
        1. Size()

函数原型: function int size( )

函数功能: 返回队列中元素的个数。

用法示例: int  qi_data[$] = {3, 6, 3};

           int  i_num;

           i_num = qi_data.size( );    //i_num ==3;

        1. Insert() 

函数原型: function void insert(input integer i_index, input element_type item)

函数功能: 在队列的i_index位置处插入item元素。

用法示例: int  qi_data[$] = {3, 6, 9};

           qi_data.insert(2, 7);       // qi_data == {3, 6, 7, 9};

    注意: 当i_index<0或i_index>$时,执行insert操作后队列无变化。       

        1. Delete()

函数原型: function void delete(input integer i_index)

函数功能: 输出队列中位置i_index的元素。

用法示例: int  qi_data[$] = {3, 6, 7, 9};

           qi_data.delete(1);       // qi_data == {3, 7, 9};

           qi_data.delete( );       // qi_data = {};

    注意: 当i_index<0或i_index>$时,执行delete操作后队列无变化;当函数的参数为空时,执行delete操作将删除队列的所有元素。

        1. Pop_front()

函数原型: function element_type pop_front( )

函数功能: 移除队列的第一个元素且返回此元素

用法示例: int  qi_data[$] = {3, 6, 9};

           int  i_data;

           i_data = qi_data.pop_front( );       //i_data == 3; qi_data == {6, 9};

        1. Pop_back()

函数原型: function element_type pop_back( )

函数功能: 移除队列的第一个元素且返回此元素。

用法示例: int  qi_data[$] = {3, 6, 9};

           int  i_data;

           i_data = qi_data.pop_back( );       //i_data == 9; qi_data == {3, 6};

        1. Push_front()

函数原型: function void delete(input element_type item)

函数功能: 将元素item压入队列头部。

用法示例: int  qi_data[$] = {3, 6, 9};

           qi_data.push_front (7);       // qi_data == {7, 3, 6, 9};

        1. Push_back()

函数原型: function void delete(input integer i_index)

函数功能: 将元素item压入队列尾部。

用法示例: int  qi_data[$] = {3, 6, 9};

           qi_data.push_back (7);       // qi_data == {3, 6, 9, 7};

      1.  队列操作

首先,队列支持数组的常用操作;其次,队列还支持以下基本原则:

  1. 队列可以自适应的变化长短,不用担心它的最大边界限制,如:

int  qi[$];  //定义一个整数队列

qi = {1, 2, 3};    //给队列赋值3个元素

qi = {4, 5, 6,7}   //给队列重新赋值4个元素,元素自适应加一

  1. 队列的部分引用,索引值不用是常量表达式,如:

qi[5 : (a + b)];    //引用队列qi中5到(a+b)的元素,其中i_a+i_b为变量//表达式

  1. 空队列是有效的队列,可以是一些操作后的结果;
  2. qi[a:b]表示队列中含有b-a+1个元素;qi[n:n] ===qi[n];当a<0或b>$时,队列qi为空队列;
  3. 对列有它自己内建的一些方法,如(3.2.2)。
  1. LSF基础命令
    1. 环境配置
      1.  设置客户端

通过ssh客户端,用hwi域账号和密码器登录loginserver,设置客户端。

      1.  设置参数

方法一:在lsf软件安装目录下设置,路径为:

source/pub/platform/lsf/conf/cshrc.lsf

方法二:将配置执行文件写在用户的.cshrc文件。

    1. 提交作业

命令格式:bsub -o%J.out -IP -m xarhel70 myjob

功能解释:

-o filename:脚本或者命令的执行结果和出错信息写在filename文件

%J:bsub提交的Job_ID;

-o %J.out:把执行结果写在Job_ID.out文件

-IP:交互式作业;

-m:指定Job运行的服务器;

“myjob”:用户脚本;

常用命令:

-B:当作业被派遣并开始执行时发送一封电子邮件;

-b begin time:指定派遣作业的最早日期或时间;

-c cpu time:限制作业可以使用的总CPU时间;

-e file name:指定输出文件,作业提交后标准错误输出的信息会保存在这个文件中;

-J Job name:指定作业的名字;

-R “...”:资源需求串;

-q queue name:提交作业到指定队列;

-W runtime:限定作业的运行时间;

-w expression:提交作业前指定操作;

-R string:设置资源需求;

    1. 监控作业
      1.  bjobs

命令格式:bjobs

功能解释:显示用户的job状态

操作示例:^_^%>  bjobs    //显示用户的job状态

      1.  bpeed JobID

命令格式:bpeek JobID

功能解释:显示正在运行的Job的输出和出错信息

操作示例:^_^%>  bpeek 123    //显示123的输出和出错信息

    1. 控制作业
      1.  bkill JobID

命令格式:bkill JobID

功能解释:终止正在运行或者等待队列中的任务

操作示例:^_^%>  bkill 123    //终止任务123

      1.  bstop JobID

命令格式:bstop JobID

功能解释:挂起没有运行结束的任务

操作示例:^_^%>  bstop 123    //挂起任务123

      1.  bresume JobID

命令格式:bresume JobID

功能解释:恢复运行挂起的任务

操作示例:^_^%>  bresume 123    //恢复任务123

    1. 查看系统负载
      1.  lsload

命令格式:lsload

功能解释:显示负载信息

操作示例:^_^%>  lsload    //显示负载信息

      1.  lshosts

命令格式:lshosts

功能解释:显示host信息

操作示例:^_^%>  lshosts    //显示host信息

      1.  bqueues

命令格式:bqueues

功能解释:显示队列信息

操作示例:^_^%>  bqueues    //显示队列信息

  1. SVN常用命令
    1. 查看SVN信息

命令格式:svn info

功能解释:查看版本信息

操作示例:^_^%>  svn info testcase0.sv    //查看文件testcase0.sv版本信息

    1. 下载目录文件

命令格式:svn co https://路径(目录或文件全路径) [本地目录全路径]

功能解释:下载目录文件

操作示例:^_^%>  svn co https://localhost/test/testapp    //下载目录testapp

    1. 上传目录文件

命令格式:svn add 文件名

功能解释:添加新文件

操作示例:^_^%>  svn add testcase0.sv    //添加文件testcase0.sv

命令格式:svn ci ...-m xxx

功能解释:上传新文件

操作示例:^_^%>  svn ci testcase0.sv -m ‘commit testcase0.sv’    //上传文件testcase0.sv

    1. 更新文件目录文件

命令格式:svn up 文件名

功能解释:更新文件目录文件

操作示例:^_^%>  svn up testcase0.sv    //更新文件testcase0.sv

    1. 切换SVN路径

命令格式:svn sw https://目录全路径 本地目录全路径

功能解释:切换svn路径

操作示例:^_^%>  svn sw http://localhost/test    //切换路径到http://localhost/test

    1. 导出脱离SVN的干净目录代码

命令格式:svn export [-r 版本号] https://目录全路径 [本地目录全路径]

功能解释:导出脱离svn的干净目录代码

操作示例:^_^%>  svn export https://localhost/test/testapp    //导出目录testapp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值