Phần 1: Giới thiệu về bộ thực hành Altera DE2 Board Hình ảnh của bộ DE2 Board được hiển thị như hình 1.1 bên dưới. Nó mô tả các layout của bo mạch và chỉ ra vị trí các kết nối và các thành phần chính của bo mạch. Hình 1.1 DE2 Board DE2 Board cung cấp nhiều tính năng cho phép người sử dụng thực hiện các thiết kế mạch, từ đơn giản tới các dự án đa phương tiện khác nhau. Có các thành phần phần cứng được cung cấp bởi DE2 board dưới đây: • Altera Cyclone® II 2C35 FPGA device • Altera Serial Configuration device EPCS16 • USB Blaster • 512Kbyte SRAM • 8Mbyte SDRAM • 4Mbyte Flash memory • SD Card socket • 4 nút công tắc. • 18 nút gạt • 18 LED màu đỏ • 9 LED màu xanh • Bộ dao động kí 50MHz và 27MHz cho các nguồn xung clock • 24bit mã âm thanh chất lượng CD với linein, lineout, và microphonein jack cắm • TV Decoder (NTSCPAL) and TVin connector
Trang 1TRƯỜNG ĐẠI HỌC KHOA HỌC HUẾ KHOA ĐIỆN TỬ - VIỄN THÔNG
BỘ MÔN KỸ THUẬT ĐIỆN TỬ
-BÁO CÁO THỰC HÀNH FPGA
Giáo viên hướng dẫn : th.s Phan Hải Phong Nhóm sinh viên thực hiện: Trần Văn Thạnh
Hoàng Thảo Nguyên Nguyễn Thanh Dũ
Lớp: ĐTVT – K34
Huế, 01/2015
Trang 2Phần 1: Giới thiệu về bộ thực hành Altera DE2 Board
− Hình ảnh của bộ DE2 Board được hiển thị như hình 1.1 bên dưới Nó mô tả các layout của bo mạch và chỉ ra vị trí các kết nối và các thành phần chính của bo mạch
Hình 1.1 DE2 Board
− DE2 Board cung cấp nhiều tính năng cho phép người sử dụng thực hiện các thiết kế mạch, từ đơn giản tới các dự án đa phương tiện khác nhau
− Có các thành phần phần cứng được cung cấp bởi DE2 board dưới đây:
• Altera Cyclone® II 2C35 FPGA device
• Altera Serial Configuration device - EPCS16
• 9 LED màu xanh
• Bộ dao động kí 50MHz và 27MHz cho các nguồn xung clock
• 24-bit mã âm thanh chất lượng CD với line-in, line-out, và microphone-in jackcắm
• TV Decoder (NTSC/PAL) and TV-in connector
• 10/100 Ethernet Controller with a connector
• USB Host/Slave Controller with USB type A and type B connectors
• RS-232 transceiver and 9-pin connector
Trang 3• PS/2 mouse/keyboard connector
• IrDA transceiver
• Two 40-pin Expansion Headers with diode protection
− Hình 1.2 mô tả sơ đồ khối của DE2 board Để cung cấp sự linh hoạt tối đa cho người sử dụng, tất cả các kết nối được thực hiện thông qua các thiết bị Cyclone II FPGA Do đó, người dùng có thể cấu hình FPGA để thiết kế bất kì hệ thống nào
Hình 1.2 Sơ đồ khối của DE2 board
Phần 2: Thực hành FPGA
Chương I Exercise 1: Switches, Lights, and Multiplexers
Trang 4Mục đích của bài tập này là để tìm hiểu làm thế nào để kết nối các thiết bị đầu vào và đầu ra của chip FPGA và thiết kế mạch sử dụng thiết bị này Chúng ta sẽ sử dụng các switches SW 17-0 trên DE2 board cho đầu vào của mạch Sử dụng LED và LED 7-seg cho các thiết bị đầu ra
1. PART 1:
a. Yêu cầu:
1. Tạo 1 project Quartus II mới cho mạch Chọn Cyclone IIEP2C35F672C6 cho chip sử dụng, đó là những chip FPGA được tích hợp trên Altera DE2 board
2. Tạo một file VHDL entity cho các code trong hình 1 và cho nó vào trong project vừa tạo
3. Bao gồm trong project thì yêu cầu phải có các pin cần thiết cho DE2 board, như các yêu cầu nêu trên Tiến hành compile project vừa tạo
4. Tải các mạch biên dịch và các chip FPGA Kiểm tra chức năng của mạch bằng cách bật tắt các công tắc và quan sát các đèn LED
b. Mã VHDL:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY LED IS
PORT (SW :IN STD_LOGIC_VECTOR(17 DOWNTO 0);
LEDR:OUT STD_LOGIC_VECTOR(17 DOWNTO 0));
Trang 5Hình 1.3 Mô phỏng part I
2. PART 2:
a. Yêu cầu:
1. Tạo một project Quartus II cho mạch của bạn
2. Viết mã VHDL sử dụng 8 bit mở rộng trong bộ hợp kênh 2 ra 1 trong project Sử dụng SW17 trên DE2 board cho đầu vào, SW7-0 cho đầu ra của X và SW15-8 cho đầu ra của
Y Kết nối các SW tới các đèn LED màu đỏ, đầu ra M sử dụng các led xanh LEDG7-0
3. Trong project của bạn phải cung cấp các pin yêu cầu cho DE2 board Tương tự như part
I, thì các chân đầu vào của mã VHDL phải sử dụng đúng các pin trên Cyclone II FPGA
để kết nối tới các SW, và port đầu ra của mã VHDL sử dụng FPGA pin kết nối tới LEDR
và LEDG
4. Biên dịch project
5. Tải mạch biên dịch vào chip FPGA Kiếm tra chức năng của 8bit mở rộng của bộ hợp kênh 2 to 1 bằng cách sử dụng SW và quan sát sự thay đổi của đèn LED
Trang 6Hình 1.4 Bộ hợp kênh eight-bit wide 2-to-1
b. Mã VHDL:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY partII IS
PORT ( SW: IN std_logic_vector (17 downto 0);
LEDR: OUT std_logic_vector (17 downto 0);
LEDG: OUT std_logic_vector( 7 downto 0));
LEDG <= SW (15 downto 8) WHEN '1',
SW (7 downto 0)WHEN OTHERS;
END BH;
Trang 7c. Mô phỏng bằng ModelSIM:
Trường hợp 1: Khi SW17 = 1 thì LEDG sẽ được gán cho các SW 15-8 , LEDG sáng
tắt phụ thuộc vào sự bật tắt của các SW15-8 Ví dụ ta cho trình tự bật tắt của SW15-8 như sau: 01101111 ta sẽ nhận được kết quả ở đầu ra LEDG
Hình 1.5 Mô phỏng part II trường hợp 1
Trường hợp 2: Khi SW 17=0, thì LEDG sẽ được gán tương ứng với các SW7-0
Tương tự như trường hợp 1 ta có kết quả mô phỏng áp dụng cho dãy SW7-0 có sự bậttắt như sau: 00001001 Kết quả nhận được ở LEDG đúng như mã VHDL ta vừa làm
Hình 1.6 Mô phỏng part II trường hợp 2
3. Part III.
Trang 8a. Yêu cầu:
Tiến hành các bước sau đây để thực thi bộ hợp kênh 3bit wide 5-to-1
1 Tạo 1 project Quartus II mới cho mạch của bạn
2 Tạo 1 VHDL entity cho bộ ghép kênh 3bit wide 5-to-1
− Kết nối đầu vào được chọn với các switch SW17-15, và sử dụng 15 switch còn lại SW14-0 để sử dụng cho 5 3-bit đầu vào cho Y
− Kết nối các switch SW với led màu đỏ LEDR và các đầu ra với led xanh LEDG 2-0
3 Bao gồm trong project của bạn thì phải có mã pin cho DE2 board Tiến hành biên dịch project của bạn
4 Tải mạch biên dịch vào trong các chip FPGA Kiểm tra chức năng của bộ hợp kênh 3bit wide 5-to-1, bởi các nút nhấn đảo chiều và quan sát các đèn LED Phải đảm bảo rằngvới mỗi đầu vào U tới Y có thể cho kết quả đúng ở đầu ra tại M
Hình 1.7 Một bộ hợp kênh 3-bit wide 5-to-1
b. Mã VHDL:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY partIII IS
PORT ( SW: IN std_logic_vector (17 downto 0);
LEDR: OUT std_logic_vector(17 downto 0);
LEDG: OUT std_logic_vector(2 downto 0));
Trang 9END partIII;
ARCHITECTURE BH OF partIII IS
BEGIN
LEDR <= SW;
WITH SW(17 downto 15) SELECT
LEDG <= SW (2 downto 0) WHEN "000",
Hình 1.8 Mô phỏng trường hợp 1 part III
Tương tự với các trường hợp còn lại thì ta sẽ nhận được giá trị hiển thị lên LEDG tương ứng với SW17-15 với các SW còn lại
Trang 104 Part IV:
a Yêu cầu:
Hình 1.8 cho ta thấy một module giải mã 7-segment từ ba bit đầu vào c2c1c0 Bộ giải mã
này cung cấp 7 đầu ra để hiển thị lên màn hình 7-segment Để giữ cho các thiết kế đơn giản thì chỉ có 4 đặc tính trong bảng (cộng với các kí tự trắng, đó là các lựa chọn các code từ 100-111)
Bảng 1: Mã kí tự
1. Tạo một project Quartus II cho mạch của bạn
2. Tạo một thực thể VHDL cho bộ giải mã 7 đoạn Kết nối đầu vào c2c1c0 với các switch SW2-0 , và kết nối đầu ra của bộ giải mã với LED 7 đoạn HEX0 trên DE2 board Những đoạn được hiển thị được gọi là HEX00,HEX01,…,HEX06, tương ứng với hình 1.8 Bạn nên khai báo các cổng 7 bit như sau:
HEX0: OUT STD_LOGIC_VECTOR (0 to 6);
Trong mã VHDL mà chúng ta viết thì nên để tên các kết quả đầu ra phù hợp với tên tương ứng trong Sổ tay sử dụng DE2 và file DE2_pin_assigment.csv
3. Sau khi thực hiện các quá trình trên, tiến hành biên dịch project vừa tạo
4. Tải mạch biên dịch vào chip FPGA Kiểm tra chức năng của mạch bằng cách bật tắt các công tắc SW2-0 và quan sát sự thay đổi của LED 7 đoạn
Trang 11b Mã VHDL:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY partIV IS
PORT ( SW: IN std_logic_vector (17 downto 0);
LEDR: OUT std_logic_vector (17 downto 0);
HEX1: OUT std_logic_vector (0 to 6));
Trường hợp 1: Khi SW2-0 = “000” thì HEX1 hiển thị chữ H, có dãy nhị phân như sau:
H =1001000 Kết quả được hiển thị phía bên dưới:
Trang 13Xem xét các mạch hiển trị trong hình 2.1 Mạch sử dụng bộ hợp kênh 3-bit wide 5-to-1 cho phép lựa chọn 5 kí tự hiển thị lên màn hình 7-segment Sử dụng mạch giải mã 7-segment từ Part
IV để hiển thị bất kì kí tự nào trong các kí tự sau H,E,L,O, “Trắng” Các mã kí tự được quy định theo bảng 1 bằng cách sử dụng các switch SW14-0, và một kí tự riêng được lựa chon để hiển thị bằng cách thiết lập các switch SW17-15.
Hình 2.1 Sơ đồ mạch
Bảng 2:
a. Yêu cầu: thực hiện các bước sau đây
1. Tạo một project Quartus II mới cho mạch của bạn
2. Bao gồm các thực thể VHDL project Quartus II Kết nối các switch SW17-15 với đầu vào lựa chọn của một trong 5 trường hợp của bộ hợp kênh 3-bit wide 5-to-1 Kết nối các switch SW14-0 của bộ hợp kênh theo các kí tự thể hiện trong bảng 2 Kết nối kết quả đầu ra với LED 7 đoạn HEX4,HEX3,HEX2,HEX1 và HEX0
3. Thêm vào các pin yêu cầu của DE2 board cho tất cả các switch, đèn LED, và LED 7 đoạn Tiến hành biên dịch project
4. Tải mạch biên dịch vào chip FPGA Kiểm tra chức năng của mạch bằng cách thiết lậpcác mã ký tự thích hợp trên các thiết bị switch SW14-0 và sau đó đảo chiều SW17-15 để quan sát sự thay đổi của các ký tự trên LED 7 đoạn
b. Mã VHDL: chia làm 3 đoạn code chính
Trang 14Code 1: Chương trình chính
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY partV IS
PORT (SW :IN std_logic_vector (17 downto 0);
LEDR:OUT std_logic_vector (17 downto 0);
HEX0,HEX1,HEX2,HEX3,HEX4:OUT std_logic_vector (0 to 6));
END partV;
ARCHITECTURE bh OF partV IS
COMPONENT MUX_3bit_5to1
PORT ( S, U, V, W, X, Y :IN std_logic_vector (2 downto 0);
M :OUT std_logic_vector (2 downto 0));
Trang 16"0000000" when with C select
D1 <= "1110001" when "000",
"0000001" when "001",
"1001000" when "010",
"0110000" when "011", "1110001" when "100", "0000000" when others; L with C select
Trang 17LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY MUX_3bit_5to1 IS
PORT (
S,U,V,W,X,Y :IN std_logic_vector(2 downto 0);
M :OUT std_logic_vector(2 downto 0));
Ta xét trường hợp: SW17-15 =”000” , M = U khi SW2-0 = “000”, chọn 4 giá trị của
D0,D1,D2,D3,D4 như trong code VHDL ta có kết quả mô phỏng như sau Chỉ xét một trường hợp, các trường hợp còn lại tương tự
Trang 18Hình 2.2 Mô phỏng PART V
6 Part VI:
Mở rộng thiết kế từ part V bằng cách sử dụng tất cả 8 con LED 7 đoạn hiển thị ở trên mạch DE2 board Mạch của bạn sẽ có thể hiển thị các từ với năm (hoặc ít hơn) các kí tự trên 8 con LED, các
Trang 19kí tự sẽ thay đổi khi switch SW17-15 được nhấn Nếu từ hiển thị là HELLO, thì cấu trúc của mạch
sẽ được thể hiện như trong bảng 3 dưới đây
Bảng 3: xoay từ HELLO ở 8 LED 7 đoạn
a. Yêu cầu: Thực hiện theo các bước sau đây
1. Tạo một project Quartus II cho mạch của bạn và chọn chip thực hiện là Cyclone
IIEP2C35F672C6
2. Viết mã VHDL bao gồm các thực thể có trong project Quartus II Kết nối thiết bị switch
SW17-15 cho các đầu vào được lựa chọn để thể hiện đặc điểm của bộ hợp kênh trong mạchcủa bạn Kết nối SW14-0 cho mỗi mức của bộ ghép kênh được thể hiện như trong bảng 3 (Gợi ý: Đối với một số yếu tố đầu vào của bộ hợp kênh, có thể sẽ phải chọn các kí tự
“trống”) Kết nối đầu ra của bộ hợp kênh đến LED 7 đoạn hiển thị từ HEX7,…HEX0
b. Mã VHDL cho yêu cầu thiết kế:
Code 1: Đoạn mã VHDL chính
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY partVI IS
PORT(SW: IN std_logic_vector(17 downto 0);
LEDR: OUT std_logic_vector(17 downto 0);
HEX0: OUT std_logic_vector(6 downto 0);
HEX1: OUT std_logic_vector(6 downto 0);
Trang 20HEX2: OUT std_logic_vector(6 downto 0);
HEX3: OUT std_logic_vector(6 downto 0);
HEX4: OUT std_logic_vector(6 downto 0);
HEX5: OUT std_logic_vector(6 downto 0);
HEX6: OUT std_logic_vector(6 downto 0);
HEX7: OUT std_logic_vector(6 downto 0));
END part6;
ARCHITECTURE bh OF partVI IS
COMPONENT mux
PORT (S,U,V,W,X,Y,A,B,C:IN std_logic_vector(2 downto 0);
M:OUT std_logic_vector(2 downto 0));
SIGNAL M0: std_logic_vector(2 downto 0);
SIGNAL M1: std_logic_vector(2 downto 0);
SIGNAL M2: std_logic_vector(2 downto 0);
SIGNAL M3: std_logic_vector(2 downto 0);
SIGNAL M4: std_logic_vector(2 downto 0);
SIGNAL M5: std_logic_vector(2 downto 0);
SIGNAL M6: std_logic_vector(2 downto 0);
Trang 21SIGNAL M7: std_logic_vector(2 downto 0);
BEGIN
LEDR <= SW;
M8: mux PORT MAP (SW(17 downto 15), SW(14 downto 12),SW(11 downto 9),SW(8 downto 6),SW(5 downto 3),SW(2 downto 0), "101","101","101",M0);
H0: char_7seg PORT MAP (M0, HEX0);
M9: mux PORT MAP (SW(17 downto 15),"101", SW(14 downto 12),SW(11 downto 9),SW(8 downto 6),SW(5 downto 3),SW(2 downto 0), "101","101",M1);
H1: char7seg PORT MAP (M1, HEX1);
M10: mux PORT MAP (SW(17 downto 15),"101","101", SW(14 downto 12),SW(11 downto 9),SW(8 downto 6),SW(5 downto 3),SW(2 downto 0), "101",M2);
H2: char7seg PORT MAP (M2, HEX2);
M11: mux PORT MAP (SW(17 downto 15),"101","101","101", SW(14 downto
12),SW(11 downto 9),SW(8 downto 6),SW(5 downto 3),SW(2 downto 0),M3);
H3: char_7seg PORT MAP (M3, HEX3);
M12: mux PORT MAP (SW(17 downto 15),SW(2 downto 0),"101","101","101", SW(14 downto 12),SW(11 downto 9),SW(8 downto 6),SW(5 downto 3),M4);
H4: char_7seg PORT MAP (M4, HEX4);
M13: mux PORT MAP (SW(17 downto 15),SW(5 downto 3),SW(2 downto
0),"101","101","101", SW(14 downto 12),SW(11 downto 9),SW(8 downto 6),M5);
H5: char_7seg PORT MAP (M5, HEX5);
M14: mux PORT MAP (SW(17 downto 15),SW(8 downto 6),SW(5 downto 3),SW(2 downto 0),"101","101","101", SW(14 downto 12),SW(11 downto 9),M6);
H6: char_7seg PORT MAP (M6, HEX6);
M15: mux PORT MAP (SW(17 downto 15),SW(11 downto 9),SW(8 downto 6),SW(5 downto 3),SW(2 downto 0),"101","101","101", SW(14 downto 12),M7);
H7: char_7seg PORT MAP (M7, HEX7);
Trang 22S,U,V,W,X,Y,A,B,C:IN std_logic_vector(2 downto 0);
M:OUT std_logic_vector(2 downto 0));
Trang 23
END bh;
c. Mô phỏng bằng ModelSIM: phần này sử dụng DE2 board sẽ thấy rõ hơn ModelSIM
Chương II: Exercise 2 Numbers and Displays
Đây là một bài tập về thiết kế mạch tổ hợp logic chuyển đổi nhị phân sang thập phân, và bộ cộng mã thập phân BCD
Trang 241. Part I
Hiển thị giá trị lên HEX3 tới HEX0 được thiết lập cho các switches từ SW 15-0.Các SW15-12ứng với HEX3, SW11-8 ứng với HEX2,… tới SW3-0 tới HEX0 Hiển thị các số tương tứng từ 0tới 9, và loại ra các giá trị 1010 tới 1111
a. Yêu cầu: Thực hiện các bước sau
1. Tạo project mới sử dụng các thành phần có sẵn trên DE2 board Altera Mục đích của bài tập này là thể hiện các chức năng logic lên LED 7 đoạn Bạn nên sử dụng mã VHDL đơngiản và xác định từng chức năng logic theo biểu thức Boolean
2. Viết một file VHDL cung cấp các hàm cần thiết Bao gồm các file trong project và quy định các chân trên FPGA để kết nối với thiết bị chuyển mạch và hiển thị LED 7 đoạn như đã nêu trong phần hướng dẫn sử dụng DE2 board
3. Biên dịch project và tải các mạch biên dịch vào các chip FPGA
4. Kiểm tra các chức năng của thiết kế bằng cách bật tắt các công tắc và quan sát sự thay đổi ở LED 7 đoạn
PORT (SW :IN std_logic_vector(15 downto 0);
LEDR: OUT std_logic_vector (15 downto 0);
HEX0,HEX1,HEX2,HEX3: OUT std_logic_vector (0 to 6));
Trang 25LEDR<= SW;
H0: char_7seg port map (SW(15 downto 12),HEX0);
H1: char_7seg port map (SW(11 downto 8),HEX1);
H2: char_7seg port map (SW(7 downto 4),HEX2);
H3: char_7seg port map (SW (3 downto 0),HEX3);
Trang 26"0001111" when "0111", "0000000" when "1000", "0000100" when "1001", "1111111" when others;
Trang 27của bộ so sánh này để điều khiển LED 7 đoạn Hoàn thành thiết kế bằng cách tạo ra mã VHDL cho bộ so sánh, bộ hợp kênh, và mạch A (bao gồm mạch B hoặc các bộ giải mã 7 đoạn đầu vào tại thời điểm đó) Entity của VHDL nên có các đầu vào 4-bit, bốn bit đầu ra M và đầu ra z
Bảng 4: Chuyển đổi giá trị nhị phân 4bit sang thập phân
a. Yêu cầu: thực hiện theo các bước sau
1. Tạo một project Quartus II cho thực thể VHDL của bạn
2. Biên dịch mạch và sử dụng mô phỏng về mặt chức năng để xác định các hoạt động của các mạch so sánh, bộ hợp kênh và mạch A
3. Cải tiến mã VHDL để chèn vào mạch B như trong hình 2.4 cũng như các bộ giải mã 7 đoạn Thay đổi các yếu tố đầu vào và đầu ra của mã bạn sử dụng các switch SW3-0 trên bộ KIT DE2 để đại diện cho số nhị phân V, và sử dụng HEX1 và HEX0 để hiển thị các giá trị của chữ số thập phân d1,d0
4. Biên dịch lại project, và sau đó tải các mạch vào trong chip FPGA
5. Kiểm tra lại mạch bằng cách thử cách giá trị có thể có của V và quan sát ở màn hình đầu ra