FPGA란??

2017. 1. 18. 20:58 from FPGA

개요

먼저 "FPGA(Field-programmable logic array)는 뭐지?"라는 물음에 대하여 그 원초적인 답을 찾아봅시다. 그 이름에서 나타나 있듯이 "프로그램 가능한 논리소자의 배열의 일종이다" 라고 할 수 있겠습니다. 그런데 "programmable"은 "프로그램 가능한"이고 "logic"은 "논리소자"를 의미하며, "array"는 "배열"을 의미하는데 "Field"의 의미가 그 답에서 보이지 않는 것 같습니다만, 실제로는 array에 그 의미가 포함되어 있습니다. 밭, 논같은 경작지를 생각해보면 넓은 평야(field)의 경우 바둑판처럼 규칙적인 구획을 가진 배열이지요. 가로 세로로 나누는 것은 사람들이 걸어다닐 수 있는 "둑"과 같은 것이고요. 즉 FPGA는 하나의 밭의 구역과 같은 로직블럭이 넓은 평야에 있는 밭처럼 규칙적, 반복적으로 배치되어 있으며, 그 각각의 로직 블럭을 둑의 길과 같이 가로 및 세로방향으로 연결선이 배치된 구조로, 외부에서 프로그램하여 로직블럭의 동작과 로직블럭간의 연결선을 임의로 배치하여 다양한 동작을 할 수 있도록 설계된 IC입니다.





그림 1에는 FPGA구조를 간단하게 도식화한 것입니다. 그림 1의 좌우로 쭉 연결된 구조가 FPGA의 구조입니다. 도식화한 바와 같이 밭의 구획같은 것이 로직 블럭이고 걷는 둑이 배선의 배치를 나타낸 것입니다. 그림 1에서 보이는 로직블럭을 Altera사에서는 LAB(Logic array block)이라고 하고 Xilinx 사에서는 Configurable logic block(CLB)라고 부릅니다. 비록 로직블럭의 내부 구조는 다르지만 사용자 입장에서는 동일하게 봐도 상관 없겠습니다.


* 오로지 Digital 논리 회로로 구성되어 있다고 생각하면 된다. 하지만 최근에는 편의를 위해서 다른 장치들도 조금씩 들어가고 있다.



Difference of Processor-based system

MCU같은 것들도 FPGA와 마찬가지로 reprogrammable 하다. 하지만 MCU는 사용가능한 코어 숫자에 처리할 수 있는 일이 제한 된다. 즉 병렬처리가 안된다는 뜻. Unlike processors, FPGAs are truly parallel in nature, so different processing operations do not have to compete for the same resources. Each independent processing task is assigned to a dedicated section of the chip, and can function autonomously without any influence from other logic blocks. As a result, the performance of one part of the application is not affected when you add more processing.


Figure 1. One of the benefits of FPGAs over processor-based systems is that the application logic is implemented in hardware circuits rather than executing on top of an OS, drivers, and application software. FPGA는 사용자들이 마음대로 칩 상에 논리회로를 구성하여 자신이 원하는 기능을 만들어 낼 수 있습니다. 마치 C 프로그래밍하는 것처럼 하드웨어를 프로그래밍할 수 있지요. 모든 소프트웨어알고리즘은 하드웨어로 구현할 수 있는데요. 하드웨어에서 구현된 알고리즘이 실행속도가 빠르므로 암호 알고리즘 같은 것을 FPGA로 구현해서 많이 사용합니다.(소프트웨어 알고리즘뿐만 아니라 CU, ALU, Memory, I/O etc 도 만들 수 있다)



Defining the Parts of an FPGA

Every FPGA chip is made up of a finite number of predefined resources with programmable interconnects to implement a reconfigurable digital circuit and I/O blocks to allow the circuit to access the outside world.



 FPGA resource specifications often include the number of configurable logic blocks, number of fixed function logic blocks such as multiplliers, and size of memory resources like embedded block RAM(BRAM) of the many FPGA chip parts, these are typically the most important when selecting and comparing FPGAs for a particular application.

