george mason university ece 448 – fpga and asic design with vhdl vga display part 3 animation ece...
DESCRIPTION
3ECE 448 – FPGA and ASIC Design with VHDL PONGTRANSCRIPT
![Page 1: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/1.jpg)
George Mason UniversityECE 448 – FPGA and ASIC Design with VHDL
VGA DisplayPart 3
Animation
ECE 448Lecture 11
![Page 2: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/2.jpg)
2ECE 448 – FPGA and ASIC Design with VHDL
Required Reading
• P. Chu, FPGA Prototyping by VHDL Examples Chapter 12, VGA Controller I: Graphic
•Source Codes of Examples http://academic.csuohio.edu/chu_p/rtl/fpga_vhdl.html
•Nexys 3 Board Reference Manual VGA Port, pages 15-17
![Page 3: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/3.jpg)
3ECE 448 – FPGA and ASIC Design with VHDL
PONG
![Page 4: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/4.jpg)
4
PONG
ECE 448 – FPGA and ASIC Design with VHDL
• Commonly regarded as the first "commercially successful" video game• Released by Atari in 1972• Created by Allan Alcorn as a training exercise assigned to him by Atari co-founder Nolan Bushnell• The first prototype developed completely in hardware using TTL devices• Originally used as an arcade video game• Home version released during the 1975 Christmas
season
![Page 5: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/5.jpg)
5
PONG
ECE 448 – FPGA and ASIC Design with VHDL
![Page 6: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/6.jpg)
6
PONG – Interesting Videos
ECE 448 – FPGA and ASIC Design with VHDL
Pong Gamehttp://www.ponggame.org
First documented Video Ping-Pong game – 1969https://www.youtube.com/watch?v=XNRx5hc4gYc
Classic Game Room HD - PONG for Nintendo DS / GBAhttps://www.youtube.com/watch?v=TrezFjGF-Kg
![Page 7: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/7.jpg)
7ECE 448 – FPGA and ASIC Design with VHDL
Animation
![Page 8: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/8.jpg)
8
Animation Basics
ECE 448 – FPGA and ASIC Design with VHDL
• Animation is achieved by an object changing its location gradually in each frame• We use signals, instead of constants, to determine boundaries of an object• VGA monitor is refreshed 60 times per second• The boundary signals need to be updated at this rate• We create a 60 Hz enable tick, refr_tick, which is asserted for 1 pixel period every 1/60th of a second
![Page 9: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/9.jpg)
9
Moving the Bar (Paddle)
ECE 448 – FPGA and ASIC Design with VHDL
600 ≤ x ≤ 603bar_y_t ≤ y ≤ bar_y_b
bar_y_t = bar_y_regbar_y_b=bar_y_t+BAR_Y
_SIZE-1
BAR_V is a velocityof the bar (#pixels/frame)
![Page 10: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/10.jpg)
10ECE 448 – FPGA and ASIC Design with VHDL
-- bar left, right boundary constant BAR_X_L: integer:=600; constant BAR_X_R: integer:=603;
-- bar top, bottom boundary signal bar_y_t, bar_y_b: unsigned(9 downto 0); constant BAR_Y_SIZE: integer:=72;
-- reg to track top boundary (x position is fixed) signal bar_y_reg, bar_y_next: unsigned(9 downto 0);
-- bar moving velocity when the button is pressed constant BAR_V: integer:=4;
Moving the Bar in VHDL (1)
![Page 11: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/11.jpg)
11ECE 448 – FPGA and ASIC Design with VHDL
-- boundary bar_y_t <= bar_y_reg; bar_y_b <= bar_y_t + BAR_Y_SIZE - 1;
-- pixel within bar bar_on <= '1' when (BAR_X_L<=pix_x) and (pix_x<=BAR_X_R) and (bar_y_t<=pix_y) and (pix_y<=bar_y_b) else '0';
-- bar rgb output bar_rgb <= "010"; --green
Moving the Bar in VHDL (2)
![Page 12: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/12.jpg)
12ECE 448 – FPGA and ASIC Design with VHDL
-- new bar y-positionprocess(bar_y_reg, bar_y_b, bar_y_t, refr_tick, btn)begin bar_y_next <= bar_y_reg; -- no move if refr_tick='1' then if btn(1)='1' and bar_y_b <= (MAX_Y-1-BAR_V) then bar_y_next <= bar_y_reg + BAR_V; -- move down elsif btn(0)='1' and bar_y_t >= BAR_V then bar_y_next <= bar_y_reg - BAR_V; -- move up end if; end if;end process;
Moving the Bar in VHDL (3)
![Page 13: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/13.jpg)
13
Circuit calculating bar_y_next
ECE 448 – FPGA and ASIC Design with VHDL
![Page 14: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/14.jpg)
14ECE 448 – FPGA and ASIC Design with VHDL
process (clk, reset)begin if reset='1' then bar_y_reg <= (others=>'0'); elsif (clk'event and clk='1') then bar_y_reg <= bar_y_next; end if;end process;
Moving the Bar in VHDL (4)
![Page 15: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/15.jpg)
15
bar_y_reg, bar_y_t, and bar_y_b
ECE 448 – FPGA and ASIC Design with VHDL
![Page 16: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/16.jpg)
16
Moving the Ball
ECE 448 – FPGA and ASIC Design with VHDL
ball_x_l ≤ x ≤ ball_x_rball_y_t ≤ y ≤ ball_y_b
ball_x_l = ball_x_regball_x_r=ball_x_l+BALL_
SIZE-1
ball_y_t = ball_y_regball_y_b=ball_y_t+BALL_
SIZE-1
![Page 17: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/17.jpg)
17
Ball Velocity
ECE 448 – FPGA and ASIC Design with VHDL
• The ball may change direction by hitting the wall, the paddle, or the bottom or top of the screen• We decompose velocity into an x-component and a y-component• Each component can have either a positive value BALL_V_P or a negative value BALL_V_N• The current value of each component is kept in x_delta_reg and y_delta_reg
![Page 18: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/18.jpg)
18
Velocity Components of the Ball
ECE 448 – FPGA and ASIC Design with VHDL
x_delta_reg = BALL_V_Py_delta_reg = BALL_V_P
x
y
x_delta_reg = BALL_V_Py_delta_reg = BALL_V_N
x_delta_reg = BALL_V_Ny_delta_reg = BALL_V_N
x_delta_reg = BALL_V_Ny_delta_reg = BALL_V_P
![Page 19: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/19.jpg)
19ECE 448 – FPGA and ASIC Design with VHDL
constant BALL_SIZE: integer:=8; -- 8 -- ball boundaries signal ball_x_l, ball_x_r: unsigned(9 downto 0); signal ball_y_t, ball_y_b: unsigned(9 downto 0); -- reg to track left, top boundary signal ball_x_reg, ball_x_next: unsigned(9 downto 0); signal ball_y_reg, ball_y_next: unsigned(9 downto 0); -- reg to track ball speed signal x_delta_reg, x_delta_next: unsigned(9 downto 0); signal y_delta_reg, y_delta_next: unsigned(9 downto 0); -- ball velocity can be pos or neg constant BALL_V_P: unsigned(9 downto 0) := to_unsigned(2,10); constant BALL_V_N: unsigned(9 downto 0) := unsigned(to_signed(-2,10));
Moving the Ball in VHDL (1)
![Page 20: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/20.jpg)
20ECE 448 – FPGA and ASIC Design with VHDL
type rom_type is array (0 to 7) of std_logic_vector(0 to 7);constant BALL_ROM: rom_type := ( "00111100", -- **** "01111110", -- ****** "11111111", -- ******** "11111111", -- ******** "11111111", -- ******** "11111111", -- ******** "01111110", -- ****** "00111100" -- **** ); signal rom_addr, rom_col: unsigned(2 downto 0); signal rom_data: std_logic_vector(0 to 7); signal rom_bit: std_logic;
Moving the Ball in VHDL (2)
![Page 21: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/21.jpg)
21ECE 448 – FPGA and ASIC Design with VHDL
ball_x_l <= ball_x_reg; ball_y_t <= ball_y_reg; ball_x_r <= ball_x_l + BALL_SIZE - 1; ball_y_b <= ball_y_t + BALL_SIZE - 1;
-- pixel within ball sq_ball_on <= '1' when (ball_x_l<=pix_x) and (pix_x<=ball_x_r) and (ball_y_t<=pix_y) and (pix_y<=ball_y_b) else '0';
Moving the Ball in VHDL (3)
![Page 22: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/22.jpg)
22ECE 448 – FPGA and ASIC Design with VHDL
-- map current pixel location to ROM addr/col rom_addr <= pix_y(2 downto 0) - ball_y_t(2 downto 0); rom_col <= pix_x(2 downto 0) - ball_x_l(2 downto 0); rom_data <= BALL_ROM(to_integer(rom_addr)); rom_bit <= rom_data(to_integer(rom_col));
-- pixel within ball rd_ball_on <= '1' when (sq_ball_on='1') and (rom_bit='1') else '0';
-- ball rgb output ball_rgb <= "100"; -- red
Moving the Ball in VHDL (4)
![Page 23: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/23.jpg)
23ECE 448 – FPGA and ASIC Design with VHDL
-- new ball position ball_x_next <= ball_x_reg + x_delta_reg when refr_tick='1' else ball_x_reg ; ball_y_next <= ball_y_reg + y_delta_reg when refr_tick='1' else ball_y_reg ;
Moving the Ball in VHDL (5)
![Page 24: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/24.jpg)
24ECE 448 – FPGA and ASIC Design with VHDL
process(x_delta_reg, y_delta_reg, ball_x_l, ball_x_r, ball_y_t, ball_y_b, bar_y_t, bar_y_b) begin x_delta_next <= x_delta_reg; y_delta_next <= y_delta_reg; if ball_y_t < 1 then -- reach top y_delta_next <= BALL_V_P; elsif ball_y_b >= (MAX_Y-1) then -- reach bottom y_delta_next <= BALL_V_N; elsif ball_x_l <= WALL_X_R then -- reach wall x_delta_next <= BALL_V_P; -- bounce back elsif (BAR_X_L<=ball_x_r) and (ball_x_r<=BAR_X_R) then -- reach x of right bar if (bar_y_t<=ball_y_b) and (ball_y_t<=bar_y_b) then x_delta_next <= BALL_V_N; --hit, bounce back end if; end if; end process;
Moving the Ball in VHDL (6)
![Page 25: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/25.jpg)
25
Bouncing
ECE 448 – FPGA and ASIC Design with VHDL
y_delta_next <= BALL_V_P
y_delta_next <= BALL_V_N
x_delta_next <= BALL_V_P x_delta_next <= BALL_V_N
![Page 26: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/26.jpg)
26
Circuit calculating y_delta_next
ECE 448 – FPGA and ASIC Design with VHDL
![Page 27: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/27.jpg)
27
Circuit calculating x_delta_next
ECE 448 – FPGA and ASIC Design with VHDL
![Page 28: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/28.jpg)
28ECE 448 – FPGA and ASIC Design with VHDL
process (clk, reset) begin if reset='1' then ball_x_reg <= (others=>'0'); ball_y_reg <= (others=>'0'); x_delta_reg <= BALL_V_P; y_delta_reg <= BALL_V_P; elsif (clk'event and clk='1') then ball_x_reg <= ball_x_next; ball_y_reg <= ball_y_next; x_delta_reg <= x_delta_next; y_delta_reg <= y_delta_next; end if; end process;
Moving the Ball in VHDL (7)
![Page 29: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/29.jpg)
29ECE 448 – FPGA and ASIC Design with VHDL
pix_x <= unsigned(pixel_x); pix_y <= unsigned(pixel_y);
-- refr_tick: 1-clock tick asserted at start of v-sync -- i.e., when the screen is refreshed (60 Hz)refr_tick <= '1' when (pix_y=481) and (pix_x=0) else '0';
Generating ref_tick in VHDL
![Page 30: George Mason University ECE 448 – FPGA and ASIC Design with VHDL VGA Display Part 3 Animation ECE 448 Lecture 11](https://reader035.vdocument.in/reader035/viewer/2022062302/5a4d1ae67f8b9ab05997937f/html5/thumbnails/30.jpg)
30
Vertical Synchronization
ECE 448 – FPGA and ASIC Design with VHDL