Vi điều khiển bắt đầu từ các họ 8051 rồi đến PIC, AVR và cao hơn nữa là họ ARM, AVR32 hay PSOC. Ngày nay, vi điều khiển phát triển vượt bậc bằng chứng là sự ra đời của công nghệ FPGA. Với công nghệ này chỉ phát huy sức mạnh tốt nhất khi được ghép nối với vi điều khiển hay nói cách khác công nghệ FPGA làm các vi điều khiển phát huy được hết khả năng của mình. Đó cũng là mục đích và tư tưởng thiết kế của Co – Desing.
Co – Desing kết hợp năng lực về phần cứng của FPGA với ưu thế xử lí phần mềm của vi điều khiển để tạo nên một hệ thống đầy sức mạnh .
Ví dụ: Ta muốn thiết kế một ứng dụng đo nhiệt độ phòng với cảm biến nhiệt có giao tiếp 12C. Nếu chỉ dùng MUC thông thường không có giao tiếp 12C thì sẽ gặp rất nhiều khó khăn (phải lập trình ngắt, bắt sườn, mức của xung, …). Nếu chỉ sử dụng FPGA trong ứng dụng này không ổn vì lúc đó sẽ gặp khó khăn nhất định trong các tính toán số học. Vì cảm biến đo nhiệt độ bằng đơn vị độ F, trong khi ta muốn hiển thị độ C, mà muốn thực hiện được các phép toán cộng, trừ, nhân, chia để chuyển đổi độ F với độ C bằng FPGA là không hề đơn giản.
Trong trường hợp này nếu ta thiết kế theo phương thức Co – Desing. FPGA phụ trách giao tiếp với cảm biến 12C và trả về các số liệu thô để MCU thực hiện các tính toán số học.
Vậy, tại sao không lấy một MCU có sẵn giao tiếp 12C hoặc nối một controlller 12C với MCU?
Câu trả lời là:
Nếu sau này ta tìm thấy một cảm biến khác tốt hơn, chính xác hơn nhưng lại là giao tiếp SPI hoặc CAN, lúc đó ta phải bỏ nhiều công sức để thay đổi nhiều thiết kế (thay một MCU khác có SPI, CAN hoặc thay controller khác) trong khi nếu sử dụng khả năng tùy biến phần cứng của FPGA, ta có thể cấu hình lại giao thức 12C thành SPI hay CAN,…
Tuyệt vời hơn nữa ta có thể lưu cấu hình của FPGA trong thẻ nhớ ngoài (MMC, Compact Flash) và MCU sẽ cấu hình lại FPGA ngay trong quá trình hoạt động mà không phải cần nạp lại trương trình.
Thậm chí nhiều FPGA còn có đặc tính cấu hình lại một phần của FPGA trong khi các phần khác vẫn hoạt động mà không cần phải reset lại FPGA.
Trong thực tế, có thể ghép nối FPGA với MCU ngoài bằng các chân giao tiếp thông thường. Một cách khác là sử dụng MCU nhúng có sẵn trong FPGA một hoặc nhiều MCU cứng hoặc mềm. Với Altera là Nios, Nios ll (MCU mềm) hay Excanlibur (MCU cứng với lõi ARM922T). Còn trong các FPGA của Xilinx là Picoblaze, Microblaze (MCU mềm) hay PowerPC (cứng). MCU cứng được thiết kế sẵn trong FPGA, còn MCU mềm thực chất là một IP thường bằng VHDL và công cụ thiết kế sẽ triển khai IP đó xuống FPGA.
Chính vì vậy MCU mềm sẽ tốn một phần tài nguyên của FPGA, nhưng bù lại nó có thể cập nhật, thay đổi tùy biến theo các phiên bản khác nhau.