CN104216831B - 一种基于Tcl的FPGA交互式仿真方法 - Google Patents
一种基于Tcl的FPGA交互式仿真方法 Download PDFInfo
- Publication number
- CN104216831B CN104216831B CN201410455781.3A CN201410455781A CN104216831B CN 104216831 B CN104216831 B CN 104216831B CN 201410455781 A CN201410455781 A CN 201410455781A CN 104216831 B CN104216831 B CN 104216831B
- Authority
- CN
- China
- Prior art keywords
- tcl
- verilog
- task
- interpreters
- wait
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于Tcl的FPGA交互式仿真方法。本方法为:1)在FPGA验证平台verilog中新建一个Tcl解释器,并建立verilog和Tcl解释器之间的通信通道;2)在verilog中采用Tcl语言创建一测试用例;3)Tcl解释器调用该测试用例,当收到写操作命令名称时,Tcl解释器通过写操作命令调用verilog中的写操作任务,将进行写操作的地址和数据传递到verilog中,切换进程;当Tcl解释器收到读操作命令名称时,通过读操作命令调用verilog中的读操作任务,并将进行读操作的地址传递到verilog中,切换进程;当收到等待操作命令名称时,Tcl解释器通过等待操作命令调用verilog中的等待操作任务;4)verilog的任务完成后将返回值返回给Tcl解释器,切换进程。本发明减少开发和调试测试用例的工作量,可实时控制仿真进程。
Description
技术领域
本发明涉及一种基于Tcl的FPGA交互式仿真方法,属于计算机软件技术领域。
技术背景
随着FPGA容量和规模的日益扩大,FPGA设计的复杂度也越来越高,为了保证设计的质量,FPGA验证工程师需要使用Verilog或者Systemverilog语言搭建验证平台和编写测试用例并使用仿真工具对FPGA进行功能仿真。同时FPGA工程师需要把FPGA代码转化成装载文件下载到FPGA器件中进行板级的测试。在板级测试中,FPGA工程师还需要根据软件驱动编写测试脚本来对FPGA进行板级测试。FPGA仿真是对FPGA的设计代码进行验证,这种方法的优点是能够直接看到仿真的波形,便于FPGA工程师进行调试。FPGA板级测试是对FPGA器件进行测试,是在真实环境中的测试,但这种方法无法看到FPGA内部信号的变化状态,不方便进行debug。由于这两种测试方法是不同的测试环境,不同的仿真工具和验证平台,所以FPGA仿真的测试用例不能够直接在板上进行测试,同样,FPGA板上的测试脚本也无法在FPGA仿真工具上运行。这样,FPGA的仿真验证和板级测试无法做到一致性。如果在FPGA板级测试发现的问题,需要在FPGA仿真中编写同样的测试用例进行问题重现。并且,在仿真平台和板级测试平台开发测试同一功能的测试用例有一定重复工作。
发明内容
针对现有技术中存在的技术问题,本发明的目的在于提供一种基于Tcl的FPGA交互式仿真方法。
基于本发明创建的测试用例可以在Qustasim命令行上调用仿真平台的task,无需编写测试用例,可以做到实时控制仿真进程,模拟板级测试场景,减少开发和调试测试用例的工作量。该脚本语言采用Tcl语言进行编写,Tcl属于解释性语言,不同于C/C++等编译性语言,Tcl语言编写好以后不需要通过软件编译就可以直接运行。Tcl语言不但在板级测试中可以使用,而且仿真工具Qustasim也有支持Tcl的PLI(ProgramLanguageInterface),可以直接在验证平台里调用Tcl语句。但是verilog是硬件描述语言,执行的task都是基于时序关系的,用仿真工具验证是有仿真时间概念的,而Tcl语句的执行并不占用仿真时间,所以在verilog中调用的Tcl命令,不会等待verilog的任务完成就会去执行下一个Tcl命令,这样不能够按照时间关系利用Tcl脚本来执行verilog中的task。为了实现Tcl与verilog的交互,需要有Tcl扩展命令(用C语言编写)在Verilog调用Tcl脚本时来阻塞Tcl命令的执行来等待verilog中task的完成。附图描述了verilog和Tcl之间的交互关系。这样,在验证平台里用verilog写的例如读写寄存器,发包收包等的task可以用Tcl语句进行封装,从而可以建立起交互式仿真。在Qustasim的仿真命令行中敲入封装好的Tcl命令,可以实时发起进行读写寄存器,发包收包的命令,并看到仿真结果。
本发明的技术方案为:
一种基于Tcl的FPGA交互式仿真方法,其步骤为:
1)在FPGA验证平台verilog中新建和初始化一个Tcl解释器;其中,在verilog中设置写操作b_write命令名称、读操作b_read命令名称、等待操作b_wait_irq命令名称,并建立verilog和Tcl解释器之间的通信通道;所述Tcl解释器中设置写操作命令b_write、读操作命令b_read、等待操作命令b_wait_irq,并将其分别映射到verilog中对应的写操作任务、读操作任务、等待操作任务;
2)在verilog中采用Tcl语言创建一测试用例;其中,该测试用例中,在每一verilog任务Tcl调用命令后,设置一阻塞Tcl命令执行的阻塞指令,用于等待verilog的任务完成后执行该测试用例中下一句Tcl命令;
3)所述Tcl解释器调用该测试用例,对该测试用例中的命令进行执行;当Tcl解释器收到写操作b_write命令名称时,Tcl解释器通过写操作命令b_write调用verilog中的写操作任务,并通过所述通信通道将进行写操作的地址和数据传递到verilog中,并且将Tcl进程转移到verilog进程;当Tcl解释器收到读操作b_read命令名称时,Tcl解释器通过读操作命令b_read调用verilog中的读操作任务,并通过所述通信通道将进行读操作的地址传递到verilog中,并且将Tcl进程转移到verilog进程;当Tcl解释器收到等待操作b_wait_irq命令名称时,Tcl解释器通过等待操作命令b_wait_irq调用verilog中的等待操作任务;
4)verilog的任务完成后将返回值通过所述通信通道返回给Tcl解释器,并且将verilog进程转移到Tcl的进程。
进一步的,所述阻塞Tcl指令用C语言编写。
进一步的,所述返回值为整数类型;当所述返回值为正值时,Tcl解释器顺序执行该测试用例中的Tcl指令,否则结束执行该测试用例。
与现有技术相比,本发明的积极效果为:
为了统一FPGA仿真测试和板级测试,本发明所创建脚本可以在FPGA仿真工具Qustasim上运行,同时也可以在MSComm命令行上运行。从而只需要开发一套测试脚本,既可以在仿真平台上运行,又可以在板级测试中使用,不但做到了仿真和板级测试的一致性,也节约了人力开发成本。
本发实现Tcl与verilog的交互,从而做到实时控制仿真进程,模拟板级测试场景,减少开发和调试测试用例的工作量。
附图说明
附图为本发明的交互式仿真方法流程图。
具体实施方式
TCL_PLI库允许任何的Tcl语句可以在verilog的仿真中被调用,PLI的功能是初始化Tcl的解释器并且把Tcl的功能映射到verilog的task中去,另外还可以帮助在Tcl解释器中启动脚本来控制verilog和Tcl之间的交互。Verilog的task有入口可以让Tcl向verilog传递变量,同样,verilog也可以将返回的变量传递给Tcl。PLI提供了这种Tcl和verilog之间信息的共享和数据的传递。
在TCL_PLI库中有四个PLIfunction:$tcllnit,$tclExec,$tclGetArgs,$tclClose。$tcllnit用来新建和初始化一个新的Tcl解释器。它定义了一个新的Tclfunction可以被verilog的task来调用,并且映射到对应的task上,另外还定义了有多少个参数可以被使用。$tclExec用来执行一个新的脚本,将Tcl的命令映射到verilog的task上来。$tclGetArgs用来获得tcl传递的参数值。$tclClose用来结束Tcl的解释器,释放内存。
在表1中描述了如何在verilog中新建和初始化一个Tcl解释器。第1到3行定义了3个参数表示Tcl命令的名称。第7和第8行定义了3个变量用于verilog和Tcl之间的通信。第12到18行用$tcllnit函数来初始化一个Tcl解释器,这个解释器定义了三个Tcl命令(b_write,b_read,b_wait_irq)用来映射到verilog的task。这些命令可以在脚本中调用,用来执行在仿真中读写总线和等待中断的操作。
表1
表2描述了在verilog中如何在Tcl解释器中调用一个脚本和如何用Tcl命令来执行Verilog的task。第24行$tclExec被触发表示执行“example.tcl”,“example.tcl”可以是表4中描述的脚本。第28到36行表示对从脚本收到的tcl_command的值进行解释:收到BUS_WRITE(表1中定义)表示执行任务bus_write(表3中定义),收到BUS_READ(表1中定义)表示执行任务bus_read(表3中定义),收到BUS_WAIT_IRQ(表1中定义)表示执行任务bus_wait_irq(表3中定义)。$tclExec会返回三种情况:有错误发生;脚本结束;一个Tclfunction被触发。返回非零的值表示一个Tclfunction被触发,返回0表示脚本结束或者有错误发生。只要$tclExec返回的值是正值,while循环就会一直执行Tcl脚本里调用verilog的task。当循环结束,还需要检查是否有错误发生(第38行)。当$tclExec返回0时,tcl_command保存的值可以用来判断是脚本正常结束还是有错误发生导致的结束。
表2
表3中描述了如何在verilog的task中调用Tcl的function来传递参数。Veilog的task可以获得调用Tclfunction的参数。第49行到59行定义了一个bus_write总线写操作的task,$tclGetArgs用来从Tcl到verilog传递信息(第53行),从而获得Tcl传递进来需要进行写操作的地址和数据,总线写操作的具体实施根据不同总线协议而定,此处省略。第61到72行定义了一个bus_read总线读操作,这个task通过$tclGetArgs从Tcl获得读地址,再将读回值进行返回,返回值会通过tcl_return_value(表2中定义)传给Tcl脚本。总线读操作的具体实施根据不同总线协议而定,此处省略。TCL_PLI默认返回值是整数类型。第74到77行定义了bus_wait_irq等待总线中断的task,表示Tcl的解释器可以在仿真中暂停来等待一个事件的发生。
表3
表4是基于以上代码做的一个简单的Tcl脚本。它描述了如何在Tcl里来调用verilog的task和控制仿真的进程。vname和vtime是在TCL_PLI库中定义的。vname表示在$tclInit中定义的解释器的名字,vtime表示当前仿真的时间。脚本中调用了b_write,b_read和b_wait_irq这些在表1中定义的命令,从而可以对总线进行对应地址的读写操作,并返回读数据。第6行表示对地址0x05写数据0xaa,第9行表示等待总线中断,第12和13行表示读地址0x05,并将读回的数据进行打印。该脚本同样可以在板级测试中使用,在Tcl中调用的task名需要和软件里定义的名称一致。
表4
表5是用C语言写的Tcl扩展命令函数,该函数会在Tcl解释器中执行。该段程序表示在Tcl命令调用verilog的任务时,阻塞Tcl命令的执行,等待verilog的任务完成后才能执行下一句Tcl的命令。这样脚本中的Tcl命令才会按顺序执行完verilog任务再去执行下一个任务,不会引起各个任务的冲突和混乱。第7行表示阻塞Tcl命令调用verilog任务,该语句执行后程序进程将从Tcl的进程转移到verilog的进程。第8行表示等待verilog的任务完成,程序进程会等待verilog进程结束以后再转移到Tcl的进程。
表5
加入了Tcl扩展命令以后,就能够用Tcl脚本和verilog任务进行交互式仿真了。使用该脚本以后,仿真编译只需要进行一次就可以,运行不同的脚本都不需要再重新编译验证环境。同样,该脚本也可以在板级测试中使用,保证了仿真平台和板级测试的一致性,保证了测试向量的一致,使得该脚本可以在仿真平台和板级测试中进行复用。并且该脚本还减少了FPGA测试的工作量,提高了FPGA测试的工作效率,不但仿真验证和板级测试可以同时进行,而且板级测试的问题可以立刻在仿真平台上复现,以便于debug调试。
Claims (3)
1.一种基于Tcl的FPGA交互式仿真方法,其步骤为:
1)在FPGA验证平台verilog中新建和初始化一个Tcl解释器;其中,在verilog中设置写操作b_write命令名称、读操作b_read命令名称、等待操作b_wait_irq命令名称,并建立verilog和Tcl解释器之间的通信通道;所述Tcl解释器中设置写操作命令b_write、读操作命令b_read、等待操作命令b_wait_irq,并将其分别映射到verilog中对应的写操作任务、读操作任务、等待操作任务;
2)在verilog中采用Tcl语言创建一测试用例;其中,该测试用例中,在每一verilog任务调用Tcl命令后,设置一阻塞Tcl命令执行的阻塞指令,用于等待verilog的任务完成后执行该测试用例中下一句Tcl命令;
3)所述Tcl解释器调用该测试用例,对该测试用例中的命令进行执行;当Tcl解释器收到写操作b_write命令名称时,Tcl解释器通过写操作命令b_write调用verilog中的写操作任务,并通过所述通信通道将进行写操作的地址和数据传递到verilog中,并且将Tcl进程转移到verilog进程;当Tcl解释器收到读操作b_read命令名称时,Tcl解释器通过读操作命令b_read调用verilog中的读操作任务,并通过所述通信通道将进行读操作的地址和数据传递到verilog中,并且将Tcl进程转移到verilog进程;当Tcl解释器收到等待操作b_wait_irq命令名称时,Tcl解释器通过等待操作命令b_wait_irq调用verilog中的等待操作任务;
4)verilog的任务完成后将返回值通过所述通信通道返回给Tcl解释器,并且将verilog进程转移到Tcl的进程。
2.如权利要求1所述的方法,其特征在于所述阻塞指令用C语言编写。
3.如权利要求1或2所述的方法,其特征在于所述返回值为整数类型;当所述返回值为正值时,Tcl解释器顺序执行该测试用例中的Tcl指令,否则结束执行该测试用例。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410455781.3A CN104216831B (zh) | 2014-09-09 | 2014-09-09 | 一种基于Tcl的FPGA交互式仿真方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410455781.3A CN104216831B (zh) | 2014-09-09 | 2014-09-09 | 一种基于Tcl的FPGA交互式仿真方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104216831A CN104216831A (zh) | 2014-12-17 |
CN104216831B true CN104216831B (zh) | 2017-04-12 |
Family
ID=52098346
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410455781.3A Active CN104216831B (zh) | 2014-09-09 | 2014-09-09 | 一种基于Tcl的FPGA交互式仿真方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104216831B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679963B (zh) * | 2015-03-20 | 2018-04-27 | 杭州士兰微电子股份有限公司 | 一种基于tcl的仿真验证装置和方法 |
CN110750462A (zh) * | 2019-10-29 | 2020-02-04 | 西安奇维科技有限公司 | 一种fpga白盒测试平台 |
CN116128448B (zh) * | 2023-01-09 | 2023-10-17 | 苏州异格技术有限公司 | Fpga工程项目的设计数据处理方法、装置、电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495778A (zh) * | 2011-12-13 | 2012-06-13 | 曙光信息产业(北京)有限公司 | 一种测试单包正则匹配逻辑的系统和方法 |
CN103294600A (zh) * | 2013-06-28 | 2013-09-11 | 哈尔滨工业大学 | 基于Perl的EDIF网表级电路的自动可测性设计系统及自动可测性设计方法 |
-
2014
- 2014-09-09 CN CN201410455781.3A patent/CN104216831B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495778A (zh) * | 2011-12-13 | 2012-06-13 | 曙光信息产业(北京)有限公司 | 一种测试单包正则匹配逻辑的系统和方法 |
CN103294600A (zh) * | 2013-06-28 | 2013-09-11 | 哈尔滨工业大学 | 基于Perl的EDIF网表级电路的自动可测性设计系统及自动可测性设计方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104216831A (zh) | 2014-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10409632B2 (en) | Emulation of hardware components based on interrupt design | |
JP7321839B2 (ja) | ハードウェア抽象化ソフトウェアレイヤを使用するシステムのための汎用仮想化プラットフォーム | |
CN110442528B (zh) | 一种基于安全计算机仿真软件的列控软件跨平台运行的系统及方法 | |
CN104216831B (zh) | 一种基于Tcl的FPGA交互式仿真方法 | |
CN106155903A (zh) | 用于系统设计验证的装置和方法 | |
CN103544105A (zh) | 多核处理器中基于vcpu的调试方法和装置 | |
CN104699523A (zh) | 用于硬件平台所开发的应用程序的调试方法和系统 | |
CN114970411A (zh) | 一种仿真验证方法及系统 | |
US10664637B2 (en) | Testbench restoration based on capture and replay | |
CN114548027A (zh) | 在验证系统中追踪信号的方法、电子设备及存储介质 | |
CN103440133A (zh) | 一种芯片测试软件的开发方法和系统 | |
CN112764981A (zh) | 一种协同测试系统及方法 | |
CN109271231B (zh) | 测试物理硬件装置的方法和仿真物理硬件装置的系统 | |
CN100359333C (zh) | 一种应用于芯片的仿真测试方法 | |
CN115374017A (zh) | 一种仿真运行可执行文件时抓取现场的方法及计算设备 | |
CN111123084B (zh) | 一种基于tcl语言的数字电路快速测试方法 | |
CN111950219B (zh) | 用于实现模拟器的方法、装置、设备以及介质 | |
CN107145379B (zh) | 实现具有数据信号连接关系虚拟设备组件的方法及系统 | |
US6553328B1 (en) | Non-intrusive memory access for embedded processors | |
CN110321574B (zh) | 一种打印波形的方法和装置 | |
CN116860589A (zh) | 一种寄存器验证方法、装置、电子设备及计算机存储介质 | |
CN106527175A (zh) | 分散式外围设备 | |
US20130338992A1 (en) | Method for simulating a system | |
Kamat | IP testing for heterogeneous SOCs | |
Hegazy et al. | Verification of an ARM Cortex-M3 based SoC using UVM |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |