CN113343628B - 一种testbench自动生成方法 - Google Patents

一种testbench自动生成方法 Download PDF

Info

Publication number
CN113343628B
CN113343628B CN202110705673.7A CN202110705673A CN113343628B CN 113343628 B CN113343628 B CN 113343628B CN 202110705673 A CN202110705673 A CN 202110705673A CN 113343628 B CN113343628 B CN 113343628B
Authority
CN
China
Prior art keywords
bus
file
module
name
input
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110705673.7A
Other languages
English (en)
Other versions
CN113343628A (zh
Inventor
邵杰
蒋颖丹
万书芹
苏小波
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
CETC 58 Research Institute
Original Assignee
CETC 58 Research Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CETC 58 Research Institute filed Critical CETC 58 Research Institute
Priority to CN202110705673.7A priority Critical patent/CN113343628B/zh
Publication of CN113343628A publication Critical patent/CN113343628A/zh
Application granted granted Critical
Publication of CN113343628B publication Critical patent/CN113343628B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/36Circuit design at the analogue level
    • G06F30/367Design verification, e.g. using simulation, simulation program with integrated circuit emphasis [SPICE], direct methods or relaxation methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Tests Of Electronic Circuits (AREA)

Abstract

本发明公开一种testbench自动生成方法,属于数字集成电路领域。获取用户提供的基本信息;基本信息包括设计人员姓名、期望采用的仿真工具及储存顶层模块的文件名;检查及新建文件夹;获取所述顶层模块的模块名称和储存顶层模块的文件名称;获取顶层模块的IO端口;生成testbench主体文件;生成单独的testcase模板;配置仿真环境;打印运行过程日志文件,包括顶层文件路径、顶层模型名称、仿真工具类型及自动生成tb的路径。本发明能够生成一个完整的testbench,用户只需要在此基础上根据需求修改testcase即可进行仿真测试;避免了搭建和调试testbench测试平台周期长、难度大的问题;实现了开发过程中testbench自动化生成。

Description

一种testbench自动生成方法
技术领域
本发明涉及数字集成电路技术领域,特别涉及一种testbench自动生成方法。
背景技术
在数字集成电路的设计过程中,针对设计的RTL代码或者综合后的门级网表,通常需要设计专用的testbench用来仿真模型的功能或时序是否满足设计需求。testbench内容包括:根据待测模型定义接口类型、初始化输入接口信号、模型例化、波形保存、数据的导入和保存等。对于有SPI接口的模型还要编写task实现spi读写功能,对于数据处理单元需要生成数据文本,导出的数据需要进行频谱分析。
对于大规模集成电路,接口可能有几十到上百个,搭建和调试testbench测试平台会耗费大量的时间。此外,数据生成和分析原理和过程都非常繁琐,因为涉及到采样定理等通信原理,还需要有一定的MATLAB编程基础。
发明内容
本发明的目的在于提供一种testbench自动生成方法,以降低搭建调试testbench的难度。
为解决上述技术问题,本发明提供了一种testbench自动生成方法,包括:
步骤1、获取用户提供的基本信息;基本信息包括设计人员姓名、期望采用的仿真工具及储存顶层模块的文件名,将设计人员姓名储存在变量author中,将仿真工具储存在变量sim_tool中,将储存顶层模块的文件名储存在变量filename_top_module中;
步骤2、检查及新建文件夹;
步骤3、获取所述顶层模块的模块名称和储存顶层模块的文件名称;
步骤4、获取顶层模块的IO端口;
步骤5、生成testbench主体文件;
步骤6、生成单独的testcase模板;
步骤7、配置仿真环境;
步骤8、打印运行过程日志文件,包括顶层文件路径、顶层模型名称、仿真工具类型及自动生成tb的路径。
可选的,所述步骤2包括:
2.1、在当前运行目录下检查是否存在tb文件夹,如果有,则将其修改为tb.bak后新建tb文件夹;如果不存在tb文件夹,则直接新建tb文件夹;
2.2、在tb文件夹下新建5个文件夹,名称分别为log、testcase、waveform、data_input、data_output;其中log文件夹保存仿真过程中仿真工具产生的log文件,testcase文件夹存放测试向量,waveform文件夹存放仿真波形文件,data_input文件夹保存输入的数据文件,data_output文件夹保存导出的数据文件。
可选的,所述步骤3包括:
3.1、判断所述步骤1中变量filename_top_module是否为空,如果不为空,则顶层文件名为filename_top_module中储存变量;如果变量为空,表示用户没有指定顶层文件名,此时需要扫描rtl目录,如果rtl一级目录下只有一个文件,则指定该文件为顶层文件,如果有多个文件,则文件名包含top的文件为顶层文件;确定包含顶层模块的文件后,将该文件名储存在变量filename_top_module中;
3.2、打开步骤3.1变量filename_top_module储存的文件名对应文件,扫描前30行内容,当匹配到module字样后,紧跟module的第一个单词为顶层模块名,之后将顶层模块名储存在变量top_module_name中。
可选的,所述步骤4包括:
步骤4.1、获取顶层模块输入端口,将总线接口储存在字典input_bus中,其余输入接口储存在列表input_normal中;
步骤4.2、获取顶层模块输出端口,将总线接口储存在字典output_bus中,其余输出接口储存在列表output_normal中。
可选的,所述步骤4.1包括:
4.1.1、打开步骤3.1变量filename_top_module储存文件名的对应文件,扫描所有内容,如果匹配到关键字input,将该行内容储存在变量input_tmp中,然后执行步骤4.1.1至步骤4.1.4;如果未匹配到关键字input则继续扫描下一行;
4.1.2、剔除input_tmp行的关键字signed,wire,reg;
4.1.3、剔除input_tmp行的注释内容;
4.1.4、如果input_tmp匹配到方括号“[A:B]”,则表示匹配到了总线型变量,其中A表示总线高位,B表示总线低位,此时将总线名称储存在键bus_info_name中,即input_bus['bus_info_name']=“总线名称”;将高位储存在键bus_info_high中,即input_bus['bus_info_high']=A;将低位储存在键bus_info_low中,即input_bus['bus_info_low']=B;
如果input_tmp未匹配到方括号,则表示匹配到了非总线型输入,此时将线名采用append命令存入input_normal。
可选的,所述步骤4.2包括:
4.2.1、打开步骤3.1变量filename_top_module储存的文件名对应文件,扫描所有内容,如果匹配到关键字output,将该行内容储存在变量output_tmp中,然后执行步骤4.2.1至步骤4.2.4;如果未匹配到关键字input,则继续扫描下一行;
4.2.2、剔除output_tmp行的关键字signed,wire,reg;
4.2.3、剔除output_tmp行的注释内容;
4.2.4、如果output_tmp匹配到方括号“[A:B]”,则表示匹配到了总线形式的变量,其中A表示总线高位,B表示总线低位,此时将总线名称储存在键bus_info_name中,即output_bus['bus_info_name']=“总线名称”;将高位储存在键bus_info_high中,即output_bus['bus_info_high']=A;将低位储存在键bus_info_low中,即output_bus['bus_info_low']=B;
如果output_tmp未匹配到方括号,则表示匹配到了非总线型输入,此时将线名采用append命令存入output_normal。
可选的,所述步骤5包括:
5.1、在tb目录下新建并打开tb_xxx.v文件,其中xxx是顶层模块的文件名称;
5.2、打印parameter和define参数,如果所述步骤1中sim_tool=NC_Verilog,则打印:
//`define VCS
`define NC_Verilog
如果所述步骤1中sim_tool=VCS,则打印:
`define VCS
//`define NC_Verilog
其余打印内容为:
`define testcase0
//`define task_function
parameter CLK_CYCLE=0.5;//1GHz main clock
parameter SCLC_CYCLE=5.0;//100M SPI SCLK
parameter DT=0.01;//Delay time
5.3、根据顶层模块的IO端口,将输入打印为reg型变量,将输出打印为wire型变量;
5.4、打印初始化模块,初始化所述步骤5.3定义的reg型变量;
5.5、打印时钟定义模块,具体内容包括:
//always#CLK_CYCLE clk=!clk;
5.6、打印ifdef模块,具体包括如下内容:
`ifdef task_function
`include"./task_function.v"
`endif
`ifdef testcase0
`include"./testcase/testcase0.v"
`endif
5.7、打印顶层单元例化模块,依次例化所述步骤4中input_normal变量中的所有非总线输入信号,input_bus变量中的总线输入信号,output_normal变量中的所有非总线输出信号,output_bus变量中的总线输出信号。
可选的,所述步骤6包括:
6.1、打印空白的initial begin end模块;
6.2、打印文件导入模块,包括文件变量定义和导入语句,导入数据文件的默认路径在所述步骤2.2新建的data_input文件夹;
6.3、打印数据导出模块,包括文件变量定义和导出语句,导出数据文件的默认路径在所述步骤2.2新建的data_output文件夹;
6.4、打印波形保存模块,保存波形文件的默认路径在所述步骤2.2新建的waveform文件夹。
可选的,所述步骤7包括:
7.1、采用walk命令遍历整个所述rtl目录,打印所有仿真文件路径至list.f;
7.2、打印仿真工具运行命令至run文件;
7.3、将spi_task.v文件拷贝至tb目录下,将signal_generator拷贝至data_input目录下,将fft文件夹拷贝至data_ouput目录下;
其中spi_task.v是一个spi的读写task模板,用于可以直接使用;signal_generator是基于matlab gui编写的波形生成程序,用于产生仿真波形数据;fft文件是基于matlab gui编写的信号分析软件,用于对仿真数据进行频谱分析。
可选的,在执行所述步骤1-8之前需要将所有设计文件拷贝到rtl目录下,所述设计文件是rtl模型,或综合后的网表。
在本发明提供了一种testbench自动生成方法,具有以下有益效果:
(1)本发明能够生成一个完整的testbench,用户只需要在此基础上根据需求修改testcase即可进行仿真测试;
(2)避免了搭建和调试testbench测试平台周期长、难度大的问题;
(3)实现了开发过程中testbench自动化生成。
附图说明
图1为程序架构;
图2为实施例中用户提供的基本信息;
图3为实施例中程序运行前目录树;
图4为实施例中程序运行后目录树;
图5为实施例中程序运行产生的日志。
具体实施方式
以下结合附图和具体实施例对本发明提出的一种testbench自动生成方法作进一步详细说明。根据下面说明书,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。
实施例一
本发明提供了一种testbench自动生成方法,该方法的整体架构如图1所示,包括如下步骤:
步骤1、获取用户提供的基本信息,如图2所示:用户提供的设计人员姓名为Iron_Man,期望采用的仿真工具为NC_verilog,储存顶层模块的文件名未指定;因此author=Iron_Man,sim_tool=NC_verilog,filename_top_module为空;
步骤2、检查及新建文件夹;
步骤3、获取顶层模块的模块名称和储存顶层模块的文件名称;
步骤4、获取顶层模块的IO端口;
步骤5、生成testbench主体文件;
步骤6、生成单独的testcase模板;
步骤7、配置仿真环境;
步骤8、打印运行过程日志文件,包括顶层文件路径、顶层模型名称、仿真工具类型以及自动生成tb的路径。
在执行所述步骤1-8之前将gain_adjust_dc_offset_div4.v,gain_adjust_dc_offset_top.v,gain_adjust_dc_offset.v,gain_ramp_step_up_down.v四个设计文件拷贝到rtl目录下,执行步骤1-8前目录树如图3所示;
所述步骤2包括:
2.1、在当前运行目录下检查是否存在tb文件夹,如果有则将其修改为tb.bak后新建tb文件夹,如果不存在tb文件夹则直接新建tb文件夹;
2.2、在tb文件夹下新建5个文件夹,名称分别为log、testcase、waveform、data_input、data_output;其中log文件夹保存仿真过程中仿真工具产生的log文件,testcase文件夹存放测试向量,waveform文件夹存放仿真波形文件,data_input文件夹保存输入的数据文件,data_output文件夹保存导出的数据文件。
所述步3包括:
3.1、判断所述步骤1中filename_top_module变量为空,表示用户没有指定顶层文件名,此时程序自动扫描rtl目录,发现目录下有多个文件,则文件名包含top的文件gain_adjust_dc_offset_top.v为顶层文件;确定包含顶层模块的文件后,变量filename_top_module=gain_adjust_dc_offset_top.v;
3.2、打开步骤3.1变量filename_top_module储存的文件名对应文件gain_adjust_dc_offset_top.v,扫描前30行内容,匹配到module字样后,紧跟module的第一个单词为gain_adjust_dc_offset_top,所以top_module_name=gain_adjust_dc_offset_top。
所述步骤4包括:
步骤4.1、获取顶层模块输入端口,将总线接口储存在字典input_bus中,其余输入接口储存在列表input_normal中;
步骤4.2、获取顶层模块输出端口,将总线接口储存在字典output_bus中,其余输出接口储存在列表output_normal中。
其中所述步骤4.1包括:
4.1.1、打开步骤3.1变量filename_top_module储存文件名的对应文件,扫描所有内容,如果匹配到关键字input,将该行内容储存在变量input_tmp中,然后执行步骤4.1.1至步骤4.1.4;如果未匹配到关键字input则继续扫描下一行。
4.1.2、剔除input_tmp行的关键字signed,wire,reg;
4.1.3、剔除input_tmp行的注释内容;
4.1.4、如果input_tmp匹配到方括号“[A:B]”,则表示匹配到了总线型变量,其中A表示总线高位,B表示总线低位,此时将总线名称储存在键bus_info_name中,即input_bus['bus_info_name']=“总线名称”;将高位储存在键bus_info_high中,即input_bus['bus_info_high']=A;将低位储存在键bus_info_low中,即input_bus['bus_info_low']=B;如果input_tmp未匹配到方括号,则表示匹配到了非总线型输入,此时将线名采用append命令存入input_normal。
运行结束后input_bus内容如下:
{'bus_info_high':'5','bus_info_low':'0','bus_info_name':'IDAC_GAIN_ADJ'}
{'bus_info_high':'5','bus_info_low':'0','bus_info_name':'QDAC_GAIN_ADJ'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'IDAC_DCOFFSET'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'QDAC_DCOFFSET'}
{'bus_info_high':'5','bus_info_low':'0','bus_info_name':'RAMP_UP_STEP'}
{'bus_info_high':'5','bus_info_low':'0','bus_info_name':'RAMP_DOWN_STEP'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_I_1'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_I_2'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_I_3'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_I_4'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_Q_1'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_Q_2'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_Q_3'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_din_Q_4'}
运行结束后input_normal内容如下:
clk_gain_dc_offset
clk_DACCLK_div4
rst_n
IQ_GAIN_ADJ_DCOFFSET_ENABLE
TXEN
TXENABLE_GAIN_STEP_EN
所述步骤4.2包括:
4.2.1、打开步骤3.1变量filename_top_module储存的文件名对应文件,扫描所有内容,如果匹配到关键字output,将该行内容储存在变量output_tmp中,然后执行步骤4.2.1至步骤4.2.4;如果未匹配到关键字input则继续扫描下一行;
4.2.2、剔除output_tmp行的关键字signed,wire,reg;
4.2.3、剔除output_tmp行的注释内容;
4.2.4、如果output_tmp匹配到方括号“[A:B]”,则表示匹配到了总线形式的变量,其中A表示总线高位,B表示总线低位,此时将总线名称储存在键bus_info_name中,即output_bus['bus_info_name']=“总线名称”;将高位储存在键bus_info_high中,即output_bus['bus_info_high']=A;将低位储存在键bus_info_low中,即output_bus['bus_info_low']=B;如果output_tmp未匹配到方括号,则表示匹配到了非总线型输入,此时将线名采用append命令存入output_normal。
运行结束后output_bus内容如下:
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_I_1'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_I_2'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_I_3'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_I_4'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_Q_1'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_Q_2'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_Q_3'}
{'bus_info_high':'15','bus_info_low':'0','bus_info_name':'gain_adj_dc_offset_dout_Q_4'}
运行结束后outpu_normal内容为空。
所述步骤5包括:
5.1、在tb目录下新建并打开tb_gain_adjust_dc_offset_top.v文件;
5.2、打印parameter和define参数,如果所述步骤1中sim_tool=NC_Verilog,则打印:
//`define VCS
`define NC_Verilog
如果所述步骤1中sim_tool=VCS,则打印:
`define VCS
//`define NC_Verilog
其余打印内容为:
`define testcase0
//`define task_function
parameter CLK_CYCLE=0.5;//1GHz main clock
parameter SCLC_CYCLE=5.0;//100M SPI SCLK
parameter DT=0.01;//Delay time
5.3、根据顶层模块的IO端口,将输入打印为reg型变量,将输出打印为wire型变量;
5.4、打印初始化模块,初始化所述步骤5.3定义的reg型变量;
5.5、打印时钟定义模块,具体内容包括:
//always#CLK_CYCLE clk=!clk;
5.6、打印ifdef模块,具体包括如下内容:
`ifdef task_function
`include"./task_function.v"
`endif
`ifdef testcase0
`include"./testcase/testcase0.v"
`endif
5.7、打印顶层单元例化模块,依次例化所述步骤4中input_normal变量中的所有非总线输入信号,input_bus变量中的总线输入信号,output_normal变量中的所有非总线输出信号,output_bus变量中的总线输出信号。
所述步骤6包括:
6.1、打印空白的initial begin end模块,内容如下:
initial begin
#500
$finish(2);
end
6.2、打印文件导入模块,包括文件变量定义和导入语句,导入数据文件的默认路径在所述步骤2.2新建的data_input文件夹;
6.3、打印数据导出模块,包括文件变量定义和导出语句,导出数据文件的默认路径在所述步骤2.2新建的data_output文件夹;
6.4、打印波形保存模块,保存波形文件的默认路径在所述步骤2.2新建的waveform文件夹,打印内容如下:
initial begin
$shm_open("./waveform/tb_gain_adjust_dc_offset_top_testcase0.shm");
$shm_probe(tb_gain_adjust_dc_offset_top,"AC");
//
$shm_probe(tb_gain_adjust_dc_offset_top.u_gain_adjust_dc_offset_top.u_xxx,"AC");
End
程序运行后的目录结构如图4所示,图5是程序运行过程中的日志内容。
上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。

Claims (6)

1.一种testbench自动生成方法,其特征在于,包括:
步骤1、获取用户提供的基本信息;基本信息包括设计人员姓名、期望采用的仿真工具及储存顶层模块的文件名,将设计人员姓名储存在变量author中,将仿真工具储存在变量sim_tool中,将储存顶层模块的文件名储存在变量filename_top_module中;
步骤2、检查及新建文件夹;
步骤3、获取所述顶层模块的模块名称和储存顶层模块的文件名称;
步骤4、获取顶层模块的IO端口;
步骤5、生成testbench主体文件;
步骤6、生成单独的testcase模板;
步骤7、配置仿真环境;
步骤8、打印运行过程日志文件,包括顶层文件路径、顶层模型名称、仿真工具类型及自动生成tb的路径;
所述步骤2包括:2.1、在当前运行目录下检查是否存在tb文件夹,如果有,则将其修改为tb.bak后新建tb文件夹;如果不存在tb文件夹,则直接新建tb文件夹;
2.2、在tb文件夹下新建5个文件夹,名称分别为log、testcase、waveform、data_input、data_output;其中log文件夹保存仿真过程中仿真工具产生的log文件,testcase文件夹存放测试向量,waveform文件夹存放仿真波形文件,data_input文件夹保存输入的数据文件,data_output文件夹保存导出的数据文件;
所述步骤3包括:3.1、判断所述步骤1中变量filename_top_module是否为空,如果不为空,filename_top_module变量中存储的字符串即为顶层文件名;如果变量为空,表示用户没有指定顶层文件名,此时需要扫描rtl目录,如果rtl一级目录下只有一个文件,则指定该文件为顶层文件,如果有多个文件,则文件名包含top的文件为顶层文件;确定包含顶层模块的文件后,将该文件名储存在变量filename_top_module中;
3.2、打开步骤3.1变量filename_top_module储存的文件名对应文件,
扫描前30行内容,当匹配到module字样后,紧跟module的第一个单词为顶层模块名,之后将顶层模块名储存在变量top_module_name中;
所述步骤4包括:步骤4.1、获取顶层模块输入端口,将总线接口储存在字典input_bus中,其余输入接口储存在列表input_normal中;
步骤4.2、获取顶层模块输出端口,将总线接口储存在字典output_bus中,其余输出接口储存在列表output_normal中;
所述步骤4.1包括:4.1.1、打开步骤3.1变量filename_top_module储存文件名的对应文件,扫描所有行的内容,如果匹配到关键字input,将该行内容储存在变量input_tmp中,然后执行步骤4.1.1至步骤4.1.4;如果未匹配到关键字input则继续扫描下一行;
4.1.2、剔除input_tmp行的关键字signed,wire,reg;
4.1.3、剔除input_tmp行的注释内容;
4.1.4、如果input_tmp匹配到方括号“[A:B]”,则表示匹配到了总线型变量,其中A表示总线高位,B表示总线低位,此时将总线名称储存在键bus_info_name中,即input_bus['bus_info_name']=“总线名称”;将高位储存在键bus_info_high中,即input_bus['bus_info_high']=A;将低位储存在键bus_info_low中,即input_bus['bus_info_low']=B;
如果input_tmp未匹配到方括号,则表示匹配到了非总线型输入,此时将线名采用append命令存入input_normal。
2.如权利要求1所述的testbench自动生成方法,其特征在于,所述步骤4.2包括:
4.2.1、打开步骤3.1变量filename_top_module储存的文件名对应文件,扫描所有行的内容,如果匹配到关键字output,将该行内容储存在变量output_tmp中,然后执行步骤4.2.1至步骤4.2.4;如果未匹配到关键字output,则继续扫描下一行;
4.2.2、剔除output_tmp行的关键字signed,wire,reg;
4.2.3、剔除output_tmp行的注释内容;
4.2.4、如果output_tmp匹配到方括号“[A:B]”,则表示匹配到了总线形式的变量,其中A表示总线高位,B表示总线低位,此时将总线名称储存在键bus_info_name中,即output_bus['bus_info_name']=“总线名称”;将高位储存在键bus_info_high中,即output_bus['bus_info_high']=A;将低位储存在键bus_info_low中,即output_bus['bus_info_low']=B;
如果output_tmp未匹配到方括号,则表示匹配到了非总线型输出,此时将线名采用append命令存入output_normal。
3.如权利要求2所述的testbench自动生成方法,其特征在于,所述步骤5包括:
5.1、在tb目录下新建并打开tb_xxx.v文件,其中xxx是顶层模块的文件名称;
5.2、打印parameter和define参数,如果所述步骤1中sim_tool=NC_Verilog,则打印:
//`define VCS
`define NC_Verilog
如果所述步骤1中sim_tool=VCS,则打印:
`define VCS
//`define NC_Verilog
其余打印内容为:
`define testcase0
//`define task_function
parameter CLK_CYCLE=0.5;//1GHz main clock
parameter SCLC_CYCLE=5.0;//100M SPI SCLK
parameter DT=0.01;//Delay time
5.3、根据顶层模块的IO端口,将输入打印为reg型变量,将输出打印为wire型变量;
5.4、打印初始化模块,初始化所述步骤5.3定义的reg型变量;
5.5、打印时钟定义模块,具体内容包括:
//always#CLK_CYCLE clk=!clk;
5.6、打印ifdef模块,具体包括如下内容:
Figure FDA0003716908300000041
5.7、打印顶层单元例化模块,依次例化所述步骤4中input_normal变量中的所有非总线输入信号,input_bus变量中的总线输入信号,output_normal变量中的所有非总线输出信号,output_bus变量中的总线输出信号。
4.如权利要求3所述的testbench自动生成方法,其特征在于,所述步骤6包括:
6.1、打印空白的initial begin end模块;
6.2、打印文件导入模块,包括文件变量定义和导入语句,导入数据文件的默认路径在所述步骤2.2新建的data_input文件夹;
6.3、打印数据导出模块,包括文件变量定义和导出语句,导出数据文件的默认路径在所述步骤2.2新建的data_output文件夹;
6.4、打印波形保存模块,保存波形文件的默认路径在所述步骤2.2新建的waveform文件夹。
5.如权利要求4所述的testbench自动生成方法,其特征在于,所述步骤7包括:
7.1、采用walk命令遍历整个所述rtl目录,打印所有仿真文件路径至list.f;
7.2、打印仿真工具运行命令至run文件;
7.3、将spi_task.v文件拷贝至tb目录下,将signal_generator拷贝至data_input目录下,将fft文件夹拷贝至data_ouput目录下;
其中spi_task.v是一个spi的读写task模板,用于直接使用;signal_generator是基于matlab gui编写的波形生成程序,用于产生仿真波形数据;fft文件是基于matlab gui编写的信号分析软件,用于对仿真数据进行频谱分析。
6.如权利要求1-5任一项所述的testbench自动生成方法,其特征在于,在执行所述步骤1-8之前需要将所有设计文件拷贝到rtl目录下,所述设计文件是rtl模型,或综合后的网表。
CN202110705673.7A 2021-06-24 2021-06-24 一种testbench自动生成方法 Active CN113343628B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110705673.7A CN113343628B (zh) 2021-06-24 2021-06-24 一种testbench自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110705673.7A CN113343628B (zh) 2021-06-24 2021-06-24 一种testbench自动生成方法

Publications (2)

Publication Number Publication Date
CN113343628A CN113343628A (zh) 2021-09-03
CN113343628B true CN113343628B (zh) 2022-08-16

Family

ID=77478504

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110705673.7A Active CN113343628B (zh) 2021-06-24 2021-06-24 一种testbench自动生成方法

Country Status (1)

Country Link
CN (1) CN113343628B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109739766A (zh) * 2018-12-29 2019-05-10 湖北航天技术研究院总体设计所 一种快速搭建fpga数字仿真模型的系统及方法
CN110750462A (zh) * 2019-10-29 2020-02-04 西安奇维科技有限公司 一种fpga白盒测试平台
CN111125976A (zh) * 2019-12-06 2020-05-08 中国电子科技集团公司第五十八研究所 一种rtl模型自动生成方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109739766A (zh) * 2018-12-29 2019-05-10 湖北航天技术研究院总体设计所 一种快速搭建fpga数字仿真模型的系统及方法
CN110750462A (zh) * 2019-10-29 2020-02-04 西安奇维科技有限公司 一种fpga白盒测试平台
CN111125976A (zh) * 2019-12-06 2020-05-08 中国电子科技集团公司第五十八研究所 一种rtl模型自动生成方法

Also Published As

Publication number Publication date
CN113343628A (zh) 2021-09-03

Similar Documents

Publication Publication Date Title
US7110935B1 (en) Method and system for modeling and automatically generating an electronic design from a system level environment
US5920830A (en) Methods and apparatus for generating test vectors and validating ASIC designs
US10586003B1 (en) Circuit design using high level synthesis and linked hardware description language libraries
US7350180B1 (en) Search algorithm for inheriting clock contexts in hardware description language translation tools
EP3633529A1 (en) Systemc model generation method and systemc model generation program
CN102081689A (zh) 一种芯片的可测试性设计方法
Harris Extracting design information from natural language specifications
JP2008511894A (ja) 電子回路の構造レベル記述を設計する方法及びシステム
KR19980086572A (ko) 디지털 컴퓨터 하드웨어 설계와 시뮬레이션을 위한 방법 및 시스템
CN116341428B (zh) 构建参考模型的方法、芯片验证方法及系统
US20080059923A1 (en) Lsi power consumption calculation method and calculation program
US6990641B2 (en) Integrated circuit design system and method using preprocessor which changes hardware description in accordance with configuration
CN113343628B (zh) 一种testbench自动生成方法
US20040088662A1 (en) Timing path detailer
CN116451617A (zh) 芯片仿真中基于仿真波形的信息处理方法、装置及应用
CN112733478B (zh) 用于对设计进行形式验证的装置
WO2009033953A2 (en) A method and a system for automatic extraction of requirements
CN104268314B (zh) 基于Easy HDL仿真逻辑分析仪测得波形方法
US7340727B2 (en) Verilog to C++ language translator
Huang et al. A high-performance bidirectional compiler for conversion between systemc and verilog
US6711534B1 (en) Method of analyzing a circuit having at least one structural loop between different channel connected components within the circuit
CN111695321B (zh) 电路设计方法及相关的电脑程序产品
US7168055B2 (en) Method and apparatus for detecting nets physically changed and electrically affected by design ECO
Dreesen Standard cell development flow
CN115796090A (zh) 电路模型生成方法、电路仿真验证方法及对应装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant