Chương 25: Chöông trình lieân keátLIBRARY 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; PA
Trang 1Chươ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;
STD_LOGIC;
STD_LOGIC;
STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT;
COMPONENT mouse
PORT( clock_25Mhz, reset : IN STD_LOGIC;
left_button, right_button : OUT STD_LOGIC;
Trang 2mouse_cursor_row :OUT STD_LOGIC_VECTOR ( 9 DOWNTO 0);
mouse_cursor_column : OUT STD_LOGIC_VECTOR
(9 DOWNTO 0));
END COMPONENT;
END up1core;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
LIBRARY work;
USE work.up1core.ALL;
ENTITY vmouse IS
Generic(ADDR_WIDTH: integer := 12; DATA_WIDTH: integer := 1);
STD_LOGIC;
STD_LOGIC;
STD_LOGIC;
OUT STD_LOGIC;
SIGNAL MSB_e, MSB_f, MSB_g, MSB_dp: OUT
STD_LOGIC;
STD_LOGIC;
Trang 3SIGNAL Horiz_sync,Vert_sync : OUT STD_LOGIC;
STD_LOGIC;
STD_LOGIC);
ARCHITECTURE behavior OF vmouse IS
SIGNAL Red_Data, Green_Data, Blue_Data, vert_sync_int,
color_on, Direction : STD_LOGIC;
DOWNTO 0);
SIGNAL mouse_cursor_row, mouse_cursor_column:
STD_LOGIC_VECTOR (9 DOWNTO 0);
STD_LOGIC_VECTOR (9 DOWNTO 0);
STD_LOGIC_VECTOR(3 DOWNTO 0);
(6 DOWNTO 0);
SIGNAL left_button, right_button :
STD_LOGIC;
BEGIN
SYNC: vga_sync
PORT MAP(clock_25Mhz => clock,
red => red_data, green => green_data, blue => blue_data,
Trang 4red_out => red, green_out => green, blue_out => blue,
horiz_sync_out => horiz_sync, vert_sync_out => vert_sync,
pixel_row => pixel_row, pixel_column => pixel_column);
MSD: dec_7seg
PORT MAP(hex_digit => MSB,segment_a =>
MSB_a,
segment_b => MSB_b, segment_c => MSB_c, segment_d => MSB_d,segment_e => MSB_e, segment_f => MSB_f,
segment_g => MSB_g );
LSD: dec_7seg
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);
Trang 5Red_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ị
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
( '0'&mouse_cursor_row <= pixel_row +size) AND (mouse_cursor_row +size >= '0'& pixel_row ) THEN
color_on <= '1';
ELSE
color_on <= '0';
END IF;
END process RGB_Display;
END behavior;
Sau đó lưu lại và biên dịch Rồi chọn linh kiện và gán chân như sau :
MSB_b : 7
MSB_c : 8
MSB_d : 9
Trang 6MSB_e : 11
MSB_f : 12
MSB_g : 13
MSB_dp : 14
LSB_a : 17
LSB_b : 18
LSB_c : 19
LSB_d : 20
LSB_e : 21
LSB_f : 23
LSB_g : 24
LSB_dp : 25
mouse_clk : 30
mouse_data : 31
reset : 41
Clock : 91
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
Trang 8KẾ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 chuyển sang tìm hiểu và thực hiện trên KIT UP2 của Altera
Tuy nhiên do thời gian và kiến thức có hạn nên chúng em chưa thể thực hiện được những chương trình phức tạp hơn Kính mong sự đóng góp ý kiến của thầy cô và các bạn để đề tài được hoàn thiện hơn
Hướng phát triển:
Trang 9Nếu như áp dụng điều khiển này bằng logic mờ, ta có thể điều chỉnh tốc độ quay tùy ý theo tín hiệu số thông qua mạch điều biến xung Ứng với nhiệt độ trong khoảng yêu cầu cùng với tốc độ quạt hồi tiếp về mà ta dùng các luật hợp thành của logic mờ để đưa ra một tín hiệu điều khiển Từ tín hiệu đó, thông qua mạch chuyển đổi A/D để chuyển đổi tín hiệu analog đó thành số Từ tín hiệu số ta qua mạch điều biến xung để điều khiển tốc độ quạt nhanh chậm theo tín hiệu
Mô hình điều khiển tốc độ quạt tự động theo nhiệt độ môi
trường
TÀI LIỆU THAM KHẢO
1 www.Xilinx.com
2 www.Altera.com
3 Rapid Prototyping Pf Digital Systems James O.Hamblen Michael D Furman