1. Trang chủ
  2. » Luận Văn - Báo Cáo

đồ án môn học môn học hệ thống nhúng

13 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đồ án môn học Hệ thống nhúng: Thiết kế phần cứng SoPC và lập trình C điều khiển LED và hiển thị đồng hồ trên DE10-Standard
Tác giả Đinh Bửu Hiền, Lê Ngọc Hiếu, Đinh Bửu Hiền
Người hướng dẫn Ths. Huỳnh Hữu Thuận, Tạ Minh Quang
Trường học Trường Đại học Khoa học Tự nhiên, Đại học Quốc gia TP. Hồ Chí Minh
Chuyên ngành Hệ thống nhúng
Thể loại Đồ án môn học
Năm xuất bản 2020
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 13
Dung lượng 4,68 MB

Nội dung

Hệ thống này, được gọi là Máy tính tiêu chuẩn DE10, được thiết kế để sử dụng trong các thí nghiệm về tổ chức máy tính và các hệ thống nhúng.. Tệp lập trình FPGA thực hiện hệ thống này, c

Trang 1

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA ĐIỆN TỬ – VIỄN THÔNG

o0o

Môn học : Hệ thống nhúng

Tạ Minh Quang – 20207066 Ths.Huỳnh Hữu Thuận

Đinh Bửu Hiền – 20207032

Lê Ngọc Hiếu – 20207033

Trang 2

MỤC LỤC

Đồ án môn học

A GIỚI THIỆU VỀ DE10-STANDARD 3

1 Giới thiệu 3

2 Nội dung máy tính tiêu chuẩn DE10 3

2.1 Thành phần FPGA 3

2.2 Bộ xử lý Nios® II 3

B BÁO CÁO THỰC HÀNH 5

1 Thiết kế phần cứng SoPC dùng 5

2 Viết chương trình C 11

2.1 Cho 2 LED đơn chạy vòng từ trái sang phải hoặc từ phải sang trái Cho phép chuyển hướng chạy vòng bằng cách dùng 1 swtich (tùy thiết kế) 11

2.2 Cho 6 LED 7 đoạn hiển thị đồng hồ theo quy ước: 2 LED hiển thị giờ trong ngày (00 - 23), 2 LED hiển thị phút (00 - 59), 2 LED hiển thị giây (00 - 59) Càng chính xác càng tốt - Thiết kế cách dùng switch để cho phép thiết lập thời gian bắt đầu của đồng hồ (tùy sinh viên thiết kế) 11

Trang 3

A GIỚI THIỆU VỀ DE10-STANDARD

1 Giới thiệu

- Tài liệu này mô tả một hệ thống máy tính có thể được thực hiện trên bảng giáo dục và phát triển Intel® DE10-Standard Hệ thống này, được gọi là Máy tính tiêu chuẩn DE10, được thiết kế để sử dụng trong các thí nghiệm

về tổ chức máy tính và các hệ thống nhúng

- Để hỗ trợ các thí nghiệm như vậy, hệ thống chứa các bộ xử lý nhúng, bộ nhớ, thiết bị âm thanh và video và một số thiết bị ngoại vi I / O đơn giản Tệp lập trình FPGA thực hiện hệ thống này, cũng như các tệp nguồn thiết

kế của nó, có thể được lấy từ phần Chương trình Đại học trên trang web của Intel

2 Nội dung máy tính tiêu chuẩn DE10

- Một sơ đồ khối của hệ thống máy tính tiêu chuẩn DE10 được thể hiện trong Hình 1 Như đã chỉ ra trong hình, các thành phần trong hệ thống này được triển khai bằng cách sử dụng cả FPGA và Hệ thống xử lý cứng (HPS) bên trong chip SoC Cyclone® V của Intel FPGA triển khai hai bộ

xử lý Nios® II và một số cổng ngoại vi: mem-ory, mô-đun hẹn giờ, âm thanh vào / ra, video vào / ra, PS / 2, analog-to-digital, nhận / truyền hồng ngoại và các cổng song song được kết nối với công tắc và đèn HPS bao gồm bộ xử lý lõi kép ARM * Cortex * A9 và một bộ thiết bị pe-ripheral Hướng dẫn sử dụng bộ xử lý HPS và ARM được cung cấp trong một tài liệu riêng, được gọi là Hệ thống máy tính tiêu chuẩn DE10 với ARM Cortex A9

2.1 Thành phần FPGA

Như thể hiện trong Hình 1, nhiều thành phần trong Máy tính tiêu chuẩn DE10 được triển khai bên trong FPGA trong chip SoC Cyclone® V Một số thành phần này được mô tả trong phần này

2.2 Bộ xử lý Nios® II

Bộ xử lý Intel Nios II là CPU 32 bit có thể được triển khai trong thiết bị Intel FPGA Hai phiên bản của bộ xử lý Nios II có sẵn, được chỉ định là tiết kiệm (/ e) và nhanh (/ f) Máy tính tiêu chuẩn DE10 bao gồm hai phiên bản của phiên bản Nios II/f, được cấu hình với hỗ trợ phần cứng dấu phẩy động Tổng quan về bộ xử lý Nios II có thể được tìm thấy trong tài liệu Giới thiệu

về Bộ xử lý Intel Nios II, được cung cấp trong trang web của Chương trình Đại học Một cách dễ dàng để bắt đầu làm việc với Máy tính tiêu chuẩn DE10 và bộ xử lý Nios II là sử dụng một tiện ích có tên Intel® FPGA

Monitor Program Nó cung cấp một cách dễ dàng để lắp ráp / biên dịch các

Trang 4

chương trình Nios II được viết bằng ngôn ngữ hợp ngữ hoặc ngôn ngữ C Chương trình màn hình, có thể được tải xuống từ trang web của Intel, là một chương trình ứng dụng chạy trên máy chủ

Hình 1 Sơ đồ khối của máy tính tiêu chuẩn DE10

máy tính kết nối với bảng DE10-Standard Chương trình giám sát có thể được

sử dụng để kiểm soát việc thực thi mã trên Nios II, liệt kê (và chỉnh sửa) nội dung của các thanh ghi bộ xử lý, hiển thị / chỉnh sửa nội dung của bộ nhớ trên bảng DE10-Standard và các hoạt động tương tự Chương trình Giám sát bao gồm Máy tính tiêu chuẩn DE10 như một hệ thống được thiết kế sẵn có thể được tải xuống bảng DE10-Standard, cũng như một số chương trình mẫu bằng ngôn ngữ hợp ngữ và C cho thấy cách sử dụng các thiết bị ngoại vi của Máy tính tiêu chuẩn DE10 Một số hình ảnh cho thấy cách Máy tính tiêu chuẩn DE10 được tích hợp với Chương trình Giám sát được mô tả trong Phần 8 Tổng quan về Chương trình Màn hình có sẵn trong tài liệu Hướng dẫn Chương trình Giám sát Intel® FPGA, được cung cấp trong trang web của Chương trình Đại học

Trang 5

B BÁO CÁO THỰC HÀNH

1 Thiết kế phần cứng SoPC dùng

(1) 6 LED 7 đoạn

(2) 10 LED đơn

(3) 10 switch

Table 1 : Giao diện thiết kế phần cứng(Platform Designer)

Trang 6

Table 1 : Giao diện thiết kế phần cứng(Platform Designer) (tt)

Trang 7

(1) Slave HEX 5 đại diện cho từng HEX trong LED 7 đoạn

Trang 8

(2) Slave thành phần LED với Width 10bits tương đương với 10 LED

Trang 9

(3) Slave thành phần SWITCH với Width 10bits tương đương với 10

SWITCH

Trang 10

File System.v sau khi Generate hoàn tất

Code Verilog :

Report.v

module REPORT

(

input CLOCK_50,

input [0:0] KEY,

input [9:0] SW,

output [7:0] HEX0,

output [7:0] HEX1,

output [7:0] HEX2,

output [7:0] HEX3,

output [9:0] LEDR,

output [7:0] HEX4,

output [7:0] HEX5

);

system nios_system(

.clk_clk

(CLOCK_50),

.hex0_external_connection_export ({8'b0,HEX0}),

.hex1_external_connection_export ({8'b0,HEX1}),

.hex2_external_connection_export ({8'b0,HEX2}),

.hex3_external_connection_export ({8'b0,HEX3}),

.hex4_external_connection_export ({8'b0,HEX4}),

.switch_external_connection_export ({16'd0, SW}),

.led_external_connection_export ({16'd0, LEDR}),

.hex5_external_connection_export ({8'b0,HEX5})

);

Trang 11

2 Viết chương trình C

2.1 Cho 2 LED đơn chạy vòng từ trái sang phải hoặc từ phải

sang trái Cho phép chuyển hướng chạy vòng bằng cách dùng 1 swtich (tùy thiết kế)

2.2 Cho 6 LED 7 đoạn hiển thị đồng hồ theo quy ước: 2 LED

hiển thị giờ trong ngày (00 - 23), 2 LED hiển thị phút (00 - 59), 2 LED hiển thị giây (00 - 59) Càng chính xác càng tốt

- Thiết kế cách dùng switch để cho phép thiết lập thời gian bắt đầu của đồng hồ (tùy sinh viên thiết kế)

Bài làm

Code C :

main.c

#include <stdio.h>

#include "io.h"

#include "system.h"

#include "altera_avalon_timer_regs.h"

#include "sys/alt_irq.h"

int data = 0x300;

int *led_pt = LED_BASE;

int *sw_pt = SWITCH_BASE;

int led_value = 0x300;

int value,value2;

int status;

int segment_decode [] = {0x40,

0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0E}

;

void timer_Init(){

// Stop Timer

IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,

ALTERA_AVALON_TIMER_CONTROL_STOP_MSK);

//Configure period

period = 50000000 - 1;

IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE, period);

IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE, (period >> 16));

IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,

ALTERA_AVALON_TIMER_CONTROL_CONT_MSK | // Continue counting mode

ALTERA_AVALON_TIMER_CONTROL_ITO_MSK | // Interrupt enable

ALTERA_AVALON_TIMER_CONTROL_START_MSK); // Start Timer

}

void Timer_IRQ_Handler( void* isr_context){

//Switch 0 dùng để dừng đồng hồ đang chạy

status = IORD(SWITCH_BASE, 0) & 0x1;

if (status != 1){

counter ++;

}

// Code để kích hoạt ngày giờ ở trên đồng hồ

int hours = counter / 3600;

int minutes = (counter % 3600) / 60;

Trang 12

int seconds = counter % 60;

//Switch 1 dùng để reset lại thời gian đang hiển thị

int reset1 = (IORD(SWITCH_BASE, 0) >> 1)& 0x1;

if (reset1 == 1){

hours = 0;

minutes = 0;

seconds = 0;

counter = 0;

}

if (hours >= 23 & minutes >= 59 & seconds >= 59){

hours = 0;

minutes = 0;

seconds = 0;

counter = 0;

}

if (hours == 24 ){

hours = 0;

minutes = 0;

seconds = 0;

counter = 0;

}

// Đoạn code dịch 2 led để led chạy vòng bằng 1 SWITCH

int sw_led = (*sw_pt >> 9)&0x1;

printf( "*sw_led_value=%d\n" , sw_led);

if(sw_led == 1)

led_value = (led_value >> 1) | ((led_value & 0x1) << 9);

else

led_value = (led_value << 1) | ((led_value & 0x200) >> 9);

// Hiển thị thời gian ra 6 led 7 đoạn

*led_pt = led_value;

int sec_0 = seconds % 10;

int sec_1 = seconds / 10;

int min_0 = minutes % 10;

int min_1 = minutes / 10;

int hour_0 = hours % 10;

int hour_1 = hours / 10;

int sec0 = (IORD(SWITCH_BASE,0) >> 2)& 0x1; //Switch 2 dùng để tăng hàng đơn vị của giây

int sec1 = (IORD(SWITCH_BASE,0) >> 3)& 0x1; //Switch 3 dùng để tăng hàng chục của giây

int min0 = (IORD(SWITCH_BASE,0) >> 4)& 0x1; //Switch 4 dùng để tăng hàng đơn vị của phút

int min1= (IORD(SWITCH_BASE,0) >> 5)& 0x1; //Switch 5 dùng để tăng hàng chục của phút

int hour0= (IORD(SWITCH_BASE,0) >> 6)& 0x1; //Switch 6 dùng để tăng hàng đơn vị của giờ

if (sec0 ==1){

counter++;

}

if (sec1 == 1){

counter +=10;

Trang 13

if (min0 ==1){

counter +=60;

}

if (min1 ==1){

counter +=600;

}

if (hour0 ==1){

counter +=3600;

}

IOWR(HEX0_BASE, 0, segment_decode[sec_0]);

IOWR(HEX1_BASE, 0, segment_decode[sec_1]);

IOWR(HEX2_BASE, 0, segment_decode[min_0]);

IOWR(HEX3_BASE, 0, segment_decode[min_1]);

IOWR(HEX4_BASE, 0, segment_decode[hour_0]);

IOWR(HEX5_BASE, 0, segment_decode[hour_1]);

// Clear Timer interrupt bit

IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,

ALTERA_AVALON_TIMER_STATUS_TO_MSK);

}

void main(){

timer_Init();

alt_ic_isr_register(0, TIMER_0_IRQ, Timer_IRQ_Handler, (void*)0,

(void*)0);

}

Ngày đăng: 06/05/2024, 15:46

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w