1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Thiết kế hệ thống xử lý ảnh video trên FPGA (CycloneII), chương 24 pot

15 186 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

Định dạng
Số trang 15
Dung lượng 84,21 KB

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

Nội dung

Chương trình kết hợp với giải mã led thể hiện tọa độ của mouse và nút nào được nhấn thể hiện qua dp của led 7 đoạn.. Chương trình kết hợp này thể hiện tọa độ hàng chục của chuột: LIBRARY

Trang 1

Chương 24: Kiểm tra giới hạn trên của

màn hình

IF (cursor_column <128) AND ((NEW_cursor_column >

256) OR

(NEW_cursor_column < 2)) THEN

cursor_column<=CONV_STD_LOGIC_VECTOR (0, 10);

Kiểm tra giới hạn dưới của màn hình

ELSIF NEW_cursor_column > 640 THEN

cursor_column<=CONV_STD_LOGIC_VECTOR (640,10);

ELSE

cursor_column <= NEW_cursor_column;

END IF;

ELSIF PACKET_COUNT = "10" THEN

PACKET_CHAR2 <= SHIFTIN (7 DOWNTO 0);

ELSIF PACKET_COUNT = "11" THEN

PACKET_CHAR3 <= SHIFTIN (7 DOWNTO 0);

INCNT <= conv_std_logic_vector (0,4);

IF PACKET_COUNT = "11" THEN

PACKET_COUNT <= "01";

Hoàn tất đóng gói, để xử lý dữ liệu trong gói.

Tín hiệu hai giá trị của thành phần chuyển động mở rộng X và Y và cộng thêm địa chỉ con trỏ hiện hành.

Sự chuyển động Y ngược lên là địa chỉ hàng thấp.

Trang 2

NEW_cursor_row <= cursor_row -(PACKET_CHAR3 (7) &

PACKET_CHAR3 (7) & PACKET_CHAR3);

NEW_cursor_column<=cursor_column+

(PACKET_CHAR2(7) &

PACKET_CHAR2 (7) & PACKET_CHAR2);

LEFT_BUTTON <= PACKET_CHAR1 (0);

RIGHT_BUTTON <= PACKET_CHAR1 (1);

END IF;

END IF;

END IF;

END IF;

END PROCESS RECV_UART;

END behavior;

Bảng dữ liệu mouse

L =bit thể trạng thái của nút trái

M =bit thể trạng thái của nút giữa

R =bit thể trạng thái của nút phải

X7-X0= khoảng cách di chuyển của X (0=di chuyển trái, 1=dichuyển phải)

Trang 3

Y7-Y0= khoảng cách di chuyển của Y (0=di chuyển trái, 1=dichuyển phải)

Xo= bit dữ liệu thể hiện X tràn (tràn=1)

Yo= bit dữ liệu thể hiện Y tràn (tràn=1)

Từ các bit trong 3 byte của mouse cho ta bit toa độ của mouse và cho biết nút nào của Mouse được nhấn

Chương trình kết hợp với giải mã led thể hiện tọa độ của mouse và nút nào được nhấn thể hiện qua dp của led 7 đoạn Do kit chỉ có 2 led 7đoạn nên ta chỉ thể hiện hàng đơn vị hay hàng chục của toạ độ của mouse

Chương trình kết hợp này thể hiện tọa độ hàng chục của chuột:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY kethop IS

PORT ( clock_25Mhz, reset : IN STD_LOGIC;

dataM,dataL :OUT STD_LOGIC_VECTOR (6 DOWNTO 0);

mouse_data, mouse_clk : INOUT STD_LOGIC;

left_button, right_button : OUT STD_LOGIC);

END kethop;

ARCHITECTURE bb OF kethop IS

SIGNAL mouse_cursor_row :STD_LOGIC_VECTOR (9 DOWNTO 0);

Trang 4

SIGNAL mouse_cursor_column: STD_LOGIC_VECTOR (9 DOWNTO 0);

COMPONENT mouse

STD_LOGIC;

