오후 6:11 2008-02-18
BIST SRAM Memory에 의한 HRDATA xxxx 리턴
조경민 bro@shinbiro.com
================================================================


BIST는 Built-in-self-test로 AHB상의 arm code가 존재하는 SRAM같은
메모리는 매번 부팅될때 마다 BIST모듈에 의해서 memory가 잘못된것은
없는지 체크해보게 된다.
JTAG을 통해서 arm code를 SRAM에 load시킬 수 있으나, verilog의
$loadmemh()를 통해서 BIST에 arm바이너리를 verilog hexa file형식의
vhx를 로드 시킬 수 있다.


BIST SRAM Memory를 사용한 arm verilog simulation 중에
잘못된 주소를 HADDR로 발생시키면 HRDATA가 xxxx가 리턴될 수 있다.
이유는 BIST의 구현 특성 상 BIST 메모리에 한번도 쓰지 않은 영역은
xxxx로 되어 있을 수 있기 때문이다. 이는 BIST의 구현마다 다르다.


발생했던 상황 PutString은 인자를 두개를 받는데 prototype을 선언안고
그냥 main함수에서 아래와 같이 호출하였다.
void main()
{
 PutString("hello");
}
이 경우 hello를 가리키는 주소를 r0에 넣고 BL PutString을 하게 되며


void PutString(int port, char* str)
{
 //
}
PutString 내에서는 두개므로 r4, r5등을 두개를 이용하여 r4에 r0를 넣고
mov r4, r1 // 원랜 port를 원했으나 지정안한 r1이 들어감 (쓰레기 값)
mov r5, r0
근데 도중에 아래 같은 명령어가 존재하였으며
ldr r3, [r4,#0]
이는 이 명령의 execution stage에 ARM에 의해서 HADDR에 r4가 가리키는 쓰레기
주소가 들어가게 되며 이 값이 BIST에서 xxxx 읽히게 된다.
이러면 full rtl simulation시 arm은 상황에 따라 특정 핀이 하이 임피던스
되면서 먹통이 된다.

'KB > hardware soc' 카테고리의 다른 글

chip decap (chip reverse engineering)  (0) 2008.02.25
RTOS on hardware  (0) 2008.02.25
UART, RS-232C  (0) 2008.02.18
fromelf???? vhxó??  (0) 2008.02.16
Verilog, PLI, VPI  (0) 2008.01.24

+ Recent posts