1. Trang chủ
  2. » Giáo án - Bài giảng

đồ án thiết kế hệ thống số

20 287 0

Đ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

Định dạng
Số trang 20
Dung lượng 1,07 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Ping-Pong game FPGA Page 3  Theo một trình tự nhất định từ trái sang phải trong từng dòng, từ dòng trên xuống dòng dưới trong từng ảnh, màu sắc của các điểm ảnh lần lượt được “đọc” và

Trang 1

Ping-Pong game FPGA Page 1

MỤC LỤC

I GIỚI THIỆU TRÒ CHƠI PING-PONG 2

II TÌM HIỂU VỀ VGA……… 2

1 Nguyên lý quét và hiển thị hình ảnh……… 2

2 Tín hiệu VGA……… 4

3 Định thời tín hiệu cho chế độ hiển thị VGA 640x480, 60Hz……… …5

III THIẾT KẾ CHƯƠNG TRÌNH ĐIỀU KHIỂN TRÒ CHƠI PING PONG….9 1 Sơ đồ khối hệ thống……… 9

2 Khối điều khiển VGA……… 10

3 Khối điều khiển trò chơi……….… 14

4 Ghép nối hệ thống……….18

IV TỔNG KẾT……….……20

V TÀI LIỆU THAM KHẢO……….………20

Trang 2

Ping-Pong game FPGA Page 2

I GIỚI THIỆU TRÒ CHƠI PING-PONG:

Hình 1: Trò chơi Ping-Pong

Ping-Pong là một trò chơi quen thuộc và rất phổ biến trên thế giới Luật chơi rất đơn giản, người chơi sẽ sử dụng 2 phím trái và phải để điều khiển thanh trượt đỡ trái bóng

II TÌM HIỂU VỀ VGA:

1 Nguyên lý quét và hiện thị hình ảnh:

Chúng ta nhìn thấy và phân biệt được mọi vật là nhờ tính chất phản xạ ánh sáng

khác nhau của vật và của từng chi tiết của vật Khi rọi lên vật một chùm tia sáng trắng, từ mỗi phần (điểm) của vật đều phản xạ lại phía người quan sát Cường độ

và thành phần phổ (màu sắc) của tia phản xạ thể hiện tính chất phản xạ của phần

tử Đó là tin tức thấy được về vật

 Mỗi ảnh tĩnh được phân chia thành nhiều dòng, mỗi dòng được chia thành nhiều điểm ảnh (pixel) có diện tích rất nhỏ

Trang 3

Ping-Pong game FPGA Page 3

 Theo một trình tự nhất định ( từ trái sang phải trong từng dòng, từ dòng trên xuống dòng dưới trong từng ảnh), màu sắc của các điểm ảnh lần lượt được

“đọc” và biến đổi thành tín hiệu điện, hay còn gọi là tín hiệu video

 Dựa vào giá trị tức thời của tín hiệu video, tia điện tử trong đèn hình sẽ "vẽ" lại màu sắc của các điểm ảnh theo trình tự để tạo lại ảnh tĩnh Do khả năng phân giải kém của mắt người, vì số điểm ảnh trên mỗi ảnh tĩnh đủ lớn (hay nói cách khác là diện tích điểm ảnh đủ nhỏ), ta không thể phân biệt được các điểm ảnh liên tiếp trên mỗi dòng cũng như không thể phân biệt được các dòng kế tiếp trên mỗi ảnh tĩnh mà chỉ nhìn thấy ảnh tĩnh như là một tổng thể liền lạc, không

bị chia cắt

 Các ảnh tĩnh liên tiếp sẽ được đèn hình "vẽ" lại, tạo lại cảm giác về hình ảnh chuyển động trên màn hình, nhờ vào khả năng lưu ảnh trong mắt người

Hình 2: Nguyên lý quét hình ảnh

Quá trình quét bắt đầu từ hàng 0, cột 0 ở góc trên bên trái của màn hình và di chuyển sang bên phải cho đến cuối hàng rồi giật ngược trở lại để quét hàng tiếp theo Quá trình lặp lại cho tới điểm ảnh cuối cùng ở góc dưới bên phải màn hình rồi lại quay về điểm bắt đầu để lặp lại quá trình quét

Do sự lưu ảnh của mắt, nếu ta truyền 24 ảnh/1 giây, khi tái tạo lại hình ảnh người xem sẽ có cảm giác một hình ảnh chuyển động liên tục Tuy nhiên với 24

Trang 4

Ping-Pong game FPGA Page 4

ảnh/1 giây, ánh sáng vẫn bị chớp hay nhấp nháy hình (flicker), gây khó chịu cho người xem Đối với điện ảnh, trong thời gian chiếu một ảnh người ta ngắt ánh sáng làm hai lần Điều đó có nghĩa, thay vì chiếu một ảnh liên tục trong thời gian 1/24 giây, người ta chiếu ảnh đó làm hai lần, mỗi lần 1/48 giây Kết quả cho ta cảm giác được xem 48 ảnh/1 giây thay vì 24 ảnh/1 giây Hình ảnh sẽ chuyển động liên tục

và ánh sáng không bị chớp Như vậy, số lưọng ảnh truyền trong một giây càng lớn thì cử động trong ảnh càng thấy liên tục và ảnh tổng hợp không bị nhấp nháy

Tương tự, đối với truyền hình, nhưng để tránh hiện tượng bị rung, lắc hoặc có vết đen trôi trên màn ảnh khi bộ lọc nguồn không đảm bảo chất lượng, người ta có thể truyền 50 ảnh/1 giây đối với những nơi sử dụng điện lưới có tần số 50Hz và 60 ảnh/1 giây đối với những nơi có tần số điện lưới 60Hz Đây còn gọi là tốc độ làm tươi

2 VGA:

VGA (hay Video Graphics Array) là một chuẩn hiển thị máy tính được giới thiệu năm 1987 từ phía IBM cùng loại máy tính PS/2 của họ Nó có thể hiểu là thiết bị xuất đồ họa dưới dạng Video thành từng dãy ra màn hình và có thể hiển thị

256 màu biến đổi liên tục cùng một lúc, với độ phân giải 640 dòng chiều ngang và

480 dòng chiều dọc Chuẩn VGA tương thích lùi với tất cả các chuẩn hiển thị trước

đó, như CGA, MDA và EGA

Chuẩn VGA cao EGA hơn không những chỉ vì độ phân giải cao, mà còn vì công nghệ VGA cho phép giữ vững tỉ lệ co giãn của các hình đồ họa trên màn hình máy tính Chuẩn VGA cũng dùng công nghệ tín hiệu đầu vào dạng tương tự để tạo ra một số lượng không hạn chế các màu sắc biến đổi theo một dải liên tục, trong khi

đó EGA dùng công nghệ màn hình số nên bị giới hạn về số lượng các mức cường

độ màu

Chuẩn VGA của IBM được các hãng sản xuất thiết bị nâng lên cao hơn khi đưa

ra các bộ điều hợp VGA (card màn hình) có khả năng hiển thị thêm các chế độ đồ họa bổ sung Đó là chế độ Super VGA có độ phân giải 800 pixel dòng chiều ngang

và 600 dòng chiều dọc, và các bộ điều hợp cao cấp hơn cho phép hiển thị độ phân giải 1024 x 768 hoặc cao hơn, ở mức độ tối thiểu 256 màu (8 bit)

Trang 5

Ping-Pong game FPGA Page 5

Hình 3: Các thông số của tín hiệu VGA

3 Định thời tín hiệu cho chế độ hiển thị VGA 640x480, 60Hz

Trong thiết kế này, sử dụng VGA 640x480 pixel, tốc độ quét mỗi pixel là 25MHz Có 5 tín hiệu điều khiển chính, bao gồm tín hiệu đồng bộ hàng Hsync, cột Vsync Và 3 tín hiệu cho tia màu RGB

Hai tín hiệu đồng bộ Hsync và Vsync dùng để điều khiển tạo ra rạng sóng răng cưa Đây là các tín hiệu số

Trang 6

Ping-Pong game FPGA Page 6

Hình 4: CRT display timing

Trang 7

Ping-Pong game FPGA Page 7

Ba tín hiệu RGB kết hợp với nhau tạo ra 8 màu sắc cơ bản:

Hình 5: 640x480 Mode VGA timing

Như vậy để tạo ra tín hiệu quét như trên, đơn giản ta tạo ra hai bộ đếm Bộ đếm đến các giá trị tương ứng cho trên bảng thì xuất tín hiệu đó lên mức ‘1’

Trang 8

Ping-Pong game FPGA Page 8

Hình 6: Giản đồ thời gian của tín hiệu đồng bộ

Hình 7: Kết nối tín hiệu với cổng DB15

Trang 9

Ping-Pong game FPGA Page 9

III.THIẾT KẾ CHƯƠNG TRÌNH ĐIỀU KHIỂN TRÒ CHƠI PING PONG:

1 Sơ đồ khối hệ thống:

Hình 7: Top-module

Hệ thống gồm 2 khối: khối điều khiển VGA và khối điều khiển game

Các lối vào:

 clk: lấy xung clock 50Mhz từ hệ thống

 start: cho phép hoạt động

 reset: khởi động lại hệ thống

 button_r, button_l: 2 nút điều khiển trò chơi

Các lối ra:

 h_s: tín hiệu quét đồng bộ ngang

 v_s: tín hiệu quét đồng bộ dọc

 RGB: màu sắc của điểm ảnh đang quét

Trang 10

Ping-Pong game FPGA Page 10

2 Khối điều khiển VGA:

Hình 8: VGA module

Nhiệm vụ: tạo ra tín hiệu quét ngang và quét dọc để điều khiển VGA, và đưa tín

tọa độ của pixel đang quét tới khối điều khiển game

Các lối vào:

 start: cho phép hoạt động

 clk: lấy xung clock từ hệ thống

 reset: dùng để khởi động lại hệ thống

Các lối ra:

 h_s: tín hiệu quét đồng bộ ngang

 v_s: tín hiệu quét đồng bộ dọc

 x_control: đếm từ 0 ÷ 639

 y_control: đếm từ 0 ÷ 479

 video_on: cho phép hiển thị hình ảnh

Cần sử dụng một bộ đếm mod 2 để chia tần 25MHz từ clock 50MHz của hệ thống:

Trang 11

Ping-Pong game FPGA Page 11

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity sync_mod is

Port ( clk : in STD_LOGIC;

reset : in STD_LOGIC;

start : in STD_LOGIC;

y_control : out STD_LOGIC_VECTOR (9 downto 0); x_control : out STD_LOGIC_VECTOR (9 downto 0); h_s : out STD_LOGIC;

v_s : out STD_LOGIC;

video_on : out STD_LOGIC);

end sync_mod;

architecture Behavioral of sync_mod is

Video Parameters

constant HR:integer := 640; Horizontal Resolution

constant HFP:integer := 16; Horizontal Front Porch constant HBP:integer := 48; Horizontal Back Porch

constant HRet:integer := 96; Horizontal retrace

constant VR:integer := 480; Vertical Resolution

constant VFP:integer := 10; Vertical Front Porch

constant VBP:integer := 33; Vertical Back Porch

constant VRet:integer := 2; Vertical Retrace

sync counter

signal counter_h,counter_h_next : integer range 0 to 799; signal counter_v,counter_v_next : integer range 0 to 524; mod 2 counter

signal counter_mod2, counter_mod2_next : std_logic:='0'; State signals

signal h_end, v_end : std_logic:='0';

Output Signals(buffer)

signal hs_buffer, hs_buffer_next : std_logic:='0';

signal vs_buffer, vs_buffer_next : std_logic:='0';

pixel counter

signal x_counter, x_counter_next : integer range 0 to 900; signal y_counter, y_counter_next : integer range 0 to 900; video_on_off

signal video : std_logic;

Trang 12

Ping-Pong game FPGA Page 12

begin

clk register

process(clk,reset,start)

begin

if reset = '1' then

counter_h <= 0;

counter_v <= 0;

hs_buffer <= '0';

hs_buffer <= '0';

counter_mod2 <= '0';

elsif clk'event and clk='1' then

if start = '1' then

counter_h <= counter_h_next;

counter_v <= counter_v_next;

x_counter <= x_counter_next;

y_counter <= y_counter_next;

hs_buffer <= hs_buffer_next;

vs_buffer <= vs_buffer_next;

counter_mod2 <= counter_mod2_next;

end if;

end if;

end process;

video on/off

video <= '1' when (counter_v >= VBP) and

(counter_v < VBP + VR) and (counter_h >= HBP) and

(counter_h < HBP + HR)

else '0';

mod 2 counter

counter_mod2_next <= not counter_mod2;

end of Horizontal scanning

h_end <= '1' when counter_h = 799 else '0';

end of Vertical scanning

v_end <= '1' when counter_v = 524 else '0';

Horizontal Counter

process(counter_h, counter_mod2, h_end)

begin

counter_h_next <= counter_h;

if counter_mod2 = '1' then

if h_end = '1' then

counter_h_next <= 0;

else

Trang 13

Ping-Pong game FPGA Page 13

counter_h_next <= counter_h + 1;

end if;

end if;

end process;

Vertical Counter

process(counter_v,counter_mod2, h_end, v_end)

begin

counter_v_next <= counter_v;

if counter_mod2 = '1' and h_end = '1' then

if v_end='1' then

counter_v_next <= 0;

else

counter_v_next <= counter_v + 1;

end if;

end if;

end process;

pixel x counter

process(x_counter, counter_mod2, h_end,video)

begin

x_counter_next <= x_counter;

if video = '1' then

if counter_mod2 = '1' then

if x_counter = 639 then

x_counter_next <= 0;

else

x_counter_next <= x_counter + 1;

end if;

end if;

else

x_counter_next <= 0;

end if;

end process;

pixel y counter

process(y_counter, counter_mod2, h_end, counter_v)

begin

y_counter_next <= y_counter;

if counter_mod2 = '1' and h_end = '1' then

if counter_v > 32 and counter_v < 512 then

y_counter_next <= y_counter + 1;

else

y_counter_next <= 0;

end if;

end if;

end process;

buffer

Trang 14

Ping-Pong game FPGA Page 14

(HBP+HGO+HFP)

hs_buffer_next <= '1' when counter_h < 704 else '0';

(VBP+VGO+VFP)

vs_buffer_next <= '1' when counter_v < 523 else '0';

outputs

y_control <= conv_std_logic_vector(y_counter,10);

x_control <= conv_std_logic_vector(x_counter,10);

h_s <= hs_buffer;

v_s <= vs_buffer;

video_on <= video;

end Behavioral;

3 Khối điều khiển game:

Hình 11: Game module

Nhiệm vụ: Nhận thông tin về tọa độ pixel đang quét từ khối VGA và hiển thị vị

trí, màu sắc tương ứng của vật thể trong game

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity img_gen is

Port ( clk : in STD_LOGIC;

x_control : in STD_LOGIC_VECTOR(9 downto 0);

button_l : in STD_LOGIC;

button_r : in STD_LOGIC;

y_control : in STD_LOGIC_VECTOR(9 downto 0);

video_on : in STD_LOGIC;

Trang 15

Ping-Pong game FPGA Page 15

rgb : out STD_LOGIC_VECTOR(2 downto 0));

end img_gen;

architecture Behavioral of img_gen is

wall

constant wall_l : integer :=10; the distance between wall and left side of screen

constant wall_t : integer :=10; the distance between wall and top

side of screen

constant wall_k : integer :=10; wall thickness

signal wall_on : std_logic;

signal rgb_wall : std_logic_vector(2 downto 0);

bar

signal bar_l,bar_l_next : integer :=100; the distance between bar

and left side of screen

constant bar_t : integer =420; the distance between bar and top side

of screen

constant bar_k : integer :=10; bar thickness

constant bar_w : integer :=120; bar width

constant bar_v : integer :=10; velocity of the bar

signal bar_on : std_logic;

signal rgb_bar : std_logic_vector(2 downto 0);

ball

signal ball_l,ball_l_next : integer :=100; the distance between ball

and left side of screen

signal ball_t,ball_t_next : integer :=100; the distance between ball

and top side of screen

constant ball_w : integer :=20; ball Height

constant ball_u : integer :=20; ball width

constant x_v,y_v : integer:=3; horizontal and vertical speeds of

the ball

signal ball_on : std_logic;

signal rgb_ball : std_logic_vector(2 downto 0);

refreshing(1/60)

signal refresh_reg,refresh_next : integer;

constant refresh_constant : integer:=830000;

signal refresh_tick : std_logic;

ball animation

signal xv_reg,xv_next : integer:=3; variable of the horizontal speed

signal yv_reg,yv_next : integer:=3; variable of the vertical speed

x,y pixel cursor

signal x,y : integer range 0 to 650;

Trang 16

Ping-Pong game FPGA Page 16

mux

signal vdbt : std_logic_vector(3 downto 0);

buffer

signal rgb_reg,rgb_next : std_logic_vector(2 downto 0);

begin

x,y pixel cursor

x <= conv_integer(x_control);

y <= conv_integer(y_control );

refreshing

process(clk)

begin

if clk'event and clk = '1' then

refresh_reg <= refresh_next;

end if;

end process;

refresh_next <= 0 when refresh_reg = refresh_constant

else refresh_reg + 1;

refresh_tick <= '1' when refresh_reg = 0 else '0';

register part

process(clk)

begin

if clk'event and clk='1' then

ball_l <= ball_l_next;

ball_t <= ball_t_next;

xv_reg <= xv_next;

yv_reg <= yv_next;

bar_l <= bar_l_next;

end if;

end process;

bar animation

process(bar_l, refresh_tick, button_r, button_l)

begin

bar_l_next <= bar_l;

if refresh_tick = '1' then

if button_l = '1' and bar_l > bar_v then

bar_l_next <= bar_l- bar_v;

elsif button_r = '1' and bar_l < (639 - bar_v - bar_w) then bar_l_next <= bar_l+ bar_v;

end if;

end if;

end process;

Ngày đăng: 01/07/2016, 07:17

HÌNH ẢNH LIÊN QUAN

Hình 1: Trò chơi Ping-Pong. - đồ án thiết kế hệ thống số
Hình 1 Trò chơi Ping-Pong (Trang 2)
Hình 2: Nguyên lý quét hình ảnh. - đồ án thiết kế hệ thống số
Hình 2 Nguyên lý quét hình ảnh (Trang 3)
Hình 4:  CRT display timing. - đồ án thiết kế hệ thống số
Hình 4 CRT display timing (Trang 6)
Hình 5: 640x480 Mode VGA timing. - đồ án thiết kế hệ thống số
Hình 5 640x480 Mode VGA timing (Trang 7)
Hình 6: Giản đồ thời gian của tín hiệu đồng bộ. - đồ án thiết kế hệ thống số
Hình 6 Giản đồ thời gian của tín hiệu đồng bộ (Trang 8)
Hình 7: Kết nối tín hiệu với cổng DB15. - đồ án thiết kế hệ thống số
Hình 7 Kết nối tín hiệu với cổng DB15 (Trang 8)
1. Sơ đồ khối hệ thống: - đồ án thiết kế hệ thống số
1. Sơ đồ khối hệ thống: (Trang 9)
Hình 8: VGA module. - đồ án thiết kế hệ thống số
Hình 8 VGA module (Trang 10)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w