Tại Sao Lại Sử Dụng FPGA ? Cấu Trúc FPGA Như Thế Nào ?

FPGA là viết tắt của thuật ngữ tiếng anh “Field Programmable Gate Array“, nếu được dịch sang tiếng việt là một loại vi mạch dùng cấu trúc mảng phần tử logic có thể lập trình được. Hay có thể hiểu nôm na nó là một loại chip trắng cho phép người dùng có thể tái cấu hình lại kiến trúc theo ý người dùng để thực thi một chức năng cụ thể.

Để dễ hình dung hơn, nếu như những ai đã biết về lập trình vi điều khiển hoặc ARM, thì những vi điều khiển này như (AT89/PIC/MSP430, …) hoặc ARM SoC (STM32, …) đều là loại chip được thiết kế trên công nghệ ASIC, tức kiến trúc phần cứng do nhà sản xuất thiết kế được cố định trong quá trình sản xuất, người dùng không thể nào thay đổi hoặc chỉnh sửa được. Người kĩ sư lập trình ứng dụng hoặc lập trình firmware đều phải nghiên cứu nắm vững kiến trúc của từng loại VĐK trên để phát triển phần mềm, giải thuật tương ứng. Do đó, lập trình vi điều khiển còn được hiểu là lập trình phần mềm dựa trên phần cứng có sẵn. Còn đối với FPGA, người dùng có thể tự thiết kế lại kiến trúc phần cứng theo ý mình muốn, kèm theo xây dựng các driver tương ứng để phát triển các phần mềm ứng dụng và giải thuất tối ưu hơn.

Như vậy, ưu điểm thứ nhất của FPGA là tính linh động đối với người dùng, giúp phát triển các giải pháp tốt hơn mà không phụ thuộc vào phần cứng của nhà sản xuất. Chúng ta có thể sử dụng FPGA để thiết kế cũng như lập trình được hầu hết các chức năng của bất kì mạng số nào. Việc so sánh ưu điểm, khuyết điểm giữa công nghệ FPGA và ASIC sẽ được thảo luận trong các chuyên mục sau.

 

Cũng giống như vi điều khiển, số lần nạp FPGA hầu như không giới hạn. Dữ liệu (chương trình) nạp cho FPGA sẽ bị mất khi mất nguồn (điện) giống như RAM trong máy tính. Nếu muốn lưu giữ lại file nạp này thì cần phải có một bộ nhớ ngoài Flash/ROM(do đặc tính của loại bộ nhớ này là lưu dữ liệu cho dù có mất nguồn) để mỗi lần bật nguồn, file dạng binary sẽ tự động nạp lại vào FPGA.

Lịch sử FPGA

FPGA được thiết kế đầu tiên bởi Ross Freeman, người sáng lập công ty Xilinx vào năm 1984. Tiền thân trước đó của FPGA chính là CPLD. CPLD được cấu trúc từ số lượng nhất định các khối SPLD (Simple programmable devices, thuật ngữ chung chỉ PAL, PLA). SPLD thường là một mảng logic AND/OR lập trình được có kích thước xác định và chứa một số lượng hạn chế các phần tử nhớ đồng bộ (clocked register). Cấu trúc này hạn chế khả năng thực hiện những hàm phức tạp và hiệu suất không cao.

Kiến trúc của FPGA là kiến trúc mảng các khối logic, FPGA có khả năng chứa tới từ 100.000 đến hàng vài tỷ cổng logic, trong khi CPLD chỉ chứa từ 10.000 đến 100.000 cổng logic. Một điểm khác biệt với CPLD là trong những FPGA hiện đại được tích hợp nhiều những bộ logic số học đã sơ bộ tối ưu hóa, hỗ trợ RAM, ROM, tốc độ cao, hay các bộ nhân cộng(multiplication and accumulation, MAC), thuật ngữ tiếng Anh là DSP slice dùng cho những ứng dụng xử lý tín hiệu số DSP.

Ngoài khả năng tái cấu trúc vi mạch toàn cục, một số FPGA hiện đại còn hỗ trợ tái cấu trúc cục bộ, tức là khả năng tái cấu trúc một bộ phận riêng lẻ (partial configuration) trong khi vẫn đảm bảo hoạt động bình thường cho các bộ phận khác.

Tại sao sử dụng FPGA ?

Ắt hẳn khi tìm hiểu về một công nghệ, chúng ta sẽ thắc mắc rằng vì sao lại phải sử dụng FPGA trong khi đã có MCU/CPU/DSP rất mạnh, những ứng dụng/trường hợp nào phải cần đến FPGA mới giải quyết được. Để trả lời được những câu hỏi này, chúng ta cần phải tìm hiểu sâu hơn về cấu tạo kiến trúc FPGA, quy trình thiết kế như thế nào, những kiến thức chuyên sâu về các ứng dụng khác nhau, đó là những gì sẽ được thảo luận ở phần sau và các chuyên mục khác. Tuy nhiên, phần này mình muốn giải thích và nhấn mạnh ý nghĩa vai trò quan trọng của FPGA trong thiết kế hệ thống số để các bạn có động lực, hứng thú khi tìm hiểu về FPGA.

 

Thứ nhất, do FPGA có kiến trúc mảng phần tử logic nên có thể thực thi song song. So với vi điều khiển hoặc CPU phải thực thi mã lệnh theo dạng tuần tự. Như vậy với FPGA, chúng ta có thể tăng hiệu suất/năng suất xử lý của hệ thống, hoặc những ứng dụng đòi hỏi phải xử lý tốc độ cao hoặc dùng trong các hệ thống làm việc theo thời gian thực.

Thứ hai, vì có thể cấu hình, lập trình lại được, nên FPGA dễ dàng mở rộng các ngoại vi cũng như giao tiếp với nhiều thiết bị hơn mà các MCU hoặc ASIC lại hạn chế về điểm này.

Thứ ba, nhìn chung ASIC/ASSP có hiệu suất cao hơn nếu xét về mặt tiêu thụ công suất và số lượng cổng. Nhưng nếu chỉ cần thực thi một chức năng nhỏ nào đó, một chip ASIC/ASSP có thể đòi hỏi công suất tiêu thụ lớn hơn và nhiều cổng hơn thực tế yêu cầu. Với FPGA, firmware có thể xác định được “kích cỡ” của ứng dụng, từ đó giảm số cổng và công suất cần tiêu thụ.

Thứ tư, nếu xét về giá thành, FPGA không thể nào so sánh được với ASIC hay SoC, nhưng bù lại, với khả năng tái cấu hình kiến trúc, FPGA đóng vài trò vô cùng to lớn trong việc giảm giá thành và thời gian chế tạo ASIC. Để rõ hơn, chúng ta cần phải biết quy trình thiết kế của hai công nghệ này. FPGA và ASIC đều phải trải qua hai giai đoạn: Front End (ý tưởng, thiết kế ở mức logic sử dụng các ngôn ngữ mô tả phần cứng, kiểm tra mô phỏng bằng phần mềm, …) và Back End (kiểm tra timing đảm bảo thiết kế sẽ hoạt động ở tần số yêu cầu, layout chip, …). Ở khâu backend này, với FPGA, các giai đoạn sẽ được làm tự động bằng phần mềm của nhà sản xuất FPGA và tạo ra 1 file bitstream để nạp xuống FPGA và chạy thử nghiệm. Còn với ASIC, thì back end cần tốn nhân lực và thời gian lâu hơn. Sau đó, toàn bộ thiết kế đó được gửi tới nhà máy sản xuất chip (vd như Intel, TSMC, …) để làm ra chip mẫu với giá thành vài triệu đô la. Tiếp đến là quá trình test chip trong môi trường thực, nếu thất bại thì phải thực hiện lại từ đầu như qui trình trên và vài triệu đô trước đó xem như vứt sọt rác. Nhưng với FPGA, không những giúp rút ngắn thời gian mà còn giảm tối đa chi phí nghiên cứu, thiết kế có thể thử nghiệm trực tiếp trên FPGA gần với môi trường ASIC thực nhất. Khả năng tái cấu hình cho phép bạn sửa đi sửa lại thiết kế cho đến khi đạt yêu cầu mà không tốn một xu nào cho nhà sản xuất chip.

Các ứng dụng FPGA:

 

-ASIC Prototyping

-5G Wireless (không dây 5G)

-Wired Communication (Ethernet, router, switch, …)

-Automotive (xe hơi)

-Aerospace & Defense (hàng không, vũ trụ, quân sự)

-Embedded Vision (xử lý ảnh, video)

-DSP (xử lý tín hiệu số)

-Medical (các hệ thống y sinh)

-Test & Measurement (thiết bị kiểm tra và đo lường)

-Industrial IoT (IoT công nghiệp)

Cấu trúc FPGA

Kiến trúc cơ bản của FPGA gồm 3 thành phần chính sau: Khối I/O (hay gọi là Pad hoặc các pin FPGA), Khối kết nối (Interconnection/Switch Matrix), các Khối logic cấu hình (CLB – Configurable Logic Blocks). Các khối CLB được tổ chức sắp xếp theo mảng theo 2 hướng dọc và ngang như hình dưới đây

Chức năng của mỗi thành phần như sau:

Khối CLB: thực thi các chức năng logic, cung cấp các tính toán và phần tử nhớ cơ bản được sử dụng trong hệ thống số. CLBs là phần tử cơ bản cấu thành FPGA, là nguồn tài nguyên logic chính tạo nên các mạch logic đồng bộ lẫn không đồng bộ. Một CLB cơ bản gồm một mạch tổ hợp có thể lập trình (còn gọi là LUT), một Flip-Flop hoặc một chốt (latch).  LUT(Look up table) là khối logic có thể thực hiện bất kì hàm logic nào từ 4 đầu vào (số đầu vào này sẽ tùy thuộc vào từng dòng chip của mỗi hãng và sẽ được thảo luận chi tiết trong bài viết khác), kết quả của hàm này tùy vào mục đích mà gửi ra ngoài khối logic trực tiếp hay thông qua phần tử nhớ flip-flop. Ngoài khối logic cơ bản đó, nhiều Chip FPGA hiện nay gồm một hỗn hợp các khối khác nhau, một số trong đó chỉ được dùng cho các chức năng cụ thể, chẳng hạn như các khối bộ nhớ chuyên dụng, các bộ nhân (multipliers) hoặc các bộ ghép kênh (multiplexers). Tất nhiên, cấu hình bộ nhớ được sử dụng trên tất cả các khối logic để điều khiển các chức năng cụ thể của mỗi phần tử bên trong khối đó.

FPGA Logic Block

Khối kết nối: dùng để liên kết các khối logic và I/O lại với nhau để tạo thành một thiết kế hoàn chỉnh. Mạng liên kết trong FPGA được cấu thành từ các đường kết nối theo hai phương ngang và đứng, tùy theo từng loại FPGA mà các đường kết nối được chia thành các nhóm khác nhau. Các đường kết nối được nối với nhau thông qua các khối chuyển mạch lập trình được (programmable switch), trong một khối chuyển mạch chứa một số lượng nút chuyển lập trình được đảm bảo cho các dạng liên kết phức tạp khác nhau.

FPGA Interconnect

Khối I/O: cung cấp giao tiếp giữa các khối logic và kiến trúc định tuyến đến các thành phần bên ngoài. Một trong những vấn đề quan trọng nhất trong thiết kế kiến trúc I/O là việc lựa chọn các tiêu chuẩn điện áp cung cấp và điện áp tham chiếu sẽ được hỗ trợ. Số lượng Pin (I/O) của FPGA tương đối lớn, thường được chia ra làm 2 loại: User Pin(chân người dùng), Dedicated Pin (chân chuyên dụng).

-User Pin: người dùng có thể lập trình như đầu vào, đầu ra hoặc cả đầu vào – ra. Mỗi pin được kết nối với một “IO Cell” bên trong FPGA, được cấp bởi các chân VCCIO (IO power pin).

-Dedicated Pin: được mã hóa cứng với một chức năng cụ thể.

+Power Pin

+Configuration Pin: các pin để cấu hình FPGA

+Dedicated input, hay Clock Pin: điều khiển mạng lưới clock bên trong FPGA.

+Voltage IO: cấp nguồn cho các cổng logic và flip-flops bên trong FPGA.

Theo thời gian, các kiến trúc FPGA cơ bản đã được phát triển hơn nữa thông qua việc bổ sung các khối chức năng đặc biệt có thể lập trình, như bộ nhớ trong (Block RAMs), logic số học (ALU), bộ nhân, DSP-48 và thậm chí là bộ vi xử lý nhúng được thêm vào do nhu cầu của các nguồn tài nguyên cho một ứng dụng. Kết quả là nhiều FPGA ngày nay có nhiều nguồn tài nguyên hơn so với các FPGA trước đó.

Các nhà sản xuất FPGA & thị phần

Trên thế giới, hiện nay, có thể kể đến tên của một số hãng FPGA như: Xilinx, Intel (Altera – được mua lại bởi Intel năm 2015), Microsemi (Actel), Lattice (Europe), Quick Logic, … Thị phần của các hãng được cập nhật trong hình sau.

 

 Nguồn: FPGAVN.COM

Bạn Có Đam Mê Với Vi Mạch hay Nhúng      -     Bạn Muốn Trau Dồi Thêm Kĩ Năng

Mong Muốn Có Thêm Cơ Hội Trong Công Việc

    Và Trở Thành Một Người Có Giá Trị Hơn

Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được ChúngHãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON   

Hotline: 0972.800.931 - 0938.838.404 (Mr Long)

Từ khóa » Fpga Là Gì