Tải bản đầy đủ (.pdf) (24 trang)

Hệ thống nhúng slide b4

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.52 MB, 24 trang )

13:15:17

BÀI 4: THIẾT KẾ HỆ THỐNG
NHÚNG TRÊN KIT DE-2
1. Hệ thống nhúng trên DE-2.
2. Thiết kế phần cứng cho kit DE-2 dùng Qsys.
3. Tích hợp phần cứng vào Quartus Project.
4. Thiết kế phần mềm dùng Nios II Software.
5. Các ngoại vi cơ bản: công tắc nhấn, LCD, …

Bài 4

1

13:15:17

Bài 4

2

1


13:21:53

Hệ thống nhúng
trên DE-2

Bài 4

3



13:21:53

CPU Nios II

Bài 4

4

2


13:21:53

CPU Nios II

clk, reset_n: nối với clk và reset của nguồn xung clock.
data_master: kết nối với các chân slave của bộ nhớ và ngoại vi
instruction_master: kết nối với slave của bộ nhớ
Bài 4

5

13:21:53

Bộ nhớ on-chip

clk1: nối với clk của nguồn xung clock.
reset1: nối với reset của nguồn xung clock
s1: kết nối với data và instruction của CPU Nios II.

Bài 4

6

3


13:21:53

Ngoại vi

clk: nối với clk của nguồn xung clock.
reset: nối với reset của nguồn xung clock
s1: kết nối với data của CPU Nios II.
external_connection: kết nối với các chân của kit DE-2
Bài 4

7

13:21:53

Kiểm tra

clk: nối với clk của nguồn xung clock.
reset: nối với reset của nguồn xung clock
Control_slave: kết nối với data của CPU Nios II.
Bài 4

8


4


13:21:53

Qsys
Thiết kế hệ thống sau:

Phần cứng:
-

- Nhấn SW1: Led sáng dần.
- Nhấn SW2: tắt tất cả các Led.

Clock.
CPU Nios II.
On-chip memory.
PIO1: input, Width = 2
PIO2:output, Width = 8
System ID

Bài 4

9

13:21:53

Qsys
B1: Khởi động Quartus, chọn File > New Project Wizard:


Bài 4

10

5


13:21:53

B2:

Chọn Family là Cyclone II, chọn Available devices là EP2C35F672C6 
Finish

Bài 4

11

13:21:53

B3:

Chọn Tools > Qsys trên menu hay click biểu tượng Qsys trên
thanh công cụ

Bài 4

12

6



13:21:53

Nguồn xung clock có sẵn của hệ thống:

Bổ sung CPU Nios II:
- Double-click vào Nio II Processsor.
- Chọn Nios II core là Nios II/e.
- Nhấn Finish.

Bài 4

Bổ sung on-chip memory 32KB:

13

13:21:53

Bổ sung PIO input 2 bit (SW) và PIO output 8 bit (Led):

Bài 4

14

7


13:21:53


Đặt tên lại cho các Component:
click chuột phải vào Component,
chọn Rename

Bài 4

15

13:21:53
Kết nối các chân của các Component:
- Clk của clk_main với clk của các
component khác.
- Clk_reset của clk_main với reset
của các component khác.
- Data_master của CPU Nios II với slave
(s1) của các component khác (trừ
clk_main).
- Instruction_master của CPU Nios II
với slave (s1) của memory (RAM).

Back >>

Bài 4

16

8


13:21:53

Gán địa chỉ cơ sở cho các thành phần:

Double-click vào CPU Nios II: chọn
Reset Vector và Exception Vector.

Bài 4

17

13:21:53
Double-click vào cột Export trên hàng external_connection của sw:

Tương tự cho component led:

Bài 4

18

9


13:21:53
Chọn File > Save
Chọn tab Generation, sau đó nhấn Generate

Bài 4

19

13:21:53


Tích hợp vào Quartus Project
B1: Quay lại Quartus, chọn Project > Add/Remove Files in Project

B2: Nhấp vào nút Browse (…)

Bài 4

20

10


13:21:53
B3: Chọn thư mục synthesis, phần File name, chọn All Files, chọn file .qip

Nhấn Open, sau đó nhấn OK
Bài 4

21

13:21:53
B4:

Trong

cửa

số


Project

Navigator, chọn tab Files, nhấn
chuột phải vào file .qip và chọn
Set as Top-Level Entity

B5: Chọn menu Processing >
Start Compilation hay nhấn nút
Start Compilation trên thanh
công cụ
Bài 4

22

11


13:21:53
Kết quả sau khi biên dịch:

B6: Thực hiện gán chân trên kit DE-2:
- 2 SW: nối với 2 toggle switch SW0, SW1
- 8 Led: nối với 8 LEDR0 - 7

CLOCK_50,PIN_N2

SW[0],PIN_N25
SW[1],PIN_N26

LEDR[0],PIN_AE23

LEDR[1],PIN_AF23
LEDR[2],PIN_AB21
LEDR[3],PIN_AC22
LEDR[4],PIN_AD22
LEDR[5],PIN_AD23
LEDR[6],PIN_AD21
LEDR[7],PIN_AC21

Bài 4

23

13:21:53
Gán chân bằng sơ đồ chân:
Xem sơ đồ chân tại (file DE2_pin_assigments.csv):
/>
B6.1: Chọn menu Assigments > Pin Planner

Bài 4

24

12


13:21:53
B6.2: Double-click vào cột Location và gán cho các chân trên kit DE-2:

CLOCK_50,PIN_N2
LEDR[0],PIN_AE23

LEDR[1],PIN_AF23
LEDR[2],PIN_AB21
LEDR[3],PIN_AC22
LEDR[4],PIN_AD22
LEDR[5],PIN_AD23
LEDR[6],PIN_AD21
LEDR[7],PIN_AC21
SW[0],PIN_N25
SW[1],PIN_N26
Đóng cửa sổ Pin Planner

Bài 4

25

13:21:53
Gán chân bằng sơ đồ khối:
B6.1: Chọn menu File > New, chọn Block Diagram/Schematic File

B6.2: Bấm vào Symbol Tool trên thanh công cụ.

Bài 4

26

13


13:21:53
B6.3: Trong khung Libraries, bấm vào Project và chọn tên tương ứng.


Nhấn chuột phải và chọn Generate Pins for Symbols Ports.
Bài 4

27

13:21:53
B6.4: Chọn File > Save để lưu sơ đồ và chọn Processing >
Start Compilation để biên dịch.
B6.5: Chọn menu Assignments > Import Assignments, chỉ
đến file DE2_pin_assignments.csv

B6.6: Gán chân, sau đó chọn File > Save để lưu và Set as Top-Level
Entity cho file .bdf

Bài 4

28

14


13:21:53
B7: Thực hiện biên dịch lại (chọn menu Processing > Start Compilation).
B8: Nạp phần cứng
Chọn menu Tools > Programmer, bấm vào nút Hardware Setup ở góc
trên bên trái và chọn USB-Blaster.

Trong cửa sổ Programmer phải
có tên file .sof (nếu chưa có thì

nhấn vào nút Add File để thêm
vào).
Gạt nút RUN / PROG trên kit
DE2 (nằm bên trái LCD) sang
RUN và nhấn vào Start để cấu
hình cho DE2.

Bài 4

29

13:21:53

Xây dựng phần mềm
Chọn menu Tools > Nios II
Software Build Tools for Eclipse

Bài 4

30

15


13:21:53
Chọn Workspace, ví dụ như E:\Altera\Eclipse

Trong Eclipse, chọn menu File > New > Nios II Application and
BSP from Template


Bài 4

31

13:21:53
Trong SOPC Information File name, chọn file .sopcinfo trong project. Đặt
tên cho project, chọn Project Template là Hello World. Nhấn Finish.

Bài 4

32

16


13:21:53

Chọn menu File > New > Nios II Application

Đặt tên Project, nhấn vào nút Browse (…) để chọn BSP. Nhấn Finish

Bài 4

Nhấn chuột phải vào project đã tạo tại cửa sổ Project Explorer

33

13:21:53

Nhấn chuột phải vào project đã tạo tại cửa sổ Project Explorer,

chọn New > Source File

Bài 4

34

17


Nhập tên file (main.c), trong phần Template, chọn Default C

13:21:53

source template.

Nhập đoạn mã sau:

#include "io.h"
#include "system.h"
int main()
{
unsigned char sw;
while (1)
{
sw = IORD(SW_BASE, 0);
if (sw == 0x01) // SW0
on, SW1: off
IOWR(LED_BASE,0,0xFF);
else
IOWR(LED_BASE,0,0x00);

}
return 0;
Bài 4
}

35

13:21:53
Nhấn Ctrl-S để lưu mã lệnh.
Nhấn chuột phải vào sw2_led8_board, chọn Run As > 3 Nios
II Hardware

Bài 4

36

18


Chọn

tab

Target

Connection,

nhấn

vào


System

ID

13:21:53

Properties để kiểm tra trạng thái hệ thống (có thể Refresh
Connections trước).

Bài 4

Click chọn vào các check box Ignore mismatched system ID và

37

13:21:53

Ignore mismatched system timestamp

Nhấn Apply và sau đó nhấn Run.

Gạt công tắc toggle SW[0] on và SW[1] off -> 8 Led Red sáng.
Khác: 8 Led tắt

Bài 4

38

19



13:21:53
Gạt công tắc toggle SW[0] on và SW[1] off -> 8 Led Red sáng.
Khác: 8 Led tắt

IORD(SW_BASE,
#include "io.h"
#include "system.h"

0):

đọc

giá

trị

từ

thiết bị ngoại vi

SW_BASE: địa chỉ thiết bị, được đăt
int main()
tên khi thiết kế phần cứng (Qsys)
{
unsigned char s;
0: địa chỉ offset
while (1)
{

s = IORD(SW_BASE, 0);
IOWR(LED_BASE,0,0xFF): xuất
if (s == 0x01)
giá trị 0xFF ra thiết bị
// SW0 on, SW1: off
ngoại vi, địa chỉ LED_BASE
IOWR(LED_BASE,0,0xFF);
else
IOWR(LED_BASE,0,0x00);
}
return 0;
Bài 4
39
}

13:21:53
4.1. Viết mã lệnh theo yêu cầu:
- SW1 on: Led sáng dần từ LEDR[0] – LEDR[7], thời gian delay
là 300 ms (dùng hàm usleep để delay, vd: usleep(1000) delay
1 ms).
- SW0 off: dừng quá trình chạy Led.
4.2. Thiết kế hệ thống nhúng mô phỏng đèn giao thông đơn giản: một
công tắc on/off toàn hệ thống, một công tắc chọn chế độ hoạt
động bình thường / đèn vàng nhấp nháy, 3 Led tương ứng Led
xanh, vàng và đỏ.
1. Thiết kế phần cứng trên Qsys.
2. Thiết kế sơ đồ chân hay sơ đồ khối trên Quartus.
3. Viết phần mềm điều khiển

Bài 4


40

20


13:21:53

Công tắc nhấn (pushbutton)

Bài 4

41

13:21:53

Yêu cầu:
- Nhấn KEY0: sáng dần từ LEDG0 – LEDG7, lặp lại quá trình liên
tục.
- Nhấn KEY0 lần nữa: dừng quá trình
Bài 4

42

21


13:21:53
#include "io.h"
#include "system.h"

int main()
{
unsigned char
unsigned char
unsigned char
0x07 ,0x0F, 0x1F,

push;
push_check = 0;
led[8] = {0x01, 0x03,
0x3F, 0x7F,0xFF};

unsigned char cnt = 0;
while (1)
{
push = IORD(PUSH_BASE,0);
if (push == 1)
{
if (push_check == 1)
push_check = 0;
else
push_check = 1;
while (push == 1)
push = IORD(PUSH_BASE,0);
}

if (push_check == 1)
{
IOWR(LED_BASE,0,led[cnt]);
cnt++;

if (cnt == 8)
cnt = 0;
usleep(200000);
}
}
return 0;
}
Bài 4

43

13:21:53
4.3.
Thiết kế hệ thống nhúng mô phỏng một đồng hồ số đơn giản:
hiển thị giờ, phút, giây trên 6 Led 7 đoạn, một công tắc nhấn
chỉnh giờ, một công tắc nhấn chỉnh phút.
1. Thiết kế phần cứng trên Qsys.
2. Thiết kế sơ đồ chân hay sơ đồ khối trên Quartus.
3. Viết phần mềm điều khiển

Bài 4

44

22


13:21:53

LCD

B1: Thiết kế trên Qsys:

Bài 4

45

13:21:53

LCD

B2: Thiết kế sơ đồ khối trên Quartus:

Bài 4

46

23


13:21:53

LCD

B3: Viết phần mềm:

void lcd_init(void);
void lcd_test(void);
int main()
{
IOWR(LED_LCD_BASE,0,3);

lcd_init();
lcd_test();
while (1) ;
return 0;
}
void lcd_init(void)
{
IOWR(LCD_BASE,0,0x38);usleep(4100);
IOWR(LCD_BASE0,0,0x0C);usleep(100);
IOWR(LCD_BASE0,0,0x06);usleep(100);
IOWR(LCD_BASE0,0,0x01);usleep(100);
IOWR(LCD_BASE0,0,0x02);usleep(100);
}

void lcd_test(void)
{
int i;
char line1[17] = “VIEN KT HUTECH \0";
char line2[15] = “BM DTU TR THONG \0";
for(i = 0; line1[i] != 0; i++)
{
IOWR (LCD_BASE,2,line1[i]);usleep(100);
}
IOWR(LCD_BASE0,0,0xC0);usleep(100);
for(i = 0; line2[i] != 0; i++)
{
IOWR (LCD_BASE,2,line2[i]);usleep(100);
}
}


Bài 4

47

13:21:53

LCD
4.4. Viết mã lệnh theo yêu cầu:
- Dòng 1: Counter 1 = xxx
- Dòng 2: Counter 2 = yyy
- Nhấn KEY0: tăng giá trị xxx từ 123 – 456.
- Nhấn KEY1: giảm giá trị yyy từ 456 – 123.

Bài 4

48

24



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×