文献综述基于VHDL语言的IP核验证
摘 要:探讨了IP核的验证与测试的方法及其和VHDL语言在IC设计中的应用,并给出了其在RISC8框架CPU核中的下载实例。
关键词:IP核;片上系统;验证
中图分类号:TN4 文献标识码:A 文章编号:
0 引 言
在IC(integrated circuit,集成电路)发展到超大规模阶段的今天,基于IP(Intellectual Property,知识产权)核的IC设计及其再利用是保证SoC(system on chip,片上系统)开发效率和质量的重要手段。如果能对IP核进行验证、测试和集成,就可以加速SoC的设计。而这需要从以下5个方面进行考虑:
(1) 代码纯化:指在代码设计中及完成后进行自定义的、IEEE标准的、设计重用的、可综合性和可测试性等方面的规则检查。
(2) 代码覆盖率分析:研究仿真中的测试矢量是否足够。
(3) 设计性能和面积分析:在设计逻辑综合过程中分析所设计的RTL所能达到的性能和面积要求。
(4) 可测性分析:IP核设计重用中的关键技术。如何保证IP核的高测试覆盖率,如何保证IP核在集成到SoC中后的可测试性,是该阶段分析的主要目标。所以在IP核实现之前,要检查IP核设计中是否违反了可测性设计规则。
(5) 低功耗分析:SoC的重要衡量指标。我们在IP核设计阶段就需要将IP核功耗参数进行精确估计,并进行相应的功耗优化设计。
基于此,本文重点讨论在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(complex instruction 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 VHDL语言
VHDL(Very High Speed Integrated Circuit Hardware Description Language,集成电路硬件描述语言)与Verilog HDL程序都很适合用来设计架构RCMP(re-configurable 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设计时,从行为级设计开始,到RTL级设计,再到门级设计,相应地利用EDA工具进行各个级别的仿真。行为仿真和RTL级仿真属于功能仿真,其作用是验证设计模块的逻辑功能。门级仿真是时序仿真,用于验证设计模块的时序关系。无论是功能仿真或是时序仿真,仿真方法有两种:即交互式仿真方法和测试平台法。
(1) 交互式仿真方法。该方法主要是利用EDA工具提供的仿真器进行模块的仿真,它允许在仿真期间对输入信号赋值,指定仿真执行时间,观察输出波形。当系统的逻辑功能、时序关系达到设计要求后,仿真结束。缺点是输入输出不便于记录归档,尤其是输入量比较复杂时,输出不便于观察和比较。
(2) 程序仿真测试法。就是为设计模块专门设计的仿真程序(也称为测试程序),以实现对被测模块自动输入测试矢量,并通过波形输出文件记录输出,便于将仿真结果记录归档和比较。利用测试程序可以对一个设计模块进行功能仿真和时序仿真。
2.4 IP核的测试仿真
综上所述,下面给出RISC 8测试仿真实例。该测试仿真大致可分为5个步骤。
(1) 给Wave(波形)窗口添加信号。首先添加的是RISC8的整体Structure(结构)信号。
(2) 行为级仿真初步测试。在初步测试中,“portb”信号的输出如果是“FX”,则说明系统必然存在问题;如果是“0X”,则说明系统没有发现问题,要进行进一步的测试。
(3) 行为级仿真进一步测试。在进一步测试中,要注意的信号是romaddr、romdata以及各种指令控制信号。
(4) 源程序修改,再仿真。在上一步中,定位到出错的地方,然后回到源程序中找到所有出错信号出现的地方,仔细分析,并结合波形图进行修改,然后重复上述步骤,进行再仿真。
(5) 布图布线后的仿真(后仿真)。事实上,在行为级仿真与后仿真之间还有3个仿真过程,但一般来说,只要能通过后仿真则其他的仿真也就没有问题。
在后仿真过程中,看一下“portb”的输出是否与行为级仿真一致,若一致则测试通过。如果不一致,则必须返回原程序和行为级仿真,对时序进行仔细分析(因为这种情况大都是因为加入延迟后原来的时序发生改变)。
3 IP核在RISC架构中的下载实例
3.1 RISC处理器的选择与指令的测试
我们选用Microchip公司生产的Pic16C5x-Xilinx Spartan2系列中的Xc2s150微处理器下载,因为其FPGA芯片架构指令与8位RISC兼容,能够很容易实现RISC架构之指令集。
RISC的测试激励文件是由汇编语言测试程序翻译而得到的,例如test3程序测试循环移位,test5测试逻辑操作指令、test8测试端口等。
test1程序是测试incf和的decf指令的,行为级初步测试中,“portb”输出为“01”,如3.3中所述,这并不能说明没有问题,接着做行为级进一步测试。
3.2 测试激励程序的加载步骤与验证
选择“Project”菜单中的“New Source”选项,在弹出的“New”对话框左侧选择文件类型为“Test Bench Waveform”,填入文件名,单击下一步,在弹出的“Select”对话框中选择关联的源为“ans_risc8_top”,单击下一步,然后单击“Finish”后会启动HDL Bencher,在这个软件环境中可以输入激励信号。最后,将由汇编测试程序翻译过来的机器码信息作为激励信号输入、保存,输入测试时间后退出HDL Bencher。
在进一步测试中也没有问题,然后,我们可将测试程序进行如下改变:
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 (op = ALUOP_BITTESTCLR)
then zero <= '1';
elsif (bittest /= ZEROBYTE) and (op = ALUOP_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核是必然的发展趋势。
参考文献
[1] 慧聪电子元器件商务网.RISC结构的IP核验证与测试[EB/OL].http://info.ec.sinobnet.com/html/
001/002/005/20692.htm,2003-12-09/2004-5-27.
[2] 用FPGA实现数字匹配滤波器的优化方法[J].微计算机信息.2004 20(11):118-119.
[3] 李艳萍.在测控系统中用IP核实现D/A转换[J].单片机及嵌入式系统应用.2003,6:13-17.
[4] 数字集成电路逻辑电平接口技术研究[J].微计算机信息.2004 20(11):125-126.
[5] 褚振勇,翁木云. FPGA设计及应用[M]. 西安:西安电子科技大学出版社,2002.
IP Core Verify Based on VHDL
FENG Jiang[1],WANG Xiao-yan[2],XIAO Ling-ling[1],WU Jun[1]
(1. Faculty of Information Engineering, Jiangxi University of Sci-Tech, Ganzhou 341000, China;
2. Faculty of Mechanical and Electronic Engineering, Jiangxi Uni. of Sci-Tech, Ganzhou 341000, China;
3. Dartment of electronic engineering, Huazhong University of Sci-Tec, Wuhan 430074, China)
Abstract:Approach the methods of verify and test of IP core and its applies in IC design with FPGA technology, and gives the example put in use of CPU core based on RISC8.
Key word:IP core, SoC, verify