2012/12/26

Nios II 시작해보자-2

Nios II EDS를 실행해보자.

윈도우 메뉴의 Open Perspective에서 Other...를 클릭


여기서 Nios II를 선택한다.

File 메뉴의 New를 클릭해서 Nios II Application and BSP from Template를 선택


위 창이 뜬다.
SOPC Information File name은 프로젝트 폴더에 생성되어 있으니 걱정마라.
프로젝트 이름은 아무거나 써도 된다. 프로젝트 이름은 sopcinfo 파일명과 동일해야한다.
템플릿은 Hello World Small을 선택하고 Finish.




일단 이렇게 짜보자.

빌드를 하면 별 문제없이 컴파일된다.

프로젝트 익스플로러에서 NIOSIIf_UART를 오른쪽 클릭해서 Make Targets의 Build를 실행해라.


여기서 mem_init_generate를 선택하고 Build.

이제 hex 파일이 생성되었다. 프로젝트 폴더내의 software/NIOSIIf_UART/mem_init/ 폴더에 NIOSIIf_UART_onchip_memory2_0.hex 를 확인할 수 있을거다.

그럼 이걸 어떻게 FPGA에 다운로드 할 것이냐....

다시 Quartus II로 돌아가야 한다.

Quartus II의 Project 메뉴에 Add/Remove Files in Project를 선택해라. hex 파일이 생성된 폴더로 가면 meminit.qip라는 파일이 있는데 그걸 추가하면 된다.

그리고 Start Compilation.

컴파일이 끝나면 .sof를 .jic로 변경해서 다운로드하면 된다.


이런식으로 돌아간다.

타이머랑 PIO도 추가해서 함 돌려봐야것다.

Nios II 시작해보자-1

일단 간단하게 가보자.


예전에 만들었던 EP4CE22E22 모듈을 쓸 예정이니까 FPGA 스펙부터 확인하자.

- Logic elements(LEs) : 22,320
- Embedded memory(Kbits) : 594
- Embedded 18 x 18 multipliers : 66
- General-purpose PLLs : 4
- Global Clock Networks : 20
- User I/O Banks : 8
- Maximum user I/O : 153

하드웨어 구성은
- Nios II/s processor core
- On-chip memory
- UART
요 세가지로 하자.

1. SW version
   - Quartus II 64-Bit version 12.0 Build 178 05/31/2012 SJ Full Version
   - NIOS II EDS 12.0
   *. NIOS II를 오픈코어 플러스 평가판 라이센스로 돌려도 된다.
      제한이 무지 많으니까 명심하도록.

2. Quartus II 프로젝트 생성

   - NIOSII_Start 폴더를 만들고 프로젝트 이름도 똑같이 만들었다. Next

   - 추가할 파일 없으니까 그냥 Next

   - EP4CE22E22C8N 이니까 해당하는 디바이스 선택 후 Next

   - 여긴 걍 통과. Next

   - 다 만들었다. Finish

   - 자 준비는 끝났고, 시작해 봅시다.

3. Block Diagram File 생성
  - Quartus II 의 File -> New

    - Block Diagram/Schematic File 선택 후 OK
    - Save Project 해주자.

4. Create a New Qsys System
    - Quartus의 Tool메뉴에서 Qsys를 클릭해라. 아래 창이 뜰거다

    - 일단 Nios II 프로세서부터 붙여보자.

    - 저걸 더블클릭해라.


    - Nios II 코어는 3종류다. 난 일단 Nios II/f을 선택했다. 다른설정 건드릴거 없이 Finish


    - On-Chip 메모리 붙일 차례. 저거 더블클릭.


    - Total memory size만 32768로 변경하고 Finish.
      디바이스의 메모리 용량이 크면 이거보다 크게해도 상관없다.
      EP4CE22E22의 메모리 절반 정도의 사이즈다.


    - 마지막으로 UART 붙일 차례. 저거 더블클릭


    - 보레잇 115200으로 Fixed baud rate 설정해준다. Finish


   - 여기까지 사용할 컴포넌트는 다 추가했다.


   - 다음은 모듈간 연결을 해줄 차례다. 위 그림과 같이 연결하면 된다.
      외부로 빠질 시그널은 CLK, RST, UART Rx/Tx 다. Export 창을 클릭하면 된다.


   - System의 Assign Base Addresses를 클릭해봐라.
      Base 컬럼의 16진수값이 변경될거다.


   - System의 Assign Interrupt Numbers를 클릭해봐라.
      IRQ 컬럼의 값이 생성된다.


   - Nios2_qsys_0를  더블클릭해서 윗 그림처럼 변경해라.


   - Generation 탭에서 Generate를 클릭하면 그토록 염원하던 니오스 코어가 생성된다.
     중간중간 워닝이 뜨지만 일단 무시하자.