STD_LOGIC;

STD_LOGIC_VECTOR(9 DOWNTO 0);

STD_LOGIC_VECTOR(9DOWNTO 0));

END COMPONENT;

COMPONENT dec_7seg1

DOWNTO 0);

Data : OUT STD_LOGIC_VECTOR (6

DOWNTO 0));

END COMPONENT;

BEGIN

map(clock_25Mhz=>clock_25Mhz,reset=>reset,

mouse_data=>mouse_data,mouse_clk=>mouse_clk, left_button=>left_button,right_button=>right_button, mouse_cursor_row=>mouse_cursor_row,

mouse_cursor_column =>mouse_cursor_column);

Trang 5

x2: dec_7seg1 port map (hex_digit=>

mouse_cursor_row(9 downto 6),data =>dataM);

x3: dec_7seg1 port map (hex_digit

=>mouse_cursor_column(9 downto 6),data

=>dataL);

END;

Sau đó ta gán chân như sau:

Tín hiệu Chân

dataL6 6

dataL5 7

dataL4 8

dataL3 9

dataL2 11

dataL1 12

dataL0 13

right_button 14

dataM6 17

dataM5 18

dataM4 19

dataM3 20

dataM2 21

dataM1 23

dataM0 24

left_button 25

mouse_clk 30

mouse_data 31

reset 41

clock_25Mhz 91

Trang 6

Lưu và biên dịch lại, rồi nạp file sof lên Kit UP2 để chạy chương trình

VII Giao tiếp giữa VGA và bàn phím

1 Mô hình

Data : từ bàn phím xuất ra khi ta nhấn phím

Clk : từ bàn phím khi ta nhấn phím

Mã scancode được chương trình chuyển đổi (ở phần trước) từ tín hiệu data của bàn phím Tín hiệu data và clk được truyền thông qua cổng PS/2 đến KIT UP2

Sau đó mã scancode được giải mã thành địa chỉ của kí tự có mã scancode đó

Địa chỉ được đưa vào chương trình xuất kí tự( ở phần trước) đưa

kí tự lên màn hình Lúc này chương trình sẽ xuất ra 5 tín hiệu red, green, blue và hai tín hiệu đồng bộ ngang và dọc 5 tín hiệu này được truyền tới monitor thông qua cổng Vga của KIT UP2

2 Chương trình

a Chương trình giải mã

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.all;

USE IEEE.STD_LOGIC_ARITH.all;

USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY giaima IS

Trang 7

PORT( scan_in: IN STD_LOGIC_VECTOR (7

DOWNTO 0);

scan_out: OUT STD_LOGIC_VECTOR (5

DOWNTO 0));

END giaima;

ARCHITECTURE o OF giaima IS

SIGNAL scan1 : STD_LOGIC_VECTOR (5 DOWNTO 0);

BEGIN

PROCESS(scan_in)

BEGIN

CASE scan_in IS

WHEN "00011110" =>

scan1 <= "000000";

WHEN "00011100" =>

scan1 <= "000001";

WHEN "00110010" =>

scan1 <= "000010";

WHEN "00100001" =>

scan1 <= "000011";

WHEN "00100011" =>

scan1 <= "000100";

WHEN "00100100" =>

scan1 <= "000101";

WHEN "00101011" =>

scan1 <= "000110";

WHEN "00110100" =>

scan1 <= "000111";

Trang 8

WHEN "00110011" =>

scan1 <= "001000";

WHEN "01000011" =>

scan1 <= "001001";

WHEN "01001011" =>

scan1 <= "001010";

WHEN "01000010" =>

scan1 <= "001011";

WHEN "01001100" =>

scan1 <= "001100";

WHEN "00111010" =>

scan1 <= "001101";

WHEN "00110001" =>

scan1 <= "001110";

WHEN "01000100" =>

scan1 <= "001111";

WHEN "01001101" =>

scan1 <= "010000";

WHEN "00010101" =>

scan1<= "010001";

WHEN "00101101" =>

scan1<= "010010";

WHEN "00011011" =>

scan1 <= "010011";

WHEN "00101100" =>

scan1 <= "010100";

WHEN "00111100" =>

scan1 <= "010101";

WHEN "00101010" =>

scan1 <= "010110";

Trang 9

WHEN "00011101" =>

scan1 <= "010111";

WHEN "00100010" =>

scan1 <= "011000";

WHEN "00110101" =>

scan1 <= "011001";

WHEN "00011010" =>

scan1 <= "011010";

WHEN "01010100" =>

scan1 <= "011011";

WHEN "01110010" =>

scan1 <= "011100";

WHEN "01011011" =>

scan1 <= "011101";

WHEN "01110101" =>

scan1 <= "011110";

WHEN "01101011" =>

scan1 <= "011111";

WHEN "00101001" =>

scan1 <= "100000";

WHEN "00010110" =>

scan1 <= "100001";

WHEN "00100110" =>

scan1 <= "100011";

WHEN "00100101" =>

scan1 <= "100100";

WHEN "00101110" =>

scan1 <= "100101";

WHEN "00111101" =>

scan1 <= "100110";

Trang 10

WHEN "01010010" =>

scan1 <= "100111";

WHEN "01000110" =>

scan1 <= "101000";

WHEN "01000101" =>

scan1 <= "101001";

WHEN "01111100" =>

scan1 <= "101010";

WHEN "01111001" =>

scan1 <= "101011";

WHEN "01000001" =>

scan1 <= "101100";

WHEN "01001110" =>

scan1 <= "101101";

WHEN "01001001" =>

scan1 <= "101110";

WHEN "01001010" =>

scan1 <= "101111";

WHEN "01110000" =>

scan1 <= "110000";

WHEN "01101001" =>

scan1 <= "110001";

WHEN "01111010" =>

scan1 <= "110011";

WHEN "01110001" =>

scan1 <= "110100";

WHEN "01110011" =>

scan1 <= "110101";

WHEN "01110100" =>

scan1 <= "110110";

Trang 11

WHEN "01101100" =>

scan1 <= "110111";

WHEN "00111110" =>

scan1 <= "111000";

WHEN "01111101" =>

scan1 <= "111001";

WHEN OTHERS =>

scan1 <= "100000";

END CASE;

END PROCESS;

scan_out<=scan1;

END o;

b Chương trình kết hợp

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.all;

USE IEEE.STD_LOGIC_ARITH.all;

USE IEEE.STD_LOGIC_UNSIGNED.all;

ENTITY kh IS

keyboard_clk, keyboard_data, reset, read : IN

STD_LOGIC;

red_out, green_out, blue_out, horiz_sync_out, vert_sync_out

STD_LOGIC);

END kh;

ARCHITECTURE a OF kh IS

Trang 12

SIGNAL rom_mux_output, green, blue, scan_ready : STD_LOGIC;

SIGNAL pixel_row, pixel_column: STD_LOGIC_VECTOR (9

DOWNTO 0);

SIGNAL scan_out: STD_LOGIC_VECTOR (5 DOWNTO 0);

SIGNAL scan_code: STD_LOGIC_VECTOR (7 DOWNTO 0);

COMPONENT VGA_SYNC

STD_LOGIC;

red_out, green_out, blue_out, horiz_sync_out, vert_sync_out

: OUT STD_LOGIC;

pixel_row, pixel_column: OUT STD_LOGIC_VECTOR (9

DOWNTO 0));

END COMPONENT;

COMPONENT Char_ROM

(5 DOWNTO 0);

font_row, font_col : IN STD_LOGIC_VECTOR (2 DOWNTO 0);

rom_mux_output : OUT STD_LOGIC);

END COMPONENT;

COMPONENT keyboard

PORT(keyboard_clk, keyboard_data, clock_25Mhz ,

reset, read : IN STD_LOGIC;

scan_code : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);

scan_ready : OUT STD_LOGIC);

END COMPONENT;

Trang 13

COMPONENT giaima

PORT (scan_in: IN STD_LOGIC_VECTOR (7 DOWNTO 0);

scan_out: OUT STD_LOGIC_VECTOR (5 DOWNTO

0));

END COMPONENT;

BEGIN

x0: keyboard PORT MAP(keyboard_clk=>keyboard_clk,

keyboard_data=>keyboard_data, clock_25Mhz=>clock_25Mhz,reset=>reset , read=>read,scan_code=>scan_code,

scan_ready=>scan_ready);

(scan_in=>scan_code,scan_out=>scan_out);

x2: vga_sync PORT MAP (clock_25Mhz=>clock_25Mhz,

red=>scan_ready,green=>rom_mux_outpu t,

blue=>rom_mux_output,red_out=>red_out ,

green_out=>green_out,blue_out=>blue_ou t,

vert_sync_out=>vert_sync_out, horiz_sync_out=>horiz_sync_out, pixel_column=>pixel_column, pixel_row=>pixel_row);

x3:char_rom PORT MAP (character_address=>scan_out,

font_row=>pixel_row (3 downto 1),

font_col=>pixel_column (3 downto 1), rom_mux_output=>rom_mux_output);

Trang 14

Sau đó chọn linh kiện và gán chân như sau:

Keyboard_clk : 30

Keyboard_data : 31

Read : 40

Reset : 41

Clock_25Mhz : 91

Red_out : 236

Green_out : 237

Blue_out : 238

Vert_sync_out : 239

Horiz_sync_out : 240

Các chân còn lại chương trình tự gán Lưu và biên dịch lại rồi nạp lên Kit

Tuy nhiên chương trình vẫn còn nhiều thiếu xót trong việc hiển thị, thứ nhất là do ROM của KIT nhỏ không thể hiện được hết các phím trên bàn phím, thứ hai là do có một số phím có mã scancode trùng nhau nên ta không thể hiển thị được các kí tự đó như @=shift + 2

VIII Giao tiếp với VGA và mouse :

1 Mô hình :

Trang 15

Mouse_clk : xung của mouse phát ra khi ta di chuyển hoặc

nhấp chuột

Mouse_data : dữ liệu của mouse phát ra khi ta di chuyển

hoặc nhấp chuột

Reset :tín hiệu reset chương trình.

Clk_25Mhz : xung cấp cho chương trình VGA_sync.

Horiz_sync : tín hiệu đồng bộ ngang từ KIT truyền cho

monitor

Vert_sync : tín hiệu đồng bộ dọc từ KIT truyền cho

monitor

Red_out : tín màu đỏ từ KIT truyền cho monitor.

Green_out : tín màu xanh lá cây từ KIT truyền cho

monitor

Blue_out : tín màu xanh dương từ KIT truyền cho monitor.

Chương trình liên kết hiển thị con trỏ của chuột lên màn hình, vì trong bộ nhớ của KIT không hỗ trợ kí hiệu con trỏ nên

ta thay con trỏ như một dấu chấm

Đầu tiên tín hiệu xung và dữ liệu của mouse được đưa vào chương trình chuyển đổi(phần trước) nhận biết được nút trái hay phải được nhấp và cho biết toạ độ của mouse Tín hiệu toạ độ của chuột sẽ làm tín hiệu để so sánh với hàng cột của điểm ảnh

do chương trình Vga_sync( phần trước) Nếu thoả điều kiện thì tín hiệu color_on được đặt lên ‘1’ và nó chính là tín hiệu để hiển thị con trỏ của chuột màu xanh(RBG=’011’) với màn hình nền màu đen(RGB=’000’) Màn hình được quét liên tục nhưng chỉ có tín hiệu con trỏ lại được quét theo vị trí của con trỏ

Ngày đăng: 05/07/2014, 16:20

HÌNH ẢNH LIÊN QUAN

Bảng dữ liệu mouse - Thiết kế hệ thống xử lý ảnh video trên FPGA (CycloneII), chương 24 pot
Bảng d ữ liệu mouse (Trang 2)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w