参考文档:Arm® Cortex®-M System Design Kit
DUT来源:购买所得
分成以下三部分进行:
- 使用driver实现apb协议,根据协议进行DUT内部寄存器的配置
- 实现DUT的寄存器模型reg_model,使用寄存器模型完成内部寄存器配置
- 将watchdog挂载到Synopsys APB VIP上,使用VIP进行watchdog内部寄存器配置
一、watchdog功能介绍
基本思想:针对被监视的目标设置一个计数器和一个阈值,watchdog会自己计算计数值, 并等待被监视的目标周期性的重置计数值,一旦目标发生错误,watchdog会检测到计数值溢出,触发中断,并给出复位信号。
watchdog模块基于一个32bit的下行计数器,即逐减。计数器从WDOGLOAD_reg寄存器初始化,当计数寄存器值减小到0(carry msb有效),产生中断信号WDOGINT,当WDOGCLKEN为高时,计数器会在WDOGCLK的posedge处减1。
watchdog监视中断,并在计数器达到0时assert WDOGRES信号,计数器停止,在下一个启用的WDOGCLK时钟边沿上,计数器从WDOGLOAD_reg寄存器中重新加载,倒计时继续。如果中断在计数器再一次达到0时没有被清除,watchdog重新assert WDOGRES信号。
二、watchdog DUT 寄存器描述
Name | address | Type | Width | Default | Description |
WDOGLOAD | 0×00 | RW | 32 | 0×FFFFFFFF | WDOGLOAD寄存器包含计数器要自减的值,当写入此寄存器时,计数立刻从新值从新开始,最小有效值为1 |
WDOGVALUE | 0×04 | RO | 32 | 0×FFFFFFFF | WDOGVALUE寄存器给出了自减计数器的当前值 |
WDOGCONTROL | 0×08 | RW | 2 | 0×0 | WDOGCONTROL寄存器使软件能够控制watchdog单元 [1]RESEN:设置为1表示允许复位,设置为0表示不允许复位。 [0]INTEN:设置为1以启用计数器和中断,或设置为0以禁用计数器和中断 |
WDOGINTCLR | 0×0C | WO | 对此寄存器的任何值的写入都会清除看门狗中断,并从WDOGLOAD的值重新加载计数器 | ||
WDOGRIS | 0×10 | RO | 1 | 0×0 | WDOGRIS寄存器表示来自计数器的原始中断状态 |
WDOGMIS | 0×14 | RO | 1 | 0×0 | 来自计数器的中断状态,此值是原始中断状态域控制寄存器的INTEN位的逻辑与 |
WDOGLOCK | 0×C00 | RW | 32 | 0×0 | WDOGLOCK寄存器禁止对其他寄存器的写访问,这是为了防止恶意软件禁用看门狗功能,写入0×1ACCE551值使能写入,可以实现对其他所有寄存器的写访问,写入任何其他值将禁用写访问 |
WDOGITCR | 0×F00 | RW | 1 | 0×0 | WDOGITCR寄存器启用integration test mode集成测试模式,在这种模式下,测试输出寄存器直接控制中断输出WDOGINT和WDOGRES复位输出 [0]为1启用集成测试模式 |
WDOGITOP | 0×F04 | WO | 2 | 0×0 | 当处于集成测试模式时,WDOGITOP的值直接驱动中断输出和复位输出 [0]:集成测试模式下,WDOGRES的值输出 [1]:集成测试模式下,WDOGINT的值输出 |
WDOGPERIPHID4 | 0×FD0 | RO | 8 | 0×04 | |
WDOGPERIPHID5 | 0×FD4 | RO | 8 | 0×00 | |
WDOGPERIPHID6 | 0×FD8 | RO | 8 | 0×00 | |
WDOGPERIPHID7 | 0×FDC | RO | 8 | 0×00 | |
WDOGPERIPHID0 | 0×FE0 | RO | 8 | 0×24 | |
WDOGPERIPHID1 | 0×FE4 | RO | 8 | 0×B8 | |
WDOGPERIPHID2 | 0×FE8 | RO | 8 | 0×1B | |
WDOGPERIPHID3 | 0×FEC | RO | 8 | 0×00 | |
WDOGPCELLID0 | 0×FF0 | RO | 8 | 0×0D | |
WDOGPCELLID1 | 0×FF4 | RO | 8 | 0×F0 | |
WDOGPCELLID2 | 0×FF8 | RO | 8 | 0×05 | |
WDOGPCELLID3 | 0×FFC | RO | 8 | 0×B1 |
(手机版往左划一下,后面还有一列寄存器的功能介绍)
三、 验证策略
No | test feature |
1 | 寄存器测试:寄存器default值读取 |
2 | 寄存器上锁功能测试:对WDOGLOCK寄存器写入0×1ACCE551时,对寄存器的写访问是否允许,写入其他值时对寄存器写访问是否被禁止 |
3 | 寄存器写入全F测试 |
4 | 中断请求信号检测:在计数寄存器自减为0时(计数寄存器自减验证可从此测),配置控制寄存器检测WDOGINT信号是否受控制寄存器控制拉高 |
5 | 中断清除寄存器检测:当WDOGINT信号拉起后,配置中断清除寄存器,检测中断信号是否被拉低 |
6 | 复位信号产生检测:配置控制寄存器,当计数寄存器自减为0时候,检测WDOGRES信号是否被拉高 |
7 | integration test mode 测试:配置WDOGITCR寄存器进入集成测试模式,配置WDOGITOP寄存器检测相应模式下的中断和复位信号是否拉高 |
... | ............... |
四、环境搭建
搭建基于UVM的环境架构,采用APB协议来配置DUT内部寄存器,进行功能测试。
项目结构大概如下
component功能(需要说的说一下)
tb_top:例化DUT,并与interface进行连接。定义相关时钟信号,给到接口interface。通过uvm_config_db派发接口文件。编写run_test()以及定义波形文件名称,$fsdbDumpfile以及$fsdbDumpvars。
driver:驱动,driver须严格按照APB协议规定的方式编写。当然,这要求DUT必须是按照用总线配置的方式去写的。其主要功能是将transaction级拆成interface级,通过tb_top中接口与DUT的连接驱动相应命令进入DUT,实现对DUT内部寄存器的读写。
base_test与base_sequence:将一些重复性工作在base_class中编写完,后续test和sequence定义为此类的扩展类可以减少工作量。
其他模块略
五、运行以及结果讨论
1.test_00 寄存器default值测试
-----------------------------------------------------------------------
Name Type Size Value
-----------------------------------------------------------------------
uvm_test_top test_00 - @464
env wdog_env - @474
agt wdog_agent - @693
drv wdog_driver - @819
rsp_port uvm_analysis_port - @836
seq_item_port uvm_seq_item_pull_port - @827
mon wdog_monitor - @977
ap uvm_analysis_port - @985
sqr wdog_sequencer - @845
ap uvm_analysis_port - @968
rsp_export uvm_analysis_export - @853
seq_item_export uvm_seq_item_pull_imp - @959
arbitration_queue array 0 -
lock_queue array 0 -
num_last_reqs integral 32 'd1
num_last_rsps integral 32 'd1
mon_scb_fifo uvm_tlm_analysis_fifo #(T) - @762
analysis_export uvm_analysis_imp - @806
get_ap uvm_analysis_port - @797
get_peek_export uvm_get_peek_imp - @779
put_ap uvm_analysis_port - @788
put_export uvm_put_imp - @770
scb wdog_scoreboard - @701
act_port uvm_blocking_get_port - @1005
exp_port uvm_blocking_get_port - @996
sqr_scb_fifo uvm_tlm_analysis_fifo #(T) - @709
analysis_export uvm_analysis_imp - @753
get_ap uvm_analysis_port - @744
get_peek_export uvm_get_peek_imp - @726
put_ap uvm_analysis_port - @735
put_export uvm_put_imp - @717
v_seqr wdog_virtual_sequencer - @482
rsp_export uvm_analysis_export - @490
seq_item_export uvm_seq_item_pull_imp - @596
arbitration_queue array 0 -
lock_queue array 0 -
num_last_reqs integral 32 'd1
num_last_rsps integral 32 'd1
hdl_path string 10 tb_top.dut
-----------------------------------------------------------------------
UVM_INFO ../env/wdog_driver.sv(19) @ 0: uvm_test_top.env.agt.drv [wdog_driver] main_phase Enter...
UVM_INFO ../env/wdog_monitor.sv(24) @ 0: uvm_test_top.env.agt.mon [wdog_monitor] main_phase Enter...
UVM_INFO ../env/wdog_scoreboard.sv(29) @ 0: uvm_test_top.env.scb [wodg_scorebaord] main_phase Enter...
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1057
PRDATA integral 32 'hffffffff
PADDR integral 32 'h0
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
--------------------------------------------
Name Type Size Value
--------------------------------------------
w_trans wdog_transaction - @1065
PRDATA integral 32 'hffffffff
PADDR integral 32 'h0
--------------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 45000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1073
PRDATA integral 32 'hffffffff
PADDR integral 32 'h4
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
--------------------------------------------
Name Type Size Value
--------------------------------------------
w_trans wdog_transaction - @1081
PRDATA integral 32 'hffffffff
PADDR integral 32 'h4
--------------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 65000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1089
PRDATA integral 32 'h0
PADDR integral 32 'h8
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1097
PRDATA integral 32 'h0
PADDR integral 32 'h8
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 85000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1105
PRDATA integral 32 'h0
PADDR integral 32 'h10
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1113
PRDATA integral 32 'h0
PADDR integral 32 'h10
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 105000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1121
PRDATA integral 32 'h0
PADDR integral 32 'h14
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1129
PRDATA integral 32 'h0
PADDR integral 32 'h14
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 125000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1137
PRDATA integral 32 'h0
PADDR integral 32 'hc00
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1145
PRDATA integral 32 'h0
PADDR integral 32 'hc00
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 145000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1153
PRDATA integral 32 'h0
PADDR integral 32 'hf00
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1161
PRDATA integral 32 'h0
PADDR integral 32 'hf00
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 165000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1169
PRDATA integral 32 'h4
PADDR integral 32 'hfd0
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1177
PRDATA integral 32 'h4
PADDR integral 32 'hfd0
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 185000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1185
PRDATA integral 32 'h0
PADDR integral 32 'hfd4
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1193
PRDATA integral 32 'h0
PADDR integral 32 'hfd4
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 205000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1201
PRDATA integral 32 'h0
PADDR integral 32 'hfd8
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1209
PRDATA integral 32 'h0
PADDR integral 32 'hfd8
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 225000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1217
PRDATA integral 32 'h0
PADDR integral 32 'hfdc
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1225
PRDATA integral 32 'h0
PADDR integral 32 'hfdc
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 245000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1233
PRDATA integral 32 'h24
PADDR integral 32 'hfe0
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1241
PRDATA integral 32 'h24
PADDR integral 32 'hfe0
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 265000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1249
PRDATA integral 32 'hb8
PADDR integral 32 'hfe4
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1257
PRDATA integral 32 'hb8
PADDR integral 32 'hfe4
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 285000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1265
PRDATA integral 32 'h1b
PADDR integral 32 'hfe8
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1273
PRDATA integral 32 'h1b
PADDR integral 32 'hfe8
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 305000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1281
PRDATA integral 32 'hb0
PADDR integral 32 'hfec
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1289
PRDATA integral 32 'hb0
PADDR integral 32 'hfec
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 325000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1297
PRDATA integral 32 'hd
PADDR integral 32 'hff0
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1305
PRDATA integral 32 'hd
PADDR integral 32 'hff0
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 345000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1313
PRDATA integral 32 'hf0
PADDR integral 32 'hff4
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1321
PRDATA integral 32 'hf0
PADDR integral 32 'hff4
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 365000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1329
PRDATA integral 32 'h5
PADDR integral 32 'hff8
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1337
PRDATA integral 32 'h5
PADDR integral 32 'hff8
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 385000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
trans wdog_transaction - @1345
PRDATA integral 32 'hb1
PADDR integral 32 'hffc
depth int 32 'd2
parent sequence (name) string 6 seq_00
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_00
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1353
PRDATA integral 32 'hb1
PADDR integral 32 'hffc
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 405000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
SvtTestEpilog:------------------------ Passed---------------
--- UVM Report Summary ---
** Report counts by severity
UVM_INFO : 36
UVM_WARNING : 0
UVM_ERROR : 0
UVM_FATAL : 0
** Report counts by id
[RNTST] 1
[UVMTOP] 1
[base_test] 3
[test_00] 3
[wdog_agent] 3
[wdog_driver] 1
[wdog_env] 2
[wdog_monitor] 1
[wdog_scoreboard] 20
[wodg_scorebaord] 1
$finish called from file "/eda/vcs_vO-2018.09-SP2/vcs/O-2018.09-SP2/etc/uvm-1.1/base/uvm_root.svh", line 439.
$finish at simulation time 705000
---------------------------------------------------------------------------
VCS Coverage Metrics: during simulation line, cond, FSM, branch, tgl was monitored
---------------------------------------------------------------------------
V C S S i m u l a t i o n R e p o r t
Time: 705000 ps
CPU Time: 0.490 seconds; Data structure size: 0.5Mb
Tue Dec 26 19:26:38 2023
可以看到地址为32'hFEC的WDOGPERIPHID3寄存器default值与设计文档的描述是不符的,这是因为default值确实是0×0,但是ta的输出并不是直接将default值输出,而是以这样的方式给出
ECOREVNUM,连接到外设ID寄存器中的ECO修订号,以显示芯片设计过程中ECO修订变化,可以将其连接到特殊的连接单元,以便可以在硅网列表或硅掩膜等等较低级别更改ECO修订号。
上面这些话我看不懂,不用管这个东西。将其值设置为4‘b1011,所以{1011_0000},以十六进制读出自然就是'hB0。
以上就是非WO的寄存器default值测试,未做任何写入的情况下,其读出值与设计文档一致。
2.test_01寄存器上锁功能以及写入全F测试
测试思路是这样的,采用条件编译,先对WDOGLOCK寄存器写入除0×1ACCE551以外的任何其它值,对含有“W”类型寄存器进行先写后读测试,观察log的输出结果,如果相应寄存器读出来的是default值,说明寄存器并没有写入成功。然后写入解锁值0×1ACCE551,重复对寄存器的写入读出测试,观察结果。
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1065
PRDATA integral 32 'h7d9247
PADDR integral 32 'h0
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
--------------------------------------------
Name Type Size Value
--------------------------------------------
w_trans wdog_transaction - @1073
PRDATA integral 32 'hffffffff
PADDR integral 32 'h0
--------------------------------------------
UVM_INFO @ 85000: reporter [MISCMP] Miscompare for w_trans.PRDATA: lhs = 'hffffffff : rhs = 'h7d9247
UVM_INFO @ 85000: reporter [MISCMP] 1 Miscompare(s) for object w_trans@1065 vs. w_trans@1073
UVM_ERROR ../env/wdog_scoreboard.sv(51) @ 85000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MISMATCH at time 85000
DUT is
--------------------------------------------
Name Type Size Value
--------------------------------------------
w_trans wdog_transaction - @1073
PRDATA integral 32 'hffffffff
PADDR integral 32 'h0
--------------------------------------------
golden is
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1065
PRDATA integral 32 'h7d9247
PADDR integral 32 'h0
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1085
PRDATA integral 32 'h1
PADDR integral 32 'h8
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1093
PRDATA integral 32 'h0
PADDR integral 32 'h8
---------------------------------------
UVM_INFO @ 125000: reporter [MISCMP] Miscompare for w_trans.PRDATA: lhs = 'h0 : rhs = 'h1
UVM_INFO @ 125000: reporter [MISCMP] 1 Miscompare(s) for object w_trans@1085 vs. w_trans@1093
UVM_ERROR ../env/wdog_scoreboard.sv(51) @ 125000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MISMATCH at time 125000
DUT is
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1093
PRDATA integral 32 'h0
PADDR integral 32 'h8
---------------------------------------
golden is
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1085
PRDATA integral 32 'h1
PADDR integral 32 'h8
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1105
PRDATA integral 32 'h1
PADDR integral 32 'hf00
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1113
PRDATA integral 32 'h0
PADDR integral 32 'hf00
---------------------------------------
UVM_INFO @ 165000: reporter [MISCMP] Miscompare for w_trans.PRDATA: lhs = 'h0 : rhs = 'h1
UVM_INFO @ 165000: reporter [MISCMP] 1 Miscompare(s) for object w_trans@1105 vs. w_trans@1113
UVM_ERROR ../env/wdog_scoreboard.sv(51) @ 165000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MISMATCH at time 165000
DUT is
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1113
PRDATA integral 32 'h0
PADDR integral 32 'hf00
---------------------------------------
golden is
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1105
PRDATA integral 32 'h1
PADDR integral 32 'hf00
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
UVM_INFO ../seq/test_01_sequence.sv(91) @ 165000: uvm_test_top.env.agt.sqr@@seq_01 [test_01_sequence] UNLOCK Enter...
SvtTestEpilog:------------------------ Failed---------------
--- UVM Report Summary ---
** Report counts by severity
UVM_INFO : 24
UVM_WARNING : 0
UVM_ERROR : 3
UVM_FATAL : 0
** Report counts by id
[MISCMP] 6
[RNTST] 1
[UVMTOP] 1
[base_test] 3
[test_01] 3
[test_01_sequence] 1
[wdog_agent] 3
[wdog_driver] 1
[wdog_env] 2
[wdog_monitor] 1
[wdog_scoreboard] 4
[wodg_scorebaord] 1
$finish called from file "/eda/vcs_vO-2018.09-SP2/vcs/O-2018.09-SP2/etc/uvm-1.1/base/uvm_root.svh", line 439.
$finish at simulation time 465000
---------------------------------------------------------------------------
VCS Coverage Metrics: during simulation line, cond, FSM, branch, tgl was monitored
---------------------------------------------------------------------------
V C S S i m u l a t i o n R e p o r t
Time: 465000 ps
CPU Time: 0.540 seconds; Data structure size: 0.5Mb
Tue Dec 26 20:28:21 2023
golden口接受到的数据是实际向寄存器写入的值,而dut口实际接收到的还是相应寄存器的default值,说明写访问被拒绝。
而向WDOGLOCK写入解锁值0×1ACCE551时,根据log信息显示
UVM_INFO ../seq/test_01_sequence.sv(91) @ 0: uvm_test_top.env.agt.sqr@@seq_01 [test_01_sequence] UNLOCK Enter...
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1065
PRDATA integral 32 'h7d9247
PADDR integral 32 'h0
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
------------------------------------------
Name Type Size Value
------------------------------------------
w_trans wdog_transaction - @1073
PRDATA integral 32 'h7d9247
PADDR integral 32 'h0
------------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 85000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1085
PRDATA integral 32 'h1
PADDR integral 32 'h8
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1093
PRDATA integral 32 'h1
PADDR integral 32 'h8
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 125000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
golden port get transaction
--------------------------------------------------------------------------------------
Name Type Size Value
--------------------------------------------------------------------------------------
w_trans wdog_transaction - @1105
PRDATA integral 32 'h1
PADDR integral 32 'hf00
depth int 32 'd2
parent sequence (name) string 6 seq_01
parent sequence (full name) string 31 uvm_test_top.env.agt.sqr.seq_01
sequencer string 24 uvm_test_top.env.agt.sqr
--------------------------------------------------------------------------------------
dut port get transaction
---------------------------------------
Name Type Size Value
---------------------------------------
w_trans wdog_transaction - @1113
PRDATA integral 32 'h1
PADDR integral 32 'hf00
---------------------------------------
UVM_INFO ../env/wdog_scoreboard.sv(48) @ 165000: uvm_test_top.env.scb [wdog_scoreboard] COMPARE MATCH
SvtTestEpilog:------------------------ Passed---------------
--- UVM Report Summary ---
** Report counts by severity
UVM_INFO : 21
UVM_WARNING : 0
UVM_ERROR : 0
UVM_FATAL : 0
** Report counts by id
[RNTST] 1
[UVMTOP] 1
[base_test] 3
[test_01] 3
[test_01_sequence] 1
[wdog_agent] 3
[wdog_driver] 1
[wdog_env] 2
[wdog_monitor] 1
[wdog_scoreboard] 4
[wodg_scorebaord] 1
$finish called from file "/eda/vcs_vO-2018.09-SP2/vcs/O-2018.09-SP2/etc/uvm-1.1/base/uvm_root.svh", line 439.
$finish at simulation time 465000
---------------------------------------------------------------------------
VCS Coverage Metrics: during simulation line, cond, FSM, branch, tgl was monitored
---------------------------------------------------------------------------
V C S S i m u l a t i o n R e p o r t
Time: 465000 ps
CPU Time: 0.450 seconds; Data structure size: 0.5Mb
Tue Dec 26 20:33:30 2023
写访问成功,PWDATA成功写入寄存器内。
这里在实际测试时发现一个bug,就是当不对WDOGLOCK寄存器做操作时,直接进行相关寄存器的写访问,是可以成功写入的,根据watchdog功能来看,没有解锁的情况下,不应该允许对寄存器的写访问。
写入全F测试,略...
bug1:不对WDOGLOCK做操作,直接对相应寄存器进行写访问,可以成功写入。
剩下的转下一篇章。。。