22
EME-ST09 www2.hcmut.edu.vn/~vkchau/ HƯỚNG DN SDNG PHN MM EDK 7.1i Gii thiu : Trong chương trình đào to, chc hn thế nào các bn cũng đã được hc môn Vi XLý và thí nghim vi xlý, và các bn đã làm quen vi vic lp trình 89C51 bng ngôn ngAssembly dành cho h8051.Tuy nhiên ,bên cnh đó các bn cũng có thlp trình cho h8051 bng ngôn ngC(cthlà Keil C) , tài liu có thđọc cun “THIT KHTHNG VI H8051” ca thy Tng Văn On. Vì ngôn ngC là ngôn ngcp cao nên vic lp trình cho 8051 ddàng hơn so vi sdng ngôn ngAssembly Vic viết chương trình ri đổ vào 89C51 được gi là “nhúng” và hthng to ra được gi là hthng nhúng. Tuy nhiên, 8051 có hn chế là bnhnh(ctrong ln ngoài), nên đây, mình xin gii thiu mt hthng nhúng hoàn toàn (không có sn Vi đều khin), vi điu khin và chương trình điu khin đây cũng sđược nhúng vào trong mt FPGA( Field Programable Gate Array). Và mt trong nhng chương trình thông dng được sdng hin nay là chương trình EDK (Embedded Design /Development Kit) được viết bi hãng Xilinx và sdng FPGA ca hãng Xilinx Tài liu này shướng dn các bn sdng phn mm EDK 7.1i ,là version 2005 ca hãng Xilinx. Chương trình EDK 7.1i là mt chương trình thân thin vi người sdng, giúp chúng ta có thddàng thiết kế mt hthng phc tp mà chthao tác đơn gin, vì thc cht, EDK sdng các chương trình VHDL viết sn (gi là các IP) nên ta không cn viết các Ip đó, mà chsdng nó, phn quan trng là chúng ta phi viết phn mm điu khin chip nhúng đã được viết sn đó, và điu này cũng thc skhông phi là khó khăn vì chúng ta không cn sdng tp lnh Asembly ca chip nhúng ( được đặ tên là MicroBlaze) mà chúng ta ssdng ngôn ngStandard C hay C++ để viết chương trình điu khin MicroBlaze (tương đương vi mt vi xlý 32 bit, đối vi version 4.0 còn có thêm FPU/đơn vxlý du chm động) và các thư viên htrsn vi các hàn điu khin ngoi vi rt nhiu) Sau đây xin đi vào chi tiết hướng dn sdng ,xin lưu ý , file này sđi kèm theo file hướng dn hình nh + âm thanh và kết quminh ha Chương trình được viết vi shướng dn tn tình ca thy Võ KChâu Lưu ý :chương trình EDK 7.1i chcó thchy được khi các bn đã cài phn mm Xilinx ISE 7.1 CÁC BƯỚC TO MT PROJECT : Bước 1 :to hthng phn cng cơ bn trong XPS (Xilinx Platform Studio): khi các bn cho chy chương trình EDK thì mt ca sxut hiên gi là ca sXPS, chúng ta sbt đầu to Project đây, màn hình khi đông chương trình như sau :

Huong dan su dung phan mem EDK 7.1i

Embed Size (px)

Citation preview

Page 1: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

HƯỚNG DẪN SỬ DỤNG PHẦN MỀM EDK 7.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 7.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ê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 MicroBlaze (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 + âm thanh và kết quả minh họa Chương trình được viết với sự hướng dẫn tận tình của thầy Võ Kỳ Châu Lưu ý :chương trình EDK 7.1i chỉ có thể chạy được khi các bạn đã cài phần mềm Xilinx ISE 7.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: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

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 đầu với bước tạ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:

Page 3: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

Ơû 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, mình 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:

Page 4: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

Nhấn Next để đi đến bước tiếp theo: Ơû 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 folloeing development Board: tạo hệ thống

dựa tr6n các Kit Development của Xilinx, ví dụ như AFX Virtex II Pro fg456 Proto 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ác phần cứng và ngoại vi được hỗ trợ trong phần mềm, Lưu ý đây chỉ là chương trình chạy trên Kit Development chứ không phải chương trình nạp trực tiếp để tạo sản phẩn chuyên dụng

Page 5: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

Ơû đâ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 6: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ Hình sau 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 sẽ gởi các bạn qua File kèm theo :ug130.pdf 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

Page 7: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

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 8: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

: Ơû 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 trong phần tài liệu gởi kèm Nhấn Next để tiếp tục quá trình thiết kế Bước tiếp theo, chương trình sẽ cho phép chúng ta lựa chọn các ngoại vi :

Page 9: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

Đầ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ì d64 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 độ truề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, được gọi tên là OPB GPIO,cũng được hỗ trợ để sử dụng 8 LED đơ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ố, ở thiết kế trong phần ví dụ này, mình chọn cả cổng RS232 và Led_8 bit trong hộp thoại đầu tiên này Nhấn Next để chọn các ngoại vi khác :

Page 10: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

Ơû hộp thoại này cho phép chọn ngoại vi là Led 7 đoạn và 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) Nhấn Next : Hộp thoại tiếp theo sẽ cho phép chúng ta 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

Page 11: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

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 12: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ 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ế:

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

Page 13: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

Hộp thoại của bước thứ hai sẽ xuất hiện, cho phép chúng ta chỉnh sửa(1), dịch chương trình và Download xuống Board (3),chỉnh sửa chương trình TestMemory_Application(4) hay xem lại và chỉnh sửa cho thiết kế vừa mới tạo ra (5) Ở đây sẽ chọn 5 vì chúng ta cần chỉnh sửa một ít trong chương trình ứng dụng và một số chương trình phụ trợ khác 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 14: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ Ở 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ý hệ thống và quản lý ứng dụng, các bạn có thể chỉnh sửa bổ xung hệ thống và quản lý ứng dụng tại cửa sổ này Ở Tab System ,bạn có thể chỉnh sửa lại thiết kế, nếu muốn chỉnh sửa , bổ xung hay bỏ bớt ngoại vi ,các bạn nhấn chộ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 ở bên cửa sổ phải ,nhấn Add, muốn bớt ta chọn phần cần bớt và nhấn Delete,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ổ xung, 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…

Page 15: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ 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ỗ 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 thộ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 sử 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 = 0x000FFFFF ilmb_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

Page 16: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ .rodata : { _frodata = .; *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) _erodata = .; } > ilmb_cntlr /* 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)

Page 17: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ . = ALIGN(8); _essro = .; } > ilmb_cntlr PROVIDE (__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 .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 mình 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;

Page 18: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ 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 } } 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;

Page 19: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ 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" main() { int i;

Page 20: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/ 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àm XuartLite_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 21: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

Đặt tên cho chương trình (chỉ là thủ tục), nhấn OK để chọn cổng COM1,nhấn OK dtie61p 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), trong trườ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 22: Huong dan su dung phan mem EDK 7.1i

EME-ST09 www2.hcmut.edu.vn/~vkchau/

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 :Craet 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