Upload
jason-robinson
View
34
Download
2
Embed Size (px)
Citation preview
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
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
2> Tạo thư mục chứa project
3> Creat new base system
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
6> Creat Custom hardware (lcd port)
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)
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
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
Chọn yes for overwrite
Check radio cho mục file .pao, browse đến đường dẫn thư mục
hardware chứa file này
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:
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.
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.
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
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
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...
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
Đặ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...)
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
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
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
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.