




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
大连东软信息学院本科毕业设计(论文)论文题目论文题目:基于systemverilog的21阶FIR滤波器验证系所:电子工程系专业:电子信息工程(集成电路设计与系统方向)学生姓名:学生学号:指导教师:导师职称:讲师完成日期:2014年3月08日大连东软信息学院Dalian大连东软信息学院毕业设计(论文)摘要V基于systemverilog的21阶FIR滤波器验证摘要芯片的规模和复杂度随着SOC技术、IP复用技术的发展在急剧膨胀,对验证提出了巨大挑战,验证已达到芯片设计的瓶颈。在芯片的设计工作中,验证占据将近70%,的工作量,随着IP标准化工作的进行,验证占的比例呈逐日上升的趋势。在SV语言成为IEEE的规范后,基于SystemVerilog的VMM验证方法学广泛的应用到各个项目中去,因为它有很强的重用扩展性,更全面的覆盖率,更合理的验证结构。本次验证所采用的是VMM验证方法学,使用SystemVerilog语言搭建验证平台。验证数据滤波器模块—fir_filter。通过验证平台向验证目标输入数据,同时向参考模型输入相同数据。经过验证目标和参考模型的处理,验证平台得到处理后的两种输出数据,并对两种输出数据进行比对,如果不一致,上报错误信息,并打印到指定文件中。然后根据仿真波形进行Debug,查找错误原因,如果是验证目标导致的错误,将错误相应信息向设计人员报告。如果是验证平台或者参考模型引起的错误,定位问题位置,解决问题。经验证了fir_filter数据滤波器模块的功能、时序的准确性,符合预期设计目标。本文共有7章:第1章介绍课题的背景以及方法等;第2章介绍VMM验证方法学中的一些基本概念和专有名词介绍;第3章对fir_filter模块的功能和接口时序等进行分析;第4章对fir_filter模块的验证环境和参考模型的结构进行分析;第5章介绍验证环境中各模块的具体实现;第6章介绍覆盖率分析结果;第七章为结论。关键词:VMM,验证平台,SystemVerilog,参考模型大连东软信息学院毕业设计(论文)AbstractThe23-orderFIRFilterVerificationBasedOnSystemVerilogAbstractWiththedevelopmentofSoctechnologyandIPmultiplexing,thescaleandcomplexityofthechipintherapidexpansion,presentedahugechallengefortheverification,andtheverifyhasbeenreferredtoasachipdesignbottleneck.Theverifyworkcanaccountfor70%oftheentirechipdesignwork,andalongwiththeIPstandardizationworkcarriedout,theproportionisstillinanupwardtrend.InSystemVerilogIEEEP1800specification,moreandmoreprojectsbegantousedbasedonSystemVerilogVMMverificationmethodologytoreusescalability,betterfunctionalcoverage,morereasonableverificationstructure.ThearticleisbasedontheVMMverificationmethodology,theverificationplatformfromSystemVeriloglanguage.Toverifythedifferentialdemodulationfunctiondigitallogicmodule-dmod.Inputdatatotargetoftheverifiedthroughverificationplatform,enterthesamedataatthesametimetothereferencemodel.Afterprocessingofthetargetandthereferencemodeltobeverified,theoutputdataverificationplatformtogettreatment,comparisonontwooutputdata,ifthereisanerror,reporttheerrormessage,andprinttothecorrespondingfile.Thenthedebugthataccordingtothesimulationwaveformtofindthecauseoftheerror,iftheerrorcausedbyverifiedgoals,thereportetheerrormessagetothedesigners.Iftheerrorcausedbytheplatformorreferencemodelerrorpositioning,first,locatetheproblemlocation.then,tosolvetheproblem.Thefinalresultsverifiedfir_filterdifferentialdemodulationmodulefunctionality,timingaccuracytomeettheexpecteddesigngoals.Thisarticlehassevenchapters:Chapter1describesthedevelopmentofVMMverificationmethodology.Chapter2introducessomebasicconceptsintheVMMandterminologyintroduced.Chapter3analyzesthefir_filtermodule’sfunctionalityandinterfacetiming.Chapter4explainsthestructureoffir_filtermodule’sverificationenvironmentandreferencemodel.Chapter5describestheconcreteimplementationofeachmoduleintheverificationenvironmentandthereferencemodel.Chapter6describesthecoverageanalysis.Chapter7istheconclusion.Keywords:VMM,VerificationPlatform,SystemVerilog,ReferenceModel大连东软信息学院毕业设计(论文)目录目录TOC\o"1-3"\u摘要 IAbstract II第1章绪论 11.1课题研究背景与意义 11.2课题研究内容与方法 11.3课题研究现状 1第2章关键技术介绍 22.1SystemVerilog介绍 22.2VMM介绍 22.3验证平台 22.4参考模型与MATLAB 3第3章系统分析 43.1验证目标分析 43.1.1验证目标说明 43.1.2验证目标接口说明 43.1.3验证目标接口时序 53.2系统开发环境 53.3系统可行性分析 5第4章系统设计 84.1验证目标功能点分解 84.2验证平台 94.3验证环境 94.4验证环境文件调用关系 114.5验证环境的复用性 114.6验证环境输入输出文件 124.5.1输入文件 124.5.2输出文件 12第5章系统实现 145.1fir_filter_env模块的实现 145.1.1功能说明 145.1.2工作流程图 145.2dpu_rcfg模块的实现 155.2.1功能说明 155.2.2整体工作流程图 155.2.3read_cfg工作流程图 165.2.4read_data工作流程图 175.3dpu_fir_bfm模块的实现 175.3.1功能说明 175.3.2工作流程图 185.4dpu_scb模块的实现 185.4.1功能说明 185.4.2工作流程图 195.5dpu_db模块的实现 195.5.1功能说明 195.5.2工作流程图 205.6参考模型的实现 205.7验证环境整体说明 21第6章系统测试 236.1各验证向量仿真结果 236.2覆盖率统计工具 236.3行覆盖率 246.4翻转覆盖率 246.5条件覆盖率 256.6分支覆盖率 256.7覆盖率总结 26第7章结论 27参考文献 29致谢 30大连东软信息学院毕业设计(论文)-第1章绪论1.1课题研究背景与意义随着SoC(系统级芯片)时代的到来,超大规模集成电路的功能强大,但是其结构也越来越复杂,芯片的规模也越来越大,设计工程师与验证工程师都面临着前所未有的挑战。随着技术发展和市场需求,SystemVerilog应运而生,它将硬件描述语言与现代的高层级验证语言结合了起来,并为Verilog-2001标准提供了扩展,为新一代验证语言。SV语言的的出现大大的提升了设计与验证的效率,缩短了设计与验证的周期,降低了芯片设计的风险。 本次研究的意义为基于VMM的验证理论并熟练的使用SystemVerilog语言搭建验证平台,结合用matlab构造的参考模型对fir_filter进行验证。1.2课题研究内容与方法本次研究内容为fir_filter模块的验证,使用SystemVerilog搭建验证环境,模仿实际使用动作给予fir_filter激励,同时给予matlab参考模型相同的激励,收到两个结果文件后进行对比来确定设计的正确性。1.3课题研究现状除了Verilog和SystemVerilog外,IC验证目前使用最多的是C和C++,SystemVerilog是验证的核心,它融合了C++与Verilog语言,基本都使用它来搭建验证环境。由于算法越来越复杂,使用C语言实现起来相对简单,所以C语言在验证中用到的越来越多。很长一段时间,IC领域的工程师们在不断的尝试和实验各种方法来提高验证的效率以及EDA工具的自动化的程度,在研究的过程中总结出一些方法,仿真验证就出于他们之手,仿真验证是用软件去模拟实际使用的环境去确定硬件设计的正确性,在设计电路流片之前,对电路进行大范围测试,从而提高流片的成功率。大连东软信息学院毕业设计(论文)第2章关键技术介绍2.1SystemVerilog介绍SV即SystemVerilog的简称,是一种硬件描述语言。它是由Verilog语言发展而来的。并且兼容Verilog语言,逐渐成为新一代硬件设计和验证语言,获得主流电子设计自动化工具的支持。SV语言的另一个特点就是和芯片的验证方法学能够很好的结合在一起,使得验证方法学具有了重复利用性,减少了芯片的研发周期,提高了效率。SystemVerilog综合了很多设计语言的概念,包括Verilog、C、C++等语言概念,还包括了断言语言以及验证平台语言。可以说,它将现代的验证语言和硬件设计描述语言相结合。使得现在进行难度较大的验证的工程师对SV有很大的吸引力。SV是一种标准的工业语言,它把RTL设计、覆盖率、验证平台和断言极好的结合在了一起,为验证工程师提供巨大的方便,为系统级验证提高很好的技术支持。2.2VMM介绍VerificationMethodologyManual即VMM验证方法学的全称,它主要的运用SV语言编写。还包括了一些C语言的思想。VMM验证方法学主要功能就是用SystemVerilog语言创建包括随机化条件约束、断言验证技术和覆盖率采集等的验证平台。目前,主要是由synopsys公司来对VMM验证方法学提高和支持。synopsys公司随着它提供的仿真器附带着VMM所需的标准库。运用VMM验证方法学进行IC验证工作,其具备格式标准化,统一化优点,对于不同验证工程师编写的验证环境,有助于查看和工作交流。2.3验证平台在测试过程中,被测目标称为DUT(DesignUnderTest),验证平台把DUT包含在其中,验证平台可以驱动DUT的所有输入端口,监视DUT的输出端口。验证人员可以根据需要以不同的方式给予DUT激励,并从输出端口接收到相应的反应动作以确定设计的正确性。验证平台通过接口(interface)与DUT相连,如图2.2所示:图2.1验证平台结构图2.4参考模型与MATLAB本模块功能为对输入数据进行滤波,测试此模块需要对其输出进行确认,但是由于数据长度比较大,人工去比对数据工作量巨大,且不能保证准确性,所以引入了参考模型。参考模型RM(ReferenceModel),它可以模仿DUT的动作,验证平台给予DUT激励的同时给予RM相同的激励,DUT与RM均会生成结果文件,对两个结果文件进行比对即可确定设计的正确性。如图2.2所示:图2.2参考模型方框图MATLAB是一款数学软件,常用于算法开发和数值计算等,它具有单步运行,断点运行等功能,在调试时非常方便,并且在DUT与RM比对不一致时可以快速定位到出现问题的位置,验证平台可通过命令的方式调用MATLAB。第3章系统分析3.1验证目标分析3.1.1验证目标说明 fir_filter模块是对输入信号进行滤波并去除毛刺的模块。其结构如下图所示:图3.1验证目标结构图3.1.2验证目标接口说明表3.1fir_filter模块接口信号列表SIGNALBITSI/OSIGNALDESCRIPTION时钟复位接口clk_fir1I4.608MHz时钟,在检测到模拟电路的刷卡唤醒信号后一直打开,直至刷卡满足退出条件rstn_t11I磁道1datapath复位信号,异步低电平有效rstn_t21I磁道2datapath复位信号,异步低电平有效rstn_t31I磁道3datapath复位信号,异步低电平有效数据通路接口t1_din[DW-1:0]DWI磁道1输入数据,有符号数t2_din[DW-1:0]DWI磁道2输入数据,有符号数t3_din[DW-1:0]DWI磁道3输入数据,有符号数t1_di_vld1I磁道1输入数据有效标识t2_di_vld1I磁道2输入数据有效标识t3_di_vld1I磁道3输入数据有效标识t1_dout[DW-1:0]DWO磁道1经动态DC消除后输出数据,有符号数t2_dout[DW-1:0]DWO磁道2经动态DC消除后输出数据,有符号数t3_dout[DW-1:0]DWO磁道3经动态DC消除后输出数据,有符号数t1_do_vld1O磁道1经动态DC消除后输出数据有效标识t2_do_vld1O磁道2经动态DC消除后输出数据有效标识t3_do_vld1O磁道3经动态DC消除后输出数据有效标识3.1.3验证目标接口时序三个磁道的接口时序一致,此处仅描述其中一个磁道的接口时序:图3.2fir_filter模块单磁道接口时序时序说明:复位信号rstn_t1无效时,当t1_di_vld有效时,输入数据t1_din有效(DW=10),t1_di_vld拉高一个时钟周期,下一个时钟上升沿t1_do_vld信号拉高一个时钟周期,在这个时钟周期给出处理之后的结果,三个磁道的时序是一样的,但是三个磁道的使能信号不能同时有效,否则处理数据出错(单磁道的复用)。3.2系统开发环境硬件环境:Linux工作站软件环境:Synopsys公司的VCS、Springsoft公司的Verdi、Vimeditor3.3系统可行性分析本验证环境以VMM验证方法验证环境的分层理论为基础,使用systemverilog语言搭建,本环境层次结构如下图所示:图3.3分层的测试平台测试层:它为验证环境的配置文件,包括环境配置参数、寄存器读写参数以及信号随机或遍历的约束,环境通过读取该文件来生成数据包进而控制相应的动作。可使用不同的配置即可测试不同的功能或者检查点,即修改测试层文件即可实现,简单而又方便。场景层:由于测试层文件会针对不同的测试需求而改变其参数等信息,所以需要一个模块来读取它使其他模块的动作符合测试层的需求,那么引入场景层:它读取测试层的配置文件,从而使产生器根据配置产生受约束的数据或者激励信号,有些固定不变的参数或激励则直接通过本层读取即可,场景层为验证环境动作与测试层需求的一致提供保障。功能层:它包括事务处理器、计分板和检验器:事务处理器主要负责验证环境所有的事务处理,由它来发起一个事务并分发给各个模块。计分板主要是收集输入的数据并计算指标即预期结果,以及记录一些行为并交给检验器来进行检查,确定结果,从而完成对验证目标工作正确性的判断。命令层:它根据场景层读取配置后由产生器所生成的激励驱动验证目标使其做相应的动作,验证目标动作的结果通过功能层来判断,验证环境所有的动作以及与验证目标的交互都由命令层来完成。信号层:它主要是把验证环境与验证目标连接起来,包括接口以及时钟等,本层可发送或者接收验证目标的信号。验证环境通过接口来给予验证目标激励,并再次通过接口来得到验证目标处理之后的结果。测试平台的总体处理流程为:验证工程师通过配置修改测试层的配置文件来实现不同测试点的测试,场景层读取测试层的配置文件生成受约束的激励或数据等,事务处理器调用场景层后生成包含所有配置信息以及数据的数据包,并发送给各个模块,即把测试层的命令都传达给各个模块,命令层接到数据包后取出其中的配置信息和数据,根据配置信息来选择不同的测试分支(通常在模块中使用case语句或if_else语句来实现对不同测试分支的管理),取出的数据随时可用于驱动验证目标,命令层通过信号层的接口给予验证目标相应的激励,经过验证目标处理之后,功能层的计分板通过信号层的接口采集验证目标的输出,记录并发送给功能层的检验器进行检验,得出本条测试向量的结果,确认验证目标在此功能下的工作状态。分层的测试平台通过功能的划分,将验证平台划分出多个层次,使代码的复用性高,代码结构也更加清晰,缩短了验证前期的调试时间,同时也易于后期的维护,大大增加验证的效率。第4章系统设计4.1验证目标功能点分解如下表所示,是对fir_filter模块分解出来的测试向量,具体描述如下。表4.1fir_filter模块测试向量特性1特性2特性点名称边角向量仅磁道1有效,处理数据长度为100000f_01_01_01仅磁道2有效,处理数据长度为100000f_01_02_01仅磁道3有效,处理数据长度为100000f_01_03_013个磁道同时有效,处理数据长度为1000000f_01_04_013个磁道同时有效,处理数据长度为0~1000000随机f_01_05_01异常向量3个磁道同时有效时,在处理过程中磁道1异常复位,磁道2和3保持f_02_01_013个磁道同时有效时,在处理过程中磁道2异常复位,磁道1和3保持f_02_02_013个磁道同时有效时,在处理过程中磁道3异常复位,磁道1和2保持f_02_03_013个磁道同时有效时,在处理过程中磁道1和2异常复位,磁道3保持f_02_04_013个磁道同时有效时,在处理过程中磁道1和3异常复位,磁道2保持f_02_05_013个磁道同时有效时,在处理过程中磁道2和3异常复位,磁道1保持f_02_06_01针对fir_filter模块,测试向量包括:边角向量:验证边角数值的计算结果是否与参考模型一致异常向量:验证复位和时序的异常接口时序:通过查看波形确定时序是否正确所谓的特性就是测试点,即验证目标可能出错的点,在验证之前要对验证目标做透彻的分析并分解出验证目标的所有特性,每条特性都是一个测试点,分解的越细致,测试的质量就越高,当所有特性全部测试完成并正确,那么可以确定验证目标通过了测试,可以正常使用。那么前提是分解特性要全面,分解时不要存在侥幸心理,如:这里实现这么简单的功能,肯定不会出错等,这种想法对于验证工程师来说是致命的,对于芯片来说也是致命的,由于一个复位的小问题影响芯片的正常使用,导致公司亏损的例子数不胜数,保证芯片硬件部分正常工作,对于验证工程师来说,完成的分解验证目标的所有特性是至关重要的。本次的验证目标为三个磁道的滤波器,为单磁道的复用,测试需要大量的数据,所以向量中选用10w个长度为10bit的数据流,分别1磁道有效,2磁道有效,3磁道有效,即确定磁道独立工作的正确性。之后三个磁道同时有效,确定其复用模块同时工作的正确性,这些都为正常的向量,但是有的时候用户在使用的时候会出现错误的操作导致功能不正确,所以在验证时也要模拟出异常使用的情况,本次验证的异常向量主要是针对三个磁道复位的测试,即在三个磁道工作中随机去复位其中一个或者两个磁道,查看未被复位的磁道会不会被影响,设计中三个磁道是互相独立的,异常向量的测试保证了这一点。4.2验证平台验证平台结构图如下图所示:图4.1系统体系结构fir_filter验证环境主要包括5部分:参考模型、DUT、验证环境env、输入文件和输出文件。参考模型读取cfg配置文件并生成随机数据流,根据自己生成的数据流进行计算和处理得出期望的结果,将生成的数据流和结果分别打印到两个文件中。验证环境读取参考模型生成的数据流文件,通过env驱动DUT对其数据流进行处理,生成结果文件,最后将参考模型生成的结果文件与env生成的结果文件进行对比,确定DUT的正确性,因为参考模型与验证目标都是参考同一份资料或者同一个算法来实现的,所以当结果不一致时,通过matlab的单步运行功能,与验证目标的中间变量进行比对。确定问题的所在。4.3验证环境本次验证是基于事务级的验证,由激励生成器、参考模型和验证环境组成,验证环境包括:rcfg读取信号激励文件和数据文件、db(distributeboard)分发板、bfm(busfunctionmodule)总线功能模型、sb(scoreboard)计分板、cheker比对等5个模块组成。如下图4.2所示:图4.2验证环境结构图如上图所示,各模块功能如下:dpu_rcfg:它的功能是读取配置文件,它根据cfg.in文件以及data.in文件的格式,用针对这种格式的读取方式去解析两个文件,并放入buf中以形成数据包。dpu_db:它调用dpu_rcfg模块生成数据包,并将生成的数据包通过信箱(mailbox)发送给dpu_fir_bfm模块和dpu_scb模块,发送数据包的间隔由dpu_scb模块控制。dpu_fir_bfm:它接收dpu_db模块的数据包,根据数据包中信息对dut进行驱动,等待其处理完成后取出结果放入数据包中,并通过mailbox发送给dpu_scb模块。dpu_scb:它接到bfm模块发送的数据包,把结果数据取出来,通过打印函数把数据打印到dpu_rtl.out中供比对使用。4.4验证环境文件调用关系文件关系调用是说明文件在环境中的作用。如图4.3所示:图4.3文件调用关系环境中各文件的功能:dpu_cfg.in:验证环境的配置文件,其中含有配置的相关参数,如测试分支的选择以及寄存器的数值等。dpu_datax.in:参考模型的输出文件,验证环境的输入文件,其中包含参考模型随机生成的数据,以每行10bit的16进制数的形式保存。fir_rm.out:参考模型的输出文件,其中包含参考模型的计算结果,以一次计算结果为一行的形式保存。dpu_rtl.out:验证目标的输出文件,其中包含验证目标计算的结果,以一次计算结果为一行的形式保存。dpu_result.log:将fir_rm.out与dpu_rtl.out进行对比,将结果打印到dpu_result.log中,如果结果一致则打印ok,不一致则打印error,并且把不一致的哪一行数据打印出来以供进一步确认,本文件由脚本自动生成。4.5验证环境的复用性在搭建验证环境时,要考虑其简洁性以及测试的完整性之外,还要考虑验证环境的复用性,因为在完成单元级验证之后,在整个系统集成完毕之后,要进行系统级的验证,因为系统级和单元级不一样,它主要是对其连接关系以及内存空间、寄存器操作等进行检查,而单元级注重的是功能检查,为了节省系统级的验证时间,在做单元级的验证时需考虑验证环境模块的复用,所谓的复用就是可以把一部分代码移植到另外一个环境中,只需修改参数或输入即可正常使用而不影响它的功能,在验证环境的模块中大多是先启动start函数,在此函数中执行对应的功能,那么再执行这些功能时,把每一个小的功能都封装成一个函数,如:复位验证目标独立成一个函数,读寄存器和写寄存器独立成一个函数,采集数据独立成一个函数,驱动验证目标独立成一个函数,那么代码结构一目了然,在系统级验证时,驱动函数以及寄存器读写函数可直接拿过来使用,减少了代码的编写时间和调试时间。本次验证的环境采取上述方式搭建,所有细小的功能都封装成一个独立的函数,以供复用。4.6验证环境输入输出文件4.6.1输入文件本次验证环境的输入文件有两个,一个是配置文件cfg.in,一个是数据文件datax.in:cfg.in文件格式如下:图4.4输入文件cfg.in格式datax.in文件格式如下:图4.5输入文件datax.in格式此文件为rtl与参考模型的输入文件,每行10bit数据,供read_data函数读取。4.6.2输出文件输出文件如下图所示:图4.6输出文件格式经scb模块比对后生成上述输出文件,datalen为本包测试向量的数据长度,即输入多少个10bit数据,PkgNo为当前的包数,后面的为比对的结果,正确打印OK,错误打印ERROR,ERROR后可根据包数找到相应的rtl与参考模型的结果文件并进一步确认问题的来源,从而确定设计的正确性。大连东软信息学院毕业设计(论文)第5章系统实现5.1fir_filter_env模块的实现5.1.1功能说明它为验证环境的顶层模块,它有两个功能:一是启动各个模块的start任务,控制各个模块的工作;二是结束仿真,当仿真完成时,env模块会接受到别的模块所发送的事件,并终止仿真。它使用fork_join_none语句同时启动所有模块,并进入等待全部结束的事件,环境开始运行后,首先由db模块去分发数据包,然后进入等待完成事件状态,直到scb接到结果的数据包,并且比对完毕后,即此一次仿真运行从头到尾完成后,scb模块触发once_done信号,db接到once_done信号后,开始分发下一次仿真的数据包,一次循环直到scb接到的包数加1与设置的总包数一致时,触发all_done事件,env模块接到all_done事件后,停止仿真。5.1.2工作流程图图5.1env流程图首先设置打印函数以供打印信息使用,之后进行初始化操作,对DUT进行复位操作等,使用fork_join_none同时启动db、dpu_fir_bfm、dpu_sb三个模块,等待触发事件,仿真结束。fork_join_none即父进程与子进程同时运行,即三个模块与等待事件触发同时启动,这样做的目的是随时可以结束仿真,实现更好的控制环境的运作。5.2dpu_rcfg模块的实现5.2.1功能说明根据配置文件以及数据文件的格式,读取配置文件和数据文件,把配置信息和数据信息存放在数据包中,发送给db模块使用。rcfg模块读取的正确性保证了验证环境的配置正确。5.2.2整体工作流程图图5.2rcfg整体流程图它主要由4个函数组成,其中read_cfg函数读取配置文件,init_data函数初始化数据包中的所有变量或队列,data_gen函数把读取的配置信息赋值给数据包中对应的变量,实现配置信息的储存,read_data读取数据文件并把读取的数据信息存储在数据包中以供使用,从而实现了环境所有信息的读取。5.2.3read_cfg工作流程图图5.3read_rcfg函数流程图read_rcfg函数主要是读取配置信息cfg.in文件,实现的方式为:使用$fgets函数逐行读取,并使用$sscanf函数对其读取的一行数据进行分解得到具体的各个信息,放入数据包中。其中读取行数据的时候使用行指针实现的逐行读取,使用$ftell函数记录指针位置,使用$frof函数进行指针回跳,保证了读取配置信息时不会进入死循环,由指针来判断读的当前行是否有数据,是否整个文件都读取完成等。5.2.4read_data工作流程图图5.4read_data函数流程图它的功能为读取数据文件data.in,实现方式为:使用$fscanf函数逐行读取数据,通过readflg标志位来判断读取的内容和次数,并把读到的数据依次放入数据包的队列中,以供别的模块使用。5.3dpu_fir_bfm模块的实现5.3.1功能说明本模块的功能为对rtl进行操作和初始化等,接收从db模块发送来的数据包,取出数据包中的数据和配置信息,复位验证目标,然后按照配置信息配置rtl,包括配置寄存器,ram初始化等操作,准备工作完成之后将数据按照设计时序输入到rtl中,等待rtl处理之后将结果取出并放入数据包中,最后发送给scb模块供其对比使用。5.3.2工作流程图图5.5dpu_fir_bfm流程图接收数据包取出数据,并按照rtl设计文档中的时序描述把数据输入给rtl并激励其工作,根据信号采样rtl的输出数据,放入到数据包中发送给scb模块以供比对结果比对使用。5.4dpu_scb模块的实现5.4.1功能说明接收db和bfm发送过来的两个数据包,其中有两组数据,分别为期望数据和实际数据,scb通过调用checker函数对两组数据进行比较并将结果打印到输出文件dpu_result.log中。5.4.2工作流程图图5.6dpu_scb流程图接收db和bfm的数据包,把数据拿出来并调用checker函数对数据进行比较:checker函数主要实现数据的比对,比对的形式为逐行比对,在大量数据的面前,采用for循环语句来实现所有数据的比对,因为需要比对的数据都存放在数据包的队列中,使用.size函数可得知队列的长度,即由多少个数据,那么循环数据长度次,那么正好可以完成所有数据的比对,之后等待once_done事件触发,判断当前包数加1与总包数是否一致,如果一致则触发all_done事件并跳出循环,如果不一致则继续循环比较直到所有包都比对完成为止。5.5dpu_db模块的实现5.5.1功能说明db模块为分发板模块,该模块为功能层模块,它调用rcfg模块生成数据包发送给各个模块,之后进入等待once_done事件状态,在一包测试完成后,scb模块触发once_done事件,db模块接到事件触发,开始生成第二包数据,然后分发给各个模块,之后再进入等待事件状态,如此往复,直到env模块结束仿真。5.5.2工作流程图图5.7dpu_db流程图如上图所示,调用rcfg模块生成数据包,其中包含配置信息以及数据信息,通过mailbox发送给各个模块,之后等待事件触发,事件触发后继续发送数据包,如此循环直到env模块接收到all_done信号并停止仿真,db模块被动跳出循环结束。5.6参考模型的实现本次验证的模块为fir_filter数据滤波模块,具体参考模型由数字设计组提供。本次验证中采用matlab为参考模型,生成数据或读取数据并计算打印。封装参考模型后验证发现,rtl和参考模型的处理结果个别不一致,而且都相差1,经调研发现,结果相差1是因为matlab自带函数quantizer去做数据的定点化,小数部分采用round处理,即四舍五入,而验证目标采用round的方式与其不同,即直接去除小数部分,在小数部分大于或者等于0.5的时候,matlab进位处理,而验证目标去位处理,这导致了结果相差1的情况。针对此问题,我编写qtz函数,即自编的定点化函数,可配置round或floor,round为直接进位,floor为直接去位,不管小数部分为多少,再用qtz函数替代参考模型中quantizer函数后,参考模型输出与验证目标输出一致,实现比对。本次参考模型为自动生成一定长度的数据流,并以此为输入计算结果,但是考虑到验证目标实际工作的环境下,我添加了参考模型的另一种工作模式,因为实际情况下,验证目标是读取三个波形文件,即三个数据文件,格式为每行10bit,三个磁道分开且输入数据不同,因此本次参考模型有两个工作模式:一种为读取cfg.in文件并生成相应的磁道数据供环境读取。一种为读取3个track.in文件即3个磁道数据文件计算结果输出到3个.out文件中供环境去比对。这样使参考模型更加灵活,既可以自己模拟生成数据,也可以读取实际的波形文件,更全面的测试验证目标。在参考模型顶层文件中,调用fir_deal模块的时候,其中第一个参数为选择模式,0为读取磁道数据模式,1为自己生成数据模式,第二个参数为数据长度最大值输入,即自己生成数据模式下,生成的数据的最大长度设置,如:fir_deal(1,1000)代表matlab自己生成数据,数据长度为0~1000个随机。5.7验证环境整体说明验证环境功能层的所有模块都是用一个while的死循环实现,上述的环境工作模式也有具体说明,功能层模块是同时启动的,那么怎么保证他们之间是有序进行的呢?比如计分板还没采样到输出数据,检验器就开始检验了,那么结果一定是错误的,那么这次记录就是不必要的,验证环境中的协调器是mailbox:mailbox即为信箱,用来传送数据包使用的,它除了具有传送功能之外,还有以下有用的特性,在模块中使用mailbox之前需要为其分配空间,也就是使用new函数,一般都是为其开辟一个空间,即new(1),因为在mailbox的机制是先往其中放入数据包,之后任意模块可以取走这个数据包,但是如果mailbox中已经存在一个数据包,那么再往其中放的时候,会产生堵塞,也就是放不进去,环境执行到此会自动卡住,当mailbox中的数据包被取走后,才能放再次放入。同理,如果mailbox为空的话,执行get操作时,也会在此卡住,等待其他模块put后才能取出。利用mailbox的这些特性,在每个模块的start函数中,最先执行的是mailbox的get操作,最后执行的是mailbox的put操作,因为功能层每个模块都是无限循环,那么开始执行时如果mailbox为空的话,那么验证环境就会卡在这里,不执行以后的操作,就是这样一个put,一个get,实现了对验证环境功能层的有序执行的控制。在调试过程中,如果环境在运行致某一刻时突然卡死不动,那么根据mailbox的特性并添加打印信息便可以更快的找到问题的所在并修改环境,mailbox的存在为环境的调试添加了很多的方便和方法。因为功能层的模块都是以死循环的方式实现的,模块本身是不能停止运行的,验证环境整体通过env模块来控制,无论他们执行到哪里,只要env模块接收到all_done的事件触发,整个验证环境就会停止,本次运行结束。大连东软信息学院毕业设计(论文)第6章系统测试6.1各验证向量仿真结果仿真结果,所有向量结果正确。表4.1fir_filter模块测试向量向量名称向量描述FAIL/PASStc_01_01_01磁道1数据个数100000PASStc_01_02_01磁道2数据个数100000PASStc_01_03_01磁道3数据个数100000PASStc_01_04_01磁道1、2和3数据个数1000000PASStc_01_05_01磁道1、2和3数据个数随机PASStc_02_01_01磁道1复位,磁道2、3保持PASStc_02_02_01磁道2复位,磁道1、3保持PASStc_02_03_01磁道3复位,磁道1、2保持PASStc_02_04_01磁道1、2复位,磁道3保持PASStc_02_05_01磁道1、3复位,磁道2保持PASStc_02_06_01磁道2、3复位,磁道1保持PASS6.2覆盖率统计工具本次统计覆盖率使用Synopsys的cmView软件,如下图所示其工具的图形化界面:图6.1cmview图形化界面它可统计行覆盖率、翻转覆盖率、条件覆盖率、分支覆盖率以及状态机覆盖率,使用此EDA工具不能统计功能覆盖率,这也是它的最大缺点,在需要统计功能覆盖率的话,应该选择dve工具。使用它可查看每一种覆盖率,也会显示未覆盖的部分,直接定位到实际设计代码中,方便查看和分析。6.3行覆盖率行覆盖率代表设计代码和验证环境代码执行的情况,它查看设计代码与验证环境代码中是否每一行代码都被执行过,在测试向量充足的情况下,未被执行的代码是冗余的,由此可反映出代码的执行效率,本次验证目标行覆盖率如下图所示:图6.2行覆盖率说明:行覆盖率为100%,故不作说明。6.4翻转覆盖率翻转覆盖率为设计代码中寄存器类型变量每一位1翻转为0、0翻转为1的统计,根据验证需求,翻转覆盖率必须为100%或者找出未翻转原因并且此原因合理通过,本次验证目标翻转覆盖率以及未覆盖部分说明如下图所示:图6.3翻转覆盖率说明:图6.4翻转覆盖率未覆盖语句原因:图6.5rtl中具体部分代码如上图所示,mul_o00为两个有符号数的乘积,COEF00~COEF11这12个数为固定参数(parameter),如下图所示:图6.6rtl中具体部分代码一个偶数乘上任何数都为偶数,当固定参数为偶数时,它们和其他变量相乘之后也一定为偶数,偶数的末位为0,所以参数为偶数时,其乘积末位未翻转。说明:图6.7翻转覆盖率未覆盖语句原因:COEF09=960,即14’h3C0,即00001111000000二进制乘法即二进制数向左移位,乘二即向左移一位,所以mul_o09的低6位未翻转。6.5条件覆盖率条件覆盖率为设计代码中所有条件真假情况的统计,即所有条件为0和1的情况是否都满足,条件覆盖率如下图所示:图6.8条件覆盖率说明:覆盖率为100%,故不作说明。6.6分支覆盖率分支覆盖率为所有带有分支语句的分支执行情况的统计,分支一般存在于case语句以及if_else语句,检查if_else中的语句是否都执行到,case语句的每一个分支是否执行到,包括default,本次验证目标分支覆盖率如下图所示:图6.9分支覆盖率说明:分支覆盖率为100%,故不作说明。6.7覆盖率总结对于验证来说,覆盖率很重要,它衡量着验证的全面性和完整性,但是并不是所有覆盖率都为100%才是合格的,因为数字设计者不同,其代码风格也不同,如:同一个功能,都要用到if_else语句,判断条件有3个,有的设计者会使用if-else_if-else来实现本功能,也有的设计者会使用if-else_if-else_if-else,如果设计者使用第二种方式去实现本功能,那么条件覆盖率和分支覆盖率都不会为100%,但是第二种实现方式是正确的,else就是不能被执行到,但是也不会影响设计的功能,所以找出原因才是最重要的。功能分解后测试向量都仿真通过,从而保证了验证模块功能的正确性。代码覆盖率保证了设计代码每一行的执行程度,既可以检查被测模块中是否有冗余的代码,同时也可以保证所有代码的功能,经统计去除翻转覆盖率,其他覆盖率都到100%,并且翻转覆盖率未覆盖的部分均为正常现象,不会影响RTL的动作,因此fir_filter功能模块RTL功能仿真结束,通过了EDA工具的软件仿真,可进行下一步测试。第7章结论本文基于VMM验证方法学,使用SystemVerilog编写了具有扩展性好、可复用、并且层次化的验证平台,对fir_filter数字逻辑模块进行了验证。通过对fir_filter数字逻辑模块的时序和功能的分析,修改并使用matlab参考模型,来保证RTL设计代码的功能。最后通过cmview工具对行覆盖率,条件覆盖率,翻转覆盖率,分支覆盖率进行收集和分析,从而保证被测模块的的可靠性和完整性。本文通过使用VMM验证方法学,运用SV语言,搭建验证平台。建立了一个可产生受约束的随机激励,覆盖率标准保证了验证的完备性,突出VMM验证方法学的灵活性。本文针对fir_filter数字逻辑模块的特点进行分析,分解出包含正常测试向量和异常测试向量,通过这些测试向量覆盖需要验证模块的特性。本验证环境中使用forkjoin,forkjoin_none等进程管理语句进行仿真的流程控制,还使用了while,repeat,for等循环语句用来简化代码。模块划分也是依据功能单一化,简单化来划分的。主要有4大模块:分发板模块、数据发送模块、数据接收模块、数据比对模块。4大模块之间的通信是通过数据包(data_buf)来实现的。将数据包通过mbox传输,实现配置信息和数据的传输。在接口方面使用了SystemVerilog的interface技术将一系列的端口封装成一个模块简化了验证环境与DUT的连接。本次的验证环境有很多优点,但同时也存在很多缺点,例如在数据比对模块中,部分比对代码写的过于复杂,在以后工作中,应该想方法优化这一部分,使得环境更加健壮,易读性更强。本次验证环境的复用性不是很强,将来在做同一模块的系统级验证时,还需大量的编写验证环境以及调试,不能直接复用单元级验证的环境,以后在搭建验证环境时要考虑全面,实现单一功能独立存在,未以后的环境复用埋下伏笔,减少调试时间,提高验证效率。还有在对异常向量的测试中,由于把异常的测试案例写在正常的程序里,导致正常的程序不易于理解,应该把异常的操作封装成任务,使用回调的方法进行异常的控制。fir_filter模块为数据滤波模块,需采用大量的数据对其进行测试,本次验证的难点在于matlab的定点化以及生成符合要求的数据流,matlab也需要两种模式以满足验证的需求,matlab没有时序的概念,如同c语言一样,用其对数据进行bit操作时很麻烦,数据量太大的话,其运行速度很慢,而且它不能与验证环境同时工作,要实现他们的输入一致,需要打印和读取较多文件,这降低了验证的效率。参考模型也可使用sv语言来实现,它的优点是运行速度快,assert实现可约束的随机化简单,但是针对复杂算法的话,其实现起来颇为麻烦且复杂,但是matlab内部附带庞大的函数库以及公式供使用,实现复杂算法相对较简单,本次使用matlab为参考模型是因为算法组提供模型,我只需简单修改就可正常使用,且本参考模型与验证目标的实现思想是一样的,这样可以更好的去检验验证目标的正确性。参考文献[1]段承超,徐金甫.基于VMM构建可重用验证平台[J],现代电子技术,2011,08:45-50[2]JanickBergeron,EduardCerny,AlanHunter,AndrewNightingale.MethodologyManualforSystemVerilog[M],America:Springer,2005[3]夏宇闻.verilog数字系统设计教程[M],北京:北京航空航天大学,2008[4]MikeMintz,RobertEkendahl,Hardware.VerificationwithSystemVerilogAnObject-OrientedFramework[M],Springer:America,2007[5]张春,麦宋平,赵益新.SystemVerilog验证[M],北京:科学出版社,2009[6]JunYuan,CarlPixley,AdnanAziz,CSTRAINT-BASEDVERIFICATION[M],America:Springer,2006[7]闫沫媛.基于SystemVerilog语言的设计验证技术[J],现代电子技术
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年铜陵市市直事业单位公开招聘工作人员统一笔试原始笔试历年典型考题及考点剖析附带答案详解
- 政府保密合同范本(2篇)
- 2024-2025承包商入厂安全培训考试试题及答案【基础+提升】
- 2025厂级员工安全培训考试试题答案完美版
- 2025公司级员工安全培训考试试题B卷
- 2025版权许可合同范例
- 2025水果种子买卖合同协议书
- 阿莫西林可行性研究报告
- 2025网约车服务合同
- 2025年K12课外辅导项目建议书
- DL∕T 1709.3-2017 智能电网调度控制系统技术规范 第3部分:基础平台
- 考核办法和考核方案
- 化妆品生产OEM合同书
- 海上CANTITRAVEL平台桩基施工关键技术应用v7
- 2024年4月自考08229计算机统计分析方法试题
- 有色金属冶金概论课程教案
- 华为MA5800配置及调试手册
- 中国生产安全行业市场运行动态及投资发展潜力分析报告
- 【真题】2023年镇江市中考化学试卷(含答案解析)
- 2023-2024年电子物证专业考试复习题库(含答案)
- 安全生产培训课件:机器设备安全操作规程
评论
0/150
提交评论