The configurable logic blocks (CLBs) are the basic logic unit of an FPGA. Sometimes referred to as slices or logic cells, CLBs are made together, so it is important to understand flip-flops and LUTs. Various FPGA families differ in the way flip-flops and LUTs are packaged together, so it is important to understand flip-flops and LUTs.




참고

Overview : http://www.ntrexgo.com/archives/10172#comment-7507

Difference : http://blogspot.designonchip.com/2009/12/fpga-1.html



'FPGA' 카테고리의 다른 글

Embedded, F/W, MCU, FPGA 차이점  (1) 2017.01.17
Posted by 나무길 :

EEPROM과 Flash Memory 비교


EEPROM

EEPROM(Electrically Erasable PROM)은 On-Board 상태에서 사용자가 내용을 Byte 단위로 Read하거나 Write 할 수 있으므로 사실상 SRAM처럼 사용 할 수 있는 불휘발성 메모리이다. (NVRAM, Non-Volatile RAM이라고 부르기도 한다.) 그러나, 이것의 Read 동작은 Access동작이 다소 느릴지라도 SRAM과 유사하므로 별 문제가 없는데 비하여, Wirte 동작을 수행하는 경우에는 1byte를 write 할 때마다 수 ms이상의 시간 지연이 필요하므로 SRAM과 동일하게 사용할 수는 없다. 따라서 EEPROM은 실시간으로 사용되는 변수를 저장하는 메모리나 스택 메모리로는 사용될 수 없으며, 한번 내용을 저장하면 비교적 오랫동안 이를 기억하고 있으면서 주로 이를 읽어 사용하기만 하거나 전원을 꺼도 지워져서는 안되는 중요한 데이터를 백업하여 두어야 하는 설정값 저장용 메모리로 적합하다. 이 메모리 소자는 28Cxxx의 형태로 이름을 짓는 경우가 많다.



Flash memory

Flash memory는 On-board 상태에서 사용자가 내용을 Byte 단위로 자유로이 Read 할 수는 있지만, Write는 Page 또는 Sector 라고 불리는 Block 단위로만 수행 할 수 있는 변형된 EEPROM이다. 블록의 크기는 Memory 소자나 Maker에 따라 다르지만 대체로 64Byte, 128 Byte, 246Byte 등에서 부터 128KB까지도 사용한다. 이렇게 Flash Memory는 EEPROM과 매우 유사하지만, Byte단위로 Write하는 것이 불가능하므로 Page mode write 기능만 가지는 EEPROM이라고 생각하면 되며, 따라서 역시 SRAM처럼 실시간 Data memory로 사용하는 것은 불가능하다. 그러나, Flash memory는 EEPROM보다 Memory Cell 구조가 간단하여 훨씬 대용량의 메모리 소자를 만드는데 적합하며, 1개의 Block 전체를 Write하는데 수 ms 정도가 걸리므로 대용량 Data를 Write할 때는 EEPROM보다 훨씬 빠르다는 장점을 가진다.



그런데, Flash memory는 내부 구조에 따라서 NOR형 Flash와 NAND형 Flash memory로 나누 수 있다. NOR형 Flash는 다른 Memory 소자와 같이 외북 구자가 Address bus, Data bus, 그리고 몇가지의 제어신호 및 전원으로 되어 있어서 프로그램 저장용으로 널리 사용된다. NOR형 Flash memory는 대부분 29Cxxx 형태의 이름을 가지고 있다. 그러나, NAND형 Flash memory는 Address bus와 Data bus가 따로 있는 것이 아니고 8개(또는 16개)의 Data 신호와 몇 개의 제어신호 및 전원핀을 가지고 있다. 8개의 Data 신호선은 Address 및 제어명령을 Write하거나 Data값을 읽고 쓰는 용도로 사용된다. 이렇게 하면 Memory를 읽고 쓴느 동작은 좀 번거로워지지만 Memory 용량이 증가하더라도 핀 수가 늘어나지 않으므로 하드웨어 규격을 통일 할 수있어서 Flash memory를 마치 Hard disk처럼 사용하는 것이 가능하다. 특히, 요즈음에는 휴대용 기기를 염두해 두고 1.8[V]나 3.3[V]의 저전압에서 동작하는 수십 MB~ 수 GB짜리 대용량의 NAND형 Flash memory가 많이 개발되어 휴대용 통신기기, 디지털 카메라, MP3 Player, 이동형 USB Memory등과 같은 용도에 널리 사용되고 있다. 



