推荐一款好用的跑仿真的开源python脚本_XtremeDV的博客-程序员秘密

技术标签: 脚本语言  python  simulation script  IC验证  Python  YASA  

YASA

YASA - Yet Another Simulation Architecture

YASA是一款跑IC软件仿真的开源框架。它支持synopsys vcs和cadence irun。支持synopsys 2-step或者3-step的仿真flow。它支持SV/UVM或者纯verilog的testbench,支持lsf作业调度系统。
它提供了一系列灵活的配置选项。用户可配置的文件有三个:userCli.cfg,build.cfg,group.cfg。

userCli.cfg

userCli.cfg提供用户自定义命令行选项。

[userCli]

    [[vh]] #set verbosity to UVM_HIGH
    sim_option = +UVM_VERBOSITY=UVM_HIGH

    [[prof]]
    compile_option = -simprofile0
    sim_option = -simprofile time

    [[$wave_name]] #set fsdb waveform name
    sim_option = "+WAVE_NAME=$wave_name"

    #general CLI,user should not edit it
    [[$pre_comp_option]]     #previous compile option

    [[$comp_option]]         #compile option
    compile_option = $comp_option

    [[$post_comp_option]]    #post compile option

    [[$pre_sim_option]]      #previous sim option

    [[$sim_option]]          #sim_option
    sim_option = $sim_option

    [[$post_sim_option]]     #post sim option

两个中括号扩住的文字就是一个命令行选项。例如 [[vh]] ,可以这么用
YASAsim -t sanity1 -vh -vh 后面不可以在更配置信息
如果想,可以参考 [[$wave_name]] 这么用:

YASAsim -t sanity1 -wave_name test1 wave_name 后可以跟一些文字

[[xxx]], xxx关键字区分大小写

build.cfg

build.cfg提供关于整个testbench的设置信息,例如要读取的filelist,一些通用的编译时选项和仿真时选项等。

#user defined build option(keyword can't be deleted)
[build]
default_build = jvs_memory
compile_option = -sverilog -ntb_opts uvm
compile_option = -full64 -notice -assert svaext
compile_option = -lca 
#compile_option = -debug_access+pp
compile_option = -P $NOVAS_TAB $NOVAS_PLI 
compile_option = +vcs+lic+wait
compile_option = -f $PRJ_HOME/etc/jvs.f
pre_compile_option = $PRJ_HOME/bin/pre_compile.csh
post_compile_option = $PRJ_HOME/bin/post_compile.csh
pre_sim_option = $PRJ_HOME/bin/pre_sim.csh
post_sim_option = $PRJ_HOME/bin/post_sim.csh

    [[jvs_memory]]
    testdir = $PRJ_HOME/testcases/jvs_memory    
    compile_option = -timescale=1ns/10ps 
    compile_option = $PRJ_HOME/tb/jvs_memory_tb.sv -top jvs_memory_tb

    [[jvs_irq]]
    testdir = $PRJ_HOME/testcases/jvs_irq
    compile_option = -timescale=1ns/10ps 
    compile_option = $PRJ_HOME/tb/jvs_irq_tb.sv -top jvs_irq_tb

    [[jvs_reg]]
    testdir = $PRJ_HOME/testcases/jvs_register_region
    compile_option = -timescale=1ns/10ps 
    compile_option = $PRJ_HOME/tb/jvs_register_region_tb.sv -top jvs_register_region_tb

    [[jvs_clk_rst]]
    testdir = $PRJ_HOME/testcases/jvs_clk_rst_group
    compile_option = -timescale=1ns/10ps 
    compile_option = $PRJ_HOME/tb/jvs_clk_rst_group_tb.sv -top jvs_clk_rst_group_tb

整个build.cfg中有几个关键保留字段。testdir,compile_option,sim_option ,pre_compile_option ,post_compile_option ,pre_sim_option ,post_sim_option。这些保留字段分别配置不同的信息。testdir指定仿真testcase所在路(TODO是否只能设置一次)。compile_option指定仿真的编译选项,sim_option指定仿真时选项。这两个字段相关的信息会生成到最终的compile.csh中。
pre_compile_option 对应的配置信息最终会写到pre_compile.csh中。其他的类推。
[[build]]中的是一些通用选项。也就是说candy_lover和candy_lover_regr都会包含build下的配置。
如果你在仿真时,不输入你打算使用哪个build(哪个testbench),默认会使用default_build 设置的那个build。例如。
YASAsim -t sanity1 就会默认使用default_build设置的build配置的相关testbench的信息。
YASAsim -b jvs_reg -t sanity1 就会默认使用jvs_reg配置的相关testbench的信息。

group.cfg

group.cfg提供了对一组要进行仿真testcase的信息的描述。

#user defined testgroup option(keyword can't be deleted)
[testgroup]

    [[jvs_memory]]
    build = jvs_memory
    args = -vh
    tests = jvs_memory_showcase

    [[jvs_irq]]
    build = jvs_irq
    args = -vh
    tests = jvs_int_simple_test
    tests = jvs_msi_irq_test
    tests = jvs_soft_irq_test

    [[jvs_reg]]
    build = jvs_reg
    tests = jvs_register_region_test

    [[jvs_clk_rst]]
    build = jvs_clk_rst
    tests = jvs_clk_rst_group_basic_test

以jvs_irq group为例。build=jvs_irq 说明使用jvs_irq 这个build指定的testbench的配置信息。args =-vh,指定仿真时选项。build和args字段只能出现一次。build只能有一个,但是args字段对应的信息可以有多个。例如:
args = -vh -r 5 -seed 1 意思是 jvs_irq group中的所有三个case都要使用args指定的仿真时选项。-vh 是设置+UVM_VERBOSITY=UVM_HIGH。-r 5意思是每个case跑5遍。-seed 1意思是用sv seed为1。
但是有一点需要注意的是, tests字段指定的选项的优选级更高,会覆盖掉args中设置的通用配置。例如:
tests = jvs_soft_irq_test -seed 12345
这时,jvs_soft_irq_test 就会使用seed 12345而不是seed 1跑5遍。

典型的用法:

  • show help doc

    %> python3 yasaTop.py -h

  • show YASA doc file and copyright

    %> python3 yasaTop.py -doc

  • show YASA version

    %> python3 yasaTop.py -version

  • compile only, build candy_lover, unique_sim mode

    %> python3 yasaTop.py -b candy_lover -co -u

  • compile only, testcase sanity1

    %> python3 yasaTop.py -t sanity1 -co

  • running testcase sanity1, 5 times,each time with random seed

    %> python3 yasaTop.py -t sanity1 -r 5

  • running testcase sanity1 with seed 352938188

    %> python3 yasaTop.py -t sanity1 -seed 352938188

  • running testcase sanity1 with seed 352938188, sim only

    %> python3 yasaTop.py -t sanity1 -seed 352938188 -so

  • compile only, group top_smoke

    %> python3 yasaTop.py -g top_smoke -co

  • running group top_smoke, use 5 threads

    %> python3 yasaTop.py -g top_smoke -p 5

项目的github地址是YASA
对应使用YASA作为仿真脚本的实例的github地址如下:
YasaUvk, uvm_candy_lover

Issue

YASAsim -t sanity1 -sim_option "-UVM_RANDOM_SEED=12345"时会语法问题,因为"-UVM_RANDOM_SEED=12345"中的‘-’也会被作为一个命令的分隔符,因而出现argparser错误,为了解决这个问题,有两个折中方案。

  1. YASAsim -t sanity1 -sim_option " -UVM_RANDOM_SEED=12345" ‘-’加空格
  2. YASAsim -t sanity1 -sim_option="-UVM_RANDOM_SEED=12345" 加=

详细解决方案的参考Can’t get argparse to read quoted string with dashes in it?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhajio/article/details/88943669

智能推荐

双向链表的创建及其基本操作_双向链表的建立与基本操作_歪卜派可的博客-程序员秘密

单链表是每一个节点(结构体)通过各自的指针,不断地指向下一个节点从而将它们串成链.而双向链表在保持这一特征之外,最大的区别就是,每一个节点还指向了它的上一个节点,即每个节点的指针域多了一个指向前驱的指针,从而形成了一个反向的链,所以将这种链表称作双向链表.不难看出,其实双向链表由单链表衍生出来,并没有增加很多复杂度,只要能够理解单链表的一些基本操作,双向链表也就很容易掌握拉-<.下面我贴...

终止imp/exp和expdp/impdp进程运行的方法_weixin_33752045的博客-程序员秘密

终止imp/exp和expdp/impdp进程运行的方法作者:孤风一剑 发布:2013-08-22 17:37 栏目:数据库开发 点击:2,613次 抢沙发 一、停止EXP/IMP优化速度可以直接KILL 进程,但先要KILL 父进程,然后KILL子进程,只KILL子进程,EXP/IMP还会在后台执行的样例:ps -ef |grep imp 查询到pid,k...

C++ 头文件使用规范建议_c++ 头文件 规范_恋喵大鲤鱼的博客-程序员秘密

1.背景一个良好的编程规范和风格是一名程序猿成熟的标志。规范的编码可以减少代码冗余,降低出错概率,便于代码管理和代码交流等等,事实上,其作用远不止这些,我们要牢记编码规范在心中啊。Google的项目大多使用C++开収。每一个C++程序员也都知道,C++具有徆多强大的诧言特性,但返种强大丌可避免的导致它的复杂,而复杂性会使得代码更容易出现bug、难亍阅诺和维护。本指南的目的是通过详绅阐述如何迕行C++

cakes_qq_175****220的博客-程序员秘密

cakes时间限制:1000 ms  |  内存限制:65535 KB难度:0描述there are some naughty little cakes(less than 1000), each cake has a numberthey stand in plates whose number start from 0 increasing in turn .

英语“作弊”技巧!_WildKid1024的博客-程序员秘密

和大家分享个更精辟的 无须复习,只要十天英语四级就能过!!!方法让你喷血!!怕以后找不到!!!1、听力,有三种题型,dialogue(十个对话),passage(三个短文),compound dictation(复合式听写,也就是传说中的段子题),第一种每年必考,后两种逐年交替,其中考passage的次数相对较多。 最容易得分的是dialogue和passage,只要记住一个超级技巧即可:对话所

安全虚拟化SEV简单介绍_amd sev 介绍_artine的博客-程序员秘密

安全虚拟化SEV简单介绍什么是SEV什么是SVMSME介绍SEV介绍总结什么是SEVSEV是由AMD提出的安全虚拟化Secure Encrypted Virtualization技术的英文首字母的缩写。简单来说就是主内存控制器具备了加密功能可以对虚拟机内存数据进行保护。在真正介绍SEV之前,我们首先要弄清楚两个关键的基本概念:SVM、SME。下面先简单了解一下SVM和SME。什么是SVMS...

随便推点

golang环境安装_一心搬砖的码农的博客-程序员秘密

1. 在线安装1.1 步骤一下载地址:https://studygolang.com/dl/golang/go1.13.10.linux-amd64.tar.gz其他版本:https://studygolang.com/dl1.2 步骤二解压到/usr/local/目录下tar -zxvf go1.13.10.linux-amd64.tar.gz –C /usr/local/1.3 配置环境变量vi /etc/profile在文件最后添加配置export GOROOT=/

每个程序员都应该读的非编程书_wzk456的博客-程序员秘密

1.《银河系漫游指南》by Douglas Adams推荐数:480生活,宇宙,所有的一切。“看在前,思考在后,然后去实践。但是看总是在最前面。否则,你只能看到你以为的样子。大多数的科学家忘记了这一点。”–Wonko的智慧作为开发者以及曾经的技术支持,从这本书(以及整个系列)中我们能学到一件事情:不要恐慌!!!另外,这本书读起来的舒适程度远胜于你自己存在

vue中使用Vue-pdf在线预览_yusirxiaer的博客-程序员秘密

下载npm i vue-pdf引入(在所需要预览的页面)<script>import axios from 'axios'import pdf from 'vue-pdf'import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js' // 加载中文的包export default { components: { pdf }, data () { retur.

iOS开发中,调用打电话,发短信,打开网址等手机基础功能_a811971的博客-程序员秘密

1、调用 iOS系统自带mail[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]];2、调用 打电话phone <1>一般在应用中拨打电话的方式是iphone界面会停留在电话界面:[[UIApp...

直击本质:聊聊小程序的前世今生_薛定喵君的博客-程序员秘密

一文带你了解小程序技术的发展脉络。 提到小程序,大家就会不自觉地带上(微信)两个字吧,但是对于小程序这一应用形态的探索却不是最先从微信开始的。首先我们来问自己一个问题,小程序是啥?(可以先自己思考一下)之前分享过一个图片小程序发展时间轴,我们可以知道业界对于这一技术领域的探索已经持续了7年了。(微信)小程序的前身叫"应用号",我们可以知道它首先是个应用。所以当你听到『小程序就是个H5嘛~』...

Python学习笔记_import mathx=int(input('input a int>>'))flag=1if x_滚雪球~的博客-程序员秘密

Python文件输出x=int(input("输入x"))y=int(input("输入y"))fp=open(r'1.txt','a+')print(str(x+y),file=fp)

推荐文章

热门文章

相关标签