📄 pm5337_debug.tcl
字号:
#------------------------------------------------------------------------------proc M13DS3_D1_Loopback {devID port enable} { set addr [expr 0xC701 + $port * 0x100] admwrb $devID $addr 9 $enable }#------------------------------------------------------------------------------# PROC NAME: DDR_Write## DESCRIPTION: This procedure write 128 bits of data into the DDR Memroy# # PARAMETERS: devID - This parameter is used to specify the device # under configuration# # bank - 0x0 to 0x3## row - 0x0 to 0xFFF## col - 0x0 to 0x1FF (Must increment by 0x4)## data7 - 0x0000 to 0xFFFF (MSB)# : # data0 - 0x0000 to 0xFFFF (LSB)## NOTES: #------------------------------------------------------------------------------proc DDR_Write {devID bank row col data7 data6 data5 data4 data3 data2 data1 data0} { # Validate bank address if {$bank > 3 || $bank < 0} { puts "Invalid bank address" return } # Validate row address if {$row > 4095 || $row < 0} { puts "Invalid row addressn" return } # Validate column address set temp [expr $col % 4] if {$col > 511 || $col < 0 || $temp!=0} { puts "Invalid column address" return } ## Indirect Write Procedure # i. Poll Busy Bit Poll_BUSY_Bit $devID 0xEF44 15 # ii. Write Data admwr $devID 0xEF4D $data7 admwr $devID 0xEF4C $data6 admwr $devID 0xEF4B $data5 admwr $devID 0xEF4A $data4 admwr $devID 0xEF49 $data3 admwr $devID 0xEF48 $data2 admwr $devID 0xEF47 $data1 admwr $devID 0xEF46 $data0 # iii Write Address set address1 [expr 0x8000 | [expr $bank << 12]| $row] admwr $devID 0xEF45 $col admwr $devID 0xEF44 $address1 }#------------------------------------------------------------------------------# PROC NAME: DDR_Read## DESCRIPTION: This procedure write 128 bits of data into the DDR Memroy# # PARAMETERS: devID - This parameter is used to specify the device # under configuration# # bank - 0x0 to 0x3## row - 0x0 to 0xFFF## col - 0x0 to 0x1FF (Must increment by 0x4)## NOTES: This procedure will return an array. Use the following syntax to extract# the data:## set data [DDR_Read <devID> <bank> <row> <col>]# set data0 [lindex $data 7]# set data1 [lindex $data 6]# set data2 [lindex $data 5]# set data3 [lindex $data 4]# set data4 [lindex $data 3]# set data5 [lindex $data 2]# set data6 [lindex $data 1]# set data7 [lindex $data 0]## data0 is the LSB, and data7 is the MSB#------------------------------------------------------------------------------proc DDR_Read {devID bank row col} { # Validate bank address if {$bank > 3 || $bank < 0} { puts "Invalid bank address" return } # Validate row address if {$row > 4095 || $row < 0} { puts "Invalid row addressn" return } # Validate column address set temp [expr $col % 4] if {$col > 511 || $col < 0 || $temp!=0} { puts "Invalid column address" return } ## Indirect Write Procedure # i. Poll Busy Bit Poll_BUSY_Bit $devID 0xEF44 15 # ii Write Address set address1 [expr 0xC000 | [expr $bank << 12]| $row] admwr $devID 0xEF45 $col admwr $devID 0xEF44 $address1 #iii Poll Busy Bit Poll_BUSY_Bit $devID 0xEF44 15 # iv. Read Data set data7 [admrd $devID 0xEF4D] set data6 [admrd $devID 0xEF4C] set data5 [admrd $devID 0xEF4B] set data4 [admrd $devID 0xEF4A] set data3 [admrd $devID 0xEF49] set data2 [admrd $devID 0xEF48] set data1 [admrd $devID 0xEF47] set data0 [admrd $devID 0xEF46] set return_data [list $data7 $data6 $data5 $data4 $data3 $data2 $data1 $data0] return $return_data }#------------------------------------------------------------------------------# PROC NAME: DDR_RW_Test## DESCRIPTION: This procedure write 10 values to 10 random location then read# and check the 10 values.# # PARAMETERS: devID - This parameter is used to specify the device # under configuration# # loop - Number of iteration ## NOTES: # #------------------------------------------------------------------------------proc DDR_RW_Test {devID loop} { # Ensure EOS Subsystem is enabled, and the DDR Interface is configured. # See PM5337_EOS.tcl for more information. # Disabled other EOS subsystem admwr $devID 0xE000 0x000F for {set i 1} {$i <= $loop} {incr i} { # Define bank: 0 to 0x3 set bank1 [dec2hex [random 4]] set bank2 [dec2hex [random 4]] set bank3 [dec2hex [random 4]] set bank4 [dec2hex [random 4]] set bank5 [dec2hex [random 4]] set bank6 [dec2hex [random 4]] set bank7 [dec2hex [random 4]] set bank8 [dec2hex [random 4]] set bank9 [dec2hex [random 4]] set bank10 [dec2hex [random 4]] # Define row: 0 to 0xFFF set row1 [dec2hex [random 4096]] set row2 [dec2hex [random 4096]] set row3 [dec2hex [random 4096]] set row4 [dec2hex [random 4096]] set row5 [dec2hex [random 4096]] set row6 [dec2hex [random 4096]] set row7 [dec2hex [random 4096]] set row8 [dec2hex [random 4096]] set row9 [dec2hex [random 4096]] set row10 [dec2hex [random 4096]] # define col 0 to 0x1FF (incr by 4) set col1 [dec2hex [expr [random 128]*4]] set col2 [dec2hex [expr [random 128]*4]] set col3 [dec2hex [expr [random 128]*4]] set col4 [dec2hex [expr [random 128]*4]] set col5 [dec2hex [expr [random 128]*4]] set col6 [dec2hex [expr [random 128]*4]] set col7 [dec2hex [expr [random 128]*4]] set col8 [dec2hex [expr [random 128]*4]] set col9 [dec2hex [expr [random 128]*4]] set col10 [dec2hex [expr [random 128]*4]] DDR_Write $devID $bank1 $row1 $col1 $row1 $col1 $col1 $row1 $row1 $col1 $col1 $row1 DDR_Write $devID $bank2 $row2 $col2 $row2 $col2 $col2 $row2 $row2 $col2 $col2 $row2 DDR_Write $devID $bank3 $row3 $col3 $row3 $col3 $col3 $row3 $row3 $col3 $col3 $row3 DDR_Write $devID $bank4 $row4 $col4 $row4 $col4 $col4 $row4 $row4 $col4 $col4 $row4 DDR_Write $devID $bank5 $row5 $col5 $row5 $col5 $col5 $row5 $row5 $col5 $col5 $row5 DDR_Write $devID $bank6 $row6 $col6 0xAAAA 0xAAAA 0x5555 0x5555 0xFFFF 0xFFFF 0x0000 0x0000 DDR_Write $devID $bank7 $row7 $col7 0xAAAA 0xAAAA 0x5555 0x5555 0xFFFF 0xFFFF 0x0000 0x0000 DDR_Write $devID $bank8 $row8 $col8 0xAAAA 0xAAAA 0x5555 0x5555 0xFFFF 0xFFFF 0x0000 0x0000 DDR_Write $devID $bank9 $row9 $col9 0xAAAA 0xAAAA 0x5555 0x5555 0xFFFF 0xFFFF 0x0000 0x0000 DDR_Write $devID $bank10 $row10 $col10 0xAAAA 0xAAAA 0x5555 0x5555 0xFFFF 0xFFFF 0x0000 0x0000 DDR_Check1 $devID $bank1 $row1 $col1 DDR_Check1 $devID $bank2 $row2 $col2 DDR_Check1 $devID $bank3 $row3 $col3 DDR_Check1 $devID $bank4 $row4 $col4 DDR_Check1 $devID $bank5 $row5 $col5 DDR_Check2 $devID $bank6 $row6 $col6 DDR_Check2 $devID $bank7 $row7 $col7 DDR_Check2 $devID $bank8 $row8 $col8 DDR_Check2 $devID $bank9 $row9 $col9 DDR_Check2 $devID $bank10 $row10 $col10 puts "Test No. $i Executed" } }proc DDR_Check1 {devID bank row col} { set data [DDR_Read $devID $bank $row $col] set data0 [expr 0xFFFF & [lindex $data 7]] set data1 [expr 0xFFFF & [lindex $data 6]] set data2 [expr 0xFFFF & [lindex $data 5]] set data3 [expr 0xFFFF & [lindex $data 4]] set data4 [expr 0xFFFF & [lindex $data 3]] set data5 [expr 0xFFFF & [lindex $data 2]] set data6 [expr 0xFFFF & [lindex $data 1]] set data7 [expr 0xFFFF & [lindex $data 0]] set data0 [dec2hex $data0] set data1 [dec2hex $data1] set data2 [dec2hex $data2] set data3 [dec2hex $data3] set data4 [dec2hex $data4] set data5 [dec2hex $data5] set data6 [dec2hex $data6] set data7 [dec2hex $data7] if {$data7 != $row} { puts "Error at Data7: Bank $bank Row $row Col $col, should have $row, but got $data7" } if {$data6 != $col} { puts "Error at Data6: Bank $bank Row $row Col $col, should have $col, but got $data6" } if {$data5 != $col} { puts "Error at Data5: Bank $bank Row $row Col $col, should have $col, but got $data5" } if {$data4 != $row} { puts "Error at Data4: Bank $bank Row $row Col $col, should have $row, but got $data4" } if {$data3 != $row} { puts "Error at Data3: Bank $bank Row $row Col $col, should have $row, but got $data3" } if {$data2 != $col} { puts "Error at Data2: Bank $bank Row $row Col $col, should have $col, but got $data2" } if {$data1 != $col} { puts "Error at Data1: Bank $bank Row $row Col $col, should have $col, but got $data1" } if {$data0 != $row} { puts "Error at Data0: Bank $bank Row $row Col $col, should have $row, but got $data0" } }proc DDR_Check2 {devID bank row col} { set data [DDR_Read $devID $bank $row $col] set data0 [expr 0xFFFF & [lindex $data 7]] set data1 [expr 0xFFFF & [lindex $data 6]] set data2 [expr 0xFFFF & [lindex $data 5]] set data3 [expr 0xFFFF & [lindex $data 4]] set data4 [expr 0xFFFF & [lindex $data 3]] set data5 [expr 0xFFFF & [lindex $data 2]] set data6 [expr 0xFFFF & [lindex $data 1]] set data7 [expr 0xFFFF & [lindex $data 0]] set data0 [dec2hex $data0] set data1 [dec2hex $data1] set data2 [dec2hex $data2] set data3 [dec2hex $data3] set data4 [dec2hex $data4] set data5 [dec2hex $data5] set data6 [dec2hex $data6] set data7 [dec2hex $data7] if {$data7 != 0xAAAA} { puts "Error at Data7: Bank $bank Row $row Col $col, should have 0xAAAA, but got $data7" } if {$data6 != 0xAAAA} { puts "Error at Data6: Bank $bank Row $row Col $col, should have 0xAAAA, but got $data6" } if {$data5 != 0x5555} { puts "Error at Data5: Bank $bank Row $row Col $col, should have 0x5555, but got $data5" } if {$data4 != 0x5555} { puts "Error at Data4: Bank $bank Row $row Col $col, should have 0x5555, but got $data4" } if {$data3 != 0xFFFF} { puts "Error at Data3: Bank $bank Row $row Col $col, should have 0xFFFF, but got $data3" } if {$data2 != 0xFFFF} { puts "Error at Data2: Bank $bank Row $row Col $col, should have 0xFFFF, but got $data2" } if {$data1 != 0x0000} { puts "Error at Data1: Bank $bank Row $row Col $col, should have 0x0000, but got $data1" } if {$data0 != 0x0000} { puts "Error at Data0: Bank $bank Row $row Col $col, should have 0x0000, but got $data0" } }proc random {args} { global _ran if {[llength $args] > 1} { set _ran [lindex $args 1] } else { set period 233280 if {[info exists _ran]} { set _ran [expr { ($_ran*9301 + 49297) % $period }] } else { set _ran [expr { [clock seconds] % $period } ] } return [expr { int($args*($_ran/double($period))) } ] }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -