Bạn đã làm quen với hệ thống nhúng (embedded system) bắt đầu từ các họ Vi điều khiển 8051 rồi đến PIC, AVR và cao hơn nữa là họ ARM, AVR32 hay pSoC. Rồi bạn tìm hiểu FPGA với một cách tiếp cận hoàn toàn khác. Vậy bao nhiêu công sức, kinh nghiệm về vi điều khiển và cả những công trình nghiên cứu của bạn bị xếp xó ? Bạn không phải lo lắng, thực ra FPGA chỉ phát huy sức mạnh của nó khi được ghép nối với vi điều khiển. Đó cũng chính là mục đích và tư tưởng thiết kế của co-design.
Co-design 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ụ bạn 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 I2C. Nếu bạn chỉ dùng MCU thông thường không có giao tiếp I2C 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,...). Còn nếu bạn chỉ sử dụng FPGA trong ứng dụng này cũng không ổn vì lúc đó bạn sẽ gặp khó khăn nhất định trong các tính toán số học. Ví dụ cảm biến đo nhiệt độ bằng đơn vị độ F, trong khi bạn muốn hiển thị độ C, mà muốn thực hiện 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 ta thiết kế theo phương thức co-design. FPGA phụ trách giao tiếp với cảm biến I2C và trả về các số liệu thô để MCU thực hiện các tính toán số học.
Đến đây không ít người băn khoăn, tại sao không lấy một MCU có sẵn giao tiếp I2C hoặc nối một controlller I2C với MCU? Câu trả lời là nếu sau này bạn 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 đó bạn phải bỏ nhiều công sức vào đó để thay đổi 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 tuỳ biến phần cứng của FPGA, bạn có thể cấu hình lại giao thức I2C thành SPI hay CAN,... Tuyệt vời hơn nữa là bạn 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à bạn không cần phải nạp lại chương trình. Thậm chí nhiều FPGA còn có đặt 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ế, bạn 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 II (MCU mềm) hay Excalibur (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ế cứng 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ẽ tiêu tốn một phần tài nguyên của FPGA, nhưng bù lại nó có thể được cập nhật, thay đổi tuỳ biến theo các phiên bản khác nhau.
Bạn yên tâm là các lõi MCU Nios hay Microblaze, PowerPC khá thông dụng nên bạn có thể tìm thấy các hỗ trợ khá dễ dàng, chẳng hạn bạn muốn nhét một lõi RTOS vào trong một core MCU Nios II hoặc Microblaze thì bạn có thể dễ dàng tìm thấy port cho các MCU này.
Hùng Mạnh
Bình luận
FPGA quá cool, thực ra sức mạnh của FPGA là rất lớn nếu chúng ra biết tận dụng và khai thác[img][/img]
FPGA có rất nhiều cách tiếp cận. Có thể xem nó như là một mạch logic tổ hợp sẵn và thiết kế các mạch số (bộ đếm, than h ghi,...) cái khác là chúng ta không phải hàn mạch từ các IC số mà công cụ FPGA đã làm sẵn cho chúng ta. Cũng có thể tự tạo một core MCU của riêng mình (AVR, 8051, PIC, ) rồi nhúng xuống FPGA, tất nhiên phải bỏ vào đấy không ít công sức.
1
Tại sao không sử dụng lõi MCU nhúng vào FPGA luôn. Lúc này FPGA trở thành tổ hợp của MCU và giao tiếp I2C hoặc CAN luôn. Tôi nghĩ đây mới là thế mạnh của FPGA. Một số core AVR, 8051, PIC đều là opencore, có thể download miễn phí trên mạng. Thay vì mất công sức tạo 1 core MCU, ta hãy sử dụng nó cho một ứng dụng có hơn không?
Trong bài mình có nói đến Nios 2, MicroBlaze hay PowerPC, đó đều là các core nhúng sẵn trong FPGA đấy chứ. Để nhúng 1 cái core MCU vào FPGA cũng không phải nhắm mắt làm được ngay. Sắp tới mình sẽ viết một bài nói rõ quy trình để implement 1 core MCU (AVR, ARM, ...) xuống FPGA. Một vấn đề nữa là nếu cấu hình của FPGA lưu ở bộ nhớ ngoài và muốn không cần nạp lại FPGA qua JTAG thì NIOS chịu không thể làm gì được. Cái này chỉ có Microblaze hay PowerPC trong dòng Virtex của Xilinx mới làm được.
cảm ơn
nội dung này hay đấy. Bạn Hùng Mạnh viết tiếp đi để anh em còn học tập. Thanks a lot!
Trong dòng Virtex có tính năng DPR, nghĩa là thay đổi một phần của FPGA mà không động đến các phần khác.
Mời xem bài này để biết rõ hơn. http://bit.ly/aE07bL
Với DPR thì ta có thể dùng chính PowerPC hay MicroBlaze điều khiển quá trình tái cấu hình một phần của FPGA. MCU sẽ đọc bộ nhớ ngoài chứa file cấu hình và thực hiện quá trình cấu hình một phần của FPGA trong khi phần của Microblaze hay PowerPC không bị đụng chạm và vẫn hoạt động trong quá trình reconfiguration
vài ý kiến nhỏ
[i]"Một vấn đề nữa là nếu cấu hình của FPGA lưu ở bộ nhớ ngoài và muốn không cần nạp lại FPGA qua JTAG thì NIOS chịu không thể làm gì được. Cái này chỉ có Microblaze hay PowerPC trong dòng Virtex của Xilinx mới làm được."[/i]
->điều này thì mình xin có ý kiến như sau, Xilĩn thì mình không dùng nhiều nhưng với Altera (NIOS) sử dụng phương pháp đó là lưu file cấu hình lên bộ nhớ FLASH, và bất cứ khi nào POWER ON file cấu hình sẽ được đọc và nạp cấu hình vào FPGA.
Thân chào
Ngô Gia Thuyết
Điều này đúng, nhưng đấy là đối với những cấu hình đã được từ trước, và hình như chỉ lưu được 1 cấu hình(không chắc lắm). Bạn có thể xem bài giới thiệu về DPR của mình thì sẽ hiểu rõ hơn điều mình định muốn nói.
article/2469
Với MicroBlaze thì có thể lưu bitstream ở compactflash hoặc bất kỳ bộ nhớ ngoài nào, có thể cắm vào cardreader để nạp [b]nhiều[/b] file bitstream.
Ngoài điều này ra thì Nios và MicroBlaze không khác nhau nhiều lắm. (Mới biết là Nios cũng có thể làm multiprocessor system).
MicroBlaze mới version 7 có MMU, không biết Nios có chưa.
Nhưng nói chung dân tình vẫn biết đến NIOS nhiều hơn rất nhiều so với MicroBlaze.
Help me
Cho minh hoi mot van de duoc khong?
Minh bat dau nghien cuu EDK, sau khi thiet ke cac giao tiep hoan thanh thi cong viec chu yeu la phai lap trinh bang ngon ngu C cho loi MCU nhung trong FPGA phai khong?
Đúng thế, đến giai đoạn này thì giống như thiết kế MCU thông thường rồi.
Thanks Manh Hung!
Ban co the cho minh mot project ve truyền uart su dung edk duoc khong?
Cam on rat nhieu!
email cua minh la: [email protected]
Bạn dùng EDK version nào? Vấn đề là các version từ 9.1i trở về trước thì bus nối ngoại vi với core MCU là OPB còn bắt đầu từ version 9.2i thì Xilinx dùng bus PLBv4.6 để làm bus giao tiếp. Thông thường UART là cái cơ bản và được tích hợp sẵn transceiver trên kit. Transceiver chỉ làm nhiệm vụ chuyển đổi mức điện áp logic giữa cổng RS232 với TTL hoặc LVTTL (hoặc một cái gì khác). Bạn cho mình cái tên của kit, mình sẽ tìm (thiết kế) cho bạn 1 reference design có application của UART trong đó.
Minh cam on ban truoc nhe!
Hien tai minh dang thu nghiem tren spartan3 starter kit, minh dang dung phien ban EDK 7.1i
Hien nay minh dang ve FPGA, minh chu yeu viet tren VHDL. Bay gio tiep can voi he thong nhung.
Ban co hay viet code vhdl khong? Neu co the, khi nao ban co thoi gian minh co the trao doi duoc khong?
So sánh với DSP thì hợp lý hơn.
Người ta không bao giờ so sánh FPGA với MCU vì phạm vi ứng dụng và khả năng tính toán hoàn toàn khác biệt nhau (thị trường khác nhau).
FPGA chỉ thường được so sánh với DSP mà thôi. Và lúc này, khi so sánh về năng lực tính toán và mức tiêu thụ điện năng.... FPGA tốt vẫn thua thiệt so với các dòng DSP tốt.
DSP mang tính specific nhiều hơn. Còn MCU và FPGA thì đa năng hơn. Do đó so sánh với DSP mình thấy ko hợp lý. còn nều so sánh về sức mạnh, khả năng tính toán thì ASIC "vô đối", nhưng liệu những người như mình có thể động vào được ASIC ko?
Thiết kế Soc
Anh Hùng Mạnh thân mến.
Tôi có quan tâm về lĩnh vực nhúng và hiện có kết hoạch làm một Soc có chức năng chuyển đổi giữa ATA và NANDFlash. Anh Hùng có thể cho biết email để tôi tiện liên lạc nhé.
Rất mong hỗ trợ của Anh
Thân
Trọng Tuấn
help me!
Chao anh Hung
Toi dang su dung spartan-3e Starter Kit de thiet ke 10/100 Ethernet MAC anh co the tu van giup toi hoac tim giup toi file co the thuc hien duoc nhiem vu cua minh co duoc khong. Toi dang lam do an tot nghiep dung FPGA cua Xilinx.
Cam on anh !
@ Bạn Pham Thi Ly: Nếu bạn chỉ làm hardware với core HDL thông thường, trên opencores.org có rất nhiều. bản thân xilinx cũng có core HDL, http://bit.ly/cjB7KA (bạn phải đăng ký, mình kô biết là free hay $)
Còn nếu bạn muốn thiết kế embedded nối core với MicroBlaze hoặc PowerPC: http://bit.ly/des2HU
http://bit.ly/cyq5HS
Ngoài ra đây là luồng thảo luận trên diễn đàn của Xilinx: http://bit.ly/9xKSul
PS: Xin lỗi mọi người, tên mình là Hùng Mạnh, không phải Hùng.
Hi!
Cam on anh Hung Manh. Toi cung da lay duoc nhieu file support cho thiet ke cua minh nhung chu yeu la dung cho ML40x. Toi rat ban khoan khong hieu la thiet ke dung cho ml40x thi co the ap dung nhu cho spartan 3e duoc khong. Hinh nhu spartan 3a cung co phan dung nhu sparan 3e chu khong han la chi dành cho dsp phai khong a? Toi noi that rang thoi gian danh cho do an cua toi chi con dung 1 tuan nua thoi. Rat mong nhan duoc su trao doi cua anh thuong xuyen. Tim duoc trang web nay cua anh khoi phai noi toi mung the nao dau!!! Cam on anh that nhieu
Toi cung da co file xapp942. Nhung toi doc ky ma khong thay no noi gi den viec khi thu nghiem thi co can phai thiet lap dia chi icp/ip khong. Hinh nhu trong no khong co phan webserver thi phai. Neu vay, khi thu nghiem co the ket noi internet duoc khong? Anh tra loi giup toi voi nhe.
A! toi cung co ca xapp1026 nua. Vay co su dung no duoc cho Spartan 3e starter kit khong.
Bạn đã download reference design của xapp942 về chưa? Thông thường nếu đã chạy với ML40x (V4)thì sẽ chạy với S3, huống hồ cái design của Xapp942 dùng S3 (chỉ có board là khác). Vấn đề là bạn dùng ISE và EDK phiên bản nào? Nói thật là cái design này tôi cũng chưa test bao giờ, nhưng Xilinx đã đưa lên là chắc chắn chạy nếu bạn làm đúng theo các bước. Chúc thành công
cam on anh Hung Manh da chi giup.Toi dang cai ie 8.2.03i nhung khong duoc. toi doawload phan mem nay tren trang web cua xilinx. Anh chi giup toi cach cai no voi. Cam on anh
Toi da cai íe va edk 8.2i roi, chay tot, nhung xapp942 dung voi íe 8.2.01i nen toi da doawload ise 8.2.03i de su dng nung ko cai dc. Anh chi giup toi cai the nao voi nhe. help me !!!!!
Xin lỗi chị Lý, em hứa viết tutorial hướng dẫn sử dụng EDK, nhưng sau khi nói chuyện với chị thì thấy vấn đề của chị ko phải là ở cách sử dụng EDK nên tạm thời bỏ đấy. Hơn nữa tutorial sẽ rất nhiều hình ảnh, không biết đưa lên TTCN thì mất bao nhiêu trang, tách thành nhiều bài thì cũng không ổn lắm.
Chao ban Hung manh
Minh cung dang phai thiet ke mot ung dung nhu sau:
He thong cua minh la : mot may tinh PC ket noi den cong ethernet tren bo kit do và mot may tinh PC con lai ket noi den cong uart tren bo kit do.
Van de la minh phai thiet ke bo chuyen doi ethernet sang uart de hai may tinh co the ping voi nhau duoc
Ban giup minh duoc khong?
Cam on ban rat nhieu!
Bo kit minh su dung la spartan 3e, ISE va EDK phien ban 8.2
Mình thấy có 2 cách thực hiện, hoặc đơn thuần thiết kế bộ chuyển hardware (VHDL và Verilog). Cách thứ 2 là dùng MicroBlaze để làm chức năng chuyển đổi.
Giải thích cặn kẽ hơn cho cách thứ 2: IP Uart và IP Ethernet đều nối với MicroBlaze qua bus OPB (với EDK 8.2), dữ liệu từ Uart sẽ truyền đến MicroBlaze, rồi từ MicroBlaze xuất ra ethernet và ngược lại. Dữ liệu ở trong MicroBlaze thì bạn thích xử lý như thế nào tiếp cũng được, nó là lập trình software cho MCU như thông thường.
2 link có thể hữu ích cho bạn nếu chọn cách 2:
http://bit.ly/aCuGPQ
http://bit.ly/des2HU
Nó có sẵn reference design đi kèm, bạn có thể tham khảo.
Chúc thành công.
Cam on ban nhieu
Minh da download xapp433.zip nhung khi tao file.bit thi phan mem bao la khong biet license cua core ethernet. Minh cung da download license theo huong dan nhung khi unzip ra o C: nhung khi chay phan mem van bao loi nhu vay
Ban co bai nao huong dan cach cai dat license khong?