• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > Perl语言在电路设计中的应用

Perl语言在电路设计中的应用

录入:edatop.com    点击:

  摘 要: 一种可在Unix操作系统下编程的模块化的高级语言Perl。在简要阐述Perl语言的基础上,以实例描述了Perl语言在电路仿真测试中的应用。

关键词: Perl语言 功能测试 电路仿真 测试文件

  实用提取和报表语言(Practical Extraction and Report Language,Perl)是由Larry Wall开发并不断更新,用于Unix环境下编程的一种模块化的、可扩展的高级语言。在集成电路后端设计中,电路仿真是设计的关键。而一个完备而准确的测试文件,则是电路仿真的基础。Perl语言编写的应用程序可自动生成设计者所需要的仿真测试文件,为电路仿真工作提供了一种便利而准确的方法。

1 Perl简介

  Perl是一个高阶程式语言,由Larry Wall和其他许多人所编写,融合了许多语言的特性。它主要由C语言及sed、awk,UNIX shell和至少十多种其他的工具和语言所演化而来。其特点如下:

  (1)与脚本语言一样,Perl不需要编译器和链接器来运行代码,要做的只是写出程序并告诉Perl来运行。Perl提供脚本语言(如sed和awk)的所有功能,同时还具有sed和awk所不具备的很多功能。

  (2)Perl语言是UNIX系统上最常使用的数据处理工具。该语言本来的目的就是为了取代UNIX中的sed(或awk)与shell的结合。在UNIX系统中,Perl语言提供了强有力的搜索字符串模式的功能。它有很多文件搜索命令,使用这些命令可以非常方便地从文件中进行信息检索,并可将这些命令相互结合来完成所需的任务。

  (3)Perl语言是一种编程语言,它能非常方便地处理和加工数据,并含有非常丰富的函数,覆盖了输入/输出、字符串处理和数组处理等各方面,可以使用Perl语言来编写出实用和简洁的程序。

  (4)Perl语言拥有与C语言十分类似的运算符和流程控制,并被大多数人所熟悉,降低了编写程序的难度。

2 Perl语言在电路仿真中的应用

2.1 SRAM电路

  图1是SRAM的结构图。它主要由存储单元、译码器、FIFO及控制单元等部分组成。电路设计者根据SPEC的要求进行电路设计,并编写出相应的测试文件,对电路的功能及时序关系进行仿真测试,以确保设计的正确性。

  根据测试要求不同,设计者为仿真电路设计的测试文件的长短会有很大的差别,例如测试SRAM的功能,需要在十几个时钟周期内反复读写,以测试存储单元是否能按要求存储数据,内部信号的时序是否正确。对于编写这种约几百行的测试文件来说,能否自动生成并不太重要。但是如果希望将所有存储单元均进行一次读写检查,手工编写上万行测试文件是不现实的。

  图2是某种SRAM的时序图。在SRAM读取数据时,访问时间(Access time)是一个非常重要的数据,它表示从存储器中重新读回数据所用的时间。Taccess=clock cycle-Tsetupclk。在设计过程中,要保证:当RD=1时,必须在Access time时间内把数据从存储器中读出。这就要求设计者在仿真时,关注Access time结束时的RDATA数据与希望从存储器中读出的数据是否一致。

  又如,Thd(Time Hold)代表了从存储器中读出的RDATA数据需要保持的时间。一般来说,SRAM将作为构成整个系统的一个子模块,它的输出必将为另一个子模块的输入信号。为了保证整个系统的正常工作,作为子模块的SRAM的输出信号必须满足整个系统对它的要求,即输出信号的保持时间(hold time)要足够长。对于这一点,设计者在仿真中同样也要关注RDATA数据是否可以保持足够长的时间。类似要考虑的问题还有许多,这些严格的限制条件将给设计者带来很大麻烦。例如不同的SRAM,其时钟周期、setup time、hold time、I/O个数都可能不同。以上问题的存在都将导致一个测试文件只能用在与其对应的1个SRAM上。因此如果做1个系列的SRAM,仅写测试文件的工作量就足够大了。

2.2 应用Perl程序生成测试数据的实现

  经以上分析,采用Perl语言来生成SRAM的测试文件。该方法有如下要求:

  (1)快速、完全。要确保生成的测试数据可将所有存储单元均写入、读出1次。

  (2)测试文件中必须包含clk上升和下降沿的读写数据,同时,必须有set up time、hold time等关键时钟时刻的读写数据。根据测试文件编写的具体要求,可以发现,在UNIX环境下,通过编写Perl程序生成测试将是一个事半功倍的解决方式。用Perl语言编写的部分程序如下。

#########################################

generate the title of vector

#########################################

sub gentitle{

 local($title)=@_;

 print $title ″radix 111″;

 print $title &setdata(0,$abit,1),″ ″;

 print $title &setdata(0,$dbit,1),″ ″;

 print $title &setdata(0,$dbit,1),″n″;

print $title ″io iii″;

print $title &setdata(0,$abit,2),″ ″;

 print $title &setdata(0,$dbit,2),″ ″;

print $title &setdata(0,$dbit,3),″n″;

local($tmp1)=$abit-1;

 local($tmp)=$dbit-1;

  chop($clock);

 chop($address) if $address=~/n$/;

 chop($dinput);

 chop($doutput);

 print $title ″vname $clock WR RD″;

print $title ″$address

[$tmp1:0] $dinput

[$tmp:0]$doutput

[$tmp:0]n″;

print $title ″tunit nsn″;

print $title ″trise $trise″;

print $title ″tfall $trise″;

print $title ″vih $vih″;

print $title ″vil $vil″;

print $title ″voh $voh″;

print $title ″vol $vol″;

print $title ″n″; }

sub setdata{

local($value,$data,$flag)=@_;

local($string)=″″;

local($cl)=″″;

for(local($j)=0;$j<$data;$j++)

{

if($flag>0&&$flag<6)

{

$str.=″x″if $flag==1;

$str.=″i″if $flag==2;

$str.=″1″if $flag==3;

$str.=″0″if $flag==4;

next;

}

$cl.=$str;

$string=$c;

}

$str;

}

  设计者需要做的就是根据SPEC的要求填写由该程序生成的可执行文件的表格,就可在Perl的环境下生成完整的测试程序。应用Perl语言生成的测试程序,经过实际验证,可以满足上述2个条件。

  Perl语言作为一种具有强大功能的编程语言正迅速被人们认识与接受。它作为用在Unix环境下编程的高级语言,为电路仿真测试文件的编写提供了一种新的方式,高效、准确的特点给设计人员带来很大的便利。

参考文献

1 Deitel H M,Deitel P J,Nieto T R et al.Perl编程金典.北京:清华大学出版社,2000

2 Wall L,Schwartz R L.Programming Perl.O′Reilly Associates Inc,1991

3 BaKer R J,Li H W et al.CMOS Circuit Design,Lay-out,and Simulation.New York:The Institute of Electrical and Electronics Inc,1997

4 高德远,康继昌.超大规模集成电路——系统和电路的设计原理.西安:西北工业大学出版社,1998

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:基于MPXY8020A芯片的胎压监控系统设计
下一篇:安捷伦科技公布2009财年第三季度财务报告

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图