sß+¡ dß+Ñng edk10.1_v1

24
HƯỚNG DẪN SỬ DỤNG PHẦN MỀM EDK 10.1i Giới thiệu : Trong chương trình đào tạo, chắc hẳn thế nào các bạn cũng đã được học môn Vi Xử Lý và thí nghiệm vi xử lý, và các bạn đã làm quen với việc lập trình 89C51 bằng ngôn ngữ Assembly dành cho họ 8051.Tuy nhiên, bên cạnhđó các bạn cũng có thể lập trình cho họ 8051 bằng ngôn ngữ C (cụ thể là Keil C), tài liệu có thể đọc cuốn “THIẾT KẾ HỆ THỐNG VỚI HỌ 8051” của thầy Tống Văn On. Vì ngôn ngữ C là ngôn ngữ cấp cao nên việc lập trình cho 8051 dễ dàng hơn so với sử dụng ngôn ngữ Assembly. Việc viết chương trình rồi đổ vào 89C51được gọi là “nhúng” và hệ thống tạo ra được gọi là hệ thống nhúng. Tuy nhiên, 8051 có hạn chế là bộ nhớ nhỏ(cả trong lẫn ngoài), nên ở đây, mình xin giới thiệu một hệ thống nhúng hoàn toàn (không có sẵn Vi đều khiển), vi điều khiển và chương trình điều khiển ở đây cũng sẽ được nhúng vào trong một FPGA( Field Programable Gate Array). Và một trong những chương trình thông dụng được sử dụng hiện nay là chương trình EDK (Embedded Design /Development Kit) được viết bởi hãng Xilinx và sử dụng FPGA của hãng Xilinx. Tài liệu này sẽ hướng dẫn các bạn sử dụng phần mềm EDK 7.1i ,là version 2005 của hãng Xilinx. Chương trình EDK 10.1i là một chương trình thân thiện với người sử dụng, giúp chúng ta có thể dễ dàng thiết kế một hệ thống phức tạp mà chỉ thao tác đơn giản, vì thực chất, EDK sử dụng các chương trình VHDL viết sẵn (gọi là các IP) nên ta không cần viết các IP đó, mà chỉ sử dụng nó, phần quan trọng là chúng ta phải viết phần

Upload: thoai-nguyen

Post on 16-Feb-2015

51 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sß+¡ dß+Ñng EDK10.1_v1

HƯỚNG DẪN SỬ DỤNG PHẦN MỀM EDK 10.1iGiới thiệu : Trong chương trình đào tạo, chắc hẳn thế nào các bạn cũng đã được học môn Vi Xử Lý và thí nghiệm vi xử lý, và các bạn đã làm quen với việc lập trình 89C51 bằng ngôn ngữ Assembly dành cho họ 8051.Tuy nhiên, bên cạnhđó các bạn cũng có thể lập trình cho họ 8051 bằng ngôn ngữ C (cụ thể là Keil C), tài liệu có thể đọc cuốn “THIẾT KẾ HỆ THỐNG VỚI HỌ 8051” của thầy Tống Văn On. Vì ngôn ngữ C là ngôn ngữ cấp cao nên việc lập trình cho 8051 dễ dàng hơn so với sử dụng ngôn ngữ Assembly.Việc viết chương trình rồi đổ vào 89C51được gọi là “nhúng” và hệ thống tạo ra được gọi là hệ thống nhúng. Tuy nhiên, 8051 có hạn chế là bộ nhớ nhỏ(cả trong lẫn ngoài), nên ở đây, mình xin giới thiệu một hệ thống nhúng hoàn toàn (không có sẵn Vi đều khiển), vi điều khiển và chương trình điều khiển ở đây cũng sẽ được nhúng vào trong một FPGA( Field Programable Gate Array). Và một trong những chương trình thông dụng được sử dụng hiện nay là chương trình EDK (Embedded Design /Development Kit) được viết bởi hãng Xilinx và sử dụng FPGA của hãng Xilinx. Tài liệu này sẽ hướng dẫn các bạn sử dụng phần mềm EDK 7.1i ,là version 2005 của hãng Xilinx.Chương trình EDK 10.1i là một chương trình thân thiện với người sử dụng, giúp chúng ta có thể dễ dàng thiết kế một hệ thống phức tạp mà chỉ thao tác đơn giản, vì thực chất, EDK sử dụng các chương trình VHDL viết sẵn (gọi là các IP) nên ta không cần viết các IP đó, mà chỉ sử dụng nó, phần quan trọng là chúng ta phải viết phần mềm điều khiển chip nhúng đã được viết sẵn đó, và điều này cũng thực sự không phải là khó khăn vì chúng ta không cần sử dụng tập lệnh Asembly của chip nhúng (được đặt tên là MicroBlaze) mà chúng ta sẽ sử dụng ngôn ngữ Standard C hay C++để viết chương trình điều khiển icroBlaze (tương đương với một vi xử lý 32 bit, đối với version 4.0 còn có thêm FPU/đơn vị xử lý dấu chấm động) và các thư viên hỗ trợ sẵn với các hànđiều khiển ngoại vi rất nhiều) Sau đây xin đi vào chi tiết hướng dẫn sử dụng, xin lưu ý, file này sẽ đi kèm theo file hướng dẫn hình ảnh Lưu ý :chương trình EDK 10.1i chỉ có thể chạy được khi các bạn đã cài phần mềm Xilinx ISE 10.1 CÁC BƯỚC TẠO MỘT PROJECT : Bước 1: tạo hệ thống phần cứng cơ bản trong XPS (Xilinx Platform Studio): khi các bạn cho chạy chương trình EDK thì một cửa sổ xuất hiên gọi là cửa sổ XPS, chúng ta sẽ bắt đầu tạo Project ở đây, màn hình khởi động chương trình như sau :

Page 2: Sß+¡ dß+Ñng EDK10.1_v1

Trong hộp thoạiđầu tiên xuất hiện, cho phép chúng ta thao tác cơ bản : - Base System Builder Wizard :hộp thoại này sẽ cho phép chúng ta tao một Project mới - Open A Recent Project : mở một Projectđã có sẵn Ở đây sẽ bắt đầuvớibướctạo một Project mới: nhấn Ok khi hôp chọn ở Base System… , hộp thoại tiếp theo sẽ hiện ra:

Ở hôp thoại này, phần mềm sẽ yêu cầu đặt tên cho thư mục chứa Project và các thư mục liên quan, nhần Browse và tạo một thư mục với một đường dẫn cụ thể, ở đây,

Page 3: Sß+¡ dß+Ñng EDK10.1_v1

chúng ta sẽ đặt tên cho thư mục là vidu, lưu ý nhấn Open 2 lần, chương trình sẽ tự động tạo ra file system.xmp trong thư mục chúng ta vừa tạo :

Nhấn OK để đi đến bước tiếp theo, ở bước này chúng ta sẽ tạo một hệ thống với sự hỗ trợ sẵn của phần mềm.

Nhấn Next để đi đến bước tiếp theo:

Page 4: Sß+¡ dß+Ñng EDK10.1_v1

Ở bước này sẽ cho phép chúng ta tạo xây dựng một hệ thống dựa trên các Kit hỗ trợ sẵn của Xilinx hoặc chúng ta sẽ tạo ra một hệ thống riêng dựa trên các hỗ trợ có sẵn của phầm mềm : - I would like to creat a system for the following development Board: tạo hệ thốngdựa trên các Kit Development của Xilinx, ví dụ như AFX Virtex II Pro fg456Proto Board , Spartan 3_Starter Board…-I would like to creat a system for a custom Board: tạo một board riêng với cácphần cứng và ngoại viđược hỗ trợ trong phần mềm, Lưu ýđây chỉ là chươngtrình chạy trên Kit Development chứ không phải chương trình nạp trực tiếpđể tạosản phẩn chuyên dụng.

Ở đây chúng ta sẽ tạo ra hệ thống mà được hỗ trợ sẵn, mà cụ thể là sử dụng Kit Spartan 3-Starter, ta chon như sau :

Page 5: Sß+¡ dß+Ñng EDK10.1_v1

Hình trên là mặt trên và dưới với các ngoại vi của KIT Spartan_3 Starter. Phần này các bạn tham khảo qua File: ug130.pdf trong trang web xilinx.com.

Page 6: Sß+¡ dß+Ñng EDK10.1_v1

Chúng ta cũng có thể sử dụng Kit Development khác nếu có( ví dụ Kit Virtex II Pro). Nhấn Next để qua bước tiếp theo.

Kit Spartan 3 Starter với các thông số có sẵn ở phần trên, còn phần dưới trong ô chọn MicroBlaze hoặc Power PC thì chỉ có thể chọn MicroBlaze vì nó là một vi xử lý mềm, tức là nó cũng được nhúng vào FPGA trên Kit, còn Power PC là chip cứng , tức là chip nàyđã có sẵn trên Kit (Vd Virtex II Pro hay Virtex IV), do vậy, chúng ta sẽ không tốn tài nguyên trên FPGA khi sử dụng Power PC (nếu dùng các Kit trên mà sử dụng MicroBlaze thì sẽ tốn thêm tài nguyên trên FPGA), nghĩa là đối với các Kit có hỗ trợ Power PC ta chỉ cần nhúng phần mềm điều khiển mà không cần nhúng vi xử lý. Do vậy đối với các thiết kế lớn hoặc cần viết thêm các ngoại vi thì chúng ta mới sử dụng Power PC, còn bình thường chúng ta sử dụng MicroBlaze vì tính linhđộng của nó.Nhấn Next để qua bước tiếp theo.

Page 7: Sß+¡ dß+Ñng EDK10.1_v1

Ở hộp thoại này cho phép chúng ta chọn tần số (với điều liện là Kit phải hỗ trợ nhiều tần số, nếu không chúng ta cứ để mặc định), và chọn kích thước BRAM (Block RAM: làRAM ở trong chip, tốc độ cao và do chip quản lý trực tiếp), kích thước này tùy thuộc vào số lượng cổng của FPGA được sử dụng, đối với Spartan 3 được sử dụng trong Kit Spartan 3 Starter thì kích thước tối đa của BRAM là 16KB. Phần debug thì cứ để mặc định vì phần đó liên qua đến tập lệnh Debug mà ở đây không đề cập, nếu bạn nào có nhu cầu tìm hiểu về phần Debug này thì xin hãy tìm tài liệu.Nhấn Next để bước tiếp theo.

Page 8: Sß+¡ dß+Ñng EDK10.1_v1

Đầu tiên là cổng truyền bất đồng bộ UART, giao thức truyền của nó được hỗ trợ sẵn và gọi là OPB UARTLITE, thường thì chúng ta dùng nó để giao thiếp với máy tính hay bất kì thiết bị nào sử dụng cổng truyền bất đồng bộ, tốc độ truyền chúng ta có thể lưạ chọn được, vấn đề lưu ý là không nên chọn quá lớn ,vì một lệnh xử lý của C tương đương với nhiều chu kì máy, mà xung cung cấp là 50MHz (có thể cao hơn đối với các Board khác hay chúng ta có mạch tạo daođộng gắn thêm) hơn nữa thường thì chúng ta truyền lượng data rất lớn nên nếu các bạn chọn tốc độ cao thì dễ gây hiểu nhầm mức dẫn đến truyền sai dữ liệu, ở đây xin chọn tốc độ là 38600b bps, chúng ta cũng có thể chọn số bit cho data truyền đi, tối đa là 32 bit , và chọn truyền bit Parity (kiểm tra lỗi) hoặc không, các bạn nhớ tốc độ truyền và các phần đã chọn để sau này giao tiếp với máy tính hoặc các các thiết bị mà chúng ta muốn giao tiếp với hệ thống chúng ta vừa tạo ra. Phần tiếp là LED_8 bit, LED 7 đoạn được gọi tên là XPS GPIO, cũng được hỗ trợ để sử dụng 8 LED đơn và LED 7 đoạn trên Kit, DataSheet đi kèm, các bạn có thể tham khảo để tìm hiểu các thông số. Trong thiết kế ví dụ này, ta chọn cả cổng RS232 và LED_8 bit trong hộp thoại đầu tiên này, không chọn LED 7 đoạn.Nhấn Next để chọn các ngoại vi khác :

Page 9: Sß+¡ dß+Ñng EDK10.1_v1

Ở hộp thoại này cho phép chọn ngoại vi là 4 nút nhấn trên kit, thực chất 4 nút nhấn này chúng ta chỉ được sử dụng 3 nút nhấn, vì chương trìnhđã sử dụng nút User Reset hay Button 3 làm nút khởi động người dùng, nút này khác với nút Reset hệ thống (RESET), khi nhấn nút này, chương trình sẽ được thực thi lại từ đầu một lần nữa, còn nút reset hệ thống sẽ RESET toàn bộ hệ thống lại, trong chương trình này sẽ không sử dụng 2 ngoại vi này (đánh dấu không chọn vào các ô tương ứng).Tiếp theo chúng ta là tùy chọn các DIP switch và SRAM (8 nút trượt trên Board): trong thiết kế này sẽ không sử dụng DIP Switch , nhưng sử dụng SRAM vì đây là thiết bị lưu trữ ngoài có kích thước lớn (1 MB), dùng để lưu trữ dữ liệu rất tốt, một kỳ Read/Write của nó tương đương từ 5->7 chu kỳ lệnh.

Nhấn Next 2 lần để hoàn thành việc thiết kế ban đầu. Bước tiếp theo sẽ cho chúng ta chọn thiết bị IN/OUT hay không, và có tạo ra chương trình chạy thử test_Memory_Application hay không, chúng ta để mặc định bước này, nghĩa là thiết bị IN/OUT của chúng ta là RS232 và cho phép tạo ra File Test chương trình, file test này chúng ta sẽ chỉnh sửa lại tùy ý,đây là chương trình sẽ điều khiển Chip nhúng MicroBlaze.

Page 10: Sß+¡ dß+Ñng EDK10.1_v1

Nhấn Next để đến bước tiếp theo, bước này sẽ cho phép chúng ta đặt chương trình, dữ liệu và vùng stack trong BRAM hoặc SRAM.

Nhấn Next vì phần này chúng ta sẽ chỉnh sửa sau. Chương trình sẽ hiên hộp thoại hoàn tất thiết kế,ở hộp thoại này các bãn sẽ thấy hiện lên một số các thông số của các ngoại vi vừa chọn, bạn có thể quay ngược lạiđể chỉnh sửa hoặc nhấn Generate để hoàn tất thiết kế:

Page 11: Sß+¡ dß+Ñng EDK10.1_v1

Một hôp thoại thông báo các bước thiết kế đã thành công, nhấn Finish hoàn thành.

Sau khi hoàn chỉnh các tất cả các bước trên,màn hình XPS hiện ra như sau :

Page 12: Sß+¡ dß+Ñng EDK10.1_v1

Ở trên cùng là các thanh công cụ với các công cụ hỗ trợ như dịch ra chỗi bit, nạp vào Kit, mô phỏng… Ở bên trái màn hình là cửa sổ quản lý project và quản lý ứng dụng, IP catalog. Ở cửa sổ bên phải, trong Tab System Assembly View bạn có thể chỉnh sửa lại thiết kế, nếu muốn chỉnh sửa, bổ sung hay bỏ bớt ngoại vi, các bạn nhấn chuột phải vào CPU-microblaze_0, sẽ có các thẻ Tab hiện ra tương ứng. Mục Add/ Edit Core cho phép chúng ta thêm bớt, chỉnh sửa phần cứng: ngoại vi địa chỉ, Port, thông số…: Nếu muốn thêm phần nào, ta chọn Tab IP catalog ở bên cửa sổ trái, chọn IP, nhấn Add IP. Muốn bớt ta chọn phần cần bớt bên cửa sổ phải trong Tab System Assembly View và nhấn chuột phải, chọn Delete Instance. Tuy nhiên nếu không có ngoại vi tương ứng thì chúng ta sẽ không lựa chọn chỉnh sửa. Hơn nữa, địa chỉ và các Port …là do hệ thống quy định, có trong bảng datasheet tương ứng với mỗi Kit, nên nếu không cần thiết thì ta không chỉnh sửa phần này.Tương ứng với Platform Setting cũng vậy,trong hộp thoại này chỉ có phần nên quan tâm là các thư viện bổ sung, nếu muốn sử dụng các bạn nên tìm hiểu các tập lệnh của các thư viện này : Ví dụ thư viện xilmfs dùng để quản lý thư mục và tập tin… Tuy nhiên các thư viện này cũng không cần thiết, vì các thư viện liên quan đến hệ thống chúng ta tạo ra thì phần mềm đã tự động tạo ra cho chúng ta, ngoài ra còn hỗ

Page 13: Sß+¡ dß+Ñng EDK10.1_v1

trợ thêm thư viện chuẩn của C nên nếu không có nhu cầu thì không nên thêm vào các thư viện này. Ở Tab Application, ứng dụng mà chúng ta tạo ra đã dược tự động đánh dấu chọn để khi dịch chương trình, thì chương trình này sẽ là chương trình điều khiển của chúng ta. Ở phần này có hai phần rất quan trọng mà chúng ta cần chú ý la file Linker_Script thuộc tab Complier Option, và file TestApp_Memery.c thuộc tab Source: File Linker_Script: File Linker Script sẽ cho phép chúng ta đặt chương trình ,dữliệu và vùng Stack vào các bộ nhớ có thể có của hệ thống, mặc định chương trình sẽ chọn BRAM để đưa vào, tuy nhiên, nếu chúng ta muốn xử lý dữ liệu chẳng hạn thì kích thước của BRAM là quá nhỏ để chứa dữ liệu, khi đó ta cần một bộ nhớ khác để đưa dữ liệu vào, và File Linker_Script này sẽ cho phép chúng ta làm điều đó, lưu ý vì Kit Spartan 3 Starter chỉ có SRAM nên chúng ta chỉ có thể đặ dữ liệu trong vùng BRAM hoặc SRAM, nếu các bạn muốn đặt vùng nào vào SRAM, thì ở cuối phần đó, các bạn sẽ chọn ilmb_cntlr hoặc SRAM_256Kx32_C_MEM0_BASEADDR

_STACK_SIZE = DEFINED(_STACK_SIZE) ? _STACK_SIZE : 0x400; /* Define all the memory regions in the system */MEMORY{SRAM_256Kx32_C_MEM0_BASEADDR : ORIGIN = 0x20100000, LENGTH = 0x000FFFFFilmb_cntlr : ORIGIN = 0x00000000, LENGTH = 0x1fff}/* Specify the default entry point to the program */ENTRY(_start)/* Define the sections, and where they are mapped in memory */SECTIONS{.text : {_ftext = .;*(.text)*(.text.*)*(.gnu.linkonce.t*)_etext = .;} > ilmb_cntlr .rodata : {_frodata = .;*(.rodata)*(.rodata.*)*(.gnu.linkonce.r*)_erodata = .;} > ilmb_cntlr

Page 14: Sß+¡ dß+Ñng EDK10.1_v1

/* Alignments by 8 to ensure that _SDA2_BASE_ on a word boundary */.sdata2 : {.=ALIGN(8);_sdata2_start = .;*(.sdata2).=ALIGN(8);_sdata2_end = .;} > ilmb_cntlr_sdata2_size = _sdata2_end - _sdata2_start;PROVIDE (_SDA2_BASE_ = _sdata2_start + (_sdata2_size / 2 ));.data : {. = ALIGN(4);_fdata = .;a = 0x1000;*(.data)*(.data.*)*(.gnu.linkonce.d*)_edata = .;} > SRAM_256Kx32_C_MEM0_BASEADDR .eh_frame : { *(.eh_frame) } > ilmb_cntlr /* Alignments by 8 to ensure that _SDA_BASE_ on a word boundary */ /* Note that .sdata and .sbss must be contiguous */ .sdata : {. = ALIGN(8);_ssro = .;*(.sdata)} > ilmb_cntlr .sbss : {. = ALIGN(4);PROVIDE (__sbss_start = .);*(.sbss)EME-ST09 www2.hcmut.edu.vn/~vkchau/ . = ALIGN(8); _essro = .;} > ilmb_cntlrPROVIDE (__sbss_end = _essro);_ssro_size = _essro - _ssro;PROVIDE (_SDA_BASE_ = _ssro + (_ssro_size / 2 ));.bss : {. = ALIGN(4);PROVIDE (__bss_start = .);*(.bss)*(COMMON). = ALIGN(4);PROVIDE (__bss_end = .);} > ilmb_cntlr

Page 15: Sß+¡ dß+Ñng EDK10.1_v1

.bss_stack : {

. = ALIGN(8);_heap = .;_heap_start = _heap;. += _STACK_SIZE;. = ALIGN(8);_stack = .;__stack = _stack;} > SRAM_256Kx32_C_MEM0_BASEADDR }

Ở chương trình này, mình sẽ tạo một ứng dụng để nhập dữ liệu từ bàn phím (chẳng hạn 100 ký tự), lưu trong SRAM và cho hiển thị giá trị nhị phân theo bảng mã ASCII lên LED 8 bit, do vậy ta chọn vùng data đặt trong SRAM, tuy nhiên vùng bss_stack cuối cùng cũng nênđặt trong SRAM, khai báo như trên thì chúng ta đã có thể đặt dữ liệu vào trong SRAM.Và file TestApp_Memery chưa chỉnh sữa (do phần mềm tự tạo) :

#include "xutil.h" #include "xgpio_l.h" /** Routine to write a pattern out to a GPIO* which is configured as an output* PARAMETER C_ALL_INPUTS = 0*/void WriteToGPOutput(Xuint32 BaseAddress, int gpio_width) {int i=0, j=0; volatile int delay=0;

int numTimes = 5; XGpio_mSetDataDirection(BaseAddress, 1, 0x00000000); /* Set as outputs */ while (numTimes > 0) { j = 1; for(i=0; i<(gpio_width-1); i++) {XGpio_mSetDataReg(BaseAddress, 1, j);j = j << 1;for (delay=0; delay<1000000; delay++) {; //wait } }j = 1; j = ~j; for(i=0; i<(gpio_width-1); i++) {XGpio_mSetDataReg(BaseAddress, 1, j);j = j << 1;for (delay=0; delay<1000000; delay++) {; //wait }

Page 16: Sß+¡ dß+Ñng EDK10.1_v1

}numTimes--; } }//==================================================== int main (void) { print("-- Entering main() --\r\n"); /** MemoryTest routine will not be run for the memory at* 0x00000000 (dlmb_cntlr)* because it is being used to hold a part of this application program*/WriteToGPOutput(XPAR_LEDS_8BIT_BASEADDR, 8); /* Testing EMC Memory (SRAM_256Kx32)*/ { XStatus status; print("Starting MemoryTest for SRAM_256Kx32:\r\n");print(" Running 32-bit test...");status =XUtil_MemoryTest32((Xuint32*)XPAR_SRAM_256KX32_MEM0_BASEADDR, 1024, 0xAAAA5555, XUT_ALLMEMTESTS); if (status == XST_SUCCESS) { print("PASSED!\r\n"); }else { print("FAILED!\r\n");}print(" Running 16-bit test...");status =XUtil_MemoryTest16((Xuint16*)XPAR_SRAM_256KX32_MEM0_BASEADDR, 2048, 0xAA55, XUT_ALLMEMTESTS); if (status == XST_SUCCESS) { print("PASSED!\r\n"); }else { print("FAILED!\r\n");}print(" Running 8-bit test...");status =XUtil_MemoryTest8((Xuint8*)XPAR_SRAM_256KX32_MEM0_BASEADDR, 4096, 0xA5, XUT_ALLMEMTESTS); if (status == XST_SUCCESS) { print("PASSED!\r\n"); }else { print("FAILED!\r\n"); } }print("-- Exiting main() --\r\n"); return 0; }

Chương trình trên chỉ test bộ nhớ ,sau đây là chương trình của ví dụ : #include "xparameters.h" #include "xutil.h"#include "xgpio_l.h"

Page 17: Sß+¡ dß+Ñng EDK10.1_v1

