'삼성소프트웨어멤버십'에 해당되는 글 6건

Verilog로 설계한 AVR Hardware Programmer :: 2008/10/02 12:29   by 김민철

본 과제에서 ATmega128 flash programming하기 위해서 우선 FPGA primitive Single Port RAMHEX data가 저장되어 있어야 한다. 여기서 primitive RAM이란 AVR로의 다운로드를 위해서 FPGA안에 별도의 메모리를 설정한 것이다. AVR Programming controller을 설명하기 위해 우선 FOTA board(PXA270)로부터 HEX data FPGA가 받아서 primitive Single Port RAM에 저장되어 있다고 가정하겠다. Primitive Single Port RAM은 저장할 수 있는 용량이 ATmega128 program memory와 같거나 커야 한다. 따라서 64K word의 용량이 필요한데 ALTERA FPGA M4K Memory 8192개 필요하다. 우리가 사용하는 FPGA(ALTERA EP1C6) M4K Memory 80,000까지 지원한다.

 

사용자 삽입 이미지

[그림] AVR Programmer TOP design

 

위의 그림은 AVR Programmer TOP designSynopsisDesign vision Tool에서 열어본 그림이다. Primitive RAM Data를 쓰는 Mode Programming controllerPrimitive RAM에서 Data를 읽는 Mode를 다르게 하였다. 따라서 addresswren의 버스쟁탈을 막기 위하여 Arbitor를 두었다. Module Hierarchy는 다음과 같다.

 

Top Design

Arbitor

SPI_serial_programmer

  Clock_Divider

  Echo_back_check

  Program address counter

  Shift_register

  SPI_FSM

Primitive_ram

Top_FSM

Programmer_wrapper

 

1. Programmer wrapper

사용자 삽입 이미지

 PXA270 Board FPGA간의 Interface를 담당한다. Data Input signal inout port로 설정하여 하나의 data line으로 입출력을 하게 design 하였다. PXA270에서 읽기/쓰기 요청요 들어왔을 때 FPGA의 특정 address에서 data를 읽어가거나 쓸 수 있다. 읽기/쓰기 요청을 구분하는 신호는 PXA270 Board에서 하드웨어적으로 생성되는 CPU_nWE, CPU_nCS, CPU_nOE signal이다.

 

2. Primitive RAM

사용자 삽입 이미지

 Cyclone M4K memory를 이용하여 FPGA 내부에 위 diagram과 같은 Single Port Primitive RAM을 선언할 수 있다. (참고. 두개의 single-port memory block은 하나의 M2K block에서 실행될 수 있다) Single-port mode는 비동시성 read/write operation을 지원한다. 다음 그림은 memory timing을 나타내고 있다.

사용자 삽입 이미지
 

3. Top Finite State Machine

 

사용자 삽입 이미지

  Diagram Top module FSM을 보여준다. SEable done_ram 신호는 PXA270으로부터 생성되어 Programmer를 제어하기 위해 쓰인다.  다음 Table FSM에서 발생하는 signal들에 대한 table이다. PEable SPI_FSM으로 인가되어 SPI_serial_programmer start trigger로 쓰이며 address_sel 신호는 arbitor로 인가되어 primitive ram read/write 모드에 따라서 wren/address/data선의 입력을 결정해준다. Status(ready / fail / success / upgrading)로 구성되어 PXA270이 읽어가서 현재 FPGA의 상태를 알 수 있게 해준다.

 

 

READY

STORE_RAM

SPI_PROGRAM

RESET_AVR

status

(ready/fail/success/upgrading)

1000

0001

0001

0001

address_sel

1

1

0

0

PEable

0

0

1

0

resetn

11

0

1

1

 

 PXA270에서 FPGA primitive ram data를 저장하기 위해서 다음과 같은 sequence signal들을 control 해야한다. a2형식의 문자는 FPGA의 특정 address를 나타내며 그 address data를 써주게 된다. Initialize -> Reset -> Data transfer의 순서로 동작한다.


 

Initialize

address

MCU_sel

(a3)

SEable

(a2)

length_word

(a4)

address

(a8)

data

(a16)

done_ram

(a32)

top_resetn

(a64)

data

2bit

0

0

0

0

0

1

Reset

<