'삼성소프트웨어멤버십'에 해당되는 글 6건
Verilog로 설계한 AVR Hardware Programmer :: 2008/10/02 12:29 by 김민철
본 과제에서 ATmega128의 flash로 programming하기 위해서 우선 FPGA의 primitive Single Port RAM에 HEX 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 design을 Synopsis社의 Design vision Tool에서 열어본 그림이다. Primitive RAM에 Data를 쓰는 Mode와 Programming controller가 Primitive RAM에서 Data를 읽는 Mode를 다르게 하였다. 따라서 address와 wren의 버스쟁탈을 막기 위하여 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 |
< |