위키백과 비교


Flash memory

플래시 메모리(flash memory, 문화어: 흘래쉬기억기, 전기일괄소거형기억기)는 전기적으로 데이터를 지우고 다시 기록할 수 있는 비휘발성 컴퓨터 기억 장치를 말한다. EEPROM과 다르게 여러 구역으로 구성된 블록 안에서 지우고 쓸 수 있다. 이제는 플래시 메모리의 가격이 EEPROM 보다 훨씬 싸기 때문에, 비휘발성 고체 상태(solid-state) 저장 매체가 상당량 필요한 곳에서는 가장 많이 사용되는 메모리 종류가 되었다.


대표적인 활용 예로 디지털 음악 재생기 (MP3), 디지털 카메라, 휴대 전화를 들 수 있다. 일반적인 데이터를 저장하고 컴퓨터 사이에 데이터를 옮기는 용도로 USB 드라이브를 많이 사용하는데, 이때도 플래시 메모리가 쓰인다. 또한 게임 자료를 저장하기 위해 EEPROM 대신 플래시 메모리가 자주 사용되고 있어 게임 시장에서도 인기를 얻고 있다.


EEPROM

UVEPROM이 자외선을 쏘며 내용을 지우는 반면 EEPROM은 전기적으로만 지울 수 있는 PROM으로 칩의 한 핀에 전기적 신호를 가해줌으로써 내부 데이터가 지워지게 되어 있는 롬이다. 데이터를 삭제하기 위한 전용 이레이저가 따로 필요하지 않으며 하나의 롬 라이터를 사용해서 쓰고 지울 수 있다. 그러나 EEPROM은 전기를 노출시킴으로써 한 번에 1 바이트씩만 지울 수 있기 때문에 플래시 메모리와 비교하면 매우 느리며 반복 기록 횟수에 제한이 있는데 약 10만 번 정도이다.


EEPROM은 모뎀이나 비디오 카드, 메인보드, SCSI 컨트롤러 등에서 사용된다. 모뎀의 경우에는 내부에 사용자가 AT명령을 통해서 설정한 상태가 전원을 껐다 켠 후에도 그대로 유지되는데. 이것은 EEPROM에서 그 상태를 저장해 놓기 때문이다. 대부분의 비디오카드, 메인보드, SCSI 컨트롤러 등에서 EEPROM을 사용해 점퍼없이 설정상태를 저장한다.


참고 : 위키백과, http://cafe309.daum.net/_c21_/bbs_search_read?grpid=9ys5&fldid=4dRh&datanum=860&contentval=&docid=9ys54dRh86020051207101240

'하드웨어' 카테고리의 다른 글

LUTs (Lookup Tables)  (0) 2017.01.18
Flip-Flops  (0) 2017.01.18
Slew rate 란?  (0) 2016.08.19
Tri-state (3상 상태) 란??  (0) 2016.08.19
Impedance(임피던스)란?  (0) 2016.08.19
Posted by 나무길 :

Embedded, F/W, MCU, FPGA 차이점

2017. 1. 17. 20:43 from FPGA

질문

안녕하십니까,

아날로그 회로 설계를 본 업무로, 2년정도 일을 했네요.

