Phân biệt vi điều khiển - CPLD - FPGA

tunglam

Sinh viên cao đẳng
#1
FPGA là gì?
FPGA là chip lô-gic số lập trình được. Nghĩa là bạn có thể sử dụng chúng để lập trình hầu hết các chức năng của bất cứ mạng số nào.
Các bước cơ bản khi chúng ta làm việc với FPGA là:
  • Dùng máy tính mô tả một chức năng lô-gic mong muốn. Tức là vẽ sơ đồ mạch chức năng rồi viết code mô tả chức năng đó.
  • Tổng hợp code sử dụng phần mềm được cung cấp bởi các nhà cung cấp FPGA như Quartus của Altera hoặc ISE của Xilinx.
  • Kết nối KIT nạp FPGA với máy tính, và KIT nạp FPGA với KIT FPGA và nạp file binary lên chip FPGA. Với KIT DE1, DE2, phần nạp đã được tích hợp sẵn.
Chú ý một số điểm sau:
  • Số lần nạp FPGA: không giới hạn.
  • Dữ liệu (chương trình) nạp trong FPGA bị mất khi ngừng cấp nguồn (mất điện) giống như RAM trong máy tính vậy. Như vậy, muỗn lần ngắt nguồn và bật lại thì ta phải nạp lại FPGA. Muốn lưu giữ lại chức năng đã lập trình cho FPGA thì ta phải mắc thêm ROM ngoài. ROM này có nhiệm vụ lưu file nạp binary và tự động nạp lại cho FPGA mỗi khi bật nguồn như vậy dù có ngắt nguồn FPGA vẫn “không bị mất” dữ liệu.
Nhà cung cấp FPGA là ai?
Hiện tại có hai công ty hàng đầu thế giới về các sản phẩm FPGA là XiLinx và Altera. Bên cạnh đó còn có Lattice, Actel, SiliconBlue

FPGA và CPLD là như nhau không?
FPGA và CPLD đều là linh kiện logic lập trình được nhưng chúng rất khác nhau. Những điểm khác biệt đó là:
FPGA và CPLD đều cấu tạo từ các cell-logic là sự kết hợp của một khối lo-gic và Flip-Flop. Nhưng, FPGA là linh kiện “fine-grain”, nghĩa là mật độ các cell logic lớn(lên đến cả trăm ngàn) vì kích thước các khối lô-gic nhỏ. CPLD là linh kiện "coarse-grain", nghĩa là mật độ các cell logic rất ít (xét trên cùng diện tích với FPGA) vì kích thước các khối lô-gic lớn.
FPGA giống như RAM, phải nạp lại mỗi khi bật nguồn. CPLD giống như EEPROM chỉ cần nạp một lần và không bị mất chức năng sau khi ngắt nguồn.
FPGA có nhiều tài nguyên định tuyến đặc biệt để thực hiện các chức năng toán học như các bộ đếm, bộ cộng, bộ so sánh, v.v… còn CPLD thì không.
Vi điều khiển khác với FPGA ở điểm nào?
FPGA có các phần tử lô-gic chạy theo dạng song song. Vi điều khiển dựa trên cấu trúc CPU thực thi theo mã lệnh theo dạng tuần tự.
FPGA dùng ngôn ngữ lập trình phần cứng (Verilog, VHDL) và lập trình trên FPGA gọi là lập trình phần cứng. Lập trình vi điều khiển gọi là lập trình phần mềm dựa trên phần cứng có sẵn.
Để thấy được sự khác nhau, Ta có ví dụ như sau. Ta có một chip FPGA, ta sử dụng ngôn ngữ Verilog hoặc VHDL để “viết” ra chức năng của một vi điều khiển. Biên dich và nạp phần thiết kế bằng Verilog hay VHDL này lên FPGA thì con FPGA sẽ như một con vi điều khiển và người lập trình ứng dụng có thể dùng ngôn ngữ như Assemble hay C để lập trình cho con “vi điều khiển FPGA” này như việc lập trình cho các con vi điểu khiển khác mua trên thị trường.
RAM nội
Trong các FPGA sau này đều có các khối RAM tĩnh được điều khiển bởi các thành phần lô-gic
1.jpg
​​

Block RAM - khối RAM trong FPGA​​
Xử lý của RAM nội
2.jpg
​​

Có rất nhiều thông số tác động lên xử lý của RAM nội. Thông số chính là “số tác nhân” có thể truy cập RAM cùng một lúc.
  • “single-port” RAM (RAM đơn port): chỉ một tác nhân có thể đọc/ghi RAM
  • “dual-port” RAM (RAM 2 port), “quad-port” RAM (RAM 4 port): Có hai/bốn tác nhân có thể đọc/ghi RAM. Mỗi tác nhân có thể sử dụng clock khác nhau, điều này rất quan trọng khi ta cần chuyển dữ liệu từ miền clock này sang miền clock kia.
Để tính xem có bao nhiêu tác nhân có thể truy cập RAM thì ta đếm số bus địa chỉ. Mỗi tác nhân có một bus địa chỉ riêng, một bus đọc dữ liệu và một bus ghi dữ liệu.
3.jpg

RAM 2 port (2 tác nhân truy cập)​​
​​
Việc ghi vào RAM luôn luôn được thực hiện đồng bộ. Việc đọc cũng vậy nhưng có đôi khi được thực hiện bất đồng bộ.

RAM khối (Blockram) và RAM phân bố (Distributed RAM)

Hiện tại có hai loại RAM nội trong FPGA là RAM khối và RAM phân bố. Kích thước RAM dùng để xác định loại được sử dụng.

Các khối RAM lớn gọi là “RAM khối”, nó được đặt trong các vùng chuyên biệt trong RAM. Mỗi FPGA có một số giới hạn loại RAM này và chúng chỉ có chức năng là RAM chứ không thể dùng cho bất cứ chức năng nào khác.

Các khối RAM nhỏ đặt trong các “RAM khối nhỏ hơn” (Altera) hoặc dưới dạng “RAM phân bố” (Xilinx). “RAM phân bố” cho phép dùng các logic-cell của FPGA như là các RAM cực nhỏ, loại RAM này phân bố linh động trong FPGA mà không gom chung trong một vùng (một logic-cell giống như một RAM cực nhỏ). Altera thì xây dựng các “RAM khối” với kích thước khác nhau đặt khắp trong lịn kiện nhưng độ linh động vẫn không bằng “RAM phân bố”.
FPGA có cấu tạo như thế nào​?
4.jpg
Các logic-cell
FPGA có cấu tạo từ các logic-cell. Về cơ bản một logic-cell gồm một bảng tra (LUT), một Flip-Flop và một mux 2 sang 1 (để có thể bỏ qua Flip-Flop nếu muốn). Một LUT giống như một RAM nhỏ có thể thực thi một chức năng lô-gic nào đó và LUT có các ngõ vào (input). Ví dụ như hình minh họa là 4 ngõ vào.
5.jpg
Kết nối logic-cell (Interconnect)
Các logic-cell được kết nối với nhau thông qua các “tài nguyên liên kết”, là các dây nối và mux được đặt xung quanh logic-cell. Mỗi logic-cell có thể nhỏ nhưng có rất nhiều các kết nối đến chúng để có thể tạo ra các chức năng lô-gic phức tạp.
6.jpg
Các IO-cell
Các dây nối còn được đưa đến biên của linh kiện. Biên linh kiện có đặt các IO-cell để kết nối ra các chân của FPGA.
7.jpg
Các chuỗi nhớ và định tuyến chuyên dụng (Dedicated routing/carry chains)
Bên cạnh các kết nối thông thường thì các “tài nguyên kết nối đa năng” cũng được thêm vào. Trong FPGA, các logic-cell liền kề nhau có các đường kết nối nhanh chuyên dụng (fast dedicated lines). Loại đường nhanh chuyên dụng phổ biến nhất là “chuỗi nhớ” (carry chains). Chuỗi nhớ cho phép tạo các chức năng toán học (như bộ đếm và bộ cộng) rất hiệu quả với tài nguyên logic thấp và tốc độ xử lý cao.
8.jpg
Với các công nghệ thấp hơn như PAL hay CPLD thì không có các “chuỗi nhớ” này vì vậy tốc độ bị giới hạn khi các xử lý toán học được yêu cầu.
 

dangsonbk

I'm aimin' right at you!
Thành viên BQT
#2
Mình thấy bài này viết trọng tâm giới thiệu về FPGA chứ không phải là phân biệt cho lắm.
 

Mai Anh Đức

Moderator
Thành viên BQT
#4
Về cấu trúc, vi điều khiển có cấu trúc phức tạp hơn FPGA rất nhiều. Tuy nhiên, vi điều khiển có một bộ quy tắc cố định mà những người lập trình phải học để có thể tạo ra chương trình thích hợp còn FPGA thì không, nó như một mạng lưới không chứa bất kỳ khối logic cứng nào, mỗi đường giao nhau trên mạng lưới ấy như chứa một "công tắc" nhiệm vụ của người lập trình là đóng mở nó để tạo ra các cách kết nối mỗi khối logic với nhau. Ngôn ngữ mô tả phần cứng (HDL) được sử dụng cho FPGA, nó như cách để người lập trình lắp ráp các khối logic với nhau theo một cách cụ thể nào đó mà ta gọi là thiết kế mạch. Với FPGA, khi lập trình chính là quá trình thiết kế mạch. Với VĐK, khi lập trình là thiết kế ứng dụng. HDL được nhiều người đánh giá là cũng khó nắm bắt như Assembly vậy.
Mặt khác, ngày nay điện tử và các linh kiện bán dẫn đã phát triển và trở nên rẻ hơn. Vi điều khiển hoàn toàn có thể được sử dụng để làm công việc của một chip FPGA, FPGA thì hoàn toàn có thể trở thành một VĐK hoặc có thể trở thành một cổng logic đơn nhất. Cũng có rất nhiều ứng dụng kết hợp ưu điểm của cả 2 để trở nên hoàn hảo hơn.
Tuy nhiên, so với VĐK, FPGA tốn nhiều năng lượng hơn. Để xây dựng FPGA cho một ứng dụng cụ thể cũng tốn khá nhiều thời gian và công sức do phải cấu hình mọi thứ lại từ đầu, còn với VĐK, mọi thứ gần như đã có sẵn, bạn chỉ việc viết nó theo một thuật ngữ nào đó để có được một ứng dụng cụ thể, khá nhanh và không tốn kém. Do vậy, với những hệ thống phức tạp nhưng không cần thiết phải sản xuất với quy mô lớn, số lượng không cần phải nhiều thì FPGA tỏ ra vượt trội, khi nhu cầu và quy mô tăng cao, VĐK lúc này được sản xuất như những ASIC (IC chuyên dụng) để trở nên rẻ hơn, chi phí thấp hơn...
 
#5
xin chào các bạn!

mình cũng làm về vi điều khiển và FPGA cũng khá nhiều, mỗi dòng đều có 1 ưu nhược điểm riêng. nên chúng vẫn còn sống khỏe được. mình so sánh 1 chút nhé.
1. về cấu hình:
- Vi điều khiển hiện nay thì đã được hỗ trợ nhiều phần cứng chuyên biệt để xử lý các ngoại vi (USB, SPI, UART, RAM, MMU, Ethenet......) ngoài Core chính ra thì chúng còn được tích hợp thêm các khối DMA (Direct Memory Access) để tăng hiệu năng xử lý. mấy con đời thấp thì RAM và ROM được tích hợp trong chip, mấy con đời cao thì có thể dùng RAM ROM ngoài.

- FPGA hiện nay cũng hỗ trợ rất nhiều các IP (các khối chức năng có sẵn) chuyên biệt và nhiều hơn cả VĐK, nó có thể tùy biến nhiều hơn nữa, riêng điểm này FPGA ăn đứt VĐK (chỉ có điều FPGA khá đắt).
2. lập trình:
- Vi điều khiển thường được lập trình trên C..., nếu nhúng HDH thì cũng có các tác vụ đa luồng, nhưng có giới hạn số luồng thực thi. có thể kể đến RT-OS, UC-OS... các chức năng có thể đủ dùng và vẫn rất ổn. hướng lập trình của VĐK là tuần tự, có nghĩa là làm xong công việc A rồi B và C.
- FGPA hiện giờ được lập trình trên Verilog và VHDL, có 2 hãng nổi tiếng là Xilinx và Altera. chúng ta có thể sử dụng các IP đặc thù và cấu hình chức năng cho nó hoặc tạo ra một chức năng mới. điểm nổi bật của FPGA là thực hiện song song tức là làm cả A B C cùng lúc.
3. mục đích sử dụng
- Vi điều khiển: thực hiện các ứng dụng tốc độ thấp, không yêu cầu cao về đồng bộ, tốc độ xử lý hoặc có thể chấp nhận là thời gian thực.
- FPGA: thực hiện các ứng dụng tốc độ rất cao và khắt khe về đồng bộ, tốc độ thời gian thực.
mình ví dụ nhé: cần điều khiển 1 dàn led quảng cáo thì chỉ cần dùng bo mạch của minh hà là đủ, nó dùng Atmega8. nhưng nếu dùng 1 màn hình LED Full color hoặc module P10 hì phải dùng bo trung quốc, trong đó nó có 1 con FPGA điều khiển.
- khi xử lý toán học thì FPGA có các khối IP riêng thực thi nên không có giới hạn nào cho FPGA cả, chỉ có điều mình cần cung cấp đủ phần cứng cho nó thôi.
4. tình trạng hiện nay
- vi điều khiển: ngày càng phức tạp và nhiều chức năng hơn, nhưng tốc độ đáp ứng vẫn chưa bằng FPGA.
- FPGA: ngày càng nhanh và mạnh, tốc độ càng cao, hỗ trợ nhiều IP (các khối chức năng như USB, RAM, SPI, USART, DMA, HSMC, FMC, VGA, HDMI.....). một số dòng FPGA còn được tích hợp thêm lõi ARM cortex A9 nữa nên sức mạnh được tăng thêm rất nhiều lần.

sơ đồ của STM32F10x
upload_2018-4-26_11-26-32.png

sơ đồ của FPGA - Xilinx ZYNQ 7000
 

Quảng cáo Google