25
Microblaze Tutorial Hệ thống nhúng là gì, nó như thế nào, hiện nay người ta thường nói từ "embedded" tức là nhúng. Từ trước đến giờ mình biết bao nhiêu là nhúng, bò nhúng giấm nè, bánh tráng nhúng nước Trảng Bàng nè... còn hệ thống nhúng như thế nào? Những sản phẩm làm ra từ hệ thống nhúng rất quen thuộc trong cuộc sống hằng ngày, ví dụ như cái tủ lạnh, máy giặt, máy điều hòa nhiệt độ đến cả những chiếc điện thoại di động mà mấy em gái thường vòi vĩnh bố mẹ mua cho bằng được, để mỗi lần chuông điện thoại reng te te như dzế kêu. Những tín năng đó được hiểu đại khái như là kết quả xử lý Midi tạo ra âm thanh từ hệ thống nhúng, và là trái tim của chiếc điện thoại. kamejoko đã nghe nói nhiều về embedded nhưng cũng có lúc mơ hồ và lùng bùng cái lỗ tai. Trong hệ thống nhúng lại chia ra nhiều mảng khác nhau, tùy theo từng ứng dụng cụ thể. Mình muốn ôm tất cả, học luôn nguyên một thể "Tôi muốn ôm cả đất, tôi muốn ôm cả trời, mà sao em ơi, tôi không ôm nổi một con người" hehhe. Thế là mỗi tối kamejoko lại lang thang trên mạng, tìm kiếm lùng sục trên trang google để có thêm nhiều kiến thức. Embedded devices chắc có lẽ được chia ra thành 3 mảng chính, đó là ARM, DSP, FPGA. Cái mà kamejoko muốn đề cập ở đây chính là bộ vi xử lý processor, là trái tim của hệ thống nhúng. Kamejoko đã từng thử qua hệ thống ARM của Phillips, nhưng cũng chỉ dừng lại ở phần firmware mà thôi. Sau nhiều lần đắn đo, để tự học embedded thì cần phải trang bị cho mình những device nào? những kit ARM có sẳn giá tương đối khá cao, nhưng học embedded chỉ chuyên sâu vào firmware thì chưa đủ. Cơ duyên đưa mình đến với FPGA, để có được một kit FPGA thì cũng không khó, vì sản phẩm của Xilinx có nhiều mức giá khác nhau, cũng như có nhiều tiền thì ta có thể chọn được món ăn ngon, còn không thì chọn những nón ăn tàm tạm, nhưng vẫn đảm bảo mình no bụng. Và khi tìm hiểu kamejoko nhận ra một điều: Xillinx có nguồn resource rất lớn. Ý mình nói đến đó là các application notes, và các tool design của Xilinx luôn được update nhanh đến mức chóng mặt.Và kamejoko nghĩ rằng sự lựa chọn FPGA để học embbeded là đúng, vì khi đi sâu vào thiết kế đòi hỏi designer phải am hiểu cả hardware lẫn software. Ôi, lùng bùng lỗ tai quá rồi phải không!!! Microblaze là cái gì??? Nó là một processor, là tên một loại vi xử lý giống như VXL Intel vậy. Nhưng có điều, khi cần một con VXL Intel, anh có thể ra cửa hàng máy tính, bỏ ra vài chục đến

66886284 Micro Blaze Tutorial 5818

Embed Size (px)

Citation preview

Page 1: 66886284 Micro Blaze Tutorial 5818

Microblaze Tutorial

Hệ thống nhúng là gì, nó như thế nào, hiện nay người ta thường

nói từ "embedded" tức là nhúng. Từ trước đến giờ mình biết bao

nhiêu là nhúng, bò nhúng giấm nè, bánh tráng nhúng nước Trảng

Bàng nè... còn hệ thống nhúng như thế nào?

Những sản phẩm làm ra từ hệ thống nhúng rất quen thuộc trong

cuộc sống hằng ngày, ví dụ như cái tủ lạnh, máy giặt, máy điều

hòa nhiệt độ đến cả những chiếc điện thoại di động mà mấy em gái

thường vòi vĩnh bố mẹ mua cho bằng được, để mỗi lần chuông điện

thoại reng te te như dzế kêu. Những tín năng đó được hiểu đại

khái như là kết quả xử lý Midi tạo ra âm thanh từ hệ thống

nhúng, và là trái tim của chiếc điện thoại.

kamejoko đã nghe nói nhiều về embedded nhưng cũng có lúc mơ hồ

và lùng bùng cái lỗ tai. Trong hệ thống nhúng lại chia ra nhiều

mảng khác nhau, tùy theo từng ứng dụng cụ thể. Mình muốn ôm tất

cả, học luôn nguyên một thể "Tôi muốn ôm cả đất, tôi muốn ôm cả

trời, mà sao em ơi, tôi không ôm nổi một con người" hehhe. Thế

là mỗi tối kamejoko lại lang thang trên mạng, tìm kiếm lùng sục

trên trang google để có thêm nhiều kiến thức.

Embedded devices chắc có lẽ được chia ra thành 3 mảng chính, đó

là ARM, DSP, FPGA. Cái mà kamejoko muốn đề cập ở đây chính là bộ

vi xử lý processor, là trái tim của hệ thống nhúng. Kamejoko đã

từng thử qua hệ thống ARM của Phillips, nhưng cũng chỉ dừng lại

ở phần firmware mà thôi.

Sau nhiều lần đắn đo, để tự học embedded thì cần phải trang bị

cho mình những device nào? những kit ARM có sẳn giá tương đối

khá cao, nhưng học embedded chỉ chuyên sâu vào firmware thì chưa

đủ. Cơ duyên đưa mình đến với FPGA, để có được một kit FPGA thì

cũng không khó, vì sản phẩm của Xilinx có nhiều mức giá khác

nhau, cũng như có nhiều tiền thì ta có thể chọn được món ăn

ngon, còn không thì chọn những nón ăn tàm tạm, nhưng vẫn đảm bảo

mình no bụng. Và khi tìm hiểu kamejoko nhận ra một điều: Xillinx

có nguồn resource rất lớn. Ý mình nói đến đó là các application

notes, và các tool design của Xilinx luôn được update nhanh đến

mức chóng mặt.Và kamejoko nghĩ rằng sự lựa chọn FPGA để học

embbeded là đúng, vì khi đi sâu vào thiết kế đòi hỏi designer

phải am hiểu cả hardware lẫn software. Ôi, lùng bùng lỗ tai quá

rồi phải không!!!

Microblaze là cái gì??? Nó là một processor, là tên một loại vi

xử lý giống như VXL Intel vậy. Nhưng có điều, khi cần một con

VXL Intel, anh có thể ra cửa hàng máy tính, bỏ ra vài chục đến

Page 2: 66886284 Micro Blaze Tutorial 5818

vài trăm USD là có thể mang nó về. Đối với Microblaze, anh không

thể ra cửa hàng mua nó mang về được, mà phải dùng tool của

xilinx design thành một hệ thống Microbalze hoàn chỉnh.

Chi tiết hơn, con chip FPGA của hãng Xilinx sản suất là một khối

"rỗng". Nó là mạng của các cổng logic chưa được kết nối với

nhau. Công việc của designer là dùng tool của Xilinx kết nối các

cổng lại thành mạch điện cụ thể và nó phải chạy theo ý đồ của

người thiết kế đặt ra.

Cao hơn, một khi có Microblaze là trái tim của hệ thống, cần

phải có những thiết bị ngoại vi (IO) đi theo. Cũng như những

thiết bị ngọai vi chuột, bàn phím... Xilinx cung cấp cho

designer một danh sách các ngoại vi được gọi là IP core

cataloge. Designer chỉ việc chọn từng món mà mình thích, mà nhắc

đến chọn món thì phải tính đến trả tiền. Tức là trong danh sách

IP core đó có loại được khuyến mãi miễn phí (món tráng miệng),

và có món phải trả tiền. Thú vị phải không, công việc design của

một anh kỹ sư cũng giống công việc đi chợ hằng ngày của các chị

em phụ nữ, cũng phải đắn đo xem xét xem giá thành của hệ thống

giảm được bao nhiêu trong khi vẫn đảm bảo tính năng mà yêu cầu

đặt ra.

Còn nếu anh nghèo nhưng có ý tưởng thì có thể tự mình tạo ra IP,

không chọn thứ nào trong IP cataloge cả. Cái mà kamejoko sắp

trình bày dưới đây. Có người bảo mình tại sao không dám bỏ tiền

ra mua những thức ăn ngon mà lại đầu tư vào nhửng thứ vô bổ như

vầy, mình chỉ có thể trả lời mình rất "máu" về lĩnh vực này,

ngòai ra không có gì cả. Và kamejoko muốn chia sẻ cho những

người cũng có "máu" như mình.

----------------------------------------------------------------

----

Sau đây là các bước thực hiện LCD demo cho microblaze.

Tool : EDK 8.2

Demo trên board ML403, tuy nhiên vẫn có thể thay đổi chút ít cho

board Spartan3E Starter

Hướng dẫn step by step, hình hơi nhiều, thông cảm nhá.

Chú ý: Vài bước được thông qua ( để mặc định và ấn nút next)

thay vì post hình đầy đủ.

----------------------------------------------------------------

------

PHAN 1 : Setup hardware

----------------------------------------------------------------

------

1> Start XPS 8.2i

Page 3: 66886284 Micro Blaze Tutorial 5818

2> Tạo thư mục chứa project

3> Creat new base system

Page 4: 66886284 Micro Blaze Tutorial 5818

4> Select Board (chú ý: một số board có nhiều revision khác

nhau, nên chọn revison thích hợp)

5> Chọn món ăn tùy vào túi tiền

Page 5: 66886284 Micro Blaze Tutorial 5818

6> Creat Custom hardware (lcd port)

Page 6: 66886284 Micro Blaze Tutorial 5818
Page 7: 66886284 Micro Blaze Tutorial 5818
Page 8: 66886284 Micro Blaze Tutorial 5818

Sau khi hoàn tất các bước trên, XPS tạo ra các file có cấu trúc

như sau:

Phần hardware chứa trong thư mục pcores, bao gồm tên (lcd_port)

gắn với version hardware chỉ định (lcd_port_v1_00_a)

Phần software chứa trong thư mục drivers (sẽ được trình bày

trong phần sau)

Page 9: 66886284 Micro Blaze Tutorial 5818

7> Edit custom hardware

Sau khi thực hiện xong thao tác creat custom peipheral (dùng bus

OPB), XPS tạo ra 2 file source vhdl bao gồm name.vhd và

user_logic.vhd chứa trong thư mục vhdl

8> Edit user_logic.vhd

goto hàng (khoảng 100) add user port theo hình sau:

XPS tạo thanh ghi "slv_reg0" cho truy xuất với customer ip core,

trong trường hợp này ta gán cho port xuất lcd

goto hàng (khoảng 208-209) add code như hình sau

Page 10: 66886284 Micro Blaze Tutorial 5818

9> Edit lcd_port.vhd

goto hàng (khoảng 119) add user port theo hình sau:

goto hàng (khoảng 388) map port

Xong bước creat , edit customer OPB port 10> Import custom hardware

Trên tool bar : Hardware -> Creat or import peripheral

Đặt tên lcd_port

Page 11: 66886284 Micro Blaze Tutorial 5818

Chọn yes for overwrite

Page 12: 66886284 Micro Blaze Tutorial 5818

Check radio cho mục file .pao, browse đến đường dẫn thư mục

hardware chứa file này

Page 13: 66886284 Micro Blaze Tutorial 5818
Page 14: 66886284 Micro Blaze Tutorial 5818

11> Add ipcore vào bus OBP

Trên tab IP Catalog chọn Project Repository, click chuột phải

vào lcd_port chọn add IP

Trên mục system assembly view ta thấy custom ip core lcd_port_0

được add vào, lúc này lcd_port_0 chưa thật sự được gắn vào bus

OPB, ta thực hiện bước connect vào OPB theo hình sau:

Page 15: 66886284 Micro Blaze Tutorial 5818

Chọn nút radio của mục port , connection filters chọn all để

hiển thị tất cả các đường kết nối.

OPB_clk -> sys_clk_s : system clock source

lcd_port_pin -> Make external

Sau khi kết nối lcd_port_pin với external port, mục trên cùng

External Ports xuất hiện đường kết nối lcd_port_0_lcd_port_pin,

rename phần tên kết nối phía bên trái để tiện cho việc assign

pin constrain.

Chọn nút radio address, trong mục size (kích thước vùng nhớ cho

ngoại vi) trong drop list chọn 64K, sau đó chọn Generate

Addresses, Xillin tự động tính toán các đường địa chỉ và remap

lại cho toàn bộ ngoại vi.

Page 16: 66886284 Micro Blaze Tutorial 5818

Cuối cùng là bước assign constrain pins cho lcd_port, tùy theo

kết nối của các board khác nhau ta có các khai báo gán pins khác

nhau.

Tool -> Hardware -> Generate Bitstream. Đến bước này ta có thể

thong thả ngồi uống Coca chờ đợi XPS hoàn tất cho phần hardware.

Page 17: 66886284 Micro Blaze Tutorial 5818

LCD Firmware

Phần trước giới thiệu xong phần import customer hadware, phần

này giới thiệu về driver cho LCD.

Sau khi import lcd_port vào bus hệ thống, XPS tự động tạo ra thư

viện hỗ trợ cho việc phát triển phần mềm. Ngoài ra các file hệ

thống cũng được cập nhật. Driver được tạo ra trong đường dẫn :

...drivers/lcd_port_v1_00_a/src/

/lcd_port.c

/lcd_port.h

/lcd_port_selftest.c

/Makefile

File lcd_port_selftest.c được tạo ra với mục test sự hoạt động

của thanh ghi reg0 (lcd_port), ta có thể tham khảo, sữa chữa tùy

vào mục đích xử dụng.

Các prototype cho các hàm truy xuất thanh ghi được khai báo

trong lcd_port.h

Sau đây là các bước tạo project mới dùng công cụ phát triển phần

mềm SDK của xilinx.

1> Trên tool bar của XPS:

Chọn Software -> Lauch Platform Studio SDK

Page 18: 66886284 Micro Blaze Tutorial 5818

2> Trong hộp thoại Application Wizard:

Chọn Creat a New SDK Application Project -> Next

3> Trong mục New Project

Đặt tên project -> Next

Page 19: 66886284 Micro Blaze Tutorial 5818

Lấy thông số mặc định Xilinx MicroBlaze Executable -> Next

Finish thao tác create new project

Sau khi hoàn tất các bước trên xilinx tự động tạo các thư mục và

các file trong thư mục có tên project name, và một danh sách các

thư viện có liên quan đến microblaze.

4> Tạo Linker Script :

Trong mục Navigator, click chuột phải lcd_disp -> Gnenerate

Linker Script...

Page 20: 66886284 Micro Blaze Tutorial 5818

Trong crop down list chọn DDRAM, dùng làm vùng nhớ data , text

....

6> Creat New Source file

Click vào biểu tượng C+ trên tool bar

Page 21: 66886284 Micro Blaze Tutorial 5818

Đặt tên file lcd.c

Để viết chương trình giao tiếp lcd, tức là dùng microblaze xuất

tín hiệu điều khiển lên port_lcd, ngoài lcd_port còn có các

ngoại vi khác. Microblaze là processor có cấu trúc tổ chức bộ

nhớ Havard, Vùng Intruction và vùng IO, memory nằm riêng biệt.

Các IO được truy xuất thông qua địa chỉ, mỗi IO chiếm một vùng

nhớ có tầm từ C_BASEADDR - C_HIGHADDR. Các base add được cập

nhật trong file system.mhs sau khi thực hiện thao tác Generate

Address trong mục trình bày trên. Ta có thể tham khảo C_BASEADDR

thông qua bước sau:

Trong XPS -> System Essembly View -> chọn IO -> click chuột phải

-> Conigure IP ...

Và địa chỉ đầu tiên 0x77400000 được dùng cho việc truy xuất

thanh ghi reg0 (Do phần creat custom hardware ta chọn option cho

1 thanh ghi, trong trường hợp tạo nhiều thanh ghi, ví dụ như

reg0, reg1, reg2 thì địa chỉ truy xuất các thanh ghi này sẽ lần

lượt là C_BASEADDR,C_BASEADDR+0x04,C_BASEADDR +0x08...)

Page 22: 66886284 Micro Blaze Tutorial 5818

Hàm LCD_PORT_mWriteSlaveReg0(LCD_PORT_BASE_ADDR, (value)) được

định nghĩa sẵn bởi Xilinx, ghi giá trị "value" ra lcd_port.

7> Edit lcd.c

Công việc kế tiếp là soạn thảo code điểu khiển LCD, hầu hết các

board FPGA đều thiết kế cho việc giao tiếp mode 4 bit. Trong

phần thiết kế này dùng 1 port xuất để điểu khiển, lcd_port<6:0>

<-> (E, RW,RS,D7,D6,D5,D4)

8> Edit main.c

Chương trình chạy thử hiển thị ký tự trên LCD.

CTRL+S : Save file

CTRL+B : Build ( Hoặc click vào mục Build trên tool bar) __________________

Sau Khi thực hiện 2 phần Hardware và Firmware, ta có thể load

lên board để chạy thử. Để chạy micoblaze cần phải cấu hình thành

Page 23: 66886284 Micro Blaze Tutorial 5818

hệ thống hoàn chỉnh, sau đó load chương trình.

1> Kết nối cable Jtag vào taget board

2> Trên tool bar SDK ấn vào Icon "Program Hardware" chương trình

tự động load bitstream xuống board.

3> Trong mục Navigator -> chọn lcd_port -> click chuột phải ->

run

Trên hộp thoại Run click "New"

Chọn tab XMD Target Connection

Page 24: 66886284 Micro Blaze Tutorial 5818

Sau khi ấn "Run" SDK load chương trình và microblaze bắt đầu

chạy.

SDK hỗ trợ chức năng deburg chạy step by step thông qua đường

JTAG.

Có thể điều khiển hoạt động của microblaze thông qua cửa sổ

console:

Tại dấu nhắc XMD%

type lệnh run -> cho microbalze chạy

type lệnh stop -> cho microblaze dừng

run XMD%

XMD% RUNNING>

XMD% RUNNING> stop

XMD%

XMD% RUNNING> Processor stopped at PC: 0x2800001c

Page 25: 66886284 Micro Blaze Tutorial 5818

Ta có thể dùng Terminal để hiển thị message qua đường UART

Dùng microblze hiển thị chữ trên LCD phải qua nhiều bước tạo port, viết chương trình thủ tục

rườm rà, nhưng không kém phần thú vị. Việc chọn FPGA cho việc nghiên cứu hệ thống nhúng

có một số lợi điểm. Trong lúc phát triển phần mềm, người lập trình có thể đụng đến cả hardware

thay vì phải đọc datasheet và lập trình đơn thuần. Và như thế ta có thể nắm rõ hơn chút ít những

gì mình đang làm. Người phát triển có thể custom hệ thống theo chủ ý của mình nhằm mang lại

tính hiệu quả về kinh tế nhưng vẫn đảm bảo đáp ứng yêu cầu đặt ra.