저의 업무는  회로도 작성(ORCAD) -> PCB artwork(PADS) -> 외주 PCB제작 -> FPGA 로직 설계(VHDL) 까지 였습니다.

하지만 새로운 프로젝트는  FPGA와 32bit MCU를 함께 사용한 보드를 제작해야 하고,

USB 3.0과  GTX , 보조로 Rs422 깢 ㅣ인터페이싱을 해야 하는 과제인데,,,

일단 저의 가장 큰 문제점은,,  개념을 잘 못잡고 있다는 것 입니다.

누군가 알려주면 곧바로 습득하여 그 일을 할 수 있고, 인터넷의 소스를 참고하여 응용또한 가능합니다.

어떻게든 원하는 시스템을 구축하게끔 만들 수는 있는데,  제가 뭘 하고 있는지 전체적인 그림이 그려지지 않네요..ㅠㅠ

더 시간이 지나 경력이 쌓이기전에, 일단 내가 하고 있는 분야가  큰 틀에서 어떤 부분인지 확실한 개념정립을 하고 싶어

여기에 글을 남기게 되었습니다.

질문은 아래와 같습니다.

 

 

1. Embedded 시스템이라는게  마이크로 컨트롤러 즉 MCU(ARM 계열 등등)를 사용하여 특정한 목적을 가지고 설계된 보드라고 알고 있는데,,, (만약 이게 아니라면 부연설명좀 부탁드리겠습니다.)

Spartan6 FPGA 하나와 PROM만으로  수많은 device들을 동작시키고, 원하는 시스템을 구축해보았는데...

FPGA 설계자로서, 왜 꼭 MCU로 설계해야하는지 이해가 가질 않습니다,,,

 

이 질문은 어찌보면,, C언어와 VHDL의 차이라고 볼수도 있나요? 전반적으로 이해가 가질 않습니다..

그냥 위에서 FPGA를 골라줘서 그걸로 VHDL로 짜라 하면 짤줄 알고,  MCU를 골라줘서  C언어로 짜라 하면 짤줄 아는데...



2. 펌웨어라는건  하드웨어 부팅시 최초로 구동되는 프로그램으로 알고 있습니다.

그걸 시행하기 위한 소스코드들은 PROM에 저장되어 있구요.

SW엔지니어 중에   펌웨어 엔지니어와, app 엔지니어의 차이가 무엇인지 잘 모르겠습니다..

둘다 C언어를 사용하여 어떠한 목적을 갖는 프로그램을 coding하는게 아닌가요??

 

 

 

3. 하드웨어와 소프트웨어라하면,, 하드웨어는 orcad, artwork, vhdl 코딩까지

소프트웨어는 dsp 보드나  mcu 보드를 동작을 제어하고,  firmware를 설계하고  OS와 커널 디바이스 부분을 건드리는 부분이라고 알고 잇습니다. 그런데 embedded라는 개념이 끼면,,, 뭔가 애매모호 해지네요,

 

제가 하고 있는 업무가 FPGA 기반으로 원하는 시스템을 구성하는건데 인터넷 검색결과 embedded는 거진 다  MCU로 시스템을 구성하더라구요,, 시스템의 심장(?)이라고 할 수 있는 FPGA와 MCU  각각 쓰임의 차이가 있나요?

 

1번 질문과 약간 겹치기도 하는 질문입니다만 ,, 답변 해주시면 감사하겠습니다.

 

 

가장 큰 질문은 위 3가지 인데,, 질문을 하면서도 헷갈리네요 ^^; 사회 초년생에게 고수님들께서 희망의 빗줄기를 내려주시길 기원하겠습니다..ㅠㅠ

 

 

 

꿈많은새


1. 일반적인 정의는 다음과 같습니다

http://ko.wikipedia.org/wiki/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C_%EC%8B%9C%EC%8A%A4%ED%85%9C


2. 간단히 애기하면 펌웨어는 H/W 초기화 및 드라이버 단을 작성합니다 

app 엔지니어는 그위에서 돌아가는 프로그램을 작성 하고요


3.완전히 하드웨어와 소프트웨어를 분리하기엔 조금 애매해지죠

---- 질문 하신것처럼 분리하면 소프트웨어 하시는 분도 하드웨어 하시는 분과 동일 내지는 그이상의 하드웨어 지식이 있어야 하드웨어 제어및 펌웨어를 할수 있읍니다

---- FPGA 는 특정 조건 에서 원하는 H/W 특성을 가진 형태의 MCU 를 설계하신다고 보시면 됩니다

---- 때로는 FPGA가 좋을수도 때로는 MCU 가 좋을 수도 있읍니다

 

  EmbededHAN

먼저 답변 진심으로 감사드립니다. 제가 이해가 완벽히 가지 않아,,, 추가 질문 몇가지 드려도 되겠습니까?


2. 펌웨어라는 정의를 따라간다면 FPGA칩으로 VHDL언어를 이용하면 동일한 구현을 할 수도 있는데, 왜 MCU를 이용해서 하는지..모르겠습니다.


3. 이번에 자동차 분야(전장품 설계)에 관심이 많아 이것저것 알아보았는데, 자동차의 전장품에는


모두 MCU로 동작한다고 하네요... FPGA를 사용하는곳은 없다고 하는데 그이유가 무엇인지 혹시 아시나요?? Spartan사의 FPGA로서도 충분히 CAN통신 구현이 가능하고 하드웨어 언어는 병렬식이어서 훨씬 더 빠른 타이밍도 나올 수 있을 뿐 아니라, 다양한 디바이스들과의 연동도 가능한데, 왜 MCU로써 모든 시스템을 구성하였는지 감이 잡히질 않습니다 


꿈많은새

EmbededHAN 2번이나 3번의 답변이 같은 내용이 될수도 있을것 같군요

제가 자동차 관련이 아니라 정확한 답변을 드릴수는 업겠으나 단가 및 성능 ,구매 용이성 에서 차이가 나지 않을까 추측해 봅니다


꿈많은새

EmbededHAN 우선 새 프로젝트에서 mcu 와 fpga 역활을 살펴 보세요 아마 일반적인 제어는 mcu가 하고 특수한 하드웨어 프로토콜을 fpga 가 처리해서 mcu로 보내는 형태 일갓 같군요


EmbededHAN

꿈많은새 예 맞습니다! 전체적인 시스템은 더 복잡하지만, 간단히 PC, display와의 인터페이스(USB와 HDMI) 및 모터제어는 MCU 타 보드들과의 LVDS 통신과 RS232 그리고 수신신호 DAC IC는 FPGA 로 하는데요, 대체 왜 이렇게 나눴을까..FPGA로도 다 할 수 있는데. 이걸 몰랐었던거였습니다 ㅠㅠ


저도 제가 궁금한걸 어떻게 질문해야하나 쓰면서도 몰랐는데 꿈많은새님이 제가 궁금한걸 쓸수 있게

만들어주시네요 ㅠㅠ 감사합니다!


세균맨

fpga보다 mcu가 싸기 때문?아닐까요?


EmbededHAN

저도 그런방향으로 생각해보았는데, 회사 선배님이 MCU와 FPGA가 각각의 쓰임이 존재한다는 말씀을 하셔서요 ㅠㅠ


람나라

2. 왜 MCU ? - 용도에 따라 다를 수도 있지만 동일한 기능을 구현할 수 있는 FPGA 와 MCU의 가격을 비교해보면 됩니다. 그 외에 개발의 연속성, 개발기간의 제약이라던지 다른 요인들도 있겠지요. MCU로 안되는 것은 FPGA로 합니다.

3. 이부분도 가격에 영향을 받지 않나 싶군요. 국내 모 자동차 회사에서는 원가를 낮춘다고 설계에 있는 나사도 몇개 안 박았다고 기사에 나왔었지요.


