新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于VHDL语言的IP核验证

基于VHDL语言的IP核验证

——
作者:时间:2007-04-28来源:电子开发收藏
引言 

在IC(integrated circuit.集成电路)发展到超大规模阶段的今天,基于IP(Intellectual Property,知识产权)核的IC设计及其再利用是保证SoC(system onchip,片上系统)开发效率和质量的重要手段。如果能对进行、测试和集成.就可以加速SoC的设计,而这需要从以下5个方面进行考虑。

代码纯化.指在代码设计中及完成后进行自定义的、IEEE标准的、设计重用的、可综合性和可测试性等方面的规则检查; 
代码覆盖率分析.研究仿真中的测试矢量是否足够; 
设计性能和面积分析.在设计逻辑综合过程中分析所设计的RTL所能达到的性能和面积要求; 
可测性分析:设计重用中的关键技术。如何保证的高测试覆盖率,如何保证IP核在集成到SoC中后的可测试性.是该阶段分析的主要目标。所以在IP核实现之前.要检查IP核设计中是否违反了可测性设计规则; 
低功耗分析:SoC的重要衡量指标。我们在IP核设计阶段就需要将TP核功耗参数进行精确估计并进行相应的功耗优化设计; 

基于此.本文重点讨论在IC设计过程中IP核的测试问题并以互联网上可免费下载的原始IP核资源为例.在与8位RISC架构指令兼容的微处理器下载成功。

1 IP核与RISC体系

1.1 IP核


IP核是具有知识产权的集成电路芯核的简称其作用是把一组拥有知识产权的、在数字电路中常用但又比较复杂的电路设计功能块(如FIR滤波器SDRAM控制器、PCI接口等)设计成可修改参数的集成模块构成芯片的基本单位,以供设计时直接调用从而大大避免重复劳动。

1.2 RISC处理器

RISC(reduced instruction set computer.精简指令系统计算机)是IBM公司提出来的、在CISC(complerinstruction set computer复杂指令系统计算机)的基础,上继承和发展起来的一种新型系统结构技术。具有结构简单指令合理成本低廉快捷高效等特点。应用前景被普遍看好。国际IT领域的大公司如IBM、DEC、Intel、ARM、Motorola、Apple、HP等先后将其力量转向RISC.并已经开发出各种基于RISC的芯片或IP核。

SoC是进行IA(Intel Architecture.智能家电)产品开发的主要方法.而基于RISC体系的EP(embedded processor,嵌入式处理器)则是SoC芯片的核心。可以说,RISC是当前计算机发展不可逆转的趋势。

1.3 VHDI语言

VHDL(Very High Speed Integrated Circuit Hardware Description Language.集成电路硬件描述语言)与Verilog HDL程序都很适合用来设计架构RCMP reconfigurable mICroprocessor,可重新规划的微处理器)。为此.我们利用VHDL设计一种嵌入式RISC8微处理器及应用芯片.设计后的IP核下载到FPGA(Field Programmable Gate Array.现场可编程门阵列)芯片上做,并在开发板构建视频接口模块等以利于调试和应用。

2 IP核的仿真与测试

2.1 SoC的测试策略


SoC芯片的测试比传统的ASIC测试要复杂得多.全面的功能测试通常是不现实的  目前常采用的策略是分别测试所有的电路功能模块在SoC芯片中存在各种不同类型的电路模块,每个模块所要求的测试方式也不相同。SoC芯片中的模块基本可以分为三类:CPU/DSP、存储器模块、其他功能电路模块。CPU/DSP的测试与传统的CPU/DSP测试类似.通常采用边界扫描方式结合矢量测试方式。存储器的测试一般采用BIST测试,比较快捷而容易控制。其他的电路模块按设计难易程度或应用方便性,采用边界扫描或BIST。

2.2 IP核的测试方案

IP核的研究平台有很多种.但一般硬件仿真调试器费用昂贵(几千到数万元),对于普通用户来说难于承受。为此,本文利用免费的IP核进行改写,利用Xilinx ISE开发软件和汇编语言翻译过来的机器码作为测试激励,完成了RISC结构的Xilinx Spartan2系列的FPGA芯片CPU指令的验证和测试方案.具体方案如下:

(1)以VHDL/Verilog语言改写或新写8 bit pipelined RISC 结构之处理器模块、内存控制器模块以及视频控制接口模块.然后通过Xilinx ISE 4.1/5.2、ModelSim完成行为级仿真、综合以及布局布线等。

(2)以某个应用为例将C语言或汇编语言编写的测试算法程序存储在SRAM中.实现嵌入式处理器及视频控制接口并下载到FPGA.从而生成一块可编程的控制器芯片构成一个简化SoC应用。 


(3)如果SoC应用成功.则可通过cell-Base Design Flow将其转成ASIC版图.实现流片。

2.3 IP核的验证方法

在芯片的设计流程中设计的验证是一个重要而又费时的环节。在进行Top_Down设计时.从行为级设计开始到RTT级设计再到门级设计相应地利用EDA工具进行各个级别的仿真.行为仿真和RTL级仿真属于功能仿真其作用是验证设计模块的逻辑功能  门级仿真是时序仿真用于验证设计模块的时序关系无论是功能仿真或是时序仿真仿真方法有两种.即交互式仿真方法和测试平台法

(1)交互式仿真方法。该方法主要是利用EDA工具提供的仿真器进行模块的仿真它允许在仿真期间对输入信号赋值,指定仿真执行时间,观察输出波形。当系统的逻辑功能、时序关系达到设计要求后,仿真结束。缺点是输入输出不便于记录归档尤其是输入量比较复杂时,输出不便于观察和比较

(2)程序仿真测试法。就是为设计模  
块专门设计的仿真程序(也称为测试程序),以实现对被测模块自动输入测试矢量,并通过波形输出文件记录输出,便于将仿真结果记录归档和比较。利用测试程序可以对一个设计模块进行功能仿真和时序仿真。

2.4 IP核的测试仿真

综上所述,下面给出RISC 8测试仿真实例。该测试仿真大致可分为5个步骤

(1)给Wave(波形)窗口添加信号。首先添加的是RISC 8的整体Structure(结构)信号。

(2)行为级仿真初步测试。在初步测试中.“portb”信号的输出如果是“FX”,则说明系统必然存在问题;如果是“OX”则说明系统没有发现问题要进行进一步的测试。

(3)行为级仿真进一步测试。在进一步测试中,要注意的信号是romaddr、romdata以及各种指令控制信号。

(4)源程序修改,再仿真。在上一步中定位到出错的地方,然后回到源程序中找到所有出错信号出现的地方,仔细分析,并结合波形图进行修改,然后重复上述步骤进行再仿真。

(5)布图布线后的仿真(后仿真)。事实上在行为级仿真与后仿真之间还有3个仿真过程,但一般来说只要能通过后仿真则其他的仿真也就没有问题。

在后仿真过程中,看一下“portb”的输出是否与行为级仿真一致,若一致则测试通过。如果不一致则必须返回原程序和行为级仿真,对时序进行仔细分析(因为这种情况大都是因为加入延迟后原来的时序发生改变)。

3 IP核在RISC架构中的下载实例

3.1 RISC处理器的选择与指令的测试


我们选用MICrochip公司生产的PICl6c5x-Xilinx Spartan2系列中的Xc2s150微处理器下载.因为其FPGA芯片架构指令与8位RISC兼容.能够很容易实现RISC架构之指令集。

RISC的测试激励文件是由汇编语言测试程序翻译而得到的.例如test3程序测试循环移位.test5测试逻辑操作指令、test8测试端口等。

testl程序是测试incf和的decf指令的.行为级初步测试中,“portb”输出为“01”,如3.3中所述,这并不能说明没有问题接着做行为级进一步测试

3.2 测试激励程序的加载步骤与验证

选择“Project”莱单中的“News Source”选项,在弹出的“New”对话框左侧选择文件类型为“Test Bench Waveform”,填入文件名,单击下一步,在弹出的“select”对话框中选择关联的源为“anss_risc8_top”,单击下一步.然后单击“Finish”后会启动HDL Bencher.在这个软件环境中可以输入激励信号最后将由汇编测试程序翻译过来的机器码信息作为激励信号输入保存.输入测试时间后退出HDL Benche。

在进一步测试中也没有问题,然后,我们可将测试程序进行如下改变.

    incf x,f:X<=FE
    incf x,f;X<=FF
    incf x,f:X<=00
    incf x,f;X<=01
    decf x,f:X<=00
    decf x,f:X<=FF
    decf x,f:X<=FE

将程序中的最后一个incf改为的decf.这样制造了一个错误.重新进行仿真,发现"portb"的输出仍然为"01"而不是预想的"F1"。由此可见程序中存在问题。仔细分析后发现问题出现在“btfss”变为1时.此时alu_z为1而实际上它应该是0。由于alu_z出现在算术逻辑运算模块ALU的一个子模块alu_dp中,因此对alu_dp进行分析,在wave窗口中加入alu_dp模块的信号,同时在ISE4.1i中打开alu_dp的源文件进行分析.经分析发现alu_z变为1是由于源程序中对alu_z的处理不完备.少考虑了一种情况。根据这种情况对源程序alu_dp.vhd进行修改如下: 


  a.signal bittest,temp:std_logIC_vector(7 downto 0);
    --add signal temp
    b.u_zero:process(bittest,op,longq)
    begin
    if(bittest=ZEROBYTE)  and&n  
bsp; (op=ALU_OP_BITTESTCLR)
    then zero<='1';
    elsif(bittest/=ZEROBYTE)  and  (op=ALU_OP_BITTESTSET)
    then zero<='1';
    elsif longq(7 downto 0)=ZEROBYTE and(op/=ALUOP_BITTESTSET)
    then zero<='1';--new add
    elsif temp="zerobyte" and op="ALUOP"_BITTESTSET
    then zero<='1';--new add
    else
    zero<='0';
    end if;
    end process;
    c.bittest<=bitdecoder and a;
    temp<=bitdecoder or a; --new add

修改存储源程序后再次仿真的结果是正确的(即portb输出为“F1”)。将测试程序恢复,仿真结果也是正确的。再进行后仿真也正确.至此.test1程序测试完毕。

4 结束语

集成电路发展到超大规模阶段后,芯片中凝聚的知识已经高度浓缩。专有知识产权的IP核设计及其再利用是保证SoC开发效率和质最的重要手段。 随着CPLD/FPGA的规模越来越大,设计越来越复杂,IP核是必然的发展趋势。


评论


相关推荐

技术专区

关闭