90
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN PHẠM ĐỨC THUẬN TRIỂN KHAI HỆ THỐNG NHÚNG TRÊN NIOS VÀ ỨNG DỤNG ĐIỀU KHIỂN THIẾT BỊ QUA MÁY TÍNH ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HƯNG YÊN - 2014 PHẠM ĐỨC THUẬN <TÊN ĐỀ TÀI> 2014

Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Embed Size (px)

DESCRIPTION

Đề tài: Triển khai hệ thống nhúng trên NIOS và ứng dụng điều khiển thiết bị qua máy tính.Tác giả: Phạm Đức Thuận.Trường ĐHSP KT Hưng Yên.

Citation preview

Page 1: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN

PHẠM ĐỨC THUẬN

TRIỂN KHAI HỆ THỐNG NHÚNG TRÊN NIOS

VÀ ỨNG DỤNG ĐIỀU KHIỂN THIẾT BỊ

QUA MÁY TÍNH

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC

HƯNG YÊN - 2014

PH

ẠM

ĐỨ

C T

HU

ẬN

<T

ÊN

ĐỀ

I>

2014

Page 2: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN

PHẠM ĐỨC THUẬN

TRIỂN KHAI HỆ THỐNG NHÚNG TRÊN NIOS

VÀ ỨNG DỤNG ĐIỀU KHIỂN THIẾT BỊ

QUA MÁY TÍNH

NGÀNH: CÔNG NGHỆ THÔNG TIN

CHUYÊN NGÀNH: CÔNG NGHỆ MÁY TÍNH

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC

NGƯỜI HƯỚNG DẪN

Th.S LÊ TRUNG HIẾU

HƯNG YÊN - 2014

Page 3: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

3

MỤC LỤC

MỤC LỤC ...................................................................................................... 3

DANH SÁCH HÌNH VẼ ................................................................................ 6

DANH SÁCH BẢNG BIỂU ........................................................................... 9

DANH SÁCH TỪ VIẾT TẮT ...................................................................... 10

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI ................................................... 11

Lý do chọn đề tài ......................................................................... 11 1.1

Mục tiêu của đề tài ...................................................................... 12 1.2

Giới hạn và phạm vi của đề tài .................................................... 12 1.3

Nội dung thực hiện ...................................................................... 12 1.4

Phương pháp tiếp cận .................................................................. 13 1.5

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ............................................................ 14

Tổng quan về FPGA .................................................................... 14 2.1

2.1.1 FPGA là gì? .............................................................................. 14

2.1.2 Tóm tắt lịch sử phát triển của FPGA ......................................... 14

2.1.3 Tại sao cần sử dụng FPGA ........................................................ 15

2.1.4 Các ứng dụng của FPGA ........................................................... 16

2.1.5 Cấu trúc của FPGA ................................................................... 16

2.2. KIT Altera DE2. ........................................................................ 18

2.3. Phần mềm Quartus II ................................................................... 21

2.3.1. Giới thiệu Quartus II ................................................................. 21

2.3.2. Thiết kế dự án bằng Quartus II. ................................................. 23

2.3.3. Xây dựng hệ thống bằng SoPC( Qsys) trên Quartus II ............... 30

Page 4: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

4

2.4. Phần mềm lập trình NIOS II ........................................................ 35

2.5. Truyền thông qua máy tính .......................................................... 39

2.6. Avalon Bus ................................................................................. 43

2.6.1. Avalon Bus Module .................................................................. 45

2.6.2. Các thiết bị ngoại vi Avalon ...................................................... 46

CHƯƠNG 3: NỘI DUNG THỰC HIỆN ..................................................... 48

Sơ đồ tổng quát hệ thống ............................................................. 48 3.1

Chi tiết thiết kế hệ thống ............................................................. 50 3.2

3.2.1. NIOS II Processor – nios2_qsys_0 .............................................. 50

3.2.2. JTAG Debug Module – jtag_uart_0 ........................................... 51

3.2.3. Rs232 – UART( Rs232 Serial Port) ........................................... 51

3.2.4. SRAM On Chip – onchip_memory2_0 ...................................... 52

3.2.5. EFAN ........................................................................................ 52

3.2.6. LCD .......................................................................................... 53

3.2.7. LED Controler – pio_0 – led_green ........................................... 56

3.2.8. Avalon Bus ............................................................................... 56

Thiết kế giao diện điều khiển trên máy tính. ................................ 59 3.3

Lưu đồ thuật toán ........................................................................ 61 3.4

3.4.1. Quá trình gửi ............................................................................... 61

3.4.2. Quá trình nhận ........................................................................... 62

Sơ đồ nguyên lý. ......................................................................... 64 3.5

3.5.1. Kết nối chân tín hiệu điều khiển ngoại vi ..................................... 64

3.5.2. Sơ đồ ghép nối Rs232. ............................................................... 65

3.5.3. Sơ đồ module màn hình LCD .................................................... 66

Page 5: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

5

3.5.4. Sơ đồ nguyên lý Relay 4 kênh ................................................... 67

Hình ảnh module thực tế ............................................................. 69 3.6

CHƯƠNG 4: KẾT LUẬN .......................................................................... 70

Kết quả đạt được của đề tài ......................................................... 70 4.1

Hạn chế của đề tài ....................................................................... 71 4.2

Hướng phát triển của đề tài.......................................................... 71 4.3

TÀI LIỆU THAM KHẢO ............................................................................. 72

PHỤ LỤC ..................................................................................................... 73

Page 6: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

6

DANH SÁCH HÌNH VẼ

Hình 2-1: Cấu trúc tổng thể của FPGA ......................................................... 16

Hình 2-2: Khối logic FPGA ......................................................................... 17

Hình 2-3: KIT Altera DE2............................................................................ 19

Hình 2-4: Các thành phần trên KIT Altera DE2............................................ 19

Hình 2-5: Giao diện chính ............................................................................ 21

Hình 2-6: Design Flow ................................................................................. 22

Hình 2-7: Khởi tạo dự án.............................................................................. 23

Hình 2-8: Đường dẫn, tên dự án, tên thực thể chính. .................................... 24

Hình 2-9: Add file. ....................................................................................... 24

Hình 2-10: Chọn Device .............................................................................. 25

Hình 2-11: Công cụ thiết kế, mô phỏng. ....................................................... 26

Hình 2-12: Kết thúc...................................................................................... 26

Hình 2-13: New Source ................................................................................ 27

Hình 2-14: Trình soạn thảo trên Quartus II ................................................... 27

Hình 2-15: Cửa sổ Assignment Editor dùng để gán chân .............................. 28

Hình 2-16: Cửa sổ Programer ....................................................................... 29

Hình 2-17: Đường dẫn đến thư mục Usb-Blaster Driver. .............................. 30

Hình 2-18: Chọn hệ thống SoPC dựa trên ngôn ngữ Verilog hoặc VHDL ... 31

Hình 2-19: Chọn NIOS II processor ............................................................ 32

Hình 2-20: Chọn Debug level ....................................................................... 32

Hình 2-21: Tạo bộ nhớ hệ thống. .................................................................. 33

Hình 2-22: JTAG UART .............................................................................. 34

Page 7: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

7

Hình 2-23: Hệ thống SoPC tối thiểu. ............................................................ 34

Hình 2-24: Tạo thêm I/O cần thiết cho hệ thống NIOS II ............................. 35

Hình 2-25: Chọn workspace cho dự án. ........................................................ 36

Hình 2-26: Giao diện chương trình phần mềm NIOS II ................................ 36

Hình 2-27: Tạo dự án mới với NIOS II ........................................................ 37

Hình 2-28: Trình soạn thảo .......................................................................... 38

Hình 2-29: Nạp xuống KIT .......................................................................... 38

Hình 2-30: Rs232 Pin table .......................................................................... 41

Hình 2-31: Sơ đồ khối một Avalon bus module trong thiết kế ...................... 46

Hình 3-1: Sơ đồ tổng quát hệ thống .............................................................. 48

Hình 3-2: Chọn phiên bản NIOS II/e ............................................................ 50

Hình 3-3: Component Jtag_uart ................................................................... 51

Hình 3-4: Component Rs232 ........................................................................ 51

Hình 3-5: SRAM On Chip............................................................................ 52

Hình 3-6: EFAN ........................................................................................... 52

Hình 3-7: Lcd_data ...................................................................................... 53

Hình 3-8: Lcd_rw ......................................................................................... 54

Hình 3-9: Lcd_rs .......................................................................................... 54

Hình 3-10: Lcd_e ......................................................................................... 55

Hình 3-11: Led control ................................................................................. 56

Hình 3-12: Giao tiếp giữa cổng Slave và Avalon Bus Module trong quá trình

đọc từ Slave .................................................................................................. 57

Hình 3-13: Thời gian trong quá trình đọc dữ liệu từ cổng slave .................... 57

Page 8: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

8

Hình 3-14: Các tín hiệu giao tiếp và thời gian trong khi ghi dữ liệu ra cổng

slave .............................................................................................................. 58

Hình 3-15: Giao diện chương trình chính ..................................................... 60

Hình 3-16: Giao diện chương trình điều khiển ............................................. 60

Hình 3-17: Lưu đồ thuật toán quá trình gửi dữ liệu ...................................... 61

Hình 3-18: Lưu đồ thuật toán quá trình nhận dữ liệu .................................... 63

Hình 3-19: Connect to GPIO1( DE2 KIT) .................................................... 64

Hình 3-20: Mạch chuẩn giao tiếp Rs232 dùng IC Max232 ........................... 65

Hình 3-21: Sơ đồ module màn hình LCD ..................................................... 66

Hình 3-22: Sơ đồ nguyên lý Module Relay 4 kênh ....................................... 68

Hình 3-23: Module Relay 4 kênh - 5V-220V/10A ........................................ 69

Page 9: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

9

DANH SÁCH BẢNG BIỂU

Bảng 3-1: Chân kết nối tín hiệu điều khiển GPIO1 ....................................... 65

Bảng 3-2: Rs232 pin assignments ................................................................. 66

Bảng 3-3: LCD Module pin assignment ....................................................... 67

Page 10: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

10

DANH SÁCH TỪ VIẾT TẮT

Từ viết tắt Từ đầy đủ Giải thích

ASIC Application-Specific Integrated

Circuit

Vi mach tích hợp chuyên dụng

CPLD Complex Programmable Logic

Device

Thiết bị logic có thể lập trình

được.

DE Development and Education

FPGA Field programmable gate array Vi mạch dùng cấu trúc mảng

phần tử logic lập trình được

LUT Look Up Table Bảng tìm kiếm

PLA Programmable Logic Array Mảng logic khả trình

SOPC System on a Programmable Chip

Builder

Xây dựng hệ thống trên một

CHIP

VHDL VHSIC Hardware Description

Language

Ngôn ngữ lập trình phần cứng

Page 11: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

11

CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI

Trong chương này sẽ trình bày tổng quan về đề tài bao gồm lý do chọn đề tài,

mục tiêu, giới hạn, phạm vi nghiên cứu, nội dung thực hiện và phương pháp tiếp

cận của đề tài.

Lý do chọn đề tài 1.1

Trong những năm gần đây, xu hướng của thế giới là phát triển mạnh công

nghệ bán dẫn. Một chip có thể tích hợp trên nó nhiều cổng logic có thể ứng dụng

trong nhiều lĩnh vực. Ngày nay, ngành công nghiệp chế tạo phần cứng luôn có

những đột phá không ngừng. Từ các mạch điện đơn giản đến các mạch số, mạch

tích hợp, kiến trúc mạch ngày một trở nên phức tạp hơn.

Các hệ thống nhúng được phát triển trên FPGA đang được sử dụng rộng rãi

cho các nghiên cứu, ứng dụng, và đào tạo hiện nay bởi đặc tính linh hoạt cho các

thiết kế thiết bị trên FPGA. Đặc tính có thể cấu hình lại của FPGA cho phép tạo ra

phiên bản thiết kế của một thiết bị mong muốn cho các ứng dụng khác nhau. Nhờ sử

dụng các ngôn ngữ mô phỏng phần cứng VHDL, Verilog và một số công cụ thiết

kế, mô phỏng, ngày nay, ở phòng thí nghiệm, cơ sở đào tạo, hay một cá nhân có thể

đưa ra ý tưởng, một mẫu thiết kế một bộ xử lý mong muốn, và thực thi nó trên

FPGA. Với những ứng dụng rộng rãi trong nhiều ngành công nghiệp đa dạng, hầu

hết các hệ nhúng hiện nay đều được phát triển trên công nghệ FPGA. Mặt khác,

FPGA được hỗ trợ rất nhiều các thiết bị ngoại vi tạo điều kiện thuận lợi cho việc

phát triển hệ thống nhúng, phát triển các ứng dụng điều khiển trên FPGA kết nối

với các thiết bị ngoại vi.

Để có được bước đầu làm quen và nghiên cứu về công nghệ FPGA từ đó có

thể nghiên cứu sâu hơn về công nghệ nên Em đã chọn đề tài nghiên cứu: “ Triển

khai hệ thống nhúng trên nios và điều khiển thiết bị qua máy tính” làm đề tài

tốt nghiệp Đại học của mình.

Page 12: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

12

Trong quá trình thực hiện đề tài này, do còn hạn chế về kiến thức và thời

gian nên không tránh được những thiếu sót. Em kính mong quý thầy cô

thông cảm và bỏ qua đồng thời em cũng mong nhận được những góp ý và

chỉ bảo thêm của quý thầy cô.

Mục tiêu của đề tài 1.2

Tạo bước đầu cho Sinh Viên nghiên cứu ứng dụng của Altera DE2 Cylone

II nói riêng và FPGA nói chung.

Nắm được trình tự thiết kế một ứng dụng sử dụng NIOS trên DE2: Cách

lập trình, thiết kế phần cứng, cũng như cách vận hành giao tiếp giữa Kit

DE2 với các thiết bị ngoại vi.

Thiết kế hệ thống nhúng trên NIOS và ứng dụng điều khiển thiết bị qua

máy tính.

Rèn luyện khả năng tư duy, sáng tạo và kinh nghiệm làm việc trong thực tế.

Giới hạn và phạm vi của đề tài 1.3

Nghiên cứu FPGA của Altera. nguyên lý hoạt động của Kit Altera DE2

Cylone II. Tìm hiểu về các cổng vào ra của Kit DE2, kết nối với máy tính

và các thiết bị ngoại vi.

Đưa ra được giải pháp và chức năng của sản phẩm, thiết kế mạch và lập

trình đạt được yêu cầu đặt ra của hệ thống điều khiển.

Nghiên cứu và phát triển hệ thống nhúng trên FPGA của hãng Altera.

Viết chương trình điều khiển trên máy tính kết nối với FPGA điều khiển

thiết bị ngoại vi.

Nội dung thực hiện 1.4

Tìm hiểu, nghiên cứu nguyên lý hoạt động của Kit Altera DE2 Cylone II.

Tìm hiểu về các cổng vào ra của Kit DE2, kết nối với máy tính và các thiết

bị ngoại vi.

Page 13: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

13

Đưa ra được giải pháp và chức năng của sản phẩm, thiết kế mạch và lập

trình đạt được yêu cầu đặt ra của hệ thống điều khiển.

Sử dụng tốt công cụ lập trình NIOS tạo ứng dụng điều khiển thiết bị qua

máy tính.

Lắp đặt, chạy thử và hoàn thiện hệ thống.

Quyển báo cáo viết và trình bày theo đúng mẫu quy định.

Phương pháp tiếp cận 1.5

Cách tiếp cận : Nghiên cứu các ngôn ngữ, phần mềm thiết kế hệ thống nhúng

trên nền tảng Altera như VHDL, Verilog, Qsys trên Quartus II và viết phần mềm

trên NIOS II. Lập trình giao diện điều khiển thiết bị trên máy tính bằng Visual

Studio 2010.

Sử dụng các phương pháp nghiên cứu:

Phương pháp đọc tài liệu.

Phương pháp phân tích mẫu.

Phương pháp thực nghiệm.

Page 14: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

14

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

Chương này sẽ trình bày cơ sở lý thuyết của đề tài bao gồm tổng quan về

FPGA, giới thiệu phần mềm, công cụ sử dụng trong đề tài, các bước triển khai hệ

thống, truyền thông qua máy tính.

Tổng quan về FPGA 2.1

2.1.1 FPGA là gì?

Field-programmable gate array( FPGA) là vi mạch dùng cấu trúc mảng

phần tử logic mà người dùng có thể lập trình được.( Chữ field ở đây muốn chỉ đến

khả năng tái lập trình "bên ngoài" của người sử dụng, không phụ thuộc vào dây

chuyền sản xuất phức tạp của nhà máy bán dẫn). Vi mạch FPGA được cấu thành từ

các bộ phận:

Các khối logic cơ bản lập trình được( logic block)

Hệ thống mạch liên kết lập trình được

Khối vào/ra( IO Pads)

Phần tử thiết kế sẵn khác như DSP slice, RAM, ROM, nhân vi xử lý...

2.1.2 Tóm tắt lịch sử phát triển của FPGA

FPGA được thiết kế đầu tiên bởi Ross Freeman, người sáng lập công ty Xilinx

vào năm 1984, kiến trúc mới của FPGA cho phép tích hợp số lượng tương đối lớn

các phần tử bán dẫn vào 1 vi mạch so với kiến trúc trước đó là CPLD. FPGA có khả

năng chứa tới từ 100.000 đến hàng vài tỷ cổng logic, trong khi CPLD chỉ chứa từ

10.000 đến 100.000 cổng logic; con số này đối với PAL, PLA còn thấp hơn nữa chỉ

đạt vài nghìn đến 10.000.

CPLD được cấu trúc từ số lượng nhất định các khối SPLD( Simple

programmable devices, thuật ngữ chung chỉ PAL, PLA). SPLD thường là một mảng

logic AND/OR lập trình được có kích thước xác định và chứa một số lượng hạn chế

các phần tử nhớ đồng bộ( clocked register). Cấu trúc này hạn chế khả năng thực

Page 15: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

15

hiện những hàm phức tạp và thông thường hiệu suất làm việc của vi mạch phụ

thuộc vào cấu trúc cụ thể của vi mạch hơn là vào yêu cầu bài toán.

Kiến trúc của FPGA là kiến trúc mảng các khối logic, khối logic, nhỏ hơn

nhiều nếu đem so sánh với một khối SPLD, ưu điểm này giúp FPGA có thể chứa

nhiều hơn các phần tử logic và phát huy tối đa khả năng lập trình của các phần tử

logic và hệ thống mạch kết nối, để đạt được mục đích này thì kiến trúc của FPGA

phức tạp hơn nhiều so với CPLD.

Một điểm khác biệt với CPLD là trong những FPGA hiện đại được tích hợp

nhiều những bộ logic số học đã sơ bộ tối ưu hóa, hỗ trợ RAM, ROM, tốc độ cao,

hay các bộ nhân cộng( multiplication and accumulation, MAC), thuật ngữ tiếng

Anh là DSP slice dùng cho những ứng dụng xử lý tín hiệu số DSP.

Ngoài khả năng tái cấu trúc vi mạch toàn cục, một số FPGA hiện đại còn hỗ

trợ tái cấu trúc cục bộ, tức là khả năng tái cấu trúc một bộ phận riêng lẻ trong khi

vẫn đảm bảo hoạt động bình thường cho các bộ phận khác.

2.1.3 Tại sao cần sử dụng FPGA

FPGA cũng được xem như một loại vi mạch bán dẫn chuyên dụng ASIC,

nhưng nếu so sánh FPGA với những ASIC đặc chế hoàn toàn hay ASIC thiết kế

trên thư viện logic thì FPGA không đạt đựợc mức độ tối ưu như những loại này, và

hạn chế trong khả năng thực hiện những tác vụ đặc biệt phức tạp, tuy vậy FPGA ưu

việt hơn ở chỗ có thể tái cấu trúc lại khi đang sử dụng, công đoạn thiết kế đơn giản

do vậy chi phí giảm, rút ngắn thời gian đưa sản phẩm vào sử dụng.

Còn nếu so sánh với các dạng vi mạch bán dẫn lập trình được dùng cấu trúc

mảng phần tử logic như PLA, PAL, CPLD thì FPGA ưu việt hơn các điểm: tác vụ

tái lập trình của FPGA thực hiện đơn giản hơn; khả năng lập trình linh động hơn; và

khác biệt quan trọng nhất là kiến trúc của FPGA cho phép nó có khả năng chứa khối

lượng lớn cổng logic( logic gate), so với các vi mạch bán dẫn lập trình được có

trước nó.

Page 16: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

16

2.1.4 Các ứng dụng của FPGA

Ứng dụng của FPGA bao gồm: xử lý tín hiệu số DSP, các hệ thống hàng

không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC( ASIC prototyping), các hệ

thống điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật mã

học, mô hình phần cứng máy tính, máy đánh cờ( Máy đánh cờ Hydra có 32 bộ vi xử

lý cộng thêm FPGA đã chiến thắng kiện tướng quốc tế Michael Adams trong năm

2005.

Do tính linh động cao trong quá trình thiết kế cho phép FPGA giải quyết lớp

những bài toán phức tạp mà trước kia chỉ thực hiện nhờ phần mềm máy tính, ngoài

ra nhờ mật độ cổng logic lớn FPGA được ứng dụng cho những bài toán đòi hỏi khối

lượng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực.

2.1.5 Cấu trúc của FPGA

Cấu trúc tổng thể của một FPGA được minh họa ở hình sau:

Hình 2-1: Cấu trúc tổng thể của FPGA

Page 17: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

17

Khối Logic FPGA

Hình 2-2: Khối logic FPGA

Phần tử chính của FPGA là các khối logic(logic block). Khối logic được cấu

thành từ LUT và một phần tử nhớ đồng bộ flip-flop.

LUT( Look up table) là khối logic có thể thực hiện bất kì hàm logic nào từ 4

đầu vào, kêt quả của hàm này tùy vào mục đích mà gửi ra ngoài khối logic trực tiếp

hay thông qua phần tử nhớ flip-flop.

Trong tài liệu hướng dẫn của các dòng FPGA của Xilinx còn sử dụng khái

niệm SLICE, 1 Slice tạo thành từ gồm 4 khối logic, số lượng các Slices thay đổi từ

vài nghìn đến vài chục nghìn tùy theo loại FPGA.

Nếu nhìn cấu trúc tổng thể của mảng LUT thì ngoài 4 đầu vào kể trên còn hỗ

trợ thêm 2 đầu vào bổ sung từ các khối logic phân bố trước và sau nó nâng tổng số

đầu vào của LUT lên 6 chân. Cấu trúc này là nhằm tăng tốc các bộ số học logic.

Hệ thống mạch liên kết

Mạng liên kết trong FPGA được cấu thành từ các đường kết nối theo hai

phương ngang và đứng, tùy theo từng loại FPGA mà các đường kết nối được chia

thành các nhóm khác nhau, ví dụ trong XC4000 của Xilinx có 3 loại kết nối: ngắn,

dài và rất dài. Các đường kết nối được nối với nhau thông qua các khối chuyển

Page 18: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

18

mạch lập trình được( programmable switch), trong một khối chuyển mạch chứa một

số lượng nút chuyển lập trình được đảm bảo cho các dạng liên kết phức tạp khác

nhau.

Các phần tử tích hợp sẵn.

Ngoài các khối logic tùy theo các loại FPGA khác nhau mà có các phần tử tích

hợp thêm khác nhau, ví dụ để thiết kế những ứng dụng SoC, trong dòng Virtex 4,5

của Xilinx có chứa nhân xử lý PowerPC, hay trong Atmel FPSLIC tích hợp nhân

AVR…, hay cho những ứng dụng xử lý tín hiệu số DSP trong FPGA được tích hợp

các DSP Slide là bộ nhân cộng tốc độ cao, thực hiện hàm A*B+C, ví dụ dòng

Virtex của Xilinx chứa từ vài chục đến hàng trăm DSP slices với A, B, C 18-bit.

Block RAM

Ngoài ra những FPGA của Xilinx còn có block RAM, có thể mường tượng

như là bộ nhớ nhỏ nằm trong FPGA. Những FPGA này tuy nhỏ( khoảng vài chục kí

lô bit cho đến vài triệu bit tùy theo loại FPGA) nhưng có thể dùng để tạo một bộ

nhớ nhỏ như ROM, FIFO.

2.2. KIT Altera DE2.

DE2( Development and Education ) la một công cụ cho việc thiết kế nâng cao

các thiết bị đa phương tiện, lưu trữ và mạng.

DE2 sử dụng công nghệ state-of- the-art trong cả phần cứng và các công cụ

thiết kế nhờ máy tính giúp mở rộng phạm vi ứng dụng. DE2 có nhiều tính năng phù

hợp với cả việc sử dụng trong các phòng lab và các hệ thống số tinh vi. Altera cung

cấp các công cụ hỗ trợ phù hợp cho DE2, gồm có các hướng dẫn, các bài lab trên

DE2, và các bài minh họa…

Page 19: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

19

Hình 2-3: KIT Altera DE2

Các thành phần và thông số của KIT

Hình 2-4: Các thành phần trên KIT Altera DE2

Page 20: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

20

Altera Cyclone II 2C35 FPGA

Altera Serial Configuration device - EPCS16

USB Blaster dùng để lập trình hệ thống từ PC, hỗ trợ các chế độ JTAG cũng

như điều khiển trực tiếp khi sử dụng NIOS II

512 – Kbyte SRAM

8 – Mbyte SDRAM

4 – Mbyte Flash memory

Khe cắm SD Card

4 phím nhấn PushButton KEY[3:0]

18 Switch( cấp mức ‘0’ hay ‘1’)

18 đèn LEDR và 9 đèn LEDG

Có hai nguồn clock là 50 MHz và 27 MHz

Chip giải mã âm thanh 24 bits với các jack cắm line-in, line-out và

microphone

VGA DAC( 10-bit high-speed triple DACs) với cổng VGA

TV Decoder( NTSC/PAL) với TV-in( Video-in)

Cổng 10/100 Ethernet

Bộ điều khiển USB host/slave

RS – 232 với cổng kết nối 9 chân

Cổng PS/2 giao tiếp với chuột và keyboard

Cổng hồng ngoại

40 chân mở rộng

LDC 2x16

Page 21: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

21

2.3. Phần mềm Quartus II

2.3.1. Giới thiệu Quartus II

Quartus II là công cụ chính được sử dụng trong quá trinh thực hiện đề tài.

Được cung cấp và cập nhật thường xuyên bởi Altera. Đây là công cụ thiết kế tốt

nhất cho các dòng chip FPGA của Altera bao gồm cả Cyclon II 2C35 có trên DE2.

Là công cụ phân tích và tổng hợp thiết kế HDL, nó cho phép nhà phát triển

thực hiện thiết kế của họ, đồng thời cho phép phân tích thời gian, kiểm tra sơ đồ

RTL, mô phỏng hệ thống và cấu hình sản phẩm một cách phù hợp nhất.

Hình 2-5: Giao diện chính

Page 22: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

22

Thiết kế FPGA với SoPC( Qsys) trên Quartus II.

Dưới đây là quy trình thiết kế FPGA với các phần mềm thiết kế FPGA nói

chung và Quartus II nói riêng:

Hình 2-6: Design Flow

Design Entry – Mạch sau đã thiết kế sẽ được mô tả bởi các ngôn ngữ mô tả

phần cứng như VHDL hay Verilog, hoặc cũng có thể dùng sơ đồ

Schematic.

Synthesis – Công cụ tổ hợp sẽ tổ hợp mạch tạo ra một file netlist có chứa

các phần tử logic và các kết nối giữa chúng.

Function Simulation – Chức năng của mạch sau tổ hợp sẽ được kiểm định.

Page 23: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

23

Fitting – Công cụ máy tính sẽ đặt các phần tử logic được định nghĩa trong

file netlist xuống các phần tử logic trong con chip FPGA thực tế. Đồng thời

chọn ra các đường dây để kết nối chúng với nhau.

Timming Analysis – Phân tích trễ truyền dẫn trên các đường dây khác

nhau nhằm đưa ra các chỉ thị giúp cải thiện hiệu năng làm việc của mạch.

Timming Simulation – Kiểm tra đồng thời cả về mặt chức năng lẫn thời

gian của mạch.

Programming and Configuration – Thực hiện mạch trên con chip vật lý

bằng cách cấu hình các phần tử logic trên chip và thành lập các kết nối cần

thiết

2.3.2. Thiết kế dự án bằng Quartus II.

Tạo dự án, viết source code, biên dịch và nạp xuống KIT trên Quartus II.

Đề tài sử dụng phiên bản phần mềm Quartus 12.0 Web Edition.

Khởi tạo dự án: File New Project Wizard Next.

Hình 2-7: Khởi tạo dự án

Page 24: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

24

Điền đường dẫn lưu dự án, tên dự án và tên thực thể chính của dự án Next.

Hình 2-8: Đường dẫn, tên dự án, tên thực thể chính.

Thêm file thiết kế vào trong dự án Next.

Hình 2-9: Add file.

Page 25: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

25

- Thêm file mới cho dự án: Điền tên file name Add.

- Thêm file đã có sẵn: Browse đường dẫn đến file đã tạo sẵn và Add.

- Nếu đã tạo xong dự án mà muốn thêm file thiết kế VHDL vào trong dự án:

Ở mục Project Navigator, chuyển sang tab file, click chuột phải vào file

Add/Remove File in Project Add.

Chọn dòng thiết bị sử dụng.

Hình 2-10: Chọn Device

Đối với đề tài sử dụng KIT Altera Cyclone II DE2:

- Family: Cyclone II.

- Available device: EP2C35F672C6( DE2).

Page 26: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

26

Các công cụ thiết kế vi mạch khác sử dụng với phần mềm Quartus II để phát

triển dự án Next.

Hình 2-11: Công cụ thiết kế, mô phỏng.

Kết thúc quá trình khởi tạo dự án: Finish.

Hình 2-12: Kết thúc

Page 27: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

27

Chọn File New VHDL File Ok Chọn nơi lưu dự án Save.

Hình 2-13: New Source

Trình soạn thảo:

Hình 2-14: Trình soạn thảo trên Quartus II

Gán chân:

- Nhấp chọn Assignments > Assignment Editor. Nhấp đôi vào <<new>>.

Nhấp chọn tín hiệu từ danh sách trải xuống làm chân được gán. Tiếp đến

Page 28: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

28

nhấp đôi vào hộp bên phải hộp dành cho tín hiệu cần gán( cột Location).

Chọn chân PIN_XYZ từ danh mục hoặc có thể gõ trực tiếp vào hộp

Location.

Hình 2-15: Cửa sổ Assignment Editor dùng để gán chân

- Tương tự như trên, thực hiện gán chân cho các đầu vào khác

- Sau khi hoàn thành việc gán chân, nhấp chọn File > Save. Đóng cửa sổ

Assignment Editor, nhấp chọn Yes và biên dịch lại mạch.

Chú ý : Nên chọn tên các tín hiệu trùng với trong bảng

DE1_pin_assigment.csv thì khi gán chân ta chỉ cần vào assigment > import

assigment,trong đường dẫn ta trỏ đến file DE1_pin_assigment.csv rồi ấn OK và làm

theo bước 3 là xong.Không mất thời gian gán chân bằng tay.

Biên dịch

- Khi đã viết code xong cho một chương trình nào đó bạn cần biên dịch để

tạo ra những file dùng để nạp lên KIT DE2

- Bước 1: Nhấp chọn mục Processing > Start Complication. Biên dịch thành

công( hay không thành công) sẽ được thông báo trên hộp thoại bung ra sau

khi quá trình biên dịch kết thúc. Xác nhận bằng cách nhấp nút OK.

Page 29: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

29

- Bước 2: Khi biên dịch hoàn thành, một báo cáo biên dịch được đưa ra. Cửa

sổ này cũng có thể mở ra bất kỳ lúc nào bằng cách nhấp chọn Processing >

Complication Report. Trong báo cáo này bao gồm một số danh mục ở bên

trái cửa sổ, nhấp vào các danh mục này để thấy thông tin chi tiết của danh

mục này hiện lên ở bên phải cửa sổ.

- Bước 3: Sửa các lỗi: Chọn mục Analysis & Synthesis > Messages để hiển

thị thông báo lỗi. Nhấp đôi vào thông báo lỗi đầu tiên, dòng lệnh lỗi sẽ

được đánh dấu trên trình soạn thảo văn bản, sửa lại cho đúng rồi biên dịch

lại dự án.

Nạp xuống KIT

- Gạt chuyển mạch RUN/PROG sang vị trí RUN. Nhấp chọn Tools >

Programmer để có cửa sổ như trong hình. Đánh dấu vào tùy chọn

Program/Configue để cho phép nạp tệp cấu hình xxxxxx.sof.

Hình 2-16: Cửa sổ Programer

Page 30: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

30

Cài Driver Usb-Blaster.

- Để có thể nạp code xuống KIT, ta phải cài Driver Usb-Blaster.

- Vào Manage(Chuột phải vào Computer) Device ManageOther Device

- Chuột phải vào Usb-Blaster Update Driver SoftwareBrowse my

computer for driver softwareChọn đường dẫn tới thư mục Driver/Usb-

Blaster(Có sẵn trong thư mục cài Altera Quartus) Next Close.

Hình 2-17: Đường dẫn đến thư mục Usb-Blaster Driver.

2.3.3. Xây dựng hệ thống bằng SoPC( Qsys) trên Quartus II

Hệ thống SoPC( System on Programable Chip) bao gồm các thành phần

chính:

CPU Nios II

Memory( onchip memory hoặc Ram ngoài)

JTAG

Page 31: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

31

Port I/O

Các component

Ta mở tool SoPC builder( Qsys) trong phần mềm QUATUS II

Sau đó đặt tên hệ thống, chọn ngôn ngữ mô tả phần cứng là Verilog hay

VHDL, nhấn OK.

Hình 2-18: Chọn hệ thống SoPC dựa trên ngôn ngữ Verilog hoặc VHDL

Tạo VXL NIOS cho hệ thống.

Chọn kiểu NIOS II: tùy vào tính năng của hệ thống mà chọn lõi NIOS II cho

phù hợp. Trong vi dụ này vì không càn nhiều chức năng nên ta chon phiên bản đơn

giản nhất là phiên bản NIOS II/e bằng cách check vào mục NIOS II/e như hình bên

dưới.

Page 32: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

32

Hình 2-19: Chọn NIOS II processor

Đối với kiểu NIOS đơn giản ta tiếp tục next đến phần chọn thành phần JTAG.

Trong bài này ta sử dụng phiên bản NIOS II/e nên chỉ cho phép chọn JTAG level 1.

Rồi nhấn next để hoàn thành khai báo

Hình 2-20: Chọn Debug level

Page 33: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

33

Tạo bộ nhớ cho NiOS II.

Nios II chỉ là một lõi vi xử lý chứ chưa phải là vi điêu khiển do đó nó cần phải

có tối thiểu ộ nhớ dữ liệu và bộ nhớ chương trình để có thể hoạt động được.

Để đơn giản nhất là dùng On-Chip Memory bằng cách double_click “On-Chip

Memory(RAM or ROM)”. Nhưng lưu ý nên chọn dung lượng bộ nhớ phù hợp từng

ứng dụng. Chiều rộng mỗi ô nhớ là 32 bit nếu là kit DE2, nếu là DE1 ta chọn bộ

nhớ là 16KB. Sau đó chọn Finish để hoàn thành.

Khi tạo bộ nhớ xong, ta tạo kết nối giữa Nios II và bộ nhớ nếu nó chưa được

kết nối. Chú ý là phải kết nối cả hai bus instruction_master và data_master.

Hình 2-21: Tạo bộ nhớ hệ thống.

Page 34: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

34

Tạo UART thông qua chuẩn JTAG cho NIOS

Trong Communication double click chọn JTAG UART. Nếu không biết chỉnh

gì hết thì cứ nhấn Finish để hoàn thành.

Hình 2-22: JTAG UART

Sau bước này ta có hệ thống đơn giản có thể hoạt động được như hình sau

Hình 2-23: Hệ thống SoPC tối thiểu.

Page 35: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

35

Tạo I/O port cho NIOS II

Hình 2-24: Tạo thêm I/O cần thiết cho hệ thống NIOS II

2.4. Phần mềm lập trình NIOS II

Việc viết phần mềm cho phần cứng FPGA cũng tương tự như quá trình phát

triển phần mềm cho bất kỳ họ vi điều khiển nào khác. Bộ công cụ phần mềm Nios II

EDS chuyên dùng để viết phần mềm chạy trên bộ vi xử lý NiosII.

Nios II Software Build Tools for Eclipse cung cấp 2 quy trình khác nhau gồm

rất nhiều thuộc tính và công cụ mã nguồn mở nhằm tạo ra chương trình phần mềm

Nios II.

Page 36: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

36

Các bước làm việc trên NIOS

Chọn không gian lưu trữ dự án

Hình 2-25: Chọn workspace cho dự án.

Giao diện chính

Hình 2-26: Giao diện chương trình phần mềm NIOS II

Page 37: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

37

Tạo dự án

Hình 2-27: Tạo dự án mới với NIOS II

Đầu tiên chọn SOPC Information File name chính là hệ thống SOPC mà

chúng ta đã tạo ra bằng tool SoPC trên Quartus II. Browse vào hệ thống SOPC đã

tạo ra.

Khi chọn xong SOPC thì CPU name sẽ hiện lên tên CPU mà chúng ta đặt ở

phần xây dựng hệ thống. Và sau đó là đặt Project name rồi Finish. Kết thúc quá

trình tạo dự án.

Page 38: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

38

Trình soạn thảo

Hình 2-28: Trình soạn thảo

Nạp phần mềm xuống KIT

Hình 2-29: Nạp xuống KIT

Right Click, chọn Run As 3 Nios II Hardware.

Page 39: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

39

2.5. Truyền thông qua máy tính

Ngày nay các thiết bị đo lường, điều khiển ... đều phải giao tiếp với máy tính

để quan sát thông số và chế độ hoạt động của thiết bị như thế nào? Chuẩn giao tiếp

được coi là đơn giản và dễ dùng đó là RS232. Hầu như các thiết bị đều được giao

tiếp với máy tính thông qua chuẩn này.

Vấn đề giao tiếp giữa PC và vi điều khiển rất quan trọng trong các ứng dụng

điều khiển, đo lường... Ghép nối qua cổng nối tiếp RS232 là một trong những kỹ

thuật được sử dụng rộng rãi để ghép nối các thiết bị ngoại vi với máy tính.Nó là một

chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối nhiều nhất là 2 thiết

bị , chiều dài kết nối lớn nhất cho phép để đảm bảo dữ liệu là 12.5 đến 25.4m, tốc

độ 20kbit/s đôi khi là tốc độ 115kbit/s với một số thiết bị đặc biệt. Ý nghĩa của

chuẩn truyền thông nối tiếp nghĩa là trong một thời điểm chỉ có một bit được gửi đi

dọc theo đường truyền.

Có hai phiên bản RS232 được lưu hành trong thời gian tương đối dài là

RS232B và RS232C. Nhưng cho đến nay thì phiên bản RS232B cũ thì ít được dùng

còn RS232C hiện vẫn được dùng và tồn tại thường được gọi là tên ngẵn gọn là

chuẩn RS232

Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo chuẩn RS232C được gọi

là cổng Com. Chúng được dùng ghép nối cho chuột, modem, thiết bị đo

lường...Trên main máy tính có loại 9 chân hoặc lại 25 chân tùy vào đời máy và

main của máy tính. Việc thiết kế giao tiếp với cổng RS232 cũng tương đối dễ dàng,

đặc biệt khi chọn chế độ hoạt động là không đồng bộ và tốc độ truyền dữ liệu thấp.

Ưu điểm của giao diện nối tiếp Rs232.

Khả năng chống nhiễu của các cổng nối tiếp cao

Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính đang được cấp

điện

Các mạch điện đơn giản có thể nhận được điện áp nguồn nuôi qua công

nối tiếp

Page 40: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

40

Những đặc điểm cần lưu ý trong chuẩn Rs232

Trong chuẩn RS232 có mức giới hạn trên và dưới( logic 0 và 1) là +-12V.

Hiện nay đang được cố định trở kháng tải trong phạm vi từ 3000 ôm - 7000 ôm.

Mức logic 1 có điện áp nằm trong khoảng -3V đến -12V, mức logic 0 từ +-3V

đến 12V.

Tốc độ truyền nhận dữ liệu cực đại là 100kbps( ngày nay có thể lớn hơn) Các

lối vào phải có điện dung nhỏ hơn 2500pF.

Trở kháng tải phải lớn hơn 3000 ôm nhưng phải nhỏ hơn 7000 ôm.

Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng nối

tiếp RS232 không vượt qua 15m nếu chúng ta không sử model.

Các giá trị tốc độ truyền dữ liệu chuẩn : 50, 75, 110, 750, 300, 600, 1200,

2400, 4800, 9600, 19200, 28800, 38400....56600, 115200 bps.

Các mức điện áp đường truyền

RS 232 sử dụng phương thức truyền thông không đối xứng, tức là sử dụng tín

hiệu điện áp chênh lệch giữa một dây dẫn và đất. Do đó ngay từ đầu tiên ra đời nó

đã mang vẻ lỗi thời của chuẩn TTL, nó vấn sử dụng các mức điện áp tương thích

TTL để mô tả các mức logic 0 và 1. Ngoài mức điện áp tiêu chuẩn cũng cố định các

giá trị trở kháng tải được đấu vào bus của bộ phận và các trở kháng ra của bộ phát.

Mức điện áp của tiêu chuẩn RS232C( chuẩn thường dùng bây giờ) được mô tả

như sau:

Mức logic 0 : +3V , +12V

Mức logic 1 : -12V, -3V

Các mức điện áp trong phạm vi từ -3V đến 3V là trạng thái chuyển tuyến.

Chính vì từ - 3V tới 3V là phạm vi không được định nghĩa, trong trường hợp thay

đổi giá trị logic từ thấp lên cao hoặc từ cao xuống thấp, một tín hiệu phải vượt qua

quãng quá độ trong một thơì gian ngắn hợp lý. Điều này dẫn đến việc phải hạn chế

về điện dung của các thiết bị tham gia và của cả đường truyền. Tốc độ truyền dẫn

Page 41: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

41

tối đa phụ thuộc vào chiều dài của dây dẫn. Đa số các hệ thống hiện nay chỉ hỗ trợ

với tốc độ 19,2 kBd .

Cổng Rs232.

Hình 2-30: Rs232 Pin table

Chức năng của các chân như sau:

- Chân 1 : Data Carrier Detect( DCD) : Phát tín hiệu mang dữ liệu

- Chân 2: Receive Data( RxD) : Nhận dữ liệu

- Chân 3 : Transmit Data( TxD) : Truyền dữ liệu

- Chân 4 : Data Termial Ready( DTR) : Đầu cuối dữ liệu sẵn sàng được kích

hoạt bởi bộ phận khi muốn truyền dữ liệu

- Chân 5 : Singal Ground( SG) : Mass của tín hiệu

- Chân 6 : Data Set Ready( DSR) : Dữ liệu sẵn sàng, được kích hoạt bởi bộ

truyền khi nó sẵn sàng nhận dữ liệu

- Chân 7 : Request to Send : yêu cầu gửi,bô truyền đặt đường này lên mức

hoạt động khi sẵn sàng truyền dữ liệu

Page 42: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

42

- Chân 8 : Clear To Send( CTS) : Xóa để gửi ,bô nhận đặt đường này lên

mức kích hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận tín

hiệu

- Chân 9 : Ring Indicate( RI) : Báo chuông cho biết là bộ nhận đang nhận tín

hiệu rung chuông

Quá trình truyền dữ liệu

Truyền dữ liệu qua cổng nối tiếp RS232 được thực hiện không đồng bộ. Do

vậy nên tại một thời điểm chỉ có một bit được truyền( 1 kí tự). Bộ truyền gửi một bit

bắt đầu( bit start) để thông báo cho bộ nhận biết một kí tự sẽ được gửi đến trong lần

truyền bit tiếp the . Bit này luôn bắt đầu bằng mức 0.. Tiếp theo đó là các bit dữ

liệu( bits data) được gửi dưới dạng mã ASCII( có thể là 5,6,7 hay 8 bit dữ liệu) Sau

đó là một Parity bit( Kiểm tra bit chẵn, lẻ hay không) và cuối cùng là bit dừng - bit

stop có thể là 1, 1,5 hay 2 bit dừng.

Tốc độ Baud

Đây là một tham số đặc trưng của RS232. Tham số này chính là đặc trưng cho

quá trình truyền dữ liệu qua cổng nối tiếp RS232 là tốc độ truyền nhận dữ liệu hay

còn gọi là tốc độ bit. Tốc độ bit được định nghĩa là số bit truyền được trong thời

gian 1 giây hay số bit truyền được trong thời gian 1 giây. Tốc độ bit này phải được

thiết lập ở bên phát và bên nhận đều phải có tốc độ như nhau( Tốc độ giữa vi điều

khiển và máy tính phải chung nhau 1 tốc độ truyền bit)

Ngoài tốc độ bit còn một tham số để mô tả tốc độ truyền là tốc độ Baud. Tốc

độ Baud liên quan đến tốc độ mà phần tử mã hóa dữ liệu được sử dụng để diễn tả

bit được truyền còn tôc độ bit thì phản ánh tốc độ thực tế mà các bit được truyền.Vì

một phần tử báo hiệu sự mã hóa một bit nên khi đó hai tốc độ bit và tốc độ baud là

phải đồng nhất

Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400,

4800, 9600, 19200, 28800, 38400, 56000, 115200 … Trong thiết bị họ thường dùng

tốc độ là 19200

Page 43: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

43

Khi sử dụng chuẩn nối tiếp RS232 thì yêu cầu khi sử dụng chuẩn là thời gian

chuyển mức logic không vượt quá 4% thời gian truyền 1 bit. Do vậy, nếu tốc độ bit

càng cao thì thời gian truyền 1 bit càng nhỏ thì thời gian chuyển mức logic càng

phải nhỏ. Điều này làm giới hạn tốc Baud và khoảng cách truyền.

Parity bit

Đây là bit kiểm tra lỗi trên đường truyền. Thực chất của quá trình kiểm tra lỗi

khi truyền dữ liệu là bổ xung thêm dữ liệu được truyền để tìm ra hoặc sửa một số lỗi

trong quá trình truyền . Do đó trong chuẩn RS232 sử dụng một kỹ thuật kiểm tra

chẵn lẻ.

Một bit chẵn lẻ được bổ sung vào dữ liệu được truyền để cho thấy số lượng

các bit "1" được gửi trong một khung truyền là chẵn hay lẻ.

Một Parity bit chỉ có thể tìm ra một số lẻ các lỗi chả hạn như 1,3,,5,7,9... Nếu

như một bit chẵn được mắc lỗi thì Parity bit sẽ trùng giá trị với trường hợp không

mắc lỗi vì thế không phát hiện ra lỗi. Do đó trong kỹ thuật mã hóa lỗi này không

được sử dụng trong trường hợp có khả năng một vài bit bị mắc lỗi.

2.6. Avalon Bus

Avalon bus là một kiến trúc bus giản đơn, được thiết kế để kết nối các vi xử lý

nhúng và các thiết bị ngoại vi trong một hệ-thống-trên-chip-khả-trình( SOPC).

Avalon bus là một giao tiếp mà đặc tả các kết nối cổng giữa các thiết bị master và

slave, đồng thời đặc tả thời gian liên lạc giữa các thiết bị.

Mục đích thiết kế chính của Avalon bus là:Đơn giản: cung cấp một giao thức

dễ hiểu, dễ sử dụng. Tối ưu hóa việc sử dụng tài nguyên cho các bus logic: bảo toàn

các yếu tố logic( loigic element) bên trong thiết bị logic khả trình( PLD).

Đồng bộ hóa các quá trình hoạt động: vừa tích hợp tốt với các logic của người

dùng cùng tồn tại trên một PLD, lại vừa tránh được các vấn đề phân tích thời gian

phức tạp.

Page 44: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

44

Avalon bus hỗ trợ bus đa chủ. Các kiến trúc đa chủ này tạo ra một sự linh hoạt

rất lớn trong việc xây dựng các hệ thống SOPC, và tạo điều kiện cho các thiết bị

ngoại vi có băng thông rộng. Ví dụ: một thiết bị ngoại vi chủ có thể thực hiện một

quá trình truyền truy-xuất-bộ-nhớ-trực-tiếp( DMA) để truyền dữ liệu từ thiết bị

ngoại vi vào bộ nhớ mà không cần một vi xử lý trong đường truyền dữ liệu.

Các master và slave giao tiếp với nhau dựa trên một kĩ thuật gọi là thỏa hiệp ở

phía slave( slave-side arbitration). Kĩ thuật này xác định master nào được nắm

quyền giao tiếp với slave trong trường hợp nhiều master cùng truy cập đến một

slave.

Chi tiết về sự thỏa hiệp này được gói gọn bên trong Avalon bus. Do đó, các

giao tiếp master và slave rất chắc, bất chấp số lượng các master và slave có trên bus.

Mỗi bus master sẽ giao tiếp với Avalon bus như thể nó là master duy nhất trên

đường Avalon bus.

Các master có thể thực hiện quá trình truyền bất kì lúc nào, miễn là chúng

không truy cập cùng một slave trong cùng một chu kì bus.

Avalon bus được thiết kế để thích nghi với môi trường SOPC, do đó nó là một

kiến trúc bus tích hợp( on-chip) rất năng động, bao gồm các tài nguyên logic và

truyền bên trong một thiết bị logic khả trình. Một vài nét chính của kiến trúc Avalon

là:

Giao tiếp với các thiết bị ngoại vi đồng bộ với xung clock Avalon. Do đó, sự

sắp xếp các tín hiệu báo và tín hiệu bắt tay không đồng bộ và phức tạp là điều

không cần thiết. Hoạt động của Avalon bus( và cũng là của toàn hệ thống) có thể

được phân tích bằng các kĩ thuật phân tích chuẩn và đồng bộ thời gian.

Tất cả các tín hiệu đều hoạt động ở LOW hoặc HIGH, điều này cho phép sự

xoay vòng của hệ thống. Các bộ đa hợp bên trong Avalon bus xác định tín hiệu nào

điều khiển thiết bị ngoại vi nào. Các thiết bị ngoại vi sẽ không cần phải có ngõ ra 3-

trạng-thái ngay cả khi thiết bị không được chọn hoạt động.

Page 45: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

45

Các tín hiệu địa chỉ, dữ liệu và điều khiển sử dụng các cổng riêng biệt, điều

này làm đơn giản hóa thiết kế của các thiết bị ngoại vi. Một thiết bị ngoại vi không

cần thiết phải giải mã các chu kì bus dữ liệu và địa chỉ, và cũng không cần phải tắt

các ngõ ra khi nó không được chọn hoạt động.

Không gian địa chỉ lên tới 4Gbyte: các thiết bị ngoại vi và bộ nhớ có thể được

gắn bất kì nơi nào trong không gian địa chỉ 32-bit.

Tích hợp bộ giải mã địa chỉ: Avalon bus sẽ tự động tạo các tín hiệu Chip

Select cho tất cả các thiết bị ngoại vi, rất thuận tiện trong việc thiết kế các thiết bị

ngoại vi để giao tiếp với Avalon.

Avalon bus cũng bao gồm một số các đặc điểm và quy ước để hỗ trợ việc tạo

tự động các hệ thống, bus, và thiết bị bằng phần mềm SOPC Builder.

2.6.1. Avalon Bus Module

Avalon bus module là xương sống của một module hệ thống. Đó là con đường

chính để giao tiếp giữa các component trong một thiết kế SOPC. Avalon bus

module là một tập hợp các tín hiệu điều khiển, dữ liệu, địa chỉ và các logic thỏa hiệp

mà kết nối các thành phần tạo nên hệ thống. Avalon bus module thực hiện một kiến

trúc bus có thể cấu hình được, có nghĩa là có thể thay đổi để phù hợp với nhu cầu

kết nối các thiết bị ngoại vi của người thiết kế.

Avalon bus module được tạo một cách tự động bởi SOPC Builder, vì thế

người thiết kế hệ thống có thể tiết kiệm thời gian trong việc nối các thiết bị với

nhau. Sơ đồ khối của một Avalon bus module điển hình được trình bày trong hình.

Avalon bus module sẽ cung cấp các hỗ trợ sau cho những thiết bị ngoại vi kết

nối tới đường bus này:

Đa hợp đường dữ liệu: Các bộ đa hợp bên trong module Avalon bus sẽ truyền

dữ liệu từ thiết bị slave được chọn đến thiết bị master thích hợp.

Giải mã địa chỉ: bộ giải mã địa chỉ của module này sẽ tạo ra các tín hiệu chip

select cho mỗi thiết bị ngoại vi, như vậy các thiết bị ngoại vi không cần giải mã

Page 46: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

46

đường địa chỉ để tạo ra tín hiệu chip select đơn giản hóa các thiết kế của thiết bị

ngoại vi.

Tạo trạng thái chờ: bộ tạo trạng thái chờ sẽ mở rộng thêm các quá trình

truyền bằng một hay nhiều chu kì bus, điều này cần thiết cho một số thiết bị hoặc

quá trình đòi hỏi sự đồng bộ đặc biệt. Trạng thái này có thể được tạo ra để dừng một

thiết bị master trong hợp thiết bị slave không thể đáp ứng trong một chu kì bus.

Phân công ưu tiên ngắt: khi một hay nhiều thiết bị slave tạo ra các tín hiệu

ngắt, Avalon bus module sẽ chuyển các ngắt( theo thứ tự ưu tiên) đến cá thiết bị

master kèm theo số yêu cầu ngắt( IRQ number) thích hợp.

Khả năng trì hoãn các dữ liệu: các logic cần để thực hiện việc truyền với độ

trễ mong muốn giữa các cặp master-slave đã được tích hợp sẵn trong Avalon bus

module.

Hình 2-31: Sơ đồ khối một Avalon bus module trong thiết kế

2.6.2. Các thiết bị ngoại vi Avalon

Một thiết bị ngoại vi Avalon là một thiết bị logic, hoặc được tích hợp sẵn hoặc

nằm rời bên ngoài, thực hiện một số chức năng ở mức hệ thống và giao tiếp với các

Page 47: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

47

thành phần khác trong hệ thống thông qua Avalon bus. Các thiết bị này có thể được

thêm vào hoặc lấy ra khỏi hệ thống vào thời điểm thiết kế để phù hợp với yêu cầu

của hệ thống.

Thiết bị ngoại vi Avalon có thể là các bộ nhớ, vi xử lý, hay các thành phần

thiết bị ngoại vi truyền thống như UART, PIO, bộ định thời…. Bất kì logic người

dùng nào cũng có thể là một thiết bị ngoại vi, chỉ cần cung cấp giao tiếp địa chỉ, dữ

liệu và điều khiển cho Avalon bus. Một thiết bị ngoại vi sẽ kết nối với các cổng

riêng biệt trên Avalon bus module.

Chức năng của các thiết bị ngoại vi Avalon được phân loại thành master hoặc

slave. Một thiết bị ngoại vi chủ( master) là một thiết bị mà có thể khởi tạo quá trình

truyền dữ liệu trên Avalon bus. Nó cần ít nhất một cổng master nối với Avalon bus,

và có thể có các cổng slave để nhận dữ liệu từ các thiết bị chủ khác. Một thiết bị

slave là một thiết bị chỉ chấp nhận việc truyền dữ liệu từ Avalon bus và không thể

khời tạo quá trình truyền. Một số thiết bị slave điển hình như bộ nhớ hay cổng nối

tiếp sẽ có duy nhất một cổng slave nối với Avalon bus.

Master Port: Một cổng chủ là tập hợp các cổng trên một thiết bị chủ mà các

cổng này được sử dụng để khởi tạo các quá trình truyền trên Avalon bus. Cổng chủ

nối trực tiếp tới Avalon bus module. Trên thực tế, một thiết bị ngoại vi thường có

một hoặc nhiều cổng chủ, cũng như cồng slave. Sự phụ thuộc lẫn nhau giữa các

cổng này tùy vào thiết kế của thiết bị.

Cổng slave: Một cổng slave là một nhóm các cổng trên một thiết bị ngoại vi

mà chấp nhận việc truyền dữ liệu qua Avalon bus từ một cổng chủ.

Cặp chủ-tớ( master-slave pair): Một cặp chủ-tớ là sự kết hợp giữa một cổng

slave và một cổng master thông qua Avalon bus module. Về mặt cấu trúc, những

cổng master và slave này kết nồi đến cổng tương ứng trên Avalon bus module và

phải được chỉ rõ khi thiết kế trong SOPC Builder.

Page 48: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

48

CHƯƠNG 3: NỘI DUNG THỰC HIỆN

Chương này sẽ trình bày nội dung thực hiện công việc của đề tài bao gồm sơ

đồ hệ thống tổng quát, chi tiết thiết kế, lưu đồ thuật toán, sơ đồ nguyên lý và hình

ảnh module thực tế.

Sơ đồ tổng quát hệ thống 3.1

Sơ đồ tổng quát của hệ thống như sau:

Hình 3-1: Sơ đồ tổng quát hệ thống

Page 49: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

49

Sơ đồ khối tổng quát bao gồm những thành phần:

Computer: Dùng để nạp chương trình xuống KIT và truyền nhận dữ liệu để

điều khiển.

NIOS II Processor: Khu xử lý trung tâm đóng vai trò truyền nhận và xử lý dữ

liệu.

JTAG Debug Module: Nạp chương trình xuống KIT.

Rs232: Kết nối điều khiển từ máy tính xuống KIT thông qua cáp nối Rs232.

SRAM on chip: Bộ nhớ chương trình.

Avalon Bus: Giao tiếp giữa các Component trong một hệ thống SoPC.

EFAN: Các tín hiệu điều khiển hộp số của Quạt.

LCD: Các tín hiệu điều khiển LCD Character.

LED Controler: Điều khiển LED.

FAN: Tín hiệu kết nối với Quạt.

LCD Character: Hiển thị trạng thái ngoại vi.

Lamp: Tín hiệu kết nối với Đèn.

Page 50: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

50

Chi tiết thiết kế hệ thống 3.2

3.2.1. NIOS II Processor – nios2_qsys_0

Với yêu cầu của đề tài, tính năng của hệ thống còn cơ bản, không cần nhiều

chức năng nên chọn lõi NIOS II phiên bản NIOS II/e như hình bên dưới.

Hình 3-2: Chọn phiên bản NIOS II/e

Với phiên bản NIOS II/e này chúng ta có 1 bộ vi xử lý 32 bit. Với Jtag debug

Module là Level 1. Gồm các thành phần tín hiệu cơ bản sau:

Clk: Clock Input

Reset_n: Reset Input

Data_master: Avalon Memory Mapped Master

Intruction_master: Avalon Memory Mapped Master

Jtag_debug_module_reset: Reset Output

Jtag_debug_module: Avalon Memory Mapped Slave

Custom_intruction_master: Custom Intruction Master

Page 51: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

51

3.2.2. JTAG Debug Module – jtag_uart_0

Hình 3-3: Component Jtag_uart

Chọn mặc định Jtag uart như trong hình.

3.2.3. Rs232 – UART( Rs232 Serial Port)

Hình 3-4: Component Rs232

input wire uart_0_rxd, // uart_0.rxd

output wire uart_0_txd, // .txd

Component Uart( uart_0) với thông số như sau:

Data bits: 8

Page 52: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

52

Stop bits: 1

Synchronizer stage: 2

Baud rate: 57600 bps

3.2.4. SRAM On Chip – onchip_memory2_0

Hình 3-5: SRAM On Chip

Tạo ra bộ nhớ Ram on Chip với tổng dung lượng là 40960 bytes.

3.2.5. EFAN

Hình 3-6: EFAN

Page 53: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

53

PIO Efan với 3 tín hiệu chính là 3 tín hiệu điều khiển Quạt, tương ứng với số 1,

số 2, số 3 của Quạt.

output wire [2:0] efan_export,

3.2.6. LCD

Khối LCD là khối điều khiển LCD gồm những thành phần sau:

inout wire [7:0] lcd_data, // lcd.data

output wire lcd_E, // .E

output wire lcd_RS, // .RS

output wire lcd_RW, // .RW

Lcd_data – pio_3: Gồm 8 tín hiệu.

Hình 3-7: Lcd_data

Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ

sử dụng 8 đường bus này :

Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7.

Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là

DB7

Page 54: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

54

Lcd_rw – pio_4: Chân chọn thanh ghi.

Hình 3-8: Lcd_rw

Chân chọn chế độ đọc/ghi( Read/Write). Nối chân R/W với logic “0” để LCD

hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc.

Lcd_rs – pio_5: Chân chọn thanh ghi( Register select).

Hình 3-9: Lcd_rs

Page 55: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

55

Nối chân RS với logic “0”( GND) hoặc logic “1”( VCC) để chọn thanh ghi.

Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD( ở chế

độ“ghi”- write) hoặc nối với bộ đếm địa chỉ của LCD( ở chế độ “đọc” - read)

Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.

Lcd_e – pio_6: Chân cho phép( Enable)

Hình 3-10: Lcd_e

Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận

khi có 1 xung cho phép của chân E.

Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào( chấp nhận) thanh

ghi bên trong nó khi phát hiện một xung( high-to-low transition) của tín

hiệu chân E.

Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh

lên( lowto-high transition) ở chân E và được LCD giữ ở bus đến khi nào

chân E xuống mức thấp.

Page 56: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

56

3.2.7. LED Controler – pio_0 – led_green

Hình 3-11: Led control

Led control gồm 8 tín hiệu điều khiển tương ứng với 8 led green được tích hợp

trên KIT Altera DE2.

wire [7:0]led_green;

Bóng đèn ngoại vi được điều khiển nhờ vào tín hiệu của led green, từ đó, led

green trên KIT sáng thì bóng đèn ngoại vi cũng sáng.

output wire lamp,

assign lamp = ~led_green_export[0];

3.2.8. Avalon Bus

Quá trình đọc dữ liệu từ cổng Slave

Trong suốt quá trình này chân read_n và chipselect phải được kích hoạt. Một

đơn vị dữ liệu sẽ được chuyển từ cổng slave đến Avalon bus module với kích thước

bằng với độ rộng tối đa của cồng slave. Như vậy, trong module giao tiếp ta phải có

lệnh để khi Avalon bus thiết lập một quá trình đọc từ cổng slave, thiết kế của ta phải

đáp ứng lại chính xác dữ liệu muốn truyền lên. Có thể thực hiện việc này bằng các

lệnh sau:

always @(posedge clk) begin

read_cycle <=( !read_n) & chipselect;

Page 57: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

57

read_data <= data

end

Hình sau mô tả các chân kết nối cần thiết giữa cổng slave từ component mà ta

thiết kế với Avalon bus module.

Hình 3-12: Giao tiếp giữa cổng Slave và Avalon Bus Module trong quá

trình đọc từ Slave

Quá trình truyền này cụ thể gồm các giai đoạn: module Avalon bus nhận địa

chỉ và tín hiệu read_n, giải mã địa chỉ và tạo ra tín hiệu chipselect, dữ liệu được

cổng slave truyền lên. Hình sau mô tả chi tiết về thời gian trong quá trình đọc từ

cổng slave.

Hình 3-13: Thời gian trong quá trình đọc dữ liệu từ cổng slave

Page 58: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

58

Quá trình mô tả trên chỉ là quá trình đọc cơ bản từ các cổng slave. Ngoài ra, ta

có thể đọc từ cổng slave với nhiều cách( phụ thuộc vào thiết kế) như: đọc có trạng

thái chờ, đọc có thời gian cài đặt…

Quá trình ghi dữ liệu qua cổng Slave

Trong quá trình này, tín hiệu write_n và chipselect sẽ được kích hoạt. Dữ liệu

sẽ được truyền từ Avalon bus module ra cổng slave. Trong trường hợp cổng này

chưa đáp ứng được, thì quá trình truyền phải có trạng thái chờ. Ta có thể đơn giản

hoá thực thi này bằng các dòng lệnh sau trong module thiết kế:

always @(posedge clk) begin

write_cycle <=( !write_n) & chipselect;

data <= write_data;

end

Và sau khi module không đáp ứng kịp với tốc độ truyền dữ liệu từ Avalon

bus module ta có thể bật tín hiệu waitrequest lên. Sơ đồ khối các tín hiệu giao tiếp

trong quá trình ghi và thời gian của quá trình này được trình bày trong hình sau.

Hình 3-14: Các tín hiệu giao tiếp và thời gian trong khi ghi dữ liệu ra cổng

slave

Page 59: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

59

Thiết kế giao diện điều khiển trên máy tính. 3.3

Sử dụng phần mềm Visual Studio 2010 thiết kế giao diện trên máy tính bằng

Windows Form Application của C#. Chương trình này được dùng khá phổ biến, phù

hợp để thiết kế giao tiếp bởi giao diện thân thiện với người dùng.

Hệ thống được kết nối với máy tính thông qua đường Rs232( sử dụng mạch

chuyển USB sang Rs232) với tốc độ Baud là 57600.

Trên máy tính, có giao diện điều khiển được viết bằng C#, CPU Nios II sẽ

nhận lệnh từ máy tính để điều khiển đèn, quạt và hiển thị thông báo trên LCD của

kit.

Giao diện điều khiển cơ bản gồm các đối tượng chính:

2 button dùng để bật, tắt đèn

3 button tương ứng với 3 chế độ của quạt và 1 button dùng để tắt quạt.

2 button kết nối và ngắt kết nối.

1 button thoát chương trình

2 label hiển thị trạng thái của đèn và quạt.

2 picturebox giúp hiển thị một cách trực quan các trạng thái.

1 timer để hiển thị trạng thái của quạt.

1 SerialPort Com

1 ImageList

3 groupBox

1 ComboBox để chọn cổng kết nối

Page 60: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

60

Giao diện chương trình:

Hình 3-15: Giao diện chương trình chính

Hình 3-16: Giao diện chương trình điều khiển

Page 61: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

61

Màu xanh hiển thị trên button cho thấy mạch đang hoạt động ở chức năng đó.

Ví dụ hình 3.16 là hệ thống đang ngắt kết nối, đèn tắt, quạt tắt.

Lưu đồ thuật toán 3.4

3.4.1. Quá trình gửi

Hình 3-17: Lưu đồ thuật toán quá trình gửi dữ liệu

Page 62: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

62

Chương trình của Nios II sẽ được nạp lên SRAM ON CHIP. Quá trình hoạt

động sẽ được điều khiển từ trên máy tính bằng cách sử dụng giao diện, lệnh này sẽ

được truyền đến KIT thông qua đường UART( Rs232 Serial Port)

Cụ thể khi button Số 1( btnSo1) được nhấn, máy tính sẽ gửi xuống một kí tự

“1”(FAN1)

Tương tự khi button Số 2( btnSo2) được nhấn, máy tính sẽ gửi xuống một kí

tự “2”(FAN2).

Khi button Số 3( btnSo3) được nhấn, máy tính sẽ gửi xuống một kí tự

“3”(FAN3)

Khi button Tắt quạt( btnTatQ) được nhấn, máy tính sẽ gửi xuống một kí tự

“0”(FAN_OFF).

Button Bật đèn( btnBatD) được nhấn, máy tính sẽ gửi xuống một kí tự

“4”(LAMP_ON).

Button Tắt đèn( btnTatD) được nhấn, máy tính sẽ gửi xuống một kí tự

“5”(LAMP_OFF)

3.4.2. Quá trình nhận

Page 63: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

63

Hình 3-18: Lưu đồ thuật toán quá trình nhận dữ liệu

Nếu nhận được kí tự ‘0’, efan_off() IOWR(EFAN_BASE, 0, 0x7), khi đó tất

cả các kênh Relay mở và quạt không quay.

Nếu nhận được kí tự ‘1’, efan_on(LEVEL1), LEVEL1 = 0x3, kênh EN1 đóng,

EN2,3 mở và quạt chạy số 1.

Page 64: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

64

Nếu nhận được kí tự ‘2’, efan_on(LEVEL2), LEVEL2 = 0x5, kênh EN2 đóng,

kênh EN1,3 mở và quạt chạy số 2.

Nếu nhận được kí tự ‘3’, efan_on(LEVEL3), LEVEL3 = 0x6, kênh EN3 đóng,

EN1,2 mở và quạt chạy số 3.

Nếu nhận được kí tự ‘4’, led_on() IOWR(PIO_0_BASE, 0, 1), kênh EN4

đóng và đèn sáng.

Nếu nhận được kí tự ‘5’, led_off() IOWR(PIO_0_BASE, 0, 0), kênh EN4

mở và đèn tắt.

Sơ đồ nguyên lý. 3.5

3.5.1. Kết nối chân tín hiệu điều khiển ngoại vi

Đề tài sử dụng phương pháp điều khiển Relay 4 kênh để điều khiển các thiết bị

ngoại vi. Trong đó 1 kênh để điều khiển bật tắt bóng đèn và ba kênh còn lại điều

khiển 3 mức chạy của quạt là số 1, số 2 và số 3.

Kết nối Relay với KIT thông qua chân mở rộng của KIT DE2.

Hình 3-19: Connect to GPIO1( DE2 KIT)

Page 65: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

65

Bảng 3-1: Chân kết nối tín hiệu điều khiển GPIO1

Tên tín hiệu FPGA Pin Mô tả

efan_export[2] PIN_P24 FAN1

efan_export[1] PIN_R24 FAN2

efan_export[0] PIN_T22 FAN3

lamp PIN_T24 LAMP

3.5.2. Sơ đồ ghép nối Rs232.

KIT Altera DE2 sử dụng mạch chuẩn giao tiếp Rs232 dùng IC Max232.

Max232 là IC chuyên dùng cho giao tiếp giữa RS232 và thiết bị ngoại vi.

Max232 là IC của hãng Maxim. Đây là IC chay ổn định và được sử dụng phổ biến

trong các mạch giao tiếp chuẩn RS232. Dòng tín hiệu được thiết kế cho chuẩn

RS232 . Mỗi đầu truyền ra và cổng nhận tín hiệu đều được bảo vệ chống lại sự

phóng tĩnh điện( hình như là 15KV). Ngoài ra Max232 còn được thiết kế với nguồn

+5V cung cấp nguồn công suất nhỏ.

Mạch giao tiếp như sau:

Hình 3-20: Mạch chuẩn giao tiếp Rs232 dùng IC Max232

Page 66: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

66

Bảng 3-2: Rs232 pin assignments

Tên tín hiệu PFGA pin Mô tả

Uart_0_txd PIN_B25 UART Transmit

Uart_0_rxd PIN_C25 UART Reciever

3.5.3. Sơ đồ module màn hình LCD

Hình 3-21: Sơ đồ module màn hình LCD

Page 67: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

67

Bảng 3-3: LCD Module pin assignment

Tên tín hiệu FPGA pin Mô tả

LCD_DATA[0] PIN_J1 LCD DATA[0]

LCD_DATA[1] PIN_J2 LCD DATA[1]

LCD_DATA[2] PIN_H1 LCD DATA[2]

LCD_DATA[3] PIN_H2 LCD DATA[3]

LCD_DATA[4] PIN_J4 LCD DATA[4]

LCD_DATA[5] PIN_J3 LCD DATA[5]

LCD_DATA[6] PIN_H4 LCD DATA[6]

LCD_DATA[7] PIN_H3 LCD DATA[7]

LCD_RW PIN_K4 LCD Read/Write Select, 0 = Write,

1 = Read

LCD_EN PIN_K3 LCD Enable

LCD_RS PIN_K1 LCD Command/Data Select, 0 =

Command, 1 = Data

LCD_ON PIN_L4 LCD Power ON/OFF

LCD_BLON PIN_K2 LCD Back Light ON/OFF

3.5.4. Sơ đồ nguyên lý Relay 4 kênh

Module Relay sử dụng 6 đầu vào là Vcc, GND để nuôi nguồn, 4 đầu vào ENB

để điều khiển Module. PC 817 đóng vai trò dung để cách lý giữa hai khối điện áp

chênh lệch. Relay đóng vai trò là một kho đóng mở, dùng để đóng cắt những nguồn

điện áp lớp( 12V-220V/10A).

Page 68: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

68

Trong đó Vcc và GND được nối với 2 chân mở rộng Vcc, GND của KIT DE2.

4 đầu vào EN1,2,3,4 chính là 4 tín hiều điều khiển ngoại vi: 3 tín hiệu điều

khiển 3 số của quạt và 1 tín hiệu điều khiển đèn.

Hình 3-22: Sơ đồ nguyên lý Module Relay 4 kênh

Page 69: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

69

Hình ảnh module thực tế 3.6

Hình ảnh Module Relay 4 kênh 5V-220V/10A

Hình 3-23: Module Relay 4 kênh - 5V-220V/10A

Page 70: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

70

CHƯƠNG 4: KẾT LUẬN

Chương này sẽ trình bày kết quả đạt được của đề tài, hạn chế và hướng phát

triển của đề tài trong thời gian tới.

Kết quả đạt được của đề tài 4.1

Sau thời gian nghiên cứu và thực hiện kể từ khi nhận đề tài, bằng sự nỗ lực

của bản thân, bên cạnh đó nhờ sự hướng dẫn nhiệt tình, tận tâm của thầy Lê Trung

Hiếu do đó đề tài này đã được hoàn thành đúng thời hạn và đạt được yêu cầu đặt ra

là thiết kế hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính. Trong quá

trình thực hiện nhóm đã thu được những kết quả sau:

Giới thiệu về FPGA, ứng dụng trong rất nhiều các lĩnh vực công nghệ, sản

xuất, quân sự, các thiết bị điều khiển thông minh và trong nhiều ngành công

nghiệp khác…

Nẵm được tổng quan, cấu trúc của FPGA và quy trình thiết kế FPGA.

Thiết kế được hệ thống nhúng trên NIOS bằng cách xây dựng phần cứng

cũng như phần mềm, cá chế độ gửi và nhận tín hiệu. Điều khiển hoạt động

của hệ thống sao cho tối ưu và ổn định, an toàn. Hệ thống được xây dựng

hoàn chỉnh tử những khối nhỏ. Giao tiếp được giữa máy tính và thiết bị điều

khiển, xây dựng giao diện điều khiển thành công trên Visual Studio.

Quá trình chạy thử nghiệm cho thấy tính ổn đinh, phần mềm được xây dựng

đơn giản, dễ sử dụng và đem lại hiệu quả hoạt động cao.

Để thực hiện được đề tài này Em đã thực hiện tìm hiểu, nghiên cứu các vấn

đề có liên quan đến đề tài như: Cách thiết kế phần cứng và phần mềm cho

KIT thông qua Quartus II và tool SoPC( Qsys) trên Quartus II, phần mềm lập

trình nhúng NIOS, giao tiếp giữa máy tính và KIT DE2 thông qua UART-

JTAG và RS232. Xây dựng hệ thống với ngoại vi có sẵn trên KIT(LCD

Display, LED) và ngoại vi mở rộng( GIPO). Ngôn ngữ lập trình Verilog, C.

Page 71: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

71

Hạn chế của đề tài 4.2

Hệ thống nhúng trên NIOS điều khiển thiết bị ngoại vi là một ứng dụng nhúng

cơ bản trên KIT Altera DE2, nên sản phẩm chỉ mang tính DEMO chưa có tính

thương mại, chưa có tính công nghệ cao. Các ứng dụng điều khiển còn đơn giản,

chưa ứng dụng nhiều module tự động hóa.

Hướng phát triển của đề tài 4.3

Trong thời gian nghiên cứu và thực hiện đề tài, tác giả đã vạch ra được hướng

phát triển tiếp theo của đề tài như sau:

Xây dựng thêm các Control làm phong phú trên việc tùy biến giao

diện điều khiển.

Bổ sung các Module tự động hóa mang tính công nghệ cao, có thể

ứng dụng trong việc sản xuất để có thể ứng dụng trong thương mại.

Nghiên cứu và triển khai sử dụng các ngoại vi khác trên Kit làm

phong phú thêm chức năng, công nghệ sử dụng cao hơn cho đề tài.

Điều khiển thiết bị qua mạng LAN, INTERNET,…

Page 72: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

72

TÀI LIỆU THAM KHẢO

[1] TS Vũ Đức Lung, Giáo trình ngôn ngữ mô tả phần cứng Verilog, Đại học

bách khoa thành phố Hồ Chí Minh, 2012.

[2] Altera, DE2_Manual User, altera.com.

[3] Dr. Pong P. Chu, Embedded SoPC Design with Nios II Processor and

Verilog Examples, 2012.

[4] Nguyễn Thế Hoàng, Thí nghiệm thiết kế FPGA, Khoa Công Nghệ Điện Tử,

ĐH Công Nghiệp TP HCM.

Page 73: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

73

PHỤ LỤC

1. Mã Verilog mô tả hệ thống.

module de2_top(

output wire [17:0] led_red_export,

output wire dir_export,

input wire reset_n,

input wire phase_zero,

inout wire [7:0] lcd_data,

wire lcd_E,

output wire lcd_RS,

wire lcd_RW,

output wire lcd_ON,

input wire clk,

output wire pwm_export,

output wire lamp,

output wire [7:0] led_green_export,

inout wire [15:0] sram_DQ,

output wire [17:0] sram_ADDR,

output wire sram_LB_N,

output wire sram_UB_N,

output wire sram_CE_N,

output wire sram_OE_N,

output wire sram_WE_N,

Page 74: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

74

output wire [2:0] efan_export,

output wire [2:0] efan_export_led,

input wire uart_0_rxd, // uart_0.rxd

output wire uart_0_txd, // .txd

output wire [56:0] led_seg // led_green.export

);

wire [2:0] efan_export_sign;

wire [7:0]led_green;

wire [7:0] phase_export;

assign lcd_ON = 1'b1;

assign led_seg ={57{1'b1}};

reg [31:0]counter=0;

reg [8:0] counter_phase;

reg [8:0] counter_phase_store;

assign led_green_export =( led_green == 1)? 8'hff :( (led_green == 2)?

{8{counter[24]}}:8'h00);

assign lamp = ~led_green_export[0];

assign led_red_export[16] = pwm_export;

assign led_red_export[17] = dir_export;

assign led_red_export[15] = !dir_export;

assign led_red_export[0] = !efan_export_sign[2];

assign led_red_export[1] = !efan_export_sign[1];

assign led_red_export[2] = !efan_export_sign[0];

assign efan_export = efan_export_sign;

Page 75: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

75

assign efan_export_led = efan_export_sign;

reg phase_zero_L1, phase_zero_L2, phase_zero_L3;

always @( posedge clk)begin

phase_zero_L1 <= phase_zero;

phase_zero_L2 <= phase_zero_L1;

phase_zero_L3 <= phase_zero_L2;

end

always @( posedge clk)begin

counter <= counter + 1;

end

always @( posedge clk)begin

if(phase_zero_L3 == 1'b0 | !reset_n)

counter_phase <= 8'b0;

else

counter_phase <= counter_phase + 1'b1;

end

always @( posedge clk)begin

if(reset_n)

counter_phase_store <= 8'b0;

else if( phase_zero_L2 == 1'b0 & phase_zero_L3 == 1'b1)

counter_phase_store <= counter_phase/100;

end

Page 76: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

76

assign dir_export = (counter_phase_store * phase_export) >

counter_phase;

soc_qsys U(

.reset_reset_n(reset_n), // reset.reset_n

.clk_clk(clk), // clk.clk

.led_red_export(), // led_red.export

.dir_export(), // dir.export.

/*

.sram_DQ(sram_DQ), // sram.DQ

.sram_ADDR(sram_ADDR), // .ADDR

.sram_LB_N(sram_LB_N), // .LB_N

.sram_UB_N(sram_UB_N), // .UB_N

.sram_CE_N(sram_CE_N), // .CE_N

.sram_OE_N(sram_OE_N), // .OE_N

.sram_WE_N(sram_WE_N), // .WE_N

*/

.phase_export(phase_export),

.efan_export(efan_export_sign),

.uart_0_rxd(uart_0_rxd),

.uart_0_txd(uart_0_txd),

.lcd_data_export(lcd_data), // lcd.data

.lcd_e_export(lcd_E), // .E

.lcd_rs_export(lcd_RS), // .RS

.lcd_rw_export(lcd_RW), // .RW

Page 77: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

77

.pwm_export(pwm_export), // pwm.export

.led_green_export(led_green) // led_green.export

);

endmodule

2. Thư viện của LCD display

#ifndef _LCD_H_

#define _LCD_H_

#define row1 1

#define row2 2

#define col1 0

#define col2 1

#define col3 2

#define col4 3

#define col5 4

#define col6 5

#define col7 6

#define col8 7

#define col9 8

#define col10 9

#define col11 10

#define col12 11

#define col13 12

Page 78: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

78

#define col14 13

#define col15 14

#define col16 15

// define for nios II

#define LCD_data PIO_3_BASE

#define RW PIO_4_BASE

#define RS PIO_5_BASE

#define E PIO_6_BASE

#define output_low(base) IOWR(base, 0, 0)

#define output_high(base) IOWR(base, 0, 1)

#define output_b(data) IOWR(LCD_data, 0, data)

#define delay_ms( n ) usleep(1000*n)

#define int8 char

#define int16 short

unsigned char buff[100];

void lcd_init( void );

void LCD_nibble(unsigned int8 n);

void LCD_write(unsigned int8 address, unsigned int8 n);

void lcd_gotoxy( unsigned int8 col, unsigned int8 row );

void lcd_clear( unsigned int8 row );

Page 79: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

79

void lcd_menu_init( void );

void lcd_puts( unsigned int8 *string );

void lcd_putc( unsigned int8 c );

void lcd_display_string( unsigned int8 *string, unsigned int16 lenght, int16

col, int16 row );

//unsigned int8 lcd_display_page( unsigned int8 *str, unsigned int16 len, INT8

cursor );

//unsigned int8 menu_main( void );

//unsigned int8 first_main( void );

#endif

3. Mã chương trình điều khiển LCD Display

#include "lcd.h"

#include <string.h>

#include <unistd.h>

#include <io.h>

#include "system.h"

void lcd_init( void )

{

unsigned int8 i;

output_low(RS); // RS = 0 : address, RS = 1 : data

output_low(E); // E = 0 : disable

output_low(RW); // RW = 0 : write

//LCD_nibble(0x00); // 0x0E : screen and cursor is display on

Page 80: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

80

LCD_nibble(0x38);

delay_ms( 10 );

LCD_nibble(0x308);

delay_ms( 1 );

LCD_nibble(0x38);

delay_ms( 1 );

//LCD_nibble(0x00); // 0x0E : screen and cursor is display on

LCD_nibble(0x0C);

delay_ms( 10 );

//LCD_nibble(0x00); // 0x01 : Clear display

LCD_nibble(0x1);

delay_ms( 10 );

//LCD_nibble(0x0); // 0x06 : increased display and no shift

LCD_nibble(0x06);

delay_ms( 10 );

LCD_nibble(0x80); // 0x80 : cursor home

//LCD_nibble(0x0);

delay_ms( 10 );

}

void lcd_clear( unsigned int8 row )

{

switch( row )

{

case row1:

Page 81: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

81

lcd_gotoxy( col1, row1 );

memset( buff, 0, sizeof buff );

strcpy( buff, " " );

lcd_puts( buff );

lcd_gotoxy( col1, row1 );

break;

case row2:

lcd_gotoxy( col1, row2 );

memset( buff, 0, sizeof buff );

strcpy( buff, " " );

lcd_puts( buff );

lcd_gotoxy( col1, row2 );

break;

default:

LCD_write( 0, 0x01 );

lcd_gotoxy( col1, row1 );

break;

}

}

void LCD_nibble( unsigned int8 n )

{

output_b( n );

//delay_ms( 1 );

output_high( E );

Page 82: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

82

usleep( 1 );

output_low( E );

delay_ms( 1 );

}

void LCD_write( unsigned int8 style, unsigned int8 n )

{

//set_tris_b(0x00);

//set_tris_a(0x20);

delay_ms( 1 );

//delay_cycles( 100 ); // At 20 mhz a 5us delay

usleep(100);

if( style == 1 ) output_high( RS );

else output_low( RS );

output_low(E);

LCD_nibble(n);

output_low( RS );

output_low(E);

}

void lcd_gotoxy( unsigned int8 col, unsigned int8 row )

{

unsigned int8 address = 0;

if( row == 1 )

address = 0x80;

else

Page 83: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

83

address = 0xC0;

address += col;

LCD_write( 0, address );

}

void lcd_putc( unsigned int8 c )

{

switch( c )

{

case '\f' : LCD_write( 0,1 ); //0x0C

delay_ms( 2 );

break;

case '\n' : lcd_gotoxy( col1, row2 ); break; //0x0A

case '\b' : LCD_write( 0, 0x10 ); break; //0x08

default : LCD_write( 1, c ); break;

}

}

void lcd_puts( unsigned int8 *string )

{

//dung dong while thi fai co \n de xuong hang duoi

while( *string )

{

lcd_putc( *string );

string++;

}

Page 84: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

84

}

void lcd_display_string( unsigned int8 *string, unsigned int16 lenght, int16

col, int16 row )

{

//dung dong while thi fai co \n de xuong hang duoi

unsigned int16 len = 0;

while( *string )

{

if( col > col16 )

{

col = col1;

if( row == row1 ) row = row2;

else break;

}

lcd_gotoxy( col, row );

lcd_putc( *string );

string++;

col++;

len++;

if( len > lenght ) break;

}

}

void lcd_menu_init( void )

{

Page 85: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

85

unsigned int8 i = 2;

memset( buff, 0, sizeof buff );

strcpy( buff, " ALTERA DE2 KIT \nNice To See You " );

while( i > 0 )

{

lcd_gotoxy( col1, row1 );

lcd_puts( buff );

// while( 1);

delay_ms( 1000 );

lcd_clear( 0 );

delay_ms( 300 );

i--;

}

lcd_puts( buff );

delay_ms( 100 );

}

4. Mã chương trình điều khiển hệ thống.

#include "sys/alt_stdio.h"

#include "system.h"

#include <stdio.h>

#include <stddef.h>

#include <stdlib.h>

#include <unistd.h>

Page 86: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

86

#include <string.h>

#include <io.h>

#include "lcd.h"

#define output(base,data) IOWR(base, 0, data)

#define set_duty(data) IOWR(PWM_0_BASE, 0, data)

#define set_cycle(data) IOWR(PWM_0_BASE, 1, data)

#define pwm_on() IOWR(PWM_0_BASE, 2, 0)

#define pwm_off() IOWR(PWM_0_BASE, 2, 1)

#define led_off() IOWR(PIO_0_BASE, 0, 0)

#define led_on() IOWR(PIO_0_BASE, 0, 1)

#define led_blink() IOWR(PIO_0_BASE, 0, 2)

#define LEVEL1 0x3

#define LEVEL2 0x5

#define LEVEL3 0x6

#define efan_off() IOWR(EFAN_BASE, 0, 0x7)

#define efan_on(data) IOWR(EFAN_BASE, 0, data)

#define set_dir(data) IOWR(PIO_2_BASE, 0, data)

#define _CYCLE 1000

#define _DUTY 500

int main()

{

unsigned int task=0;

char i =0;

set_duty(_DUTY);

Page 87: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

87

set_cycle(_CYCLE);

pwm_on();

set_dir(0);

//printf("PWM_0_BASE: %d\n\r",IORD(PWM_0_BASE,0));

//printf("PWM_0_BASE: %d\n\r",IORD(PWM_0_BASE,1));

//printf("PWM_0_BASE: %x\n\r",IORD(PWM_0_BASE,2));

led_off();

pwm_off();

lcd_init();

lcd_menu_init();

delay_ms(1000);

lcd_clear( 1 );

lcd_clear( 2 );

lcd_gotoxy(0,1);

lcd_puts("Quat: Dang tat");

lcd_gotoxy(0,2);

lcd_puts("Den : Dang tat");

while(1){

printf("\nSelect task below: \n");

printf(" + Press 0 : Tat quat\n\r");

printf(" + Press 1 : Quat quay phai cham\n\r");

printf(" + Press 2 : Quat quay phai vua\n\r");

printf(" + Press 3 : Quat quay phai nhanh\n\r");

printf(" + Press 4 : Led sang\n\r");

Page 88: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

88

printf(" + Press 5 : Led tat\n\r");

printf(" + Press 6 : Led nhap nhay\n\r");

task = alt_getchar();

//scanf("%d",&task);

printf("\ntask = %c \n\r",task);

task = task - 0x30;

alt_getchar();// get enter key

switch(task)

{

case 0:

pwm_off();

set_dir(0);

efan_off();

alt_printf("Tat Quat\n\r");

lcd_clear( 1 );

lcd_gotoxy(0,1);

lcd_puts("Quat: Dang tat");

break;

case 1:

set_duty(300);

pwm_on();

efan_on(LEVEL1);

set_dir(0);

lcd_clear( 1 );

Page 89: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

89

lcd_gotoxy(0,1);

lcd_puts("Quat: So 1");

alt_printf("Quat quay phai cham\n\r");

break;

case 2:

set_duty(600);

efan_on(LEVEL2);

pwm_on();

set_dir(0);

lcd_clear( 1 );

lcd_gotoxy(0,1);

lcd_puts("Quat: So 2");

alt_printf("Quat Phai Vua");

break;

case 3:

set_duty(1000);

pwm_on();

efan_on(LEVEL3);

set_dir(0);

lcd_clear( 1 );

lcd_gotoxy(0,1);

lcd_puts("Quat: So 3");

alt_printf("Quat Phai Nhanh");

break;

Page 90: Triển Khai Hệ Thống Nhúng Trên NIOS Và Ứng Dụng ĐK Thiết Bị Qua Máy Tính

Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

90

case 4:

led_on();

lcd_clear( 2 );

lcd_gotoxy(0,2);

lcd_puts("Den : Dang bat");

alt_printf("Led Xanh Sang");

break;

case 5:

led_off();

lcd_clear( 2 );

lcd_gotoxy(0,2);

lcd_puts("Den : Dang tat");

alt_printf("Led Xanh Tat");

break;

}

}

while(1)

{

output(PIO_0_BASE, 0xff); //led sang

delay_ms(1000); // de lay giua cac lan sang tat

output(PIO_0_BASE, 0x00); // led tat

delay_ms(1000);

}

return 0;

}