Download as pdf or txt
Download as pdf or txt
You are on page 1of 90

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

PHẠM ĐỨC THUẬN

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

Ket-noi.com chia se

PHẠM ĐỨC THUẬN


<TÊN ĐỀ 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

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


2014

HƯNG YÊN - 2014


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


4
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.5.4. Sơ đồ nguyên lý Relay 4 kênh ................................................... 67

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ASIC Application-Specific Integrated Vi mach tích hợp chuyên dụng


Circuit

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


Device đượ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 Xây dựng hệ thống trên một


Builder CHIP

VHDL VHSIC Hardware Description Ngôn ngữ lập trình phần cứng
Language

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

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.

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

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.

11
Triển khai 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 đề 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ô.

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


 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ế.

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


 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.

1.4 Nội dung thực hiện


 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.

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

 Đư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.

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


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.

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

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.

2.1 Tổng quan về FPGA

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

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

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ó.

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

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

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

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
17
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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…

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

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

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

 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

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

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

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

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.

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

 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

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

 Đ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.

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

- 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).

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

 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

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

 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

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

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.

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

- 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

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

 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 ManageOther Device
- Chuột phải vào Usb-Blaster  Update Driver SoftwareBrowse my
computer for driver softwareChọ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
30
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

 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.

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

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

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

 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.

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

 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.


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

 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.

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

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

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

 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.

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

 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.

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

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

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

 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
40
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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

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

- 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

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

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.

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

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.

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

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ã

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

đườ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

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

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.

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

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ế.

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

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

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


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

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.

49
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.2 Chi tiết thiết kế hệ thống

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

50
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.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
51
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

 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

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

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

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

 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

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

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.

55
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.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;


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

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

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

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

58
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.3 Thiết kế giao diện điều khiển trên máy tính.

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

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

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

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

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.

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

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

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

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

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

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.

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

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.

3.5 Sơ đồ nguyên lý.

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)

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

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

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

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

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

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).

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

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

68
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.6 Hình ảnh module thực tế

Hình ảnh Module Relay 4 kênh 5V-220V/10A

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

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

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.

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

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.

70
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 Hạn chế của đề tài

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.

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

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,…

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

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.

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

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,

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

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;

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

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

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

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

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

.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

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

#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 );


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

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


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

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:
80
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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 );
81
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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
82
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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++;

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

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 )

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

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>

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

#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);
86
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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");


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

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 );
88
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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;
89
Triển khai hệ thống nhúng trên NIOS và điều khiển thiết bị qua máy tính

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;

90

You might also like