5. Quartus II에 Nios II 붙이기
   - Quartus II의 bdf 창을 더블클릭 해보시라.


   - 이런 창이 뜬다.


   - Libraries에 Project를 열어보면 방금 만든 Nios 코어가 보인다. OK


   - 여기에 클럭, 리셋, UART Rx/Tx만 연결하면 된다.


   - 이렇게 연결하고 Save Project. 다음은 qip 파일을 추가한다.


   - Asignments의 Setting로 가자.
     Nios 코어 폴더내의 synthesis 폴더내에 NIOSIIf_UART.qip 파일이 있다.
     add 하고 OK.


   - DEV_CLRn에 스위치를 연결해서 써먹을란다. 저거 Enable.

   - 핀 할당 해줘야 하니까 Analysis & Synthesis 실행하자.


   - 회로 설계한대로 핀 할당 해준다. 그 다음은 Start Compilation.
     담배한대 피고...


일단 여기까지 Hardware는 만들었다.

다음은 NIOS II EDS로 간단한 디버깅 프로그램을 만들어보자.

2012/12/05

SmartFusion (A2F500-FGG256) Module


어제 PCB 받고 테스트 중...


BGA는 아는 업체에 부탁해서 올리고 나머지는 수납.

악텔 홈페이지의 튜터리얼 중
- Using UART with a SmartFusion cSoC Libero and SoftConsole Flow Tutorial
- SmartFusion cSoC: Building Executable Image in Release Mode and Loading into eNVM Tutorial
을 참조해서 테스트 했다.

SoftConsole에서 컴파일 할때 자잘한 에러들이 뜨는데 몇번 하다 보니 별거 아니드만.


일단 MSS 테스트만 진행해봤다.

다음 할일은 아날로그 블럭 테스트.
그다음은 Fabric 블럭 테스트.


아주 기대가 됩니다요.

2012/08/20

윈도우7 64bit에 OrCAD 16.3 설치시 또는 구동시 문제 발생

가끔 크랙이 안먹을때가 있다.
잘 동작하다가 가끔 맛갈때도 있고

하루종일 재설치하다가 한번 해본건데

1. XP mode에서 OrCAD 설치
2. 라이센스 확인 후 설치 폴더를 윈도우7로 복사
3. 동작 확인
4. 추후 작동 불량시 다시 복사
5. 끝

오매 간단한그

2012/08/13

STM32 F1/F2/F4 통합보드 테스트



EP4CE PCB 발주 보내고, STM32 통합보드 받고 수납하고 디버깅코드 짜고

헥헥헥

돌아가는거 겨우 확인했다. 오늘은 좀 쉬자...

EP4CE Module PCB


작년에 그려놓은 회로도 드디어 완성했다.
싸이클론4 함 써보자.

아우 눈 따거...

2012/08/07

STM32 F1, F2, F4 통합보드 설계


아오 눈빠질라 그러네...

다음은 싸이클론IV

그 다음은 바이폴라 스텝모터 드라이버

그 다음은 DC 모터 드라이버

그 다음은 ... 스마트퓨전

아오 쉣

2012/04/10

XMEGA PWM ASF




ASF Wizard로 PWM service using timer/counter(service)를 추가

그리고 ASF Explorer에서 API Documentation을 열어보자.


요런 화면이 뜬다.

여기서 Quick Start Guide(s)로 가보자.
왠지 느낌이 좋은데...흐흐흐






































그래 바로 이거야!!!

struct pwm_config pwm_cfg;
pwm_init(&pwm_cfg, PWM_TCE0, PWM_CH_A, 500);
pwm_start(&pwm_cfg, 50);

이거면 끝. 소스는 여기

디버깅 메뉴에 추가해서 함 돌리보자.






도...돌리보자구...

2012/04/08

XMEGA256A3BU+ USB/CDC Standard I/O

AVRStudio5는 적응하기가 힘드네...ASF라는거도 그렇고...
전체적으로 쓰기 쉬운 방향으로 가는건 좋긴한데 적응기간이 필요한거같다.

일단 AVRStudio6를 깔고 버전을 확인해보자.
1. AVRStudio 6 version 6.0.1703 - beta
2. ASF 3.0.1
3. AVRGCC 3.3.2.31

XMEGA256A3BU 모듈보드도 만들어놨으니 이제 디버깅 코드를 만들어서 돌려보자.
CDC를 사용해서 호스트랑 시리얼 통신을 하고 디버깅 메뉴를 추가하면 끝~~

프로젝트 생성부터 시작해보자.

여기로 가서


XMEGA256A3BU니까 이 템플릿을 선택하자. 프로젝트 명은 test로~~


여기서 정확한 MCU 파트명을 정해주면 된다.


프로젝트 만들었고 여기서 ASF Wizard를 실행해보자

여기서 USB/CDC Standard I/O (stdio)(component)를 선택해서 추가하면 된다.
여기까지 하면 USB/CDC를 standard IO로 연결해주는 소스가 프로젝트에 추가된다.

그럼 여기서 끝???

일리가 없지...


일단 클럭설정부터 해보자구. conf_clock.h로 가보자.

기본설정은 2MHz 내부 클럭으로 설정되었는데 USB 구동을 위한 설정은 아래쪽에 이미 설정되어 있다. 

#define CONFIG_USBCLK_SOURCE     USBCLK_SRC_RCOSC
//#define CONFIG_OSC_RC32_CAL      48000000UL
//#define CONFIG_OSC_AUTOCAL          OSC_ID_RC32MHZ
//#define CONFIG_OSC_AUTOCAL_REF_OSC  OSC_ID_USBSOF
//#define CONFIG_SYSCLK_SOURCE     SYSCLK_SRC_RC32MHZ
//#define CONFIG_SYSCLK_PSADIV     SYSCLK_PSADIV_2
//#define CONFIG_SYSCLK_PSBCDIV    SYSCLK_PSBCDIV_1_1
이렇게~~

앞에 주석을 제거하자.

#define CONFIG_SYSCLK_SOURCE          SYSCLK_SRC_RC2MHZ
#define CONFIG_SYSCLK_PSADIV          SYSCLK_PSADIV_1
#define CONFIG_SYSCLK_PSBCDIV         SYSCLK_PSBCDIV_1_1


여기는 주석을 추가해주도록 하자.


다음은 USB 설정...conf_usb.h로 가자.

#define  USB_DEVICE_VENDOR_ID             0x0000
#define  USB_DEVICE_PRODUCT_ID            0x0000

이 설정을

#define  USB_DEVICE_VENDOR_ID             0x03EB
#define  USB_DEVICE_PRODUCT_ID            0x2404

이렇게 바꿔줘야한다.

그리고 아래 콜백 함수들을 
#define  UDI_CDC_ENABLE_EXT()             true
#define  UDI_CDC_DISABLE_EXT()

stdio_usb.c의 stdio_usb_enable()과 stdio_usb_disable() 함수와 연결해준다.
#define  UDI_CDC_ENABLE_EXT() stdio_usb_enable()
#define  UDI_CDC_DISABLE_EXT() stdio_usb_disable()

그리고 그 아래쪽에 설정을 잘 봐둬라.
#define  UDI_CDC_DEFAULT_RATE             115200
#define  UDI_CDC_DEFAULT_STOPBITS         CDC_STOP_BITS_1
#define  UDI_CDC_DEFAULT_PARITY           CDC_PAR_NONE
#define  UDI_CDC_DEFAULT_DATABITS         8

보레잇 115200, Stop bit 1. parity 없음, 데이터비트 8~~


그리고 main() 함수에 셋업 함수를 추가해보자.

int main (void)
{
irq_initialize_vectors();
cpu_irq_enable();
sleepmgr_init();
sysclk_init();
board_init();
stdio_usb_init(&USB);
while(1)
printf("hello\r\n");

// Insert application code here, after the board has been initialized.
}

자 여기까지 하고 컴파일을 함 돌리보자.

아 에러가 뜨네...

stdio_usb 의 함수를 인식못하는거 같응께 conf_usb.h에 stdio_usb.h를 인클루드 시켜주자.
conf_usb.h의 아래부분
/**
 * USB Device Driver Configuration
 * @{
 */
//@}

//! The includes of classes and other headers must be done at the end of this file to avoid compile error
#include "udi_cdc_conf.h"
#include <stdio_usb.h>
#endif // _CONF_USB_H_

여기에다 인클루드시켜주자.

그런다음 컴파일 오케이~~

플립으로 다운로드 하고 리붓~~


이렇게 COM34로 잡힌다. 
드라이버는 atmel_device_cdc.inf다. 프로젝트 폴더내에 생성되어 있으니 걱정마시라.

이제 COM34, 115200/8/none/1/none 으로 접속하면


아차 무한루프로 계속 출력시켰지...


디버그 코드 만든다고 이것저것 테스트 중인데 
printf는 잘 동작하는데
scanf는 이상하게 동작한다.

걍 scanf 말고 udi_cdc_getc 를 대신 썼다.


이것저것 뚝딱뚝딱해서 디버그 코드 완성했다.

소스는 여기



흠...

간단하다고 할수도 없고 복잡하다고 하기도 좀 그렇다. 애매한데...
ASF는 문서화가 관건이겠네. 어플노트를 정확하게만 만들어주면 실무 개발자들은 상당히 편할거같다.