왜? 라는 질문은 타당할 수도 있지만 전체 그림을 보면 본인이 답을 찾을 수도 있습니다. 이유가 있으니 그렇게 하는 걸테니 말입니다.


EmbededHAN

답변 너무 감사 드립니다^^ 위 꿈많은 새님께도 여쭤본 것인데, 회사선배분이 아래와 같은 말씀을 하셨습니다... FPGA가 쓰임이 있는곳이 있꼬 MCU가 쓰임이 있는곳이 있기에, "이번 프로젝트는 하나의 보드에 FPGA와 32bit MCU가 모두 들어가야 된다." 라고 하셨꺼든요,, 그래서 위와 같은 질문을 드렸었씁니다 ^^;


천변만화

회사 선배분 의견이 맞습니다.

FPGA로 모두 구현 할 수 있다는 말은 일반적으로 FPGA 관련 경험이 적은 분들이 하는 표현입니다.

FPGA의 고충과 MCU의 편함을 모르는 것이죠. 비숫한 비유가 어셈블리어로 모두 구현이 가능한데 왜 C 언어를 사용하는가 하는 질문입니다.


동일 가격으로 FPGA로 구현 가능하고 MCU로 구현 가능하면 보통은 MCU가 답입니다.

아주 빠른 속도 처리가 필요하다면 구현의 불현함, 가격의 단점에도 불구하고 FPGA를 사용합니다.

정형화된 틀이 없는 하드웨어 인터페이스는 FPGA가 구현이 편합니다.

절대적인 가격 비교는 어렵지만 일반적으로 자동차에서 FPGA가 많이 사용되지 않는 이유는 가격 때문입니다. FPGA 가격을 커버하는 방법은 ASIC 칩을 만드는 것입니다. ASIC은 초기 투자 비용이 많이 들어가기 때문에 충분한 수량이 담보되어야 합니다.


FPGA로 아래 간단한 연산을 한번 해보세요.

쉽게 구현이 가능한가요?


예) 3.14159 * 480.829^3 / root(3)


MCU로 계산하면 어떨까요?


EmbededHAN

천변만화님 늦은밤 답변 너무 감사드립니다. 아... 아래 예제를 보니 이제좀 감히 잡힙니다. VHDL로,,, 소수점 연산을 하기위해 비트를 조정하고 divider 및 다양한 코어를 활용하여 리소스와 시간이 낭비되고,, 정확한 값이 나오지 않았던 경험이 있네요 ㅠㅠ 하지만 역시 천변만화님의 말씀대로 제가 아직 관련경험이 적은 초보자라서 FPGA의 고충과 MCU의 편함을 모르기에 저런질문을 한듯 싶네요 ^^;


아직 많은 걸 접해보지 않았지만 글이나 어떠한 자료나 예제같은을 접하여 확실한 느낌을 알고 난 후에,  경험을 쌓으려 하는데 경험을 쌓기전에 저러한 느낌들을 알 수 있는건 무리일까요???


  천변만화

EmbededHAN 오늘의 질문도 고민의 과정이구요. 많이 질문하고 고민하세요.

엔지니어는 항상 자신의 생각 반대편에서 스스로 모순이 없는지 질문할 수 있어야 합니다.

그리고 FPGA는 엄밀히 말하면 언어로 표현되지만 디지털 로직으로 구현되는 하드웨어입니다.

그렇기 때문에 하드웨어 인터페이스에서는 MCU보다 뛰어난 경우도 존재합니다.


EmbededHAN

천변만화 정말 감사합니다^^ 많은 도움되었습니다. 명일도 평일인데, 너무 늦게 주무시지 마시고 행복한 금요일 아침 맞이하십시오 ^^

'FPGA' 카테고리의 다른 글

FPGA란??  (0) 2017.01.18
Posted by 나무길 :