Chương 25: Chöông trình lieân keát
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164 .ALL;
USE IEEE.STD_LOGIC_ARITH .ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
LIBRARY lpm;
USE lpm.lpm_components.ALL;
PACKAGE
up1core IS
COMPONENT
dec_7seg
PORT(hex_digit: IN STD_LOGIC_VECTOR(3
DOWNTO 0
);
segment_a, segment_b, segment_c, segment_d,
segment_e, segment_f, segment_g :
OUT
STD_LOGIC);
END COMPONENT;
COMPONENT
vga_sync
PORT(clock_25Mhz, red, green, blue : IN STD_LOGIC;
red_out, green_out, blue_out :
OUT
STD_LOGIC;
horiz_sync_out, vert_sync_out : OUT
STD_LOGIC;
pixel_row, pixel_column :OUT
STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT;
COMPONENT
SIGNAL LSB_e, LSB_f, LSB_g, LSB_dp : OUT
STD_LOGIC;
SIGNAL MSB_a, MSB_b, MSB_c, MSB_d :
OUT STD_LOGIC;
SIGNAL MSB_e, MSB_f, MSB_g, MSB_dp: OUT
STD_LOGIC;
SIGNAL Red,Green,Blue :
OUT
STD_LOGIC;
SIGNAL Horiz_sync,Vert_sync : OUT
STD_LOGIC;
signal mouse_data : INOUT
STD_LOGIC;
signal mouse_clk : INOUT
STD_LOGIC);
END
vmouse;
ARCHITECTURE behavior OF vmouse IS
SIGNAL
Red_Data, Green_Data, Blue_Data, vert_sync_int,
color_on, Direction :
STD_LOGIC;
SIGNAL
Size : STD_LOGIC_VECTOR (9
DOWNTO 0);
SIGNAL mouse_cursor_row, mouse_cursor_column:
STD_LOGIC_VECTOR (9 DOWNTO 0);
SIGNAL
PORT MAP(hex_digit => LSB,segment_a =>
LSB_a,
segment_b => LSB_b, segment_c => LSB_c,
segment_d => LSB_d,segment_e => LSB_e,
segment_f => LSB_f,
segment_g => LSB_g );
mous:mouse
PORT MAP(clock_25Mhz=>clock, 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 );
Size <= CONV_STD_LOGIC_VECTOR(8,10);
Red_Data <= '0';
Green_Data <= color_on;
Blue_Data <= color_on;
LSB_dp <= left_button;
MSB_dp <= right_button;
MSB <= mouse_cursor_row(7 DOWNTO 4);
LSB <= mouse_cursor_column(7 DOWNTO 4);
Chương trình chọn tín hiệu RGB hiển thò
RGB_Display: Process (mouse_cursor_row,
mouse_cursor_column, pixel_column, pixel_row,size)
BEGIN
IF
( '0'&mouse_cursor_column <= pixel_column +size)
AND
(mouse_cursor_column+size >= '0'&pixel_column)
AND
Red : 236
Green : 237
Blue : 238
Vert_sync : 239
Horiz_sync : 240
Lưu và biên dòch lại chương trình rồi nạp lên KIT. Tuy nhiên
kết quả chưa hoàn chỉnh, con trỏ vẫn chưa thể di chuyển hết
toàn bộ màn hình. Do kich thước của ROM và của con trỏ chuột
không phù hợp với kích thước của màn hình.
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Kết luận
Qua quá trình tìm hiểu và thực hiện đề tài cùng với các kiến
thức mà thầy cô truyền đạt, chúng em nhận thấy rằng FPGAs
XC4005XL hãng Xilinx và các chip MAX7000S, chip FLEX10K
hãng Altera có khả năng lập trình rất linh hoạt. Ta có thể lập
trình để thực hiện các mô hình điều khiển từ đơn giản đến phức
tạp như điều khiển tốc độ của động cơ, điều khiển nhiệt độ
trong lò vi ba sóng, máy giặt, tủ lạnh,…
Trong đề tài này, chúng em đã thực hiện được một số ứng
dụng trên KIT UP2 hãng Altera như chương trình dòch led từ
phải sang trái và ngược lại, chương trình đếm và hiển thò trên
LED 7 đoạn, mạch hiển thò nhiệt độ điều khiển động cơ bên
ngoài để giao tiếp với KIT UP2, các chương trình giao tiếp với
VGA, Keyboard, mouse.
Trong quá trình thực hiện đề tài, chúng em gặp khó khăn về
phần mềm của XILINX. Vì khi biên dòch chương trình thì linh
kiện sẽ được gán chân một cách ngẫu nhiên, không phù hợp với
thiết kế nên ta phải gán chân lại cho linh kiện, nhưng phần mềm
XILINX lại không hỗ trợ cho phần này nên chúng em phải