main(){int i;extern char a[100] /*biến a phảiđược khai báo trong Linker_Script, có địa chỉ Offset là phần sau phần sau dấu bằng a = 0x1000; thìđịa chỉ của a[0] sẽ là0x20101000,vìđịa chỉ bắtđầu của SRAM là 0x20100000 */ xil_printf(“chuong trinh bat dau\n\r); for(i=0;i<100;i++) {a[i]=XuartLite_RecvByte(STDIN_BASEADDRESS); xil_printf(“\n\rky tu ban vua nhap la :%c”,a[i]);xil_printf(“\n\rgia tri thap phan vua nhap la:%d”,a[i]);xil_printf(“\n\rgia tri thap luc phan ban moi vua nhap la:%x”,a[i]);Xgpio_mSetDataReg(0x40000000,1,a[i]);}xil_printf(“chuong trinh ket thuc”)} Chương trình này sẽ hiển thị dòng đầu tiên là dòng “chuong trinh bat dau”, sau đó xuống dòng, màn hình giao tiếp với máy tính sẽ chờ bạn nhập từng giá trị của dãy a[i], hiển thị giá trị thập phân và thập lục phân này lên màn hình giao tiếp với máy tính,và hiển thị giá trị nhị phân lên 8 LED đơn của máy Board Spartan-3 Starter, và cứ tiếp tục như vậy khi các bạn nhập xong 100 giá trị (bất kì bằng đường nào, miễn là truyền qua cổng RS-232), thì màn hình xuất ra dòng “chuong trinh ket thuc” Các hàm XuartLite_RecvByte, và hàm Xgpio_mSetDataReg là hàm được viết sẵn , các bạn nên tìm hiểu các hàm này, nó nằm trong các ngoại vi tương ứng, ví dụ hàmXuartLite_RecvByte nằm trong ngoại vi UART(RS232) còn hàm Xgpio_mSetDataReg nằm trong ngoại vi GPIO(Led 8 bit), muốn xem các hàm này các bạn vào Tab System, chọn ngoại vi tương ứng :Ở trong phần Driver, các bạn nhấn chuột phải, chọn View API Doc để xem thư viện các hàm viết sẵn, một điều lưu ý là không phải tất cả các ngoại vi đều có hàm viết sẵn. Như vậy chúng ta đã xong phần hệ thống và chương trình điều khiển, tiếp theo, các bạn cho dịch chương trình, nhấn vào nút trên thanh công cụ để dịch, lưu ý thời gian dịch là rất lâu, có thể gần 10 phút, và trong khi dịch, máy sẽ tận dụng toàn bộ khả năng của CPU, và làm cho CPU rất nóng, có thể máy sẽ khởi động lại do nhiệt độ quá cao, nên các bạn cần giải nhiệt tốt cho CPU để tránh tình trạng khởi động lại của máy, nếu không chúng ta sẽ phải làm lại từ đầu.Sau khi dịch xong, để giao tiếp với máy tính, chúng ta dùng chương trình Hyper Terminal , là chương trình Window hỗ trợ sẵn để sử dụng cổng truyền bấtđồng bộ UART trên máy tính, bật chương trình Hyper Terminal lên :

Page 18: Sß+¡ dß+Ñng EDK10.1_v1

Đặt tên cho chương trình (chỉ là thủ tục), nhấn OK để chọn cổng COM1, nhấn OK đi tiếp theo để chọn tốc độ truyền, bit kiểm tra chẵn lẽ…,lưu ý là phải đồng bộ với tốc độ của cổng UART của MicroBlaze mà chúng ta đã chọn từ đầu: Như vậy là Kit của chúng ta đã có thể giao tiếp với máy tính qua cổng truyền bất đồng bộ. Nối dây truyền dữ liệu (sử dụng cổng 25 chân trên máy tính) và cổng nối tiếp để tryền chương trình từ phần mềm xuống Kit và giao tiếp giữa Kit và máy tính, lưu ý phải đúng chân, nếu không muốn Kit có thể hư. Sau đó, nạp (nhúng) toàn bộ hệ thống vào Kit bằng nút thì chúng ta đã có một hệthống hoạt động độc lập có thể giao tiếp với thiết bị khác (ở đây là máy tính), trongtrường hợp này, Kit của chúng ta sẽ là máy chủ ,còn máy tính là ngoại viđể giao tiếp.Chương trình mô phỏng sẽ được gởi kem theo File .wrf Kết quả của chương trình Hyper Termainal sau khi chạy chương trình:

Page 19: Sß+¡ dß+Ñng EDK10.1_v1

Giá trị nhị phân sẽ được hiển thị trên 8 LEDđ ơn của Kit từ Led 1->Led 8,kết quả các bạn xem trong File.wrf .Các bạn cũng có thể tạo ra một ngoại vi riêng để gioa tiếp với MicroBlaze, chẳng hạn giao tiếp với bàn phím qua cổng PS2 có sẵn trên Kit, tuy nhiên, muốn viết được giao tiếp này thì các bạn phải nắm vững ngôn ngữ VHDL hoặc Verilog HDL, sử dụng phần mềm ISE để thiế kế, và vấn đề là các bạn phải viết toàn bộ các giao thức , các thư viện cho ngoại vi mới tạo ra, EDK 7.1i không hỗ trợ viết bằng C, bạn nào quan tâm thì xin tìm hiểu mục: Creat and Import Peripheral Wizard trong File est_rm.pdf.Đây là chương trình mới, tài liệu ít nên trong khi viết có ít nhiều sai sót, mong các bạn bỏ qua.