최근 자동차 내용만 올리다가 간만에 학습내용을 쓰는듯 하다.

Xilinx의 VIVADO HLS관련하여 개인적으로 테스트한 내용을 정리겸 추후 복기하기 위해 작성하였다.

 

VIVADO HLS를 처음 접하면서

C to HDL의 For 루프에서 옵션 처리에 따른 속도 테스트를 진행 하였다.


테스트 코드 기능은 12채널 MUX이며,

12개의 입력신호에서 다중 채널로 출력이 가능 하도록 설계 되었다.

( 입력 : 출력 / 설정에 따라 1:n 또는 1:1 출력을 대응함.)


FPGA를 C로 구현하니 격세지감이다

(뭐 이미 한참 전에 나오긴 했지만 ㅋ)

 

추가적으로 테스트 진행중 참고 및 주의해야할 사항은 아래와 같다.

참고사항

1. AXI-LITE 를 사용하면 Latency 가 소폭 상승한다

2. AXI-LITE를 사용하고 각 제어 변수의 버스(bundle 옵션)를 다르게 적용하면 Latency가 일정부분 감소한다.

3. Time Critical 영역에서는 AXI interface 를 피하고 Block Level IO Protocol 설계방식이 유리해 보인다

(현재 내가 해본 수준에서는...)

4.설계한 IP에 Block Level IO Protocol을 사용하여 제어하려면(interface) Microblaze에서 AXI-GPIO IP를 미친듯이 뽑아내자(읭?????)

 

주의사항

1. 인터페이스용의 결과 리턴용 참조 변수는 함수 마지막 실제 Function의 리턴 직전에 넣을 것.

   (Co Simulation이 stall 현상이 발생 - User guide에서 Co - Simulation의 멈춤을 stall 이라고 명기함.)

2. Co Simulation은 Velilog로 진행 할것. (VHDL 진행시 진행이 되지 않는 경우가 발생)

사용한 VIVADO 버전은 2018.3 이다.

 

적용 테스트 코드는 블로그 하단에 첨부

Pipeline 적용

 

unroll 적용


For 문 없이 풀어서 적용



결과

입력에서 출력까지의 지연시간 (Co- simulation을 통한 Timing 확인)

for문 pipeline 적용 : 140ns

for문  pipeline 미적용 : 255ns

for문  unroll 적용 : 60ns

Fro문 없이 적용 : unroll 과 동일  60ns

결론  : unroll 적용시 시간 이 단축되며 FOR 문없이 풀어 적용한것과 동일한 효과를 나타냄

현 구조에서는 unroll 적용 가능 구조였으며 상황에 따라 소모 clock은 다를 것으로 보여짐.

 

 

파이프라인 적용 : Verilog

파이프라인미적용 : VHDL




unroll 적용



For 문 없이 적용


######AXI-LITE 인터페이스 사용에 따른 Latency 비교 #############

AXI -LITE 사용 리턴 미사용



AXI -LITE 사용 리턴 사용



AXI -LITE 사용 리턴 사용 / register 적용



AXI -LITE 사용 리턴 사용 / register 적용 / 동일 버스(bundle) 적용


AXI -LITE 사용 리턴 사용 / register 적용 / 개별 버스라인(bundle) 적용

 

MUX용 코드

//mux 12ch

 

// in12 out12

// select sel_led -> sel_sen

// Designed by S.Jung

// 2019--09-18

#include <stdio.h>

#include "ap_cint.h"

 

#define NofLED 12

 

 

typedef int12 CH_Width;

 

char LED_CH_SEL_SEN[NofLED];

char SELECT_LED, SELECT_CH;

CH_Width mux12ch(int *sel_led, int *sel_sen, int *set, CH_Width *out_monitor,CH_Width sen_in)

//CH_Width mux12ch(char *sel_led, char *sel_sen, char *set,CH_Width sen_in)

{

/*

#pragma HLS INTERFACE port=return

#pragma HLS INTERFACE s_axilite port=set bundle=a

#pragma HLS INTERFACE s_axilite port=sel_sen bundle=b

#pragma HLS INTERFACE s_axilite port=sel_led bundle=c

#pragma HLS INTERFACE s_axilite register port=out_monitor bundle=d

*/

CH_Width return_ch=0;

char i;

 

 

if ((*sel_led < NofLED) && (*set == 1))

{

LED_CH_SEL_SEN[*sel_led] = *sel_sen;

}

 

else

{

for(i=0;i<NofLED;i++)

{

#pragma HLS UNROLL

return_ch |= ((sen_in >> LED_CH_SEL_SEN[i]) &0x01 ) << i;

}

}

 

 

 

*out_monitor = return_ch;

 

 

return return_ch;

 

 

}



Test Bench Code

#include <stdio.h>

#include "ap_cint.h"

typedef int12 CH_Width;

int main(void)

{

FILE*fp;

int sel_led=0;

int sel_ch=0;

int set=1;

int i=0;

CH_Width return_data=0;

CH_Width pt_data=0;

int pt_data_conv;

fp=fopen("result.dat","w");

return_data = mux12ch(&i, &i,&set,&pt_data,i);

//return_data = mux12ch(&i, &i,&set,i);

for (i=0;i<12;i++)

{

return_data = mux12ch(&i, &i,&set,&pt_data,i);

//return_data = mux12ch(&i, &i,&set,i);

fprintf(fp,"loop: %d return_data : %d\r\n",i,return_data);

}

set = 0;

for(i=0;i<120;i++)

{

return_data = mux12ch(&set,&set,&set,&pt_data,i);

//return_data = mux12ch(&set,&set,&set,i);

fprintf(fp,"loop :pointer data : rtndata  [ %d: %d : %d ] \r\n",i,pt_data,return_data);

//fprintf(fp,"loop : rtndata  [ %d : %d ] \r\n",i,return_data);

}

fclose(fp);

return 0;

}

 

####Co-Simulation ###########



########추가 참고 자료#########

인터넷에서 주워옴  

#FPGA, #HLS, #Co-Simulation, #VIVADO, #VIVADO HLS

크리에이티브 커먼즈 라이센스
Creative Commons License
2019/09/21 00:36 2019/09/21 00:36

댓글을 달아 주세요

최근 설계 프로젝트 진행중에 Altium을 이용하여 프로젝트를 진행 하였다.


기존에 사용하던 방식은

회로설계 툴과 PCB 설계툴이 이원화 되어 하기와 같은 방식으로 진행 되었다 

: 회로 설계->넷리스트 생성-> PCB 설계툴 적용


해당 방식의 단점은 Artwork 진행중 회로 변경 사항이 발생되면 ECO를 재생성 하여 진행 하는 번거로움이 있었다


Altium PCB 설계 툴을 이용하였을때는

회로 설계와 PCB 설계를 일원화된 툴로 진행함으로서 회로 설계 반영사항이 신속하게 수정 가능하였다.

 
추가적으로
내가 만든 라이브러리에 3d 몸체 높이와 색상을 설정 하여 PCB 형상을 조립전에 확인 가능하다..

 

설계 한 것과 실 제작 PCB가 제법 유사하게 나왔다

 

 

Altium을 사용하면서 느낀 장점은 아래와 같다.

장점 : 해당 프로그램에 회로 설계 및 PCB 제작에 필요한 모든 기능이 대부분 들어있음.

0. 최근에 18버전 출시되어 64bit 상 멀티 코어 다중보드 설계 지원됨

1.  Netlist 수정시에 Artwork 바로 적용이 가능 하다. 

    회로상의 수정 사항이 PCB쪽으로 적용 또는 PCB 쪽의 수정 사항을 회로도 쪽으로 적용 가능.

2. SVN 기능을 이용한 설계 이력관리 가능.

3. 라이브러리 다운 가능(Vault 이용 )

4. ORCAD 회로도 및 라이브러리  / 거버파일을 PCB로 변경 하여 사용 가능.

5. 디퍼렌셜 라인 아트웍의 편리함.

6. 3D 변환 설계 및 Step 파일로 / 3D PDF 로 출력 가능.

7. 거버 뷰어 함께 내장되어있음.

 

 가장 큰 단점은 무겁다는것과 느리다는것이었으나 18버전 이후 개선되었다고 대대 적으로 
 업체에서 홍보 중이다.
 일단 처음 실행할때 로딩 부분의 속도는 기존 대비 개선사항은 없어보이나 
 일부 사용 방식이 17버전에 비하여 편리 해진 것들이 있다.

단점 : 프로그램이 엄청 무겁다.(최대 단점)- 18버전 이후 일부 개선되는 것으로 보임 사용 테스트중 

        1. 기존 회로 설계시 타 툴에서 사용하던 단축키 연타 신공이 어려움.

       (약간의 미묘한 지연 발생 사용환경 CPU : i7-3770K / 16GB / SSD/ GTX560 )

        2. 뭔가 좀 복잡합. (적응과정상의 문제라 판단함.)

        3. 갑자기 경고창 뜨고 뻗어버리는 경우가 종종 있음..ㄷㄷㄷㄷㄷㄷㄷ

 

 

사용자 삽입 이미지

해당 프로젝트에서 설계한 보드는 제법 잘 동작하며. STM407Z에 LCD 드라이버 올리고 / STemwin 포팅하고 / 터치구현하고 /

인터럽트 /타이머 등 펌웨어 올리는 작업 진행중이다.

 

#알티움, #altium, #artwork, #아트웍, #STemwin, #STM32F407

크리에이티브 커먼즈 라이센스
Creative Commons License
2017/08/09 00:51 2017/08/09 00:51

댓글을 달아 주세요

차량 배터리 안정기 제작을 위한 회로 및 보드설계를 진행하였다.

 

- 캐패시터를 이용한 전압 안정시 문제점

1. 캐패시터만을 이용할경우 알터네이터를 이용하여 충전시 배터리의 전압을 측정하게 되는데

    캐패시터에 충전된 전압으로 측정되기 때문에 실제 배터리의 완충상태가 이뤄지지 않을수 있다.

    따라서 순간적인 전원 공급이나 전원의 순간적 출렁거림(전압강하)에 대응은 빠르고 전자장비에

    안정적인 공급은 가능하나 실제 배터리의 경우 충전속도가 느려져 실 배터리의 방전을 불러올 소지가 있다.

 

- 보완방법

1. 쇼트키 다이오드 양방향을 이용하여 캐패시터의 전압을 실제 배터리 보다 0.4V~0.5V낮춰 놓는다.

   알터네이터에서 배터리 충전전압 확인시 실제 배터리 전압을 측정하게 된다.

  쇼트키 다이오드는 양방향이므로 실제 배터리 전압이 12.4V인 경우 캐패시터쪽은 0.4V정도가 Drop되어

   12V정도가 된다.

  따라서 양방향 다이오드로 인하여  캐패시터 충전전압보다 0.4V가 더 떨어진 경우 캐패시터의 충전량에 대하여 방출이 가능하다.

  즉 배터리가 12.4V인 경우 11.6V로 배터리 전압의 강하가 발생되어야 캐패시터에 충전되었던 전하들의 방출

  이 가능한 상황이 되고,배터리의 전압강하가 캐패시터에 충전된 전압 보다 높은 경우에는 캐패시터는 제역할을 하지

   못하게 된다 (에어컨이나/시동시/상하양등 ON 정도에서 효과가 있을것으로 보인다)

 

- 회로도 및 거버파일은 첨부파일을 참조

 

Artwork하여 PCBWAY.com에서 거버파일을 보내 제작하였다.

제작에는 4일 배송은 DHL로 2틀 정도 걸렸다.

 

 

삼영 4700uF/25V 스펙의 동작온도105도 까지 보장이 되는 캐패시터를 적용하였다.

차량의 경우 엔진룸의 열기를 고려하여 85도 보다 더 높은 제품을 선정 적용하였다.

일부 차량 배터리 안정기의 경우 16V 짜리 제품을 쓰는데 실제 배터리 충전시

전압이 14V를 넘는경우가 발생되며 내압 마진이 2V밖에 되지않는다.

실제 제품 설계시는 대체적으로 50%이상은 가져가도록 설계한다.

(해당 제품의 경우 디바이스마트에서 개당 500원에 판매중)

 

 

 

schottky diode 2개를 양방향으로 적용

퓨즈 홀더를 구입하지 않아서 일단 해당 위치에는 납으로 연결하여 과전류가 흐르면 끊어지도록

임시조치를 취하였다.

 

실제 차량에 장착하여 테스트 하는 일만 남았다.

 

- 총 소요비용

1. PCB : 40000원(배송비포함/10장 양면) - www.pcbway.com

2. 부품 : 13000원

Total : 53000원

 

 

 

미진한 실력이지만 실제 회로도와 거버파일을 첨부합니다.

상업용을 제외하고는 자유롭게 이용하셔도 됩니다.

(Orcad 16.0)

크리에이티브 커먼즈 라이센스
Creative Commons License
2014/06/28 22:53 2014/06/28 22:53

댓글을 달아 주세요

  1. 근종현 2017/06/06 23:04  address  modify / delete  reply

    안녕하세요.
    PCBWAY.com 사용하실 때 배송방법은 어떤걸 사용하시나요?
    china post 가 가장 저렴하던데 알리무료배송처럼 1달정도 걸리는건가요?
    좋은정보 감사합니다.

    • 홈키파 2017/06/08 11:26  address  modify / delete

      Chinapost는 이용해보지 않아서 잘 모르겠습니다.

      업무용은 DHL로 이용하고

      개인적으로 할때는 EMS 이용 합니다.

      DHL이 확실히 빠르고 EMS는 하루이틀 정도 더 걸립니다.

  2. 허당 2018/02/11 16:16  address  modify / delete  reply

    차량에 부착 후 효과를 보셨나요..?

    • 홈키파 2018/02/11 21:16  address  modify / delete

      일단 해당 보드 장착 후 현재 거의 4년 정도 되었습니다.

      LGP 차량이라 겨울에는 배터리 방전률도 않좋고 해서
      스타트 모터가 힘없이 돌아 갔는데

      초기에 캐패시터 전압으로 밀어주는 효과로 인하여
      일단 겨울철 시동 걸때 효과가 상당히 좋았습니다.
      (스타트 모터가 기존보다 강하게 돌아감.)

      그리고 나머지는 잘 모르겠네요..

      배터리는 6년째 사용중인데 전압계 달아서 지속적으로 확인하고있으며
      아직 문제 없습니다.
      (급격한 충방전이 이뤄지지 않기 때문에 배터리 입장에서는
      수명적인 부분도 일부 효과 있을 것으로 보여집니다.)

    • 허당 2018/02/12 20:31  address  modify / delete

      답변 감사드립니다.^^

  3. 조언을바랍니다 2018/06/23 20:41  address  modify / delete  reply

    안녕하세요.
    다른곳에서는 볼수 없는 쇼트키다이오드의 활용법이 좋아보입니다.
    전기기초가 없어서 적용하신 쇼트키다이오드와 관련하여 조언(용량과 위치)을 구합니다.

    1. 회로도에 있는 쇼트키다이오드의 위치가 배터리+에서 콘덴서+사이의 +선에 2줄 직렬로서
    물려있나요?
    2. 회로에 적용된 쇼트키다이오드 용량대신 다른용량으로 대체해도 되나요?
    (예 : 40V1A 원통형, 60V5A 원통형, 100V3A 원통형, 45V10A 사각형 다리2개, 45V20A 사각형 다리3개)
    3. 쇼트키다이오드를 1줄에만 단방향으로 1개또는 2개를 연속해서(직렬) 쓰거나 2줄에 각각 1개씩
    단방향 병렬연결해도 0.4V~0.5V 전압강하 효과가 있는지요?
    4. 쇼트키다이오드의 앞이나 뒤쪽에 추가로 정류다이오드(400V1A이상?)와 서지압소바(150V이상?)를
    단다면 각각 최소 어느용량부터 넣을수 있나요?

    • 홈키파 2018/06/24 22:55  address  modify / delete

      1. 네 직렬로 연결 되어있습니다.
      회로도 사진에 보시는 해당 다이오드는 해당 다이오드 내부에서 2개가 병렬로 연결된 형태로 구성이 되어있는 다이오드 입니다.

      추가적으로 2개의 제품을 각각 방향을 다르게 장착한 이유는
      케패시터 또는 배터리중 한쪽이 전압차이가 0.4이하로 떨어지는 경우 전압을 높게 갖고있는 쪽에서 낮은쪽으로 공급해주며 밸런스가 맞춰 지게 되어있습니다.

      2. 네 다른 용량으로 대체 하셔도 됩니다.(가급적 10A이상 제품 적용)
      만약 전류 용량이 적은 다이오드를 사용하신다면(10A이하) 차량에서 전류 출력이 강하게 필요한 경우에는 해당 보드의 효과가 미미 할수 있습니다.
      전류가 부족하여 전압 강하가 발생되어 부족분을 캐패시터에서 끌어와야 되는데 다이오드의 허용 전류가 낮은 경우 결과적으로 큰 효과가 없을수 있습니다.

      3. 쇼트키 다이오드는 일반 다이오드보다 전압 강하가 낮습니다. 여러개를 직렬로 연결 해서 사용한다면
      다이오드에서 전압이 소비 되기 때문에 여러개를 직렬로 연결 할수록 해당 보드의 효과는 없어집니다.

      또한 일반 다이오드가 아닌 쇼트키 다이오드를 사용한 목적은 일반 다이오드는 1.0V 의 전압강하가 발생하는데 쇼트키 다이오드는 고속에 전압강하가 0.4V 정도 밖에 되지 않기 때문에 해당 다이오드를 적요한 것입니다.

      4. 정류다이오드를 장착하실때 역시 전압 강하가 (일반다이오드 수준으로) 발생되기 때문에 보드의 효과가 없어질수 있습니다. 또한 전류 허용값이 1A라면 없는 것이 좋습니다.

      잘못된 극성으로 인하여 탈부착에 문제가 될수 있는 부분에 대하여 우려 하신다면 차라리 커넥터 처리로
      해당 부분을 해결하시는 것이 좋을 것으로 보입니다.

  4. 조언을 바랍니다 2018/06/30 14:27  address  modify / delete  reply

    안녕하세요.
    쇼트키다이오드는 마이너스선에 추가 연결없이 이렇게만 연결하면 되는 것인가요?

    (플러스) (플러스) ▶
    ------------휴즈----------- 쇼트키다이오드-----------------------------
    ㅣ ㅣ ㅣ (플러스) ㅣ
    배터리 쇼트키다이오드 콘덴서
    ㅣ ◀ (플러스) ㅣ (마이너스)
    -------------------------------------------------------------------------
    (마이너스)


사용자 삽입 이미지


이번에 제작한 자외선 칫솔 살균 컨트롤 보드

20*68MM 사이즈

껌보다 작은 경이적인 치수!!

기능 UV LAMP On/Off
       건조용 FAN On/Off
       발열램프 On/Off
       각 기능등 Display LED 부착
       전원부  LED PWM 제어로 고품격(?)화
사용자 삽입 이미지
크리에이티브 커먼즈 라이센스
Creative Commons License
2011/12/26 01:07 2011/12/26 01:07

댓글을 달아 주세요

  1. 비밀방문자 2016/03/23 14:04  address  modify / delete  reply

    관리자만 볼 수 있는 댓글입니다.

<< previous 1 next >>