[MyProject]/20112016. 12. 2. 18:32

MIPI Camera Serialize 인터페이스 보드 제작

MIPI Camera Serialize 인터페이스 보드 제작


  • 요구사항 : 10M이상 원격지에서 Mipi Camera의 영상을 전송해 PC에서 받을 수 있는 시스템

  • SERIALIZE :  FPD-Link SerDes

  • PC INTERFACE : USB3.0(CYUSB3014) 사용

  • FPGA :  ALTERA Cyclone 4( EP4CE10)











Posted by nexp

댓글을 달아 주세요

[FPGA]/Altera2014. 6. 18. 19:46

[ALTERA] Cyclone 4( EP4CE10) 보드 제작

[ALTERA] Cyclone 4( EP4CE10) 보드 제작




FPGA Cyclone IV 적용 보드를 제작 했다. 기존에 제작 했던 Cyclone III 보드의 업그레이드 버전이다. USB3.0 지원을 목표로 좀더 성능 좋은 FPGA로 변경해서 보드를 제작 했다.

앞으로 이 모듈을 이용하여 USB3.0이 필요한 고속 카메라 응용 과제에 적용할 예정이다.


FPGA는 EP4CE10U14 를 적용하고 DDR 메모리도 실장 하였다.





인터페이스로는 기존에 제작 하였던 USB3.0(CYUSB3014) 모듈을 연결 할수 있도록 디자인 했다. CYUSB3014에 32bit Slave FIFO 에 연결해서 카메라 영상 데이터과 같은 대용량 데이터를 고속으로 전송이 가능하다.



기존 FPGA 모듈과 동일한 핀맵으로 제작해서 FPGA확장 테스트 보드에서 테스트 가능하도록 설계 하였다.






USB3.0 인터페이스를 적용하는 것이 가장 큰 이슈 였는데 그러다 보니 Cyclone 3에는 칩 사이즈가 작은것이 없다. Cyclone4의 라인업을 보면 0.8 BGA 피치 중에  U256 페키지가 가장 작다. 기존 F256 페키지 보다는 많이 작아지고 가격도 더 저렴하다고 한다.













Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2012. 10. 24. 01:19

[EZ-USB FX3] USB3.0 영상전송 테스트

 [EZ-USB FX3] USB3.0 영상전송 테스트

 

 

 

EZ-USB FX3를 이용하여 USB3.0으로 영상전송 실험을 했다.

 

 

1차 프로토 케이스 

 

 

최종 케이스 및 영상 전송 결과 

 

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2012. 10. 19. 21:30

[EZ-USB FX3] UART 테스트

[EZ-USB FX3] UART 테스트

 

CYUSB3014 에 UART는 아쉽게도 32bit GPIF를 사용할경우 SPI핀과 UART를 동시에 사용할수 없다.

그래서 선택적으로 사용할 수 있도록 점퍼를 설정했다.

 

 

 

 

CYUSB3014 UART초기화 함수

 CyU3PReturnStatus_t CyFxDebugInit (void)
{
    CyU3PUartConfig_t uartConfig;
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

    /* Initialize and configure the UART for logging. */
    status = CyU3PUartInit ();
    if (status != CY_U3P_SUCCESS)
    {
        return status;
    }

    CyU3PMemSet ((uint8_t *)&uartConfig, 0, sizeof (uartConfig));
    uartConfig.baudRate = CY_U3P_UART_BAUDRATE_115200;
    uartConfig.stopBit  = CY_U3P_UART_ONE_STOP_BIT;
    uartConfig.parity   = CY_U3P_UART_NO_PARITY;
    uartConfig.txEnable = CyTrue;
    uartConfig.rxEnable = CyFalse;
    uartConfig.flowCtrl = CyFalse;
    uartConfig.isDma    = CyTrue;
    status = CyU3PUartSetConfig (&uartConfig, NULL);
    if (status != CY_U3P_SUCCESS)
    {
        return status;
    }

    /* Set the dma for an inifinity transfer */
    status = CyU3PUartTxSetBlockXfer (0xFFFFFFFF);
    if (status != CY_U3P_SUCCESS)
    {
        return status;
    }

    /* Start the debug module for printing log messages. */
    status = CyU3PDebugInit (CY_U3P_LPP_SOCKET_UART_CONS, 8);

    return status;

 

 

 

 

EZ-USB FX3 Debug메세지 출력 함수

extern CyU3PReturnStatus_t
CyU3PDebugPrint (
        uint8_t priority,       /* Priority level for this message. */
        char   *message,        /* Format specifier string. */
        ...                     /* Variable argument list. */
        );

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2012. 10. 19. 21:00

[EZ-USB FX3] GPIO 테스트

[EZ-USB FX3] GPIO 테스트

 

[EX-USB FX3] 의 확장 테스트 보드에는 GPIO 25, 26에 LED가 연결되어 있다.

 

 

 

 

 

GPIO 초기화 함수

void CyFxGpioInit (void)
{
    CyU3PGpioClock_t gpioClock;
    CyU3PGpioSimpleConfig_t gpioConfig;
    CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

    /* Init the GPIO module */
    gpioClock.fastClkDiv = 2;
    gpioClock.slowClkDiv = 0;
    gpioClock.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2;
    gpioClock.clkSrc = CY_U3P_SYS_CLK;
    gpioClock.halfDiv = 0;

    apiRetStatus = CyU3PGpioInit(&gpioClock, CyFxGpioIntrCb);
    if (apiRetStatus != 0)
    {
        /* Error Handling */
        CyU3PDebugPrint (4, "CyU3PGpioInit failed, error code = %d\n", apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }


    /* Override GPIO 25 as this pin is associated with GPIF Control signal.
     * The IO cannot be selected as GPIO by CyU3PDeviceConfigureIOMatrix call
     * as it is part of the GPIF IOs. Override API call must be made with
     * caution as this will change the functionality of the pin. If the IO
     * line is used as part of GPIF and is connected to some external device,
     * then the line will no longer behave as a GPIF IO.. Here CTL4 line is
     * not used and so it is safe to override.  */
    apiRetStatus = CyU3PDeviceGpioOverride (25, CyTrue);
    if (apiRetStatus != 0)
    {
        /* Error Handling */
        CyU3PDebugPrint (4, "CyU3PDeviceGpioOverride failed, error code = %d\n",
                apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }

    /* Configure GPIO 25 as output */
    gpioConfig.outValue = CyFalse;
    gpioConfig.driveLowEn = CyTrue;
    gpioConfig.driveHighEn = CyTrue;
    gpioConfig.inputEn = CyFalse;
    gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;
    apiRetStatus = CyU3PGpioSetSimpleConfig(25, &gpioConfig);
    if (apiRetStatus != CY_U3P_SUCCESS)
    {
        /* Error handling */
        CyU3PDebugPrint (4, "CyU3PGpioSetSimpleConfig failed, error code = %d\n", apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }
}

 

 

 

FX3의 펌웨어는 RTOS로 구동이되고 main함수에서 실행될 Thread를 정의해 주고     CyU3PKernelEntry ()함수로 커널 실행하면 설정한 Thread가 구동 되도록 구성되어 있다.

아래 코드는 EZ-USB FX3의 GPIO를 이용하여 LED On/Off 하는 Task의 실행 예제이다.

/* Entry function for the gpioOutputThread */
void GpioOutputThread_Entry (uint32_t input)
{
    CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

    /* Initialize Debug module */
    apiRetStatus = CyFxDebugInit();
    if (apiRetStatus != CY_U3P_SUCCESS)
    {
        /* Error handling */
        CyU3PDebugPrint (4, "Debug module initialization failed, error code = %d\n",    apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }

    // Initialize GPIO module.
    CyFxGpioInit ();

   

//LED 구동 테스트

for (;;)
    {
        //LED Off
        apiRetStatus = CyU3PGpioSetValue (25, CyTrue);
  Delay(500);

        //LED On
        apiRetStatus = CyU3PGpioSetValue (25, CyFalse);
  Delay(500);
    }
}

 

 

 

 

테스트 보드의 GPIO23, 27에는 스위치가 연결되어 있다. 

 

Posted by nexp

댓글을 달아 주세요