CN113343628B - 一种testbench自动生成方法 - Google Patents
一种testbench自动生成方法 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/36—Circuit design at the analogue level
- G06F30/367—Design verification, e.g. using simulation, simulation program with integrated circuit emphasis [SPICE], direct methods or relaxation methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/32—Circuit design at the digital level
- G06F30/327—Logic 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自动生成方法。
背景技术
在数字集成电路的设计过程中,针对设计的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模块,具体包括如下内容:
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模型,或综合后的网表。
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)
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模型自动生成方法 |
-
2021
- 2021-06-24 CN CN202110705673.7A patent/CN113343628B/zh active Active
Patent Citations (3)
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 |