BÀI THỰC TẬP SỐ 1: XÂY DỰNG HỆ THỐNG NHÚNG GIAO TIẾP LED

Một phần của tài liệu thực hiện một số ứng dụng nhúng nâng cao trên board altera de2 115 (Trang 25 - 57)

Sinh viên thực hiện:

1. Họ và tên: ... MSSV: ... 2. Họ và tên: ... MSSV: ... Thời gian thực hiện: 4 tiết.

Mục đích

Bài thực tập này nhằm mục đích giúp sinh viên tìm hiểu cách giao tiếp của hệ thống nhúng với LED, Switch, LED 7 đoạn thông qua việc thiết kế một mạch có chức năng tương tự như mạch cộng 8 bit với đầu vào và đầu ra là các số thập lục phân.

Yêu cầu

 Dựa vào các ngoại vi và chức năng hỗ trợ trên board DE2-115 để thiết kế một mạch cộng với các yêu cầu sau:

 Viết chương trình cộng và hiển thị kết quả của 2 số thập lục phân lên các LED đơn và LED 7 đoạn bằng phần mềm Quartus II phiên bản 11.0 sử dụng công cụ QSys.

 Giá trị đầu vào được nhập bằng cách thay đổi trạng thái các công tắc SW15 – SW0 và các trạng thái của các công tắc này được hiển thị lên các LED đỏ tương ứng LEDR15 – LEDR0.

 Hiển thị các giá trị thập lục phân đầu vào đã nhập và kết quả thập lục phân đầu ra lên LED 7 đoạn HEX7 – HEX0.

CÁC NGOẠI VI CẦN SỬ DỤNG:

12

 Số hạng thứ nhất:

o Đầu vào: SW15 – SW8

o Hiển thị trạng thái SW: LEDR15 – LEDR8 o Đầu ra: HEX7 – HEX6

 Số hạng thứ hai:

o Đầu vào: SW7 – SW0

o Hiển thị trạng thái SW: LEDR7 – LEDR0 o Đầu ra: HEX5 – HEX4

 Kết quả:

o Hiển thị: HEX3 – HEX0.

Các bước thực hiện 4.1.3.1 Sơ đồ hệ thống

Hình 4.1.2 Sơ đồ hệ thống

13

Hình 4.1.3 Lưu đồ giải thuật

4.1.3.2 Các bước thực hiện

Bước 1: Tạo hệ thống mới

Hình 4.1.4 Tạo project mới

 Nhấp chuột vào biểu tượng để mở phần mềm Quartus II 11.0. Bắt đầu

Nhận giá trị số hạng thứ nhất bằng SW15 – SW8

Hiển thị giá trị lên 4 bit cao của LEDR

Nhận giá trị số hạng thứ hai bằng SW7 – SW0

Hiển thị giá trị lên 4 bit thấp của LEDR

Hiển thị số hạng thứ nhất lên led 7 đoạn thứ 7 và thứ 6. Hiển thị số hạng thứ nhất lên led 7 đoạn thứ 5 và thứ 4. Hiển thị số kết quả lên led 7 đoạn thứ 3-2-1-0.

Cộng hai số hạng

Nhập giá trị số hạng thứ nhất bằng SW15 – SW8

Nhập giá trị số hạng thứ hai bằng SW7 – SW0

Xuất giá trị lên 8 bit cao của LEDR

Xuất giá trị lên 8 bit thấp của LEDR

Hiển thị số hạng thứ nhất lên led 7 đoạn thứ 7 và thứ 6. Hiển thị số hạng thứ nhất lên led 7 đoạn thứ 5 và thứ 4. Hiển thị số kết quả lên led 7 đoạn thứ 3-2-1-0.

14

 Chọn Create a New Project trong cửa sổ Start Designing như Hình 4.1.4 hoặc chọn File/ New Project Wizard trên thanh công cụ của cửa sổ Quartus II (Hình 4.1.5).

Hình 4.1.5 Tạo project mới

 Trong cửa sổ New Project Wizard:

o Chọn đường dẫn lưu hệ thống và đặt tên cho project (Hình 4.1.6).

Hình 4.1.6 Chọn nơi lưu và đặt tên cho hệ thống

Hình 4.1.7 Add File [Page 2 of 5]

o Trong cửa sổ Add File [Page 2 of 5] chọn Next (Hình 4.1.7). Trong trường hợp xây dựng hệ thống bằng công cụ QSys bước này được bỏ qua cho đến khi tạo được file.quip.

o Trong cửa sổ Family & Device Settings [Page 3 of 5] chọn dòng vi xử lý tương ứng với Board mạch đnag sử dụng.

15

Board mạch được sử dụng trong bài nghiên cứu này là DE2- 115 (Hình 4.1.8) :

 Device family chọn Cyclone IV E.  Target device chọn “Specific” và ở

mục“Available Devices”EP4CE115F29C7. Nhấn “Next”.

o Trong cửa sổ EDA Tool Settings [page 4 of 5] để mặc định và chọn chọn Next (Hình 4.1.9).

o Trong cửa sổ Summary [page 5 of 5] chọn Finish để hoàn tất việc tạo project (Hình 4.1.10).

Hình 4.1.8 Family & Device Settings [page 3 of 5]

16

Hình 4.1.10 Cửa sổ tổng hợp.

Bước 2: Xây dựng hệ thống trên QSys

 Tạo một hệ thống QSys bao gồm:

o CPU: cấu hình sử dụng core Nios II processor Nios II/s, JTAG Debug Module lever 2.

o RAM (On-Chip Memory (RAM or ROM)): 32 kB.

o SW (Peripherals  Microcontroller Peripherals  PIO): 16 bit – input.

o LEDR (PIO): 16 bit – output.

o HEX3_0 (University Program Generic IO Parallel Port): 3 to 0.

o HEX7_4 (Parallel Port): 7 to 4.

 Trong cửa sổ Quartus chọn biểu tượng hoặc trên thanh công cụ vào Tools/QSys để mở công cụ QSys (Hình 4.1.11).

 Tạo bộ xử lý trung tâm Nios II Processor: trong cửa sổ “Component Library” Processors Nios II Processor (Hình 4.1.12 )

 Trong Tab “Core Nios II”: chọn “Nios II /s”(Hình 4.1.13)  Trong Tab “JTAG Debug Module” : tại mục Select a

debugging level ta chọn Level 2 (Hình 4.1.14)  Chọn “Finish” để hoàn thành việc thiết kế CPU.  Đổi tên nios2_QSys_0 thành “CPU”.

17

Hình 4.1.11 Mở công cụ QSys

18

Hình 4.1.13 Chọn cấu hình sử dụng core Nios II/s

Hình 4.1.14 Thêm JTAG Debug Module

 Chú ý: Ở phía dưới của tab Nios II Processor có hiện các error là do chúng ta chưa gán bộ nhớ vào CPU và hệ thống chưa được nối dây. Các bước này sẽ được thực hiện sau nên ta không cần bận tâm việc hệ thống báo lỗi.

19

 Tạo bộ nhớ On-Chip Memory: trong Tab “Component Library”  Memories and Memory Controllers  On-Chip  On-Chip Memory (RAM or ROM). (Hình 4.1.15). Trong cửa sổ On-Chip Memory (Hình 4.1.16) :

 Block Type chọn “Auto”

 Total Memory size = “32768” để xác định dung lượng bộ nhớ là 32Kb.

 Không thay đổi các cài đặt mặc định khác.  Chọn “Finish”.

 Đổi tên on-chip memory thành “RAM”.

Hình 4.1.15 Thêm On-Chip Memory

20

 Tạo cổng song song điều khiển LED 7 đoạn: Trong cửa sổ “Component Library”  University Program  Generic IO  Parallel Port (Hình 4.1.17):

 Ở mục “DE Board”: Chọn “DE2-115”

 Ở mục Presets “I/O device”: chọn “Seven Segment Displays”

 Ở mục “Seven Segment Digits” chọn: “3 to 0”.  Chọn “Finish” để kết thúc.(Hình 4.1.18)

 Đổi tên parallel_port_0 thành “HEX3_0”.

 Thực hiện tương tự cho “HEX7_4”, chỉ thay đổi Seven Segment Digits” chọn: “7 to 4” (Hình 4.1.19)

Hình 4.1.17 Thêm Parallel Port

21

Hình 4.1.19 Thiết lập cho HEX7_4

22

Hình 4.1.21 Thiết lập cho Switch

23

 Tạo ngõ vào /ra điều khiển LED đơn và công tắc: trong cửa sổ Component Library Peripherals  Microcontroller Peripherals  PIO (Hình 4.1.20):

o Tạo ngõ vào 16bit điều khiển công tắc (Hình 4.1.21):

 Ở mục “Basic Settings” nhập giá trị “16” vào khung “Width”

 Ở mục “Direction”Intput  Chọn “Finish”.

 Đổi tên thành “SW”.

o Tạo ngõ ra 16 bit điều khiển LED đơn: thực hiện tương tự như trên.

 Ở mục “Direction”  Output (Hình 4.1.22).  Đổi tên thành “LEDR”.

 Thực hiện nối dây để tạo địa chỉ cho hệ thống vừa tạo: o Tiến hành nối dây ở cột Connection

 Nối tất cả “Clock input” của các thành phần đã tạo với nguồn xung “clk” (Hình 4.1.23).

Hình 4.1.23 Kết nối thành phần xung clock

 Nối Reset Input của các thành phần khác với Reset_n của nguồn xung (Hình 4.1.24).

24

Hình 4.1.24 Kết nối thành phần Reset

 Nối tất cả các thành phần “Avalon Memory mappel Slave” của RAM, SW, HEX3_0, HEX7_4 với “Avalon memory mapple Master” (data_master) của CPU (Hình 4.1.25).  Nối thành phần “Avalon Memory mappel Slave”của RAM

với “Avalon memory mapple Master” (Intruction_master) của CPU.

Hình 4.1.25 Nối thành phần “Avalon Memory mappel Slave”

 Sau khi nối dây cho hệ thống, double-click CPU để gán bộ nhớ cho nó (Hình 4.1.26).

25

Hình 4.1.26 Chọn bộ nhớ Ram cho hệ thống

o Tại mục Reset Vector/ Reset Vector Memory: chọn RAM.s1. o Mục Exception Vector/ Exception Vector Memory: chọn

RAM.s1.

o Chọn Finish để kết thúc.

o Sau khi gán bộ nhớ và nối dây cho hệ thống các error ở hình 4.1.13 sẽ không còn nữa.

 Khai báo địa chỉ nền cho các phần cứng :

o Trên thanh công cụ: chọn SystemAuto-Assign Base Addresses. (Hình 4.1.27).

o Kết quả trước và sau khi gán địa chỉ nền được thể hiện trên (Hình 4.1.28 và 4.1.29).

26

Hình 4.1.28 Kết quả trước khi gán địa chỉ

Hình 4.1.29 Kết quả sau khi gán địa chỉ

 Lấy thiết bị để thực hiện gán chân ở bước tiếp theo: ở cột Export, click vào external_connection tương ứng của SW, LEDR, HEX3_0, HEX7_4 (Hình 4.1.30).

 Thực hiện biên dịch hệ thống:

o Trong tab Generate ta chọn Generate (Hình 4.1.31). o Chọn Save trong hộp thoại (Hình 4.1.32) xuất hiện. o Lưu tên của hệ thống là nios_sys (Hình 4.1.33).

 Chờ một khoảng thời gian để biết kết quả biên dịch, kết quả biên dịch thành công (Hình 4.1.34). Chương trình biên dịch thành công là khi

27

không có lỗi, không cần quan tâm đến số lượng cảnh báo của hệ thống.

Hình 4.1.30 Hệ thống sau khi lấy chân external_connection

Hình 4.1.31 Chọn Generate để biên dịch hệ thống

28

Hình 4.1.33 Đường dẫn nơi lưu hệ thống

Hình 4.1.34 Kết quả quá trình biên dịch

Bước 3: Gán chân hệ thống

Quay lại phần mềm Quartus II 11.0:

 Vào File trong cửa sổ Project Navigator:

o Click chuột phải Add/Remove File in Project (Hình 4.1.35) sẽ xuất hiện hộp thoại (Hình 4.1.36).

o Sau đó, chỉ đến file.qip với tên đã đặt ở Hình 4.1.33. Trong bài nghiên cứu này là nios_sys.qip (Hình 4.1.37).

o Chọn Add, Apply (Hình 4.1.38).

29

Hình 4.1.35 Project Navigator

Hình 4.1.36 Add file cho hệ thống

Hình 4.1.37 Chọn file nios_sys.qip để add

30

Hình 4.1.39 Kết quả sau quá trình add file.

 Trong cửa sổ project Quartus’s ta chọn biểu tưởng hoặc vào File/New xuất hiện hộp thoại (Hình 4.1.40) chọn Block Diagram/Schematic File để mở cửa sổ gán chân cho hệ thống.

Hình 4.1.40 Cửa sổ gán chân cho hệ thống

 Click vào biểu tượng để mở cửa sổ Symbol Tool.

 Trong cửa sổ Symbol: Project  nios_sys (Hình 4.1.41).

 Thực hiện gán chân cho hệ thống tương ứng (Hình 4.1.42). o Vào Pin Toll để lấy ngõ vào Input/Output/Bidir. o Chọn Orthogonal Node Tool để lấy dây nối. o Chọn Orthogonal Bus Tool để lấy dây bus.

31

Hình 4.1. 41 Cửa sổ lấy sơ đồ khối hệ thống

Hình 4.1.42 Thực hiện gán chân cho hệ thống

 Nhấp chuột phải vào nios_sys.qip chọn Set as Top-Level Entily (Hình 4.1.43).

 Trên thanh côngcụ: Chọn Assignments/Import Assignments (Hình 4.1.44).

 Chỉ đến tập tin DE2-115_pin_assignments.csv nhấn OK (Hình 4.1.45).

32

Hình 4.1.43 Set as Top-Level Entily cho file nios_sys.qip

Hình 4.1.44 Chọn Import Assignments.

Hình 4.1.45 Chọn file để gán chân.

 Lưu lại hệ thống với đuôi .bdf, sau đó cũng chọn Set as Top-Level Entily tương tự như bước vừa nêu (Hình 4.1.46).

 Nhấp chuột vào biểu tượng Start Compilation trên thanh công cụ hoặc vào Processing chọn Start Compilation để biên dịch, kiểm tra lỗi và gán chân (Hình 4.1.47).

33

Hình 4.1.46 Set as Top-Level Entily cho file LAB1.bdf

Hình 4.1.47 Biên dịch chương trình

 Khi biên dịch thành công xuất hiện hộp thoại (Hình 4.1.48).

Hình 4.1.48 Kết quả biên dịch thành công

 Sau khi biên dịch thành công tiến hành nạp file LAB1.sof xuống board. o Vào Programmer hoặc vào Tools/ Programmer trong cửa sổ

34

Hình 4.1.49 Programmer

o Trong cửa sổ Programer: chọn Add File chỉ đến file ứng dụng (LAB1.sof) đã thiết kế (Hình 4.1.50).

o Trong Hardware Setup chọn Hardware là USB-Blaster0 (Hình 4.1.51).

o Sau khi đã kết nối board DE2-115 với máy tính ta tiến hành nhấn Start để nạp. Kết quả nạp xuống thành công (Hình 4.1.52).

35

Hình 4.1.51 Kết nối board với hệ thống qua USB-Blaster

 Sau khi nạp hệ thống xuống board ta đóng chương trình Programmer lại sau đó tiến hành viết chương trình và biên dịch cho hệ thống.

Hình 4.1.52 Kết quả nạp xuống thành công

Bước 4: Viết chương trình ứng dụng cho hệ thống

 Mở chương trình Nios II 11.0 Software Buil Tools for Eclipse, chọn đường dẫn nơi lưu trữ phần mềm ứng dụng (Hình 4.1.53).

36

Hình 4.1.53 Chọn đường dẫn cho lưu trữ chương trình cho hệ thống

 Trên thanh công cụ: File New Nios II Application and BSP from Template (Hình 41.54)

 Trong cửa sổ Nios II Application and BSP form Template (Hình 4.1.55): o Tại mục SOPC Information File Name ta chỉ đường dẫn đến file

nios_sys.sopcinfo chứa thông tin phần cứng hệ thống.

o Trong mục Application project, đặt tên cho project của chương trình ứng dụng (ví dụ:”LAB1”).

o Trong mục Project template chọn project mẫu là Hello world small chứa chương trình mẫu.

o Chọn Finish để tạo project mới.

Hình 4.1.54 Tạo project mới cho hệ thống.

 Trong cửa sổ Project Explorer nhấp phải chuột vào LAB1_ bsp [nios_sys] chọn Properties (Hình 4.1.56).

 Trong cửa sổ Properties for LAB1_bsp: chọn Nios II BSP Properties, thiết đặt như Hình 4.1.57, chọn Apply OK.

37

Hình 4.1.55 Nios II Application and BSP form Template

38

Hình 4.1.57 Properties for LAB1_bsp

 Trên cửa sổ Project Explorer mở chương trình hello_world_small.c trong thư mục LAB1, đây là chương trình demo in ra màn hình một chuỗi ký tự. Ta sẽ xóa chương trình này và gõ đoạn chương trình điều khiển sau đây vào: #include <system.h> char seven_seg[]={0x3F, //0 0x06, //1 0x5B, //2 0x4F, //3 0x66, //4 0x6D, //5 0x7C, //6 0x07, //7 0x7F, //8 0x67, //9 0x77, //A 0x7C, //B 0x39, //C 0x5E, //D 0x79, //E 0x71 //F

39 };

char hex_segs[] = {0,0,0,0,0,0,0,0};

// Mang luu gia tri se hien thi len 7SEG - 8 7seg tuong ung 8 phan tu trong mang

/* Ham hien thi gia tri len 7Seg */

void Hex_Display(char number, char order_7seg ) {

volatile int * HEX3_0 = (int *) HEX3_0_BASE; // dia chi cua 7seg 3-0

volatile int * HEX7_4 = (int *) HEX7_4_BASE; //dia chi cua 7seg 7_4

hex_segs[order_7seg] = seven_seg[number];// [vi tri cua 7SEG] = [gia tri hien thi]

*(HEX3_0) = *(int *)(hex_segs);//gan cac gia tri trong mang cho thanh ghi 7seg

*(HEX7_4) = *(int *)(hex_segs+4); }

/* Ham tinh tong 2 so 8 bit nhap vao tu switc va hien thi ra 7seg */

void Sum() {

int number1,number2, sum;

volatile int * SW = (int *) SW_BASE;//dia chi Switch

volatile int * LEDR = (int *) LEDR_BASE;//dia chi LED-RED

*LEDR = *SW;//Gan gia tri Switch cho LED

number1=((*SW&0xFF00)>>8);// number1: 8 bit cao (8-15) cua switch

number2=(*SW&0x00FF);// number2: 8 bit thap (0- 7) cua switch

sum = number1+number2;

/*Hien thi len LED 7 doan*/

Hex_Display((number1&0xF0)>>4,7); //Hien thi 4 bit cao cua number1 ra 7Seg thu 7

Hex_Display(number1&0x0F,6);// Hien thi 4 bit thap cua number1 ra 7Seg thu 6

Hex_Display((number2&0xF0)>>4,5);// Hien thi number2 ra 7Seg thu 5 va thu 4

Hex_Display(number2&0x0F,4);

Hex_Display((sum&0xF000)>>12,3;// Hien thi sum ra 7Seg 3-2-1 -0

Hex_Display((sum&0x0F00)>>8,2); Hex_Display((sum&0x00F0)>>4,1); Hex_Display(sum&0x000F,0);

40 } int main(){ while(1) { Sum(); }}

 Nhấp chuột phải vào LAB1 chọn Buil Project (Hình 4.1.58)

Hình 4.1.58 Biên dịch chương trình vừa tạo

 Nhấp chuột phải lên LAB1 chọn Run As/Run Cofigurations… (Hình 4.1.59).

o Xuất hiện cửa sổ Run Cofigurations.

o Nhấp đúp vào Nios II Harware để tạo New_configuration (Hình 4.1.60)

o Chọn “Target Connection”

o Ở mục “System ID” Check chọn “Ignore mismatched system ID” và “Ignore mismatched system timestamp”.

o Chọn “Apply” và “Run” để nạp chương trình ứng dụng xuống phần cứng.

41

Hình 4.1.59 Mở cửa sổ Run Cofigurations

42

Hình 4.1.61 Kết quả biên dịch thành công

Bước 5: Demo hệ thống

Sau khi đã biên dịch và nạp thành công tất cả các quá trình trên, tiến hành thực hiện thử các phép toán để kiểm tra xem đúng với mục tiêu đề ra hay chưa. Ví dụ: 0x01 + 0x03 = 0x04

Hình 4.1.62 Kết quả demo

Kết quả đạt được

 Qua bài thực tập, sinh viên phải nắm vững được các thao tác kết nối giữa máy tính với board DE2-115.

 Biết cách sử dụng phần mềm Quartus II 11.0 và QSys để tạo ra phần cứng của hệ thống. Sử dụng được công cụ Nios II Software Build Tools for Eclipse để lập trình phần mềm cho hệ thống nhúng đã thiết kế.

 Nắm vững được cách giao tiếp giữa hệ thống nhúng với các ngoại vi LED đơn, switch và LED 7 đoạn.

 Có thể thực hiện được phép cộng các số thập lục phân bằng chương trình đã viết.

43

Một phần của tài liệu thực hiện một số ứng dụng nhúng nâng cao trên board altera de2 115 (Trang 25 - 57)

Tải bản đầy đủ (PDF)

(124 trang)