首页> 中国专利> 测试硬件描述语言所撰写的硬件电路方块的方法

测试硬件描述语言所撰写的硬件电路方块的方法

摘要

本发明是有关于一种测试硬件描述语言所撰写的硬件电路方块的方法,能自动产生测试图样及错误讯息。本发明包含将原始类别转换成包装类别的步骤,其中,包装类别较原始类别还记录硬件电路方块的输入数据以及输出数据;产生硬件逻辑仿真所需的顶端模块的步骤;将原始单元测试转换为扩充单元测试的步骤;以扩充单元测试对包装类别执行单元测试以产生输入图样档案的步骤;依据顶端模块及输入图样档案而对硬件电路方块进行硬件逻辑仿真。

著录项

  • 公开/公告号CN101000639A

    专利类型发明专利

  • 公开/公告日2007-07-18

    原文格式PDF

  • 申请/专利权人 大同股份有限公司;

    申请/专利号CN200610001606.2

  • 发明设计人 郑福炯;黄年畤;陈建一;

    申请日2006-01-13

  • 分类号G06F17/50(20060101);

  • 代理机构11021 中科专利商标代理有限责任公司;

  • 代理人周长兴

  • 地址 中国台湾台北市

  • 入库时间 2023-12-17 18:54:43

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-03-12

    未缴年费专利权终止 IPC(主分类):G06F17/50 授权公告日:20090114 终止日期:20130113 申请日:20060113

    专利权的终止

  • 2009-05-27

    专利申请权、专利权的转移(专利权的转移) 变更前: 变更后:

    专利申请权、专利权的转移(专利权的转移)

  • 2009-01-14

    授权

    授权

  • 2007-09-12

    实质审查的生效

    实质审查的生效

  • 2007-07-18

    公开

    公开

说明书

技术领域

本发明是关于一种测试硬件电路方块的方法,尤指一种测试硬件描述语言所撰写的硬件电路方块的方法。

背景技术

为了使大型电路设计更具有效率性及可利用性,目前采用VHDL或Verilog等硬件描述语言以进行大型电路的设计。因此,依硬件描述语言所撰写的程序代码经由合成(synthesis)、放置与绕线(place and route)后,可对应至一个硬件电路方块,例如:随机数产生器、计数器、加法器、或乘法器等等,而硬件电路方块又称为硬件IP(智能财产,Intelligent Property)。因此,硬件描述语言程序代码的执行结果等于硬件电路方块的执行结果,再由重复呼叫硬件描述语言程序代码则可轻易复制硬件电路方块,达到硬件IP的重复利用性。

然而,当使用者完成硬件描述语言程序代码的撰写后,为了确保硬件描述语言程序代码是否正确无误,使用者需将此硬件描述语言程序代码视为一个待测单元(unit),并针对此待测单元撰写一笔测试图样(testpattern),此测试图样还包括预期结果,最后,由仿真系统依测试图样而对待测单元进行测试,并比对测试结果与预期结果是否相同,上述系列步骤又称为单元测试(unit test)。以人工撰写测试图样将造成人力与时间的浪费,且待测单元的运行有错误时,目前并无有效的错误讯息回传机制以告知使用者适当的文字除错讯息,并标示出错误可能发生之处,这将造成使用者进行单元测试上的困扰。

因此,在硬件描述语言的领域中,使用者对于自动产生测试图样存在着强烈的需求,并对错误讯息回传机制亦存在着强烈的需求。

发明内容

本发明的目的在于提供一种测试硬件描述语言所撰写的硬件电路方块的方法,能自动产生测试图样及错误讯息。

为实现上述目的,本发明提供的测试硬件描述语言所撰写的硬件电路方块的方法,包括:

步骤(A):将一原始类别转换成一包装类别,其中,与原始类别比较,该包装类别能额外记录该硬件电路方块的输入数据以及输出数据;

步骤(B):产生一硬件逻辑仿真所需的一顶端模块;

步骤(C):将一原始单元测试转换为一扩充单元测试;

步骤(D):以该扩充单元测试而对该包装类别执行单元测试以产生一输入图样档案;以及

步骤(E):依据该顶端模块及该输入图样档案而对该硬件电路方块进行该硬件逻辑仿真。

所述的测试硬件描述语言所撰写的硬件电路方块的方法,其中步骤(A)包括下列步骤:

步骤(A1):依据一特定讯号通信协议而设定一非公开数据成员;

步骤(A2):将该输入参数记录至该非公开数据成员;

步骤(A3):将该回传值记录至该非公开数据成员;

步骤(A4):依该特定讯号通信协议而重置该非公开数据成员;

步骤(A5):将步骤(A1)、步骤(A3)、及步骤(A4)依序纪录至该包装类别的队列中;以及

步骤(A6):定义该原始类别所未定义的公用方法。

本发明提供的测试硬件描述语言所撰写的硬件电路方块的方法,其中硬件描述语言为VHDL或Verilog。

本发明提供的测试硬件描述语言所撰写的硬件电路方块的方法,其中硬件描述语言是以java语言以进行撰写。

本发明提供的测试硬件描述语言所撰写的硬件电路方块的方法,其中硬件电路方块采用一异步四相讯号通信协议。

附图说明

图1为本发明的测试硬件描述语言所撰写的硬件电路方块的方法的流程图。

图2是将original class转换成wrapper class的步骤的细部流程图。

图3为本发明的测试硬件描述语言所撰写的硬件电路方块的方法的示意图。

具体实施方式

在本发明中,将以Java语言作为HDL所需的软件语言,以Java语言来撰写对应至随机数产生器的软件函式,以Junit来撰写测试码以产生测试图样(test patent),并以Mentor Graphic公司的ModelSim作为硬件描述语言的仿真器(simulator),又为了配合SOCAD系统所使用的异步四相讯号通信协议(4-phased signal protocol),故异步四相讯号通信协议作为通信界面。上述设定仅方便进行本发明的说明,并不以此为限。其中,软件函式的示范性内容如下所示:

public class Random{

  static int va=3;

  static int vb=8;

  static int vcarry=0;

  static int random=0;

  public static void setA(int a){

    va=a;     }

  public static void setB(int b){

    vb=b;      }

  public static void setCarry(int carry){

     vcarry=carry;    }

  public static int simpleRandom(){

       random=va+vb;

  if(vcarry==1){random=random+1;}

    va=vb;

  if(random>=10){vcarry=1;random=random-10;}else{vcarry=0;}

    vb=random;

    return random;

  }

public static void main(String[]args){

  for(int i=0;i<100000;i++){

    Random.setA(i);

    Random.setB(i);

    Random.setCarry(i);

    }

    Random.setA(3);

    Random.setB(8);

    Random.setCarry(0);

  for(int i=0;i<100;i++){

    System.out.println(″i=″+i+″RND=″+Random.simpleRandom());

    }

    System.out.println(″End random″);

    }

}

如图1所示,本发明测试硬件描述语言所撰写的硬件电路方块的方法包括下列步骤:

步骤S10:将original class(原始类别)转换成wrapper class(包装类别),如图2所示,在本发明中,original class为java class,因此,wrapper class系为java wrapper class。wrapper class与original class相似,两者的输入接口及输出接口皆相同,但wrapper class较original class还记录此软件函式的输入数据以及输出数据。为了将软件函式的执行动作顺利地转换为硬件电路所相对应的动作,因此需对original class进行扩充以达到记录软件函式执行时的特征,并以软件方式记录的。可想而知地,使用者亦于硬件电路的执行过程中纪录硬件执行结果,而软件函式的执行结果可作为预期的硬件逻辑仿真的执行结果,通过比较两者之间是否有差异可以确保硬件电路的正确性。其中,original class与软件函式的种类有关,例如:软件函式用以描述随机数产生器,则original class则为描述随机数产生器所需引用的类别。

由于original class中包含公用方法(public method)、参数(parameter)及回传值(return value),因此,步骤S10额外将public method、参数、及回传值定义成wrapper class的非公开数据成员(private data member),如图2所示,其包括下列步骤:

步骤S100:依SOCAD系统所使用的四相讯号通信协议而设定每个参数及回传值所对应的非公开资料成员。

步骤S102:使用输入的参数呼叫original class中相对应的publicmethod。。

步骤S104:将回传值记录至非公开数据成员。

步骤S106:依四相讯号通信协议而重置非公开数据成员。

步骤S108:将步骤S100、步骤S104、及步骤S106分两次依序纪录到wrapper class的队列(queue)。

步骤S110:依SOCAD系统的需求在original class中额外增加publicmethos的定义,例如:重置、清除、初始化等等方法。

步骤S12:产生硬件逻辑仿真所需的顶端模块(top module),在本发明中,top module为VHDL top module。每—original class的public method与其参数不同,因此,根据步骤S10的结果而为original class提供硬件逻辑仿真所需的top module。由于可以得知original class拥有哪些public method,这些public method将是外界对于original class的操作接口,相当于硬件电路的输出入端口(port)。因此,依据每个public method所产生相对应的埠,top module可对所有的输入埠产生输入图样(input pattern),并通过输出端口纪录执行结果。此外,top module亦可读取测试图样文件的文字除错信息,当错误发生时可提供适当的信息让使用者来除错。其中,top module的示范性内容如下所示:

while(input pattern file!=EOF)

{

for every public method{

  for every input interface{

    read set-data from input pattern file;

    send the set-data to the hardware input-interface;

  }

}

wait for the maximum delay;

read data from hardware output interfaces;

read the set-records from input pattern file;

if(read-data!=set-records)

   {

   pass the assert message from input pattern file to stand output;

   exit;

   }

for every public method{

  for every input interface{

    read reset-data from input pattern file;

    send the read-data to hardware input interface;

  }

}

wait for the maximum delay;

read data from hardware output interface;

read the reset-records form the input pattern file;

if(read-data!=reset-records)

   {

   pass the assert message from input pattern file to stand output;

   exit;

   }

}

步骤S14:将原始单元测试(unit testing)转换为扩充单元测试。为了达到让硬件行为在仿真时发生错误的位置与可以与软件描述产生对应,因而将硬件行为切割为数个区块,每一区块可对应至一段文字除错讯息。为了达到此目的,因此必须纪录在assert function(说明函数)与最近一个assertfunction被呼叫间有哪些相对应的硬件动作被执行,方能达到以文字除错讯息切割硬件行为的目的。其中,SOCAD_ASSERT function的两个主要的功能为:将步骤S108的纪录转换为文字的输入图样,并储存至输入图样档案;以及将收集到的文字除错讯息做适当地修改而与输入图样档案结合。因此,SOCAD_ASSERT function可将从wrapper class收集的硬件执行行为与文字除错讯息加以整合并输出至测试图样档(test pattern file)。依据步骤S108的队列以及SOCAD系统的中所是用的四相讯号通信协议即可得知队列的倒数第二个动作乃伴随SOCAD_ASSERT呼叫的运算阶段(computation phase),倒数第一个动作为此运算阶段的重置阶段(resetphase),因此,使用者可经由以下伪码(Pseudo Code)扩充原始的assert_function来实行unit testing。

 SOCAD_ASSERT_EQUAL(Message,Condition){

  original_assert_equal(Message,Condition);

  MSG=“BEFORE”+Message;

  for(i=0;i<wrapper_class.queue.length-2;i++)

  {

    write_data_to_file(wrapper_class.queue.get(i),MSG);

  }

  MSG=“Computation“+Messgae;

  write_data_to_file(wrapper_class.queue.get(i,MSG));

  i=i+1;

  MSG=“Reset“+Message;

  write_data_to_file(wrapper_class.queue.get(i,MSG));

  wrapper_class.queue.flush();

}

没有assert message(说明讯息)的动作将被标上由下一个最接近的assert message加上”Before”字符串以组成另一assert message,如此一来,可以以文字除错讯息为界线而将所有在硬件逻辑仿真上的行为区分成数个区块。

步骤S16:以扩充unit testing而对wrapper class执行单元测试以产生输入图样档案(input pattern file)。原始unit testing的行为是这个过程中所有行为的子集合,因为wrapper class除了包含original class的描述外,还增加硬件电路方块的相对应动作,且原始unit testing也变更成扩充unit testing,因此,以扩充unit testing对wrapper class执行单元测试则可产生输入图样档案,而输入图样档案包括对应于原始unit testing的硬件动作、原始unittesting所使用的文字除错讯息、以及切割后的硬件逻辑仿真动作区块。

步骤S18:依据top module及输入图样档案而对硬件电路方块进行硬件逻辑仿真。SOCAD可将软件函式转成硬件电路方块,通过Modelsim依照topmodule及输入图样档案而进行硬件逻辑仿真。如果比对结果显示正常则继续执行后续的处置,如果比对结果显示不正常则top module可依据输入图样档案而显示适当的assert message。例如:于进行硬件逻辑仿真的过程中,assert message内容如下:

Error

In Function testRandom:In 8th interation Computing

Interface:retsimpleRandoml,expected=0000000010,butactual=0000000001

Time:68us Iteration:0 Instance:/random_test_top

因此,使用者可以参考原始单元测试的示范性内容的”simplerandom(ture)”的呼叫,其预期结果为2但是硬件逻辑仿真的传回值为1;另外,还可由assert message中得知错误是发生在执行第9次(0到8)循环时。假设assert message内容如下:

Error

In Function testRandom:BEFORE In 0th interation Computing

Interface:bAck4P,expected=1,but actual=0

Time:34us Iteration:0 Instance:/random_test_top

因此,使用者可得知错误乃发生在循环执行的前,且错误发生在接口”bAck4P”时,故可判断出错误乃发生在”ThisRandom.setB(8,false)”这段程序上。由上述二例中可知,使用者即可依assert message的内容而判断错误的所在并进行错误的修正。

上述实施例仅是为了方便说明而举例而已,本发明所主张的权利范围自应以申请专利范围所述为准,而非仅限于上述实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号