@@ -345,12 +345,25 @@ async def test_ccc_getmrl(dut):
345
345
async def test_ccc_setaasa (dut ):
346
346
347
347
STATIC_ADDR = 0x5A
348
+ VIRT_STATIC_ADDR = 0x5B
348
349
I3C_BCAST_SETAASA = 0x29
349
350
i3c_controller , i3c_target , tb = await test_setup (dut )
350
351
await ClockCycles (tb .clk , 50 )
351
352
dynamic_address_reg_addr = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .base_addr
352
- dynamic_address_reg_value = tb .reg_map .I3CBASE .CONTROLLER_DEVICE_ADDR .DYNAMIC_ADDR
353
- dynamic_address_reg_valid = tb .reg_map .I3CBASE .CONTROLLER_DEVICE_ADDR .DYNAMIC_ADDR_VALID
353
+ dynamic_address_reg_value = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR
354
+ dynamic_address_reg_valid = (
355
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR_VALID
356
+ )
357
+ virtual_dynamic_address_reg_addr = (
358
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .base_addr
359
+ )
360
+ virtual_dynamic_address_reg_value = (
361
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR
362
+ )
363
+ virtual_dynamic_address_reg_valid = (
364
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR_VALID
365
+ )
366
+
354
367
355
368
# reset Dynamic Address
356
369
await i3c_controller .i3c_ccc_write (ccc = I3C_BCAST_SETAASA )
@@ -362,6 +375,65 @@ async def test_ccc_setaasa(dut):
362
375
)
363
376
assert dynamic_address == STATIC_ADDR , "Unexpected DYNAMIC ADDRESS read from the CSR"
364
377
assert dynamic_address_valid == 1 , "New DYNAMIC ADDRESS is not set as valid"
378
+ virt_dynamic_address = await tb .read_csr_field (
379
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_value
380
+ )
381
+ virt_dynamic_address_valid = await tb .read_csr_field (
382
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_valid
383
+ )
384
+ assert virt_dynamic_address == VIRT_STATIC_ADDR , "Unexpected VIRT DYNAMIC ADDRESS read from the CSR"
385
+ assert virt_dynamic_address_valid == 1 , "New VIRT DYNAMIC ADDRESS is not set as valid"
386
+
387
+
388
+ @cocotb .test ()
389
+ async def test_ccc_setaasa_ignore (dut ):
390
+
391
+ STATIC_ADDR = 0x5A
392
+ VIRT_STATIC_ADDR = 0x5B
393
+ DYNAMIC_ADDR = 0x3A
394
+ VIRT_DYNAMIC_ADDR = 0x3B
395
+ I3C_BCAST_SETAASA = 0x29
396
+
397
+ i3c_controller , i3c_target , tb = await test_setup (dut )
398
+ dynamic_address_reg_addr = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .base_addr
399
+ dynamic_address_reg_value = tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR
400
+ dynamic_address_reg_valid = (
401
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_DEVICE_ADDR .DYNAMIC_ADDR_VALID
402
+ )
403
+ virtual_dynamic_address_reg_addr = (
404
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .base_addr
405
+ )
406
+ virtual_dynamic_address_reg_value = (
407
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR
408
+ )
409
+ virtual_dynamic_address_reg_valid = (
410
+ tb .reg_map .I3C_EC .STDBYCTRLMODE .STBY_CR_VIRT_DEVICE_ADDR .VIRT_DYNAMIC_ADDR_VALID
411
+ )
412
+ # set dynamic address CSRs
413
+ await tb .write_csr_field (dynamic_address_reg_addr , dynamic_address_reg_value , DYNAMIC_ADDR )
414
+ await tb .write_csr_field (dynamic_address_reg_addr , dynamic_address_reg_valid , 1 )
415
+ await tb .write_csr_field (virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_value , VIRT_DYNAMIC_ADDR )
416
+ await tb .write_csr_field (virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_valid , 1 )
417
+
418
+ # Send SETAASA
419
+ await i3c_controller .i3c_ccc_write (ccc = I3C_BCAST_SETAASA )
420
+
421
+ # check if the address was not changed
422
+ dynamic_address = await tb .read_csr_field (dynamic_address_reg_addr , dynamic_address_reg_value )
423
+ dynamic_address_valid = await tb .read_csr_field (
424
+ dynamic_address_reg_addr , dynamic_address_reg_valid
425
+ )
426
+ assert dynamic_address == DYNAMIC_ADDR , "Unexpected DYNAMIC ADDRESS read from the CSR"
427
+ assert dynamic_address_valid == 1 , "New DYNAMIC ADDRESS is not set as valid"
428
+
429
+ virt_dynamic_address = await tb .read_csr_field (
430
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_value
431
+ )
432
+ virt_dynamic_address_valid = await tb .read_csr_field (
433
+ virtual_dynamic_address_reg_addr , virtual_dynamic_address_reg_valid
434
+ )
435
+ assert virt_dynamic_address == VIRT_DYNAMIC_ADDR , "Unexpected VIRT DYNAMIC ADDRESS read from the CSR"
436
+ assert virt_dynamic_address_valid == 1 , "New VIRT DYNAMIC ADDRESS is not set as valid"
365
437
366
438
367
439
@cocotb .test ()
0 commit comments