Lưu đồ giải thuật

Một phần của tài liệu thực hiện các ứng dụng nhúng cơ bản trên board altera de2 115 (Trang 50 - 59)

Bắt đầu

Khởitạo giá trị chuỗi bit

Khởi tạo giá trị biến đếm (r0)

Chuỗi bit bằng

biến đếm (r0)? Lưu giá trị

Kết thúc Dịch phải chuỗi bit

Tăng biến đếm lên 1

Đ

Nhân chuỗi bit mới với chuỗi bit ban đầu

S

Hình 3.14 Sơ đồ khối hệ thống ứng dụng

Hình 3.15 Lưu đồ giải thuật xác định chuỗi bit 1 liên tiếp lớn nhất

USB-Blaster Interface Nios II Processor JTAG Debug Module JTAG UART Interface

Avalon Switch fabric

On-chip Memory System ID

CYCLONE IV E FPGA CHIP

Host Computer Reset_n Clock

40

(a)Lưu đồ giải thuật xác định chuỗi bit 1 và bit 0 liên tiếp (b)Chương trình con CALCULATE

Bắt đầu

Khởi tạo thanh ghi chứa địa chỉ: bit1, bit0, chuỗi số

Đưa bit 1 vào thanh ghi để so sánh CALCULATE

CALCULATE

Đưa bit0 vào thanh ghi để so sánh

Trả kết quả số bit 0

Kết thúc Trả kết quả số bit 1

Trả kết quả Tính số bit 1 liên tiếp

Tính số bit 0 liên tiếp

S

S

Đ

Kiểm tra giá trị trong thanh ghi so sánh có bằng 0 không ?

Kiểm tra giá trị trong thanh ghi so sánh có bằng 1 không ?

Kết thúc Chương trình con

CALCULATE

Hình 3.16 Lưu đồ giải thuật của chương trình đếm số bit 0 liên tục và bit 1 liên tục lớn nhất.

41

(c) (d)

(c) Lưu đồ giải thuật chương trình con tính số bit 1 liên tiếp. (d) Lưu đồ giải thuật chương trình con tính số bit 0 liên tiếp.

3.2.3 Các bước thực hiện và kết quả

Tạo hệ thống phần cứng:

a)Tạo project mới có tên là Lab3 bằng phần mềm Quartus II 11.0.

b)Trong cửa sổ project Lab2 tạo một hệ thống QSys mới gồm các thành phần CPU (Nios II Processor), RAM (on-chip memory), system ID, JTAG UART.

 CPU (Nios II Processor):

o Chọn “Nios II/e”, JTAG Debug Module Level 1. o Đổi tên Nios thành “CPU”.

 RAM (On-Chip Memory):

Chương trình con tính số bit 1 liên tiếp

Chuỗi bit bằng biến đếm (r0)?

Dịch phải chuỗi bit dữ liệu

Tăng biến đếm lên 1

Lưu giá trị Kết thúc

S Đ

Nhân chuỗi bit mới với chuỗi ban đầu

Chương trình con tính số bit 0 liên tiếp

Chuỗi bit bằng biến đếm (r0)?

Dịch phải chuỗi bit dữ liệu

Tăng biến đếm lên 1

Lưu giá trị Kết thúc

S Đ

Nhân chuỗi bit mới với chuỗi ban đầu

42 o Total Memory size = “32768”.

o Đổi tên “on-chip memory” thành “RAM”.  JTAG UART:

o Để các thiết lập như mặc định ban đầu. o Đổi tên thành “jtag_uart”.

 System ID Peripheral:

o Không thay đổi các thiết lập mặc định.

o Đổi tên thành “sysid”.

c) Ở cột “Connections”: Kết nối các thành phần lại với nhau.  Kết nối các thành phần đã tạo với nguồn xung clk.

 Kết nối Avalon memory mapped slave với Avalon memory mapped slave trong On-chip memory.

 Mở lại thành phần CPU và đổi “reset vector and exception vector” thành “RAM.s1”.

d)Generate

o Save lại với tên “Nios”.

o Nhấp vào Generate.

Hệ thống QSys ở bài thí nghiệm này kết quả sẽ như hình sau:

43

Sau khi nạp thành công hệ thống xuống board DE2-115, ta sử dụng phầm mềm Altera Monitor Program để viết chương trình ứng dụng cho hệ thống.

Viết chương trình ứng dụng cho hệ thống phần cứng bằng phần mềm Altera Monitor Program:

Chương trình đếm số bit 1 liên tiếp: Tao file Lab3.s chứa đoạn code

sau:

.include "nios_macros.s" .text

.equ TEST_NUM, 0x90abcdef /* so duoc test */

.global _start _start:

movia r7, TEST_NUM /* khoi tao r7 co gia tri la

TEST_NUM */

mov r4, r7 /* copy TEST_NUM vao r4 */

STRING_COUNTER:

mov r2, r0 /* khoi tao r2 bang 0 (bien dem)

*/

STRING_COUNTER_LOOP: /* vong lap tinh so bit 1

lien tiep lon nhat */

beq r4, r0, END_STRING_COUNTER

srli r5, r4, 1 /* tinh so bit 1 lien

tiep bang cach dich du lieu */

and r4, r4, r5 /* test sang phai 1 bit va

and no voi du lieu ban dau */

addi r2, r2, 1 /* tang bien dem len 1

*/

br STRING_COUNTER_LOOP END_STRING_COUNTER:

mov r16, r2 /* ket qua cuoi cung luu vao

r16 */ END:

br END .end

44

Chương trình đếm số bit 1 và số bit 0 liên tiếp sử dụng chương trình

con: Tạo file Lab3_2.s chứa đoạn code sau:

.include "nios_macros.s" .text

.equ TEST_NUM,0x90abcdef /* so duoc test */

.equ bit1, 0x00000000 .equ bit0, 0xffffffff .global _start _start: movia r9, bit1 movia r10, bit0 movia r7, TEST_NUM movia r8, bit1

call CALCULATE /* goi chuong trinh con lan

1 */

mov r16, r2 /* r16 chua so bit 1 lien

tiep */

movia r8, bit0

call CALCULATE /* goi chuong trinh con lan

2 */

mov r17, r2 /* r16 chua so bit 0 lien

tiep */ END:

br END

CALCULATE: /* chuong trinh con */

mov r4, r7 mov r2, r0

beq r8, r9, STRING_COUNTER_LOOP_1 beq r8, r10, STRING_COUNTER_LOOP_0

STRING_COUNTER_LOOP_1: /* vong lap tinh so bit 1

lien tiep */

45 srli r5, r4, 1

and r4, r4, r5 addi r2, r2, 1

br STRING_COUNTER_LOOP_1

STRING_COUNTER_LOOP_0: /* vong lap tinh so bit 0

lien tiep */ beq r4, r8, END_STRING_COUNTER srli r5, r4, 1 or r4, r4, r5 addi r2, r2, 1 br STRING_COUNTER_LOOP_0 END_STRING_COUNTER: mov r2, r2 ret .end

Các bước thực hiện chương trình với Altera Monitor Program như sau:

Mở Altera Monitor Program, vào File > New Project…chọn đường dẫn vào thư mục chứa project và đặt tên cho project .

Hình 3.19 Giao diện tạo project mới

Tiếp theo đó chọn Next , cửa sổ Specify a system xuất hiện cho phép chọn hệ thống trong Select a system, chọn DE2-115 Basic Computer sau đó chọn Next

(Hình 3.21).

Sau khi chọn Next sẽ xuất hiện giao diện cho phép ta chọn ngôn ngữ lập trình cho hệ thống. Chọn Assembly Program trong tag Program Type. Chọn Next

46

Hình 3.20 Chọn file hệ thống

Hình 3.21 Chọn ngôn ngữ lập trình

Từ cửa sổ Specify program details ta chọn Add để chỉ đường dẫn đến file .s

chứa code chương trình (lab3.s). Chọn Select để Add sau đó chọn Next.

Hình 3.22 Giao diện Add file .s

Tiếp theo xuất hiện giao diện cho phép ta thông số hệ thống, ở bước này để mặc định.

47

Tiến hành biên dịch và nạp chương trình . Sau khi nạp chương trình thành công, ta chạy chương trình từng bước để xem các thay đổi trong các thanh ghi. Kết quả kiểm tra số bit 1 liên tiếp được đưa vào thanh ghi r16.

Hình 3.24 Kết quả chương trình đếm 4 bit 1 liên tiếp

48

Một phần của tài liệu thực hiện các ứng dụng nhúng cơ bản trên board altera de2 115 (Trang 50 - 59)

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

(90 trang)