热度 20| |
芯片就业培训课程推荐:
更新至70课时!已进入实训阶段!畅销就业培训课《芯片验证从入门到精通》,2期优惠仅最后10个名额 作者:Jacky于兆杰,畅销就业培训课《芯片验证从入门到精通》主讲老师
SPT 模块:按照接口时序要求,完成接收包处理,错包丢弃、统计,以及包转发。
主要验证接收来自 PKT 模块发送的数据包,比对校验位,过滤错误数据包,将正确数据包写入 SRAM 中缓存,一定时间后从 SRAM 中读出数据包发送给 PKT 模块。同时向 cpu 上报各类数据包统计。
1、根据头域(Header)指示,开始一包的接收;
2、净荷内容进行字节序的转换,高位字节放低位,低位字节放高位;
3、对小于等于4个字节的“毛刺包”直接丢弃,不统计:
4、对接收包进行头域(Header)的检查,头域不正确的包直接丢弃;
5、净荷长度超短(小于40字节)时,直接丢弃;
6、净荷长度超长(大于600双字节)时,直接丢弃;
7、对接收包进行尾域(Tailer)检查,若校验错误,则直接丢弃;
8、完全正确的包按照输出包格式输出;
9、对以上除毛刺包外的包均分类统计,并CPU可查询。
PP 的验证环境是用于运行芯片顶层功能验证的各个组件(component)的集合。它主要包含以下几个部分:被测设计(DUT)、cpu 子环境(mpi agent)、 PTU/PRU 子环境(spt agent)、参考模块(RM)、 检查器(checker)、脚本(makefile)。
(1)验证环境架构
PP 验证环境是一个层次化的验证环境,其中测试向量 TestCase(tc_sanity)是平台的最高层次,每条 TestCase(tc_sanity)都用于测试芯片的一个或多个功能。架构如下;
(2)目录结构
rtl | cpu_if.v | |
crg.v | ||
DTP.v | ||
spt.v | ||
test_core.v | ||
tb | env | dtp_checker.sv |
dtp_env.sv | ||
dtp_rm.sv | ||
mpi_agent | mpi_adapter.sv | |
mpi_agent.sv | ||
mpi_driver_notdone.sv | ||
mpi_driver.sv | ||
mpi_interface.sv | ||
mpi_sequencer.sv | ||
mpi_sequence.sv | ||
mpi_xaction.sv | ||
reg | ral_block_blk_dt003.sv | |
spt_agent | spt_agent.sv | |
spt_driver.sv | ||
spt_interface.sv | ||
spt_packet.sv | ||
spt_rx_monitor.sv | ||
spt_sequencer.sv | ||
spt_sequence.sv | ||
spt_tx_monitor.sv | ||
tc | tc_base.sv | |
tc_reg_sanity.sv | ||
tc_sanity.sv | ||
th | harness.sv |
(3)主要文件说明
spt_agent.sv:例化并连接 driver、 monitor、 sequencer 。
spt_driver.sv:将数据包发送出去的组件。
spt_rx_monitor.sv:监测 spt 接收端口,采样端口上的数据。
spt_sequence.sv:定义数据包的发送个数。
spt_packet.sv:定义数据包的格式,对 packet 长度, header 和 tailer 进行约束。
tc:存放测试用例的路径。
th:存放顶层 harness.sv,主要用来例化 DUT,产生 CK 信号,和 rst 信号。
env:存放验证环境。
dtp_env.sv:整个环境的顶层,连接环境中的各个组件。
dtp_rm.sv:DUT 的参考模型,模拟 DUT 的功能。
dtp_checker.sv:将 DUT 的输出和 rm 的输出做比较。
通过tc_sanity.sv中的uvm_config_db #()::set() 向spt_sequence.sv传递不同的参数,配置不同的seq_item_max_num、err_type(0:normal;1:tail_err;2:head_err;3:head_err&tail_err;)和payload_mode(0:glitch;1:short;2:normal;3:long;)数据包参数, 实现向DUT发送不同的数据包类型,检测DUT对不同包处理的功能。
配置不同的数据包参数,编译运行不同的test_case进行仿真,累积收集代码覆盖率文件harness.simv.vdb,由dve -covdir *.vdb &查看代码覆盖率,如下图SPT模块line_coverage=99.06%,toggle_coverage=52.56%, branch_coverage=78.50%。
由于环境仅测试SPT包处理功能,并未加入SRAM和对DUT内部寄存器施加激励,以及DUT内部定义的一些信号并未使用,使得toggle_coverage和 branch_coverage偏低
(1)Warning-[DEBUG_DEP] Option will bedeprecated
Theoption '-debug_all' will be deprecated in a future release. Please use
'-debug_acc+all+dmptf -debug_region+cell+encrypt' instead.
(2) Warning-[SIMRES_TMS] Option -timescaleignored
Option -sim_res is specified. Option -timescale is ignored.
(3) Warning-[TMPO] Too many parameteroverrides
../spt_agent/spt_agent.sv, 5
Theextra parameter overrides will be ignored.
Source info: seqr
(4) Warning-[CM-HIER-FNF] File not found
Thefile 'cm.cfg' (given by '-cm_hier' option) does not exist.
Theoption will be ignored. Please make sure that the file exists.
(5) Warning-[SIOB] Select index out ofbounds
../../rtl/cpu_if.v, 159
"cpuif_data[23:0]"
Theselect index is out of declared bounds : [15:0].
Inmodule instance : cpu_if_0
Inmodule : cpu_if.
(6) Warning-[SIOB] Select index out ofbounds
../../rtl/cpu_if.v, 165
"cpuif_data[23:0]"
Theselect index is out of declared bounds : [15:0].
Inmodule instance : cpu_if_0
Inmodule : cpu_if.
Warning (1)按提示修改后不会出现,还有部分Warning是trl中cpu_if.v数据位宽不匹配导致,暂不做修改。
未出现Warning
对信号值为XX的信号,或正常情况下不可能执行的条件分支,在环境中force 使其满足判断条件,使rtl条件的每个分支能够执行,查看结果是否符合预期。
对cpu_if内的信号尝试进行环境force自检,使rtl中的分支语句执行,结合Verdi,检查结果,符合预期。
无
无
1. cpu_if.v中数据位宽不匹配
2. SPT 数据包处理
1.语法逻辑错误
2.Spec理解偏差
3.算法错误
4.时钟域处理
10.13-10.19
(1)仅针对SPT模块包处理完成验证。
(2)未能实现功能覆盖率模型,仅通过配置不同参数实现对DUT不同功能的覆盖。
针对PP芯片中SPT模块完成此次验证,代码覆盖率,line_coverage=99.06%,toggle_coverage=52.56%,branch_coverage=78.50%。后续可继续完善环境、加入SRAM、寄存器模型,完成DUT的2 种工作模式、CPU_IF 模块、TEST CORE 模块的验证。
芯片就业培训课程推荐: