; --------------------------------------------------------------------------------
; @Title: Measure MC/DC
; @Description:
; Measure MC/DC for sample application using imported ECA data.
;
; Supported Targets:
; RM57 (Arm Cortex-R5)
; STM32F407IG (Arm Cortex-M4)
; LA-3854 "Bolero3M Adapter" with MPC5646C
; T2080 (PPC QorIQ)
; TC399XE (TriCore TC39X)
;
; @Author: CSA
; @Board: RM57, LA-3854, T2080QDS
; @Chip: RM57L843-ZWT, STM32F407IG, MPC5646C, T2080, TC399XE
; @Keywords: coverage mc/dc eca
; @Copyright: (C) 1989-2018 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: measure_mcdc.cmm 19349 2022-05-17 12:40:44Z meick $
WinCLEAR
PMACRO.EXPLICIT
; --------------------------------------------------------------------------------
; Check TRACE32 version
; --------------------------------------------------------------------------------
PRIVATE &min_build
&min_build=70316.
IF VERSION.BUILD.BASE()<&min_build
(
DIALOG.OK "Sorry, the script" """"+OS.PPF()+"""" "requires at least TRACE32 build "+FORMAT.Decimal(1,&min_build)+"."
ENDDO FALSE()
)
RESet
SYStem.RESet
IF CPUFAMILY()=="ARM"
(
SYStem.CPU RM57L843-ZWT
SYStem.DETECT IDCode
IF (IDCODE(0)==0x06413041)&&((IDCODE(1)&0x0fffffff)==0x0BA00477)
(
SYStem.CPU STM32F407IG
SYStem.MemAccess DAP
SYStem.JtagClock CTCK 10MHz
IF Analyzer()
(
Trace.METHOD Analyzer
Analyzer.TERMination OFF
)
ELSE IF hardware.COMBIPROBE()||hardware.UTRACE()
(
Trace.METHOD CAnalyzer
SYStem.CONFIG CONNECTOR MIPI20T
)
SYStem.Up
Register.Init
sYmbol.SourcePATH.SetBaseDir arm
Data.LOAD.Elf "~~~~/arm/coverage_cm.elf" /RelPath /PlusVM
IF Analyzer()||hardware.COMBIPROBE()||hardware.UTRACE()
(
Data.Set E:0x40023830 %Long 0yXXXXxxxxXXXXxxxxXXXXxxxxXXX1xxxx // RCC_AHB1ENR : IO port E clock enable
Data.Set E:0x40021000 %Long 0yXXXXxxxxXXXXxxxxXX1010101010xxxx // GPOIE_PORTMODE : Enable "alternate funtion" on trace pins (PE2..PE6)
Data.Set E:0x40021020 %Long 0yXXXX00000000000000000000XXXXxxxx // GPIOE_AFRL : Use ETM as "alternate funtion" for trace pins (PE2..PE6)
Data.Set E:0x40021008 %Long 0yXXXXxxxxXXXXxxxxXX0101010101xxxx // GPOIE_PORTSPEED : Use "Medium speed" for trace pins (PE2..PE6)
ETM.RESet
ETM.TImeMode ExternalInterpolated
ITM.RESet
ITM.ON
ITM.DataTrace CorrelatedData
TPIU.PortMode Continuous
TPIU.PortSize 4
Trace.ACCESS DualPort
Trace.AutoArm ON
Trace.AutoInit ON
Trace.THreshold 1.5
Trace.CLOCK 16.MHz
Trace.TraceCLOCK 16.MHz
)
)
ELSE
(
SYStem.CPU RM57L843-ZWT
SYStem.Option EnReset OFF // Stop the CPU at RESET Vector
SYStem.Option ICEPICK SystemReset.ON
SYStem.Option ICEPICK WaitInReset.ON
SYStem.MemAccess DAP
SYStem.JtagClock CTCK 10MHz
SYStem.Up
Data.Set 0x08000000++0x7ffff %Quad 0x0 // Init ECC - via CPU
sYmbol.SourcePATH.SetBaseDir arm
Data.LOAD.Elf "~~~~/arm/coverage.elf" /RelPath /PlusVM
GOSUB CtiSetup
IF Analyzer()
(
Data.Set APB:0x80003404 %Long 0x00000001 // Enable TPIU, by setting input clock to VCLK
TPIU.PortSize 16
TPIU.PortMode Continuous
ETM.Trace ON
ETM.ON
Trace.METHOD Analyzer
Trace.AutoFocus
)
)
)
ELSE IF CPUFAMILY()=="POWERPC"
(
IF CPUIS64BIT()
(
SYStem.BdmClock 15.MHz ;try lower debug frequencies if problems occur
SYStem.CPU T2080
SYStem.DETECT CPU
CORE.ASSIGN 1. ;Assign just the first core to this T32 instance
;NEXUS.CoreENable 0. ;Optional: trace only core 1
SYStem.Option.SLOWRESET ON ;Needed by some Freescale/NXP boards
DO ~~/demo/powerpc64bit/hardware/qoriq_t2/t2080qds/demo_set_rcw.cmm ; Set a temporary RCW if needed by the target
DO ~~/demo/powerpc64bit/hardware/qoriq_t2/t2080qds/qixis_config_serdes_aurora_mux.cmm ; Ensure Aurora trace works
SYStem.Option.IMASKASM ON ;disable insterrupts for assembler single steps
SYStem.Option.FREEZE ON ;stop time base when in debug mode
SYStem.MemAccess NEXUS ;allow non-intrusive run-time memory access
PRIVATE &base_path
&base_path=OS.PWD()
;Set CCSRBAR to 0x40000000
Data.Set ANC:IOBASE.ADDRESS()+0x00004 %Long 0x40000000
Data.Set ANC:IOBASE.ADDRESS()+0x00008 %Long 0x80000000 ;commit
Data.Set ANC:IOBASE.ADDRESS()+0x00008 %Long 0x00000000
;Set up local access window, 0x0000000--0x0007FFFF, memory complex (for CPC, 512kB)
Data.Set ANC:IOBASE.ADDRESS()+0x00C00 %Long %BE 0x00000000
Data.Set ANC:IOBASE.ADDRESS()+0x00C04 %Long %BE 0x00000000
Data.Set ANC:IOBASE.ADDRESS()+0x00C08 %Long %BE 0x81000012
;Enable CoreNet Platform Cache (CPC) as SRAM
Data.Set ANC:IOBASE.ADDRESS()+0x10000 %Long %BE 0x80200000
Data.Set ANC:IOBASE.ADDRESS()+0x10100 %Long %BE 0x00000000
Data.Set ANC:IOBASE.ADDRESS()+0x10104 %Long %BE 0x00000009 ;Set maximum (512kB) and enable, start at 0x0
;reset stack pointer
Register.Set R1 0x00000000
;TLB entry for 512kB CPC-SRAM 0x40000000--0x4007ffff
MMU.TLB1.Set 1. 0x80000480 0x40000002 0x00000015 0x00000000 0x00000000
;reset stack pointer
Register.Set R1 0x00000000
sYmbol.SourcePATH.SetBaseDir ppc
Data.LOAD.Elf ~~~~/ppc/coverage.elf /RelPATH /PlusVM
)
ELSE
(
SYStem.CPU MPC55XX
SYStem.BdmClock 1.MHz
SYStem.Option IMASKASM ON
SYStem.Option IMASKHLL ON
SYStem.Option WATCHDOG OFF
SYStem.Option DisMode AUTO
IF !SIMULATOR()
(
SYStem.MemAccess NEXUS
)
SYStem.Mode Up
Register.Init
MMU.Set TLB1 1 0xC0000200 0x40000000 0x4000003F ; Map 16 KB of SRAM to logical address space
MMU.Set TLB1 2 0xC0000500 0xFFF0000A 0xFFF0003F ; Map 1 MB of peripheral reg. to logical address space
Data.Set EA:0x40000000++0x3FFF %Quad 0x55AA55AA55AA55AA ; Initialize 16 KB of internal SRAM
sYmbol.SourcePATH.SetBaseDir ppc
Data.LOAD.Elf ~~~~/ppc/coverage.elf /RelPATH /PlusVM
Data.Set SPR:0x03f3 3 // Enable (and invalidate) instruction cache (if available)
IF Analyzer()
(
Analyzer.Init
Analyzer.CLOCK 8.MHz
Analyzer.Mode FIFO
Analyzer.AutoArm ON
NEXUS.BTM ON
NEXUS.HTM ON // Treat isel/fsel as conditional instruction
)
)
)
ELSE IF CPUFAMILY()=="TRICORE"
(
IF SIMULATOR()
SYStem.CPU TC399XE
ELSE
SYStem.DETECT CPU
SYStem.Mode Up
sYmbol.SourcePATH.SetBaseDir tricore
IF CPUIS("TC3*")
Data.LOAD.Elf ~~~~/tricore/coverage.elf /RelPATH /PlusVM /SingleLineAdjacent
ELSE IF CPUIS("TC2*")
Data.LOAD.Elf ~~~~/tricore/coverage_tc2.elf /RelPATH /PlusVM /SingleLineAdjacent
ELSE
(
PRINT %ERROR "CPU "+CPU()+" not supported."
ENDDO FALSE()
)
IF (Onchip())&&(!Analyzer())
(
Trace.METHOD Onchip
)
)
ELSE IF CPUFAMILY()=="RISCV"
(
SYStem.CPU RV32
IF !SIMULATOR()
(
SYStem.CONFIG.NEXUS.Type SiFive
SYStem.CONFIG.NEXUS.Base SB:0x10000000
SYStem.CONFIG.NEXUS.NTB OFF
Trace.METHOD CAnalyzer
NEXUS.ON
NEXUS.PIBMode 4TDATA
NEXUS.PIBDivider 1.
NEXUS.PTM HTM+ReturnStack
NEXUS.TimeStamps ON
CAnalyzer.CLOCK 64.MHz
CAnalyzer.PortFilter AUTO
CAnalyzer.TERMination ON
)
SYStem.Mode Up
IF CAnalyzer()
(
CAnalyzer.AutoFocus
)
sYmbol.SourcePATH.SetBaseDir riscv
Data.LOAD.Elf ~~~~/riscv/coverage.rv32.elf /RelPATH /PlusVM /SingleLineAdjacent
)
Go main
WAIT !RUN()
Break.Set sYmbol.EXIT(TestObcDiffersMcdc)
Var.Break.Set RunCoverageDemo\tic /Write
Mode.Hll
GOSUB RestoreWindows
; --------------------------------------------------------------------------------
; Import ECA data
; --------------------------------------------------------------------------------
sYmbol.ECA.LOAD \coverage
COVerage.Option.SourceMetric MCDC
ENDDO TRUE()
; --------------------------------------------------------------------------------
; Display windows for HLL coverage
; --------------------------------------------------------------------------------
RestoreWindows:
(
WinCLEAR
WinPOS 0.0 0.0 125. 33. 28. 1. W001
List /COVerage
WinPOS 0.0 41.667 125. 35. 27. 1. W002
List.Mix /COVerage /Track
WinPOS 132.57 0.083333 108. 33. 26. 1. W004
COVerage.ListFunc.sYmbol \coverage
WinPOS 194.43 41.5 64. 21. 0. 0. W003
Trace
WinPOS 135.57 45.333 45. 16. 0. 0. W000
COVerage
RETURN
)
; --------------------------------------------------------------------------------
; Setup CTI to freeze peripherals while debugging
; --------------------------------------------------------------------------------
CtiSetup: ;()
(
PRIVATE &CoreCtiBase &PeriphCtiBase
&CoreCtiBase=COMPonent.BASE("CTI",0.)
&CoreCtiBase=CONVert.ADDRESSTODUALPORT(&CoreCtiBase)
&PeriphCtiBase=EDAP:0x8000a000
;
; MAP CR5-"Core-Stopped" (CTITRIGIN7) to CTM Channel 2
Data.Set &CoreCtiBase+0x3c %Long 0x4
; ensure CTM2 is not GATED
Data.Set &CoreCtiBase+0x40 %Long Data.Long(&CoreCtiBase+0x40)|0x4
; enable CR5-CTI
Data.Set &CoreCtiBase+0x00 %Long 0x1
;
;
; the following Data.Set's connect "Core-Stopped" signal to the
; listed peripherals
; L2FMC, CCMR5, CRCx, and SYS modules
Data.Set &PeriphCtiBase+0xa0 %Long 0x4
; DMA, RTIx, AWMx, HTUx, SCIx, LINx, I2Cx, EMAC, EQEP, ECAP, DMM and DCCx modules
Data.Set &PeriphCtiBase+0xa4 %Long 0x4
; DCANx
Data.Set &PeriphCtiBase+0xa8 %Long 0x4
; ETPWMx
Data.Set &PeriphCtiBase+0xac %Long 0x4
;
;
; ensure CTM2 is not GATED
Data.Set &PeriphCtiBase+0x40 %Long Data.Long(&CoreCtiBase+0x40)|0x4
; enable PERIPH-CTI
Data.Set &PeriphCtiBase+0x00 %Long 0x1
;
RETURN
)