Nhân tiện đang làm đồ án về FPGA nên post luôn cái báo cáo về phần PicoBlaze lên cho các bạn
. Để mình bảo vệ xong, mình rảnh sẽ post một số bài như giới thiệu một vài điều về VHDL chẳng hạn và một số ứng dụng cụ thể.
1. Giới thiệu chung về vi điều khiển PicoBlaze
Vi điều khiển PicoBlaze là vi điều khiển nhúng 8 bit có cấu trúc RISC được tối ưu phát triển cho các họ FPGA như Spartan 3, Virtex II và Virtex II Pro của Xilinx. Với vi điều khiển này chúng ta có thể làm một bộ điều khiển dựa trên nền vi điều khiển rất hiệu quả, hay xử lý dữ liệu đơn giản.
Vi điều khiển PicoBlaze được tối ưu về mặt hiệu suất và chi phí phát triển thấp. Nó chiểm khoảng 96 FPGA slices, hay chỉ 12.5% của XC3S50 FPGA và chiếm một phần rất nhỏ ở mức 0.3% của XC3S5000 FPGA. Bình thường mỗi block RAM của FPGA có thể lưu trữ tới 1024 câu lệnh chương trình (program instructions) và các lệnh này được tự động load trong khi cấu hình FPGA, khi đó vi điều khiển PicoBlaze có thể hoạt động từ 44000 tới 100000 câu lệnh trên giây (MIPS – million instructions per second) tùy thuộc vào họ FPGA được dùng là loại gì và tốc độ của họ đó.
Nhân của vi điều khiển PicoBlaze được nhúng hoàn toàn trong FPGA và không cần một nguồn thêm nào. Đơn giản là các ngoại vi của PicoBlaze có thể tự do lựa chọn cho phù hợp với các mục đích đặc biệt, chức năng và yêu cầu về giá cả của sản phẩm cuối cùng. PicoBlaze được nhúng vào dưới dạng một mã nguồn VHDL vì thế nó có thể nhúng vào các đời FPGA sau này và do đó project của chúng ta sẽ có tính kế thừa cao. Được nhúng trong FPGA, vi điều khiển PicoBlaze sẽ giảm kích thước mạch, giá thiết kế và thực hiện.
PicoBlaze FPC được hỗ trợ bởi một số các công cụ phát triển phù hợp bao gồm assembler và môi trường phát triển đồ họa tích hợp (IDE – integrated development environment), graphical instruction set simulator và mã nguồn VHDL và khối mô phỏng. Và rất đơn giản là vi điều khiển PicoBlaze được hỗ trợ trong môi trường phát triển Xilinx System Generator hay ISE.
1.1. Các đặc điểm của vi điều khiển PicoBlaze
Hình 1.1: Sơ đồ khối cấu trúc của vi điều khiển PicoBlaze
Vi điều khiển PicoBlaze có các đặc điểm sau:
· 16 thanh ghi dữ liệu chức năng chung có độ rộng 8 bit.
· Lưu trữ được 1K lệnh trong chương trình có thê lâp trình được trong chip và tự động nạp khi cấu hình FPGA hay khi khởi động FPGA.
· Khối tính toán logic (Arithmetic Logic Unit – ALU) với các cờ CARRY và ZERO.
· Một bảng RAM 64 byte.
· 256 đầu vào và 256 đầu ra dễ dàng có thể mở rộng thêm.
· Automatic 31 location CALL/RETURN stack.
· Predictable performance, luôn luôn dùng 2 xung nhịp hệ thống cho một câu lệnh, có thể đạt tới 200 MHz hoặc 100 MIPS trong Virtex – II Pro FPGA.
· Đáp ứng ngắt nhanh; worst-case 5 clock cycles.
· Được tối ưu cho cấu truc Spartan – 3, Virtex II, và Virtex II Pro FPGA của Xilinx chỉ chiếm 96 slices và 0.5 tới 1 block RAM.
· Hỗ trợ mô phỏng tệp lệnh assembler.
1.2. Các khối chức năng của vi điều khiển PicoBlaze
Các thanh ghi chức năng chung
Vi điều khiển PicoBlaze bao gồm 16 thanh ghi chức năng chung có độ rộng 1 byte từ s0 tới sF. Để cho dễ dàng trong khi lập trình cacvs thanh ghi này có thể đổi tên bằng các assembler directive. Không có thanh ghi nào có mức ưu tiên cao hơn hoặc dành riêng cho một tác vụ đặc biệt nào và cũng chẳng có thanh ghi accumulator vì thế mỗi kết quả được tính toán trong một thanh ghi định trước.
Lưu trữ 1024 câu lệnh chương trình
Vi điều khiển PicoBlaze thực hiện tới 1024 câu lênh trong bộ nhớ trong FPGA, chính là một single block RAM. Mỗi lệnh của PicoBlaze rộng 18 bit. Các lệnh này được biên dịch trong khi thiết kế FPGA và tự động được nạp trong quá trình cấu hình FPGA.
Các cách tổ chứ bộ nhớ khác có thể kết hợp nhiều vi điều khiển PicoBlaze trong một FPGA hoặc cho phép mã nguồn được cập nhật mà không phải biên dịch lại thiết kế FPGA.
Arthmetic Logic Unit (ALU)
Khối ALU thực hiện mọi tính toán của vi điều khiển bao gồm:
- Các phép tính số học cơ bản như cộng và trừ.
- Các phép tính logic bit như AND, OR và XOR.
- Các phép toán test bit và so sánh số học.
- Các phép toán dịch bit và xoay bit.
Tất cả các phép toán được thực hiện dùng các toán hạng là một trong các thanh ghi đặc biệt (sX). Kết quả được trả lại chính thanh ghi sX đó. Nếu cấu lệnh có toán hạng thứ 2 thì toán hạng này sẽ là thanh ghi thứ 2 (sY) hay là hằng số trực tiếp 8 bit (kk).
Flags – các cờ chỉ thị
Các phép tính thực hiện trên ALU ảnh hưởng tới trạng thái của các cờ ZERO và cờ CARY. Cờ ZERO set khi kết quả của phép toán trước = 0. Cờ CARRY set phụ thuộc vào nhiều điều kiện khác nhau phụ thuộc vào quá trình thực hiện của phép tính trước.
Cờ INTERRUPT_ENABLE cho phép đầu vào INTERRUPT.
64 byte RAM
Vi điều khiển PicoBlaze cung cấp một bảng RAM chức năng chung 64byte, có thể truy nhập trực tiếp hoặc gián tiếp từ các thanh thanh ghi bằng cách dùng lệnh FETCH và STORE.
Lệnh STORE ghi nội dung của một trong số 16 thanh ghi vào bất cứ chỗ nào trong bảng RAM này. Trong khi đó lệnh FETCH đọc nội dung của một ô nhớ trong bảng RAM vào 1 trong 16 thanh ghi. Điều đó cho phép một số lượng lớn bi
ến được khai báo và thưc hiện trong quá trình xử lý và dành không gian vào ra cho các tín hiệu vào ra.
Địa chỉ truy nhập RAM này trong khoảng 00 – 3F, có thể truy nhập trực tiếp bằng các hằng số kk hoặc gián tiếp qua nội dung của 1 trong số 16 thanh ghi.
Input/Output
Các cổng vào ra làm tăng khả năng của vi điều khiển PicoBlaze và cho phép vi điều khiển này có thẻ kết nối với bất kì ngoại vi nào hay là các logic FPGA.PicoBlaze có 256 cổng vào, 256 cổng ra hoặc là kết hợp cổng vào ra. Cổng ra PORT_ID là địa chỉ của cổng. Trong quá trình đọc dữ liệu thì PicoBlaze đọc dữ liệu từ cổng IN_PORT và lưu vào thanh ghi đặc biệt, sX. Trong quá trình xuất dữ liệu, PicoBlaze ghi nội dung của thanh ghi sX ra cổng OUTPUT.
Program Counter (PC)
Program Counter chỉ tới câu lệnh tiếp theo được thực hiện. Theo mặc định, PC tự động tăng lên tới địa chỉ của câu lệnh tiếp theo khi thực hiện một câu lệnh. Chỉ có các lệnh JUMP, CALL, RETURN và RETURNI và sự kiện Interrupt và Reset thay đổi hành vi này. Nội dung của PC không thể thay đổi được bằng mã chương trình.
PC có độ rộng 10 bit vì thế có thể trỏ tới bất kì đâu trong vùng không gian 1024 câu lệnh (từ 000 tới 3FF hex). Nếu PC trỏ tới đỉnh bộ nhớ 3FF thì nó sẽ quay trở lại vị trí ban đầu 000.
Program Flow Control
Thứ tự thực hiện mặc định của chương trình có thể thay đổi nhờ các câu lệnh điều khiển dòng chương trình có điều kiện hoặc không có điều kiện.
Lệnh JUMP chỉ rằng có thể nhảy đến một địa chỉ tuyệt đối trong 1024 không gian bộ nhớ chương trình.
Các câu lệnh CALL và RETURN cung cấp các thủ tục con tiện lợi cho việc dùng các khối chương trình.
Nếu đầu vào ngắt được kích hoạt thì một sự kiện ngắt cũng giuwxlaij địa chỉ của câu lệnh đang được thực hiện vào bộ nhớ stack trong khi đó thì con trỏ PC được trỏ tới địa chỉ ngắt, 3FF hex. Dùng lệnh RETURNI chứ không phải RETURN để trở về chương trình chính từ chương trình phục vụ ngắt.
Call/Return Stack
Bộ nhớ stack cứng Call/Return cho phép lưu trữ tối đa 31 địa chỉ lệnh, kích hoạt các lệnh CALL theo thứ tự lên đến 31 mức.
Stack được thực thi như là bộ nhớ vòng tròn từng riêng rẽ. Khi stack đầy thì nó sẽ ghi đè lên các giá trị cũ. Và không có câu lệnh nào để điều khiển bộ nhớ stack hoặc con trỏ stack. Không cần một không gian bộ nhớ chương trình cho stack.
Interrrupts
Vi điều khiển PicoBlaze có một ngõ vào INTERRUPT tùy ý, cho phép vi điều khiển PicoBlaze có thể làm chủ được các sự kiện không đồng bộ bên ngoài. Ở đây, các sự kiện không đồng bộ liên quan đến ngắt có thể xảy ra tại mọi thời điểm trong một chu kì lệnh. Tuy nhiên, thực tế kinh nghiệm thiết kế cho thấy rằng nên đồng bộ tất cả các tín hiệu input với vi điều khiển PicoBlaze bằng cách dùng Clock input.
Vi điều khiển PicoBlaze đáp ứng các tín hiệu ngắt nhanh nhất là sau 5 chu kì clock.
Reset
Vi điều khiển PicoBlaze tự động reset ngay lập tức khi quá trình cấu hình cho FPGA hoàn tất. Sau khi cấu hình, chân vào RESET sẽ đặt vi điều khiển vào trạng thái ban đầu. Khi đó, con trỏ PC được reset về địa chỉ 0, các cờ bị xóa, các ngắt bị vô hiệu hóa, và CALL/RETURN stack được reset. Các thanh ghi dữ liệu và bảng RAM không bị ảnh hưởng bới tín hiệu RESET.
1.3. Dùng PicoBlaze Microcontroller trong các thiết kế FPGA
Vi điều khiển PicoBlaze được cung cấp dưới file nguồn VHDL gọi là KCPSM3.vhd, đã được tối ưu về việc thực thi hiệu quả và chắc chắn trong các họ Spartan-3, Virtex-II hay Vertex-II Pro. Các mã nguồn phù hợp với cả quá trình tổng hợp và mô phỏng và được phát triển và kiểm tra dùng công cụ Xilinx Synthesizs Tool (XST) cho tổng hợp logic và ModelSim cho mô phỏng. Các nhà thiết kế cũng thành công khi dùng các công cụ tổng hợp logic và mô phỏng khác. Các mã nguồn VHDL không nên bị chỉnh sửa trong bất kì hoàn cảnh nào.
KCPSM3 Module
Module KCPSM3 bao gồm ALU, register file, scratchpad RAM, … Chỉ duy nhất chức năng không nằm trong KCPSM3 là bộ nhớ chương trình. Khai báo component và gắn chân như sau:
Kết nối với bộ nhớ ROM chương trình
Bộ nhớ ROM chương trình của PicoBlaze được dùng trong thiết kế VHDL. Từ file assembler tạo ra file VHDL, đã định nghĩa block RAM và khởi tạo nội dung cho RAM. File VHDL này có thể được dùng cho cả tổng hợp logic và mô phỏng vi điều khiển.
Sau đây là khai báo component và gán các thực thể của bộ nhớ chương trình trong FPGA:
Do đó, sơ đồ cấu trúc của vi điều khiển PicoBlaze như sau:
Để viết mã lệnh cho chương tr
6;nh (với tên mở rộng là .psm) thì chúng ta có thể dùng bất cứ trình soạn thảo nào để lập trình dựa theo 31 lệnh được cung cấp. Và dùng file thực thi KCPSM3.exe và các form được định nghĩa sẵn của ROM dưới dạng file .vhd, .coe, .v để dịch ra các file .vhd, .v và cho vào chương trình FPGA.
Tham khảo
Xilinx, PicoBlaze 8-bit Embedded Microcontroller User Guide for Spartan-3, Virtex-II, and Virtex-II Pro FPGAs, www.xilinx.com, UG129 (V1.1.1) November 21,2005
Các bài viết liên quan:
- Dịch .psm cho PicoBlaze của Xilinx Chào các bạn. Khi mình dùng Windows có dùng phần mềm Xilinx ISE và sử dung chip 8 bit PicoBlaze nên khi sang dùng Ubuntu thì mình tìm cách cài đặt ISE trên Ubuntu và cách để dịch từ mã .asm sang .vhdl để nạp cho ROM của PicoBlaze. Sau khi tìm kiếm và biết [...]...
- VHDL Tutorial: Stepper Motor Controller Chào các bạn. Trong bài này mình xin giới thiệu các bạn một component để điểu khiển động cơ bước đơn cực. Mình gửi các bạn báo cáo mà mình đã viết có chi tiết về cách mô phỏng và mã của chương trình và thực hiện trên kit Spartan 3E. 1. Giao diện vào [...]...
- Học Master về Embedded Programming tại Hàn Quốc Chào các bạn. Nay giáo sư hỏi mình rằng: có một giáo sư muốn tìm sinh viên Việt Nam giỏi về Embedded Programming, nên các bạn nào làm tốt về hệ thống nhúng: Vi điều khiển, Embedded Linux, ... có ý muốn học thạc sĩ thì liên hệ với mình nhé hoặc là viết mail [...]...
- Quick Start Your Embedded Design with MicroBlaze 32-bit Soft Processor Date: December 11, 2007 Time: 11:00 AM PST, 2:00 PM EST, 19:00 GMT Location: Your Desktop Webcast Overview: In order to meet critical time to market pressures and rapidly changing application requirements, embedded systems have to be built on a flexible processing solution that can be customized to meet application requirements. This applies to both [...]...
- Lập trình C cho vi điều khiển Mình tham gia các diễn đàn từ lâu lắm rồi và cũng giải đáp nhiều thắc mắc về lập trình C cho các vi điều khiển thông dụng như 8051, PIC. Mình viết bài này để giải đáp thắc mắc cho các bạn mới bước vào học lập trình cho vi điều khiển dùng ngôn [...]...
- Microcontroller Based Applied Digital Control Chào các bạn. Cuốn này có ở thư viện trường mình, xuất bản năm 2006, đọc khá hay. Sau đây là lời giới thiệu của amazon.com . Combines the theory and the practice of applied digital control. This book presents the theory and application of microcontroller based automatic control systems. Microcontrollers are single-chip computers which [...]...










{ 8 comments… read them below or add one }
Hi anh, em co 1 thac mac nhu vay
Truoc gio he noi den micro controller la em nghi den a piece of hardware (PIC, AVR…) Nhung cai PicoBlaze nay, em doc thay co ve nhu no hoan toan la software, minh co san hardware la FPGA, cai PicoBlaze vao no se configure/allocate lai hardware cua FPGA. Giong nhu gach, ca’t, da’ co san roi, gio xay len thanh nha thoi.
Khong biet em hieu vay co dung ko?
Chào em.
Phần tử cơ bản nhất trong FPGA là các cổng logic. Tất cả các chip như PIC, AVR, 8051, .. bản chất bên trong (khi em xem diagram) gồm các khối như ALU, RAM,… đều được tạo từ các phần tử logic này. Do đó, bằng việc cấu hình và nối các phần tử này tại, tất nhiên ta có thể tạo các chip PIC, AVR, .. bên trong, gọi là soft processor. Trước khi tạo ra được các con chip như em thấy, thì công đoạn sáng tạo và test đều = FPGA: miêu tả phần cứng = VHDL hoặc verilog, test, k dc thì chỉnh lại.
Các con chip sau khi sản xuất hàng loạt thì không thay đổi được cấu hình bên trong, còn FPGA thì có thể xóa đi rồi nạp cấu hình khác vào vẫn ok.
Chúc em thành công.
Anh cho em hỏi là, nếu mình có một Project rồi và có các thông số trong quá trình tính toán muốn hiển thị lên máy tính bằng việc kết nối với máy tính sử dụng giao diện Visual vậy thì mình làm cách nào hả anh? Nếu em muốn sử dụng PicoBlaze trong việc hiển thị các thông số thôi thì em làm sao hả anh? Có phải mình sử dụng PicoBlaze để viết Modul kết nối RS232 rồi dịch sang mã VHDL, nhưng làm cách nào để ghép với Project của mình đã có sẵn? Với cho em hỏi là các thông số mình xuất ra từ Project làm sao có thể kết nối tới PicoBlaze? Hay là các cổng ra vào của PicoBlaze là các cổng ảo? Mình kết nối phần dữ liệu từ Project đến các cổng ảo này và cuối cùng là truyền qua máy tính qua cổng COM? Anh có thể chỉ cho em cụ thể cách đưa PicoBlze nhúng vào FPGA được không ạ? Với cho em hỏi có cách nào giao tiếp với máy tính bằng cách viết các mã VHDL mà không sử dụng các chip nhúng không ạ?
Cụ thể đồ án của em là thế này:
Đồ án yêu cầu điều khiển động cơ không đồng bộ 3 pha sử dụng FPGA, cụ thể là trên nền tảng Kit Spartan-3E. Bộ nghịch lưu được điều khiển theo giải thuật Space Vector, điều khiển động cơ vòng hở với phương pháp từ thông không đổi V/f=constant. Vấn đề bây giờ là em muốn hiển thị các thông số lên máy tính như: tốc độ động cơ(đọc từ encorder), tần số điện áp ngõ rã…Nhưng em không biết làm cách nào, em có đọc thấy trong cuốn “Circuit Design with VHDL” lúc trước anh cho, thấy có đoạn người ta viết về cách truyền nhận dữ liệu nối tiếp không biết có áp dụng được không nữa. Em chưa có kinh nghiệm về giao tiếp máy tính, phần Visual em có thể học được trong thời gian ngắn để làm, em có học qua vi điều khiển họ 8051 nên nếu sử dụng PicoBlaze em cũng có thể học được trong thời gian ngắn để làm được.
Mong anh giúp đỡ, em bí phần này lâu rồi và đọc nhiều tài liệu rồi mà chưa hình dung được vấn đề, đầu tháng 8 năm 2009 em phải hoàn tất đồ án rồi, giờ mới xong phần điều khiển động cơ, còn phần hiển thị em mong anh giúp đỡ. Em cảm ơn anh nhiều!
Chào anh!
Em đã viết cho FPGA truyền dữ liệu lên máy tính được rồi, em viết bằng VHDL trên ISE chứ không dùng chip nhúng, cảm ơn anh nhiều!
Bạn Hiếu ơi
Vậy bạn có thể cho mình xin source code RS 232 được không vậy. Mình đang cần gấp nhưng chưa có viết được.
Thanks
Anh Bắc ơi! em đang nghiên cứu về con picoblaze. Em đã đọc bài của anh rồi ạ. Nhưng ví dụ lập trình dùng con này ít quá. Nếu anh rảnh thì cho em vài ví dụ về lập trình với con này được không ạ?
em cảm ơn anh!
Em download các ví dụ của Xilinx cho Spartan 3E có rất nhiều ví dụ dùng PicoBlaze, và luôn đính kèm file .psm để xem đó em.
Chúc em thành công.
Dạ vâng em cảm ơn anh ạ!