首页 > 其他分享 >使用$test$plusargs提高RTL验收速度

使用$test$plusargs提高RTL验收速度

时间:2023-08-06 21:34:14浏览次数:31  
标签:仿真 RTL plusargs feature testbench test display

0 前言

这段时间在整合一个小ip,因为要验证每个feature是否可行,需要用testbench + C语言的方式进行仿真验证,由于每种feature不仅要在C语言中修改寄存器配置,还要再testbench修改寄存器的配置,这导致每验证一种feature既需要修改C语言,也需要修改testbench,非常繁琐

并且也不想把所有的feature写在一个testbench中(仿真时间会变长很多,尤其是需要dump波形的时候),如果验证完一个feature后,把调教好的testbench注释掉,一番注释下来,看着也恶心,并且等所有feature都搞好后,仿真的时间还是很长

于是就希望能有一种方式,在验证不同的feature时可以吃不同的 testbench,一番搜索下来,找到了$test$plusargs的方法

1 语法介绍

先捋清两个词:plusargsplusargs_string

  • plusargs:仿真时添加的参数
  • plusargs_string:编译时提供的字符串

上面提到两个词,编译和仿真,以vcs为例,整个执行过程主要分为两步,编译和仿真(irun/xrun有三步,编译、细化elaborate、仿真)

编译的过程是检查语法、展开所有的参数、宏以及include的文件等等;仿真的过程我的理解就是打入设定的激励,验证功能是否符合预期

vcs成功编译后会生成一个可执行文件simv,如下图

在执行simv即可进行仿真

开始介绍主角,直接抄文档中的例子了

initial begin
    if ($test$plusargs("HELLO")) $display("Hello argument found.");	
	if ($test$plusargs("HE")) $display("The HE subset string is detected.");	
	if ($test$plusargs("H")) $display("Argument starting with H found.");
	if ($test$plusargs("HELLO_HERE"))$display("Long argument.");
	if ($test$plusargs("HI")) $display("Simple greeting.");
	if ($test$plusargs("LO")) $display("Does not match.");
end

在上面这段代码中,$test$plusargs("HELLO")中的HELLO是plusargs_string,也就是编译时提供的字符串,编译完成后,在进行仿真时(执行simv),+不同的plusargs会打印不同的内容

只有当plusargs_string的内容完全匹配plusargs的部分或全部内容时,$test$plusargs()会返回一个非0的整数

原文如下:

原文的plusargs是HELLO,并给出了执行结果

2 示例

做个实验测试一下,代码如下:

module tb;

   initial begin
      $display("*********************\n");
      
      if($test$plusargs("test"))
		$display("\t test found \n");
      if($test$plusargs("test_pattern"))
		$display("\t test_pattern found \n");
      if($test$plusargs("te"))
		$display("\t te found \n");
      if($test$plusargs("taa"))
		$display("\t taa found \n");

      
      $display("*********************\n");
      #10;
      $finish;
      
   end
   
endmodule

编译之后生成可执行文件 simv,然后执行simv +test

仿真结果如下

在上面的例子中,只有testte部分或全部匹配test,因此只打印了这两个语句的内容

3 多种情况的testbench怎么写

就像开头说的情况,我需要多种testbench如何借助这种方法实现呢,思路如下:

  1. 针对不同的情况,写多份配置过程,并保存在不同的文本中,比如需要三种配置,可以写三份文本,并保存为test_1.sv, test_2.sv, test_3.sv
  2. 在testbench中,利用$test$plusargs include这三个文本

给出一个简单的模板

module tb;
    /*  此处省略tb中clk、dump等等内容  */
	initial begin
        if($test$plusargs("test_1"))
            `include "./test_1.sv";
        
        if($test$plusargs("test_2"))
            `include "./test_2.sv";
        
        if($test$plusargs("test_3"))
            `include "./test_3.sv";
    end	
endmodule

在仿真时,通过+不同的plusargs就可以执行不同testbench了

标签:仿真,RTL,plusargs,feature,testbench,test,display
From: https://www.cnblogs.com/ICcode/p/17610100.html

相关文章

  • 「解题报告」AtCoder Beginner Contest 313
    比赛地址:AtCoderBeginnerContest313-AtCoder后记:请正确理解题意后再做题!!!A-ToBeSaikyoA-ToBeSaikyo(atcoder.jp)每个人有一个数值,问第一个人要加多少才能使得自己的数值变成最大的。就这么个破题我还WA了一发//Thecodewaswrittenbyyifan,andyifanis......
  • bazel test 编译失败:googletest、gtest 报错
    问题描述bazeltest遇到很多奇怪的编译错误,报错位置位于“googletest”目录,而且没有修改过googletest源码:ERROR:/bazel_cache/output_user_root/.../external/google/BUILD.bazel:80:11:Compilinggoogletest/src/gtest-matchers.ccfailed:(Exit1):gccfailed:errore......
  • bazel 使用 gtest/gmock 报错 Constraints from @bazel_tools//platforms have been r
    问题描述运行bazeltest命令,遇到错误:“Constraintsfrom@bazel_tools//platformshavebeenremoved.Pleaseuseconstraintsfrom@platformsrepositoryembeddedinBazel,orpreferablydeclaredependencyonhttps://github.com/bazelbuild/platforms.Seehttps://gi......
  • m基于FFT傅里叶变换的QPSK基带信号频偏估计和补偿算法FPGA实现,包含testbench和matlab
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,并使用matlab2022a对结果进行星座图的显示:将FPGA的频偏基带QPSK信号和频偏补偿后的QPSK基带信号使用matlab显示星座图,结果如下:2.算法涉及理论知识概要QPSK(QuadraturePhaseShiftKeying)是一种常用的调制方式,它可以在相位和......
  • m基于FFT傅里叶变换的QPSK基带信号频偏估计和补偿算法FPGA实现,包含testbench和matlab
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,并使用matlab2022a对结果进行星座图的显示:   将FPGA的频偏基带QPSK信号和频偏补偿后的QPSK基带信号使用matlab显示星座图,结果如下:   2.算法涉及理论知识概要       QPSK(QuadraturePhaseShiftKeying)......
  • AtCoder Beginner Contest (ABC) 313 D-E
    Tasks-AtCoderBeginnerContest313PS:当时看到D过的比E多就一直在考虑D,但还没做出来,其实个人感觉E比D简单。 D-OddorEven交互题。有n个数,最多可以询问n次然后要求判断出这n个数的奇偶性。每次可以询问数组里任意k个元素的和是不是奇数一开始想到的是高斯消元,n次总能......
  • AtCoder Beginner Contest 313 A-E Code
    比赛链接:AtCoderBeginnerContest313-AtCoder A:#include<bits/stdc++.h>usingnamespacestd;intmain(){cin.tie(0);ios::sync_with_stdio(false);intn;cin>>n;intp1;cin>>p1;intma......
  • gRPC Test
    目录简单使用ghzgithub:https://github.com/bojand/ghzghz官方文档:https://ghz.sh/简单使用下载后解压,将目录配置到path上,方便命令调用:ghz--insecure--protoxxx\Hello.proto--callpackage_name.service_name.rpc_method_name-d"{\"name\":\"a\"}"localho......
  • vscode 运行Rust cargo test时显示log输出
    使用以下tasks.json对于log库的输出(info,debug,warn...)需要在test方法上一行加#[test_log::test](来自test-loghttps://crates.io/crates/test-log){"version":"2.0.0","tasks":[{"type":"shell&quo......
  • CH182H与RTL8201F功能对比
    1、CH182H简介CH182H是一款支持Auto-MDIX的工业级10/100M以太网PHY收发器。CH182H内部包括物理编码子层(PCS)、物理介质接入层(PMA)、双绞线物理介质相关子层(TP-PMD)、10BASE-TX编码器/解码器、双绞线介质连接单元(TPMAU)、MII和RMII接口等以太网Transceiver功能所需的模块。CH182H与......