VCS 学习

1. 基本用法

  • vcs a.v b.v top.v执行之后可以得到一个名为simv的可执行文件,执行这个文件就可以启动仿真
  • 针对这个可执行文件有四种常规用法:
    1. 直接调用,会执行到 $finish ,如果代码里还写了 $stop ,遇到此调用还会启动ucli命令行
    2. ucli:./simv -ucli调用,可以通过命令行控制仿真,比如说命令行里输入run就会执行仿真,如果编译的时候没有指定特定的-debug选项,会启动mini UCLI,仅支持run和quit
    3. dve:./simv -gui=dve调用,图形化界面,可以在dve的图形化界面中控制仿真,类似modelsim等
    4. verdi:./simv -gui=verdi另一个图形界面,功能更强大,需要指定-kdb -lca选项,

2. 常用选项

  • -y指定库的目录,包含其他的.v文件

  • -f configure.f在configure.f里面可以写各种vcs要用到的编译时的参数,源文件,路径等等。注意,只有编译过程的选项起效,其他选项并不能放在这个文件中,比如-debug_access+all,能执行的选项包括:

    • 任意以+开头的编译时选项
    • -f -y -l -u -v这五个以-开头的编译时选项
  • +libext+.v指定在库中要搜索.v文件

  • +incdir+文件路径指定`include搜索的路径

  • -suppress=messageID,停止某些信息的输出,如-suppress=SV-LCM-PPWI,停止ID为SV-LCM-PPWI的信息输出

  • -timescale=1ns/1ps,设置仿真的timescale

  • -sverilog支持system verilog,具体哪个版本查阅手册,vcs2016支持sv2012标准

  • +warn=none停止警告信息输出

  • -debug_all 打开所有调试功能,需要调试的时候要指定这个选项,除此之外还有类似的-debug_pp,-debug,-debug_access+,性能影响-debug_all>-debug>-debug_pp,-debug_access可以更细粒度的指定功能,可以比-debug_pp消耗更少

  • -fsdb/-debug_access+fsdb使能fsdb波形数据记录,-fsdb即将废弃,用-debug_access+fsdb替代

3. Verdi

  • verdi可以直接打开fsdb文件,通过-ssf选项
  • View -> signal list可以查看信号列表

4. 踩坑记录

  • system verilog写的package文件,通过-y指定库路径是没法搜到的,需要单独写出源文件
  • 如果文件名和模块名不一致,也可能无法通过-y指定库路径搜索到,需要单独写出源文件
  • 如果一个文件里写了一个主module和多个子module,如果主module通过generate语句生成例化子module,可能汇报incorrect construct library的错误,这时候把主模块放到文件顶部就可以解决这个问题?原因未知,猜测和vcs编译文件的读取方式有关

DC学习1:overview

  • QoR: Quality of result
  • TTR: Time to result

1.流程

  • Synthesis = Translation + Logic Optimization + Gate Mapping
  • 第一步:读取RTL文件 read_verilog
  • 第二步:约束 source constraintfile
  • 第三步:综合 compile_ultra
  • 第四步:查看报告 report_*
  • 第五步:保存网表 write_file write_icc2_files

2. WLM mode vs TOPO mode

  • WLM 基于fanout,不考虑实际的拓扑结构(可参考dc概论)
  • TOPO会考虑粗糙的布局,就可以发现考虑布局产生的影响,需要physical library(Milkyway)和technology data

3.DC综合的流程

  • 两步综合
  • 第一步:当没有floorplan信息的时候,可以使用默认值,也可以个给一些已知的约束,获得第一步综合的结果,这个结果可以给floorplan带来帮助
  • 第二步:当获得了actual floorplan的结果之后,可以给出这个结果来进行更好的综合

docker部署hexo

今天心血来潮想要在GitHub Page上部署一个博客,本来想直接在Ubuntu上配好hexo的环境,可是npm的某些依赖版本和ros melodic不兼容,配置hexo以失败告终,因此我通过docker来绕过这个环境配置,以前只闻docker大名,没有真正用过,今天就来试一下。

环境:Ubuntu 18.04

1. docker

  1. 安装docker,参考华为云镜像中的dockers安装 https://mirrors.huaweicloud.com/home

  2. 配置docker registry的源:修改/etc/docker/dameon.json,添加下面的配置

    1
    2
    3
    4
    5
    6
    {
    "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
    ]
    }

    然后重启docker的服务sudo systemctl restart docker,查看是否添加docker info

    • 如果遇到权限问题,可以将当前用户加入docker用户组,再重启docker服务
  3. 常用的docker命令

    1
    2
    3
    4
    5
    6
    7
    docker run  #生成并启动一个容器
    docker start #启动一个容器(如果容器关闭了可以通过这个调用)
    docker exec #使容器执行某些指令,比如启动交互的bash等等,这个命令必须在容器正在运行的时候使用
    docker stop #停止容器
    docker ps #查看正在运行的容器
    docker container ls -a #查看所有的容器
    docker volume #构建容器数据卷,可以持久化存储

2. hexo

  1. 环境准备:接下来就是找一个hexo的镜像,并且跑起来,我找到的是taskbjorn/hexo(docker hub上找)

    1
    2
    docker volume create my_hexo_data
    docker run -it --name my_hexo_container -p 4000:4000 -v hexo_data:/home/hexo/.hexo taskbjorn/hexo

    这样会在my_hexo_data这个volume中构建一个hexo的基础文件夹(hexo init),这时候查看http://0.0.0.0:4000 就可以看到hexo的界面

    docker exec -it my_hexo_container sh
    启动命令行交互,这时候可以调用容器内的各种资源了,注意,容器是以alpine作为基础的

  2. 为了能完成部署,镜像中还需要装一些依赖

    1
    2
    apk add openssh
    npm install hexo-deployer-git --save
    • 调用apk命令的时候需要root权限,在docker启动命令行的时候要指定参数
    • docker exec -it --user root my_hexo_container sh
  3. hexo的基本使用:

    1
    2
    3
    hexo new "article" #创建一个新页面
    hexo g #生成静态页面
    hexo d #部署
    • 注意在部署这一步,需要修改_config.yml文件,加入如下配置
      1
      2
      3
      4
      5
      deploy:
      type: git
      # 填上你自己的仓库名,注意后面有`.git`
      repository: git@github.com:xxx/xxx.github.io.git
      branch: master
    • 注意此处的分支,如果是master的话,请改成main