Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 235 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
235
Dung lượng
1,5 MB
Nội dung
Đại Học Quốc Gia TP Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẶNG HOÀNG HUY TRIỂN KHAI ỨNG DỤNG CÔNG NGHỆ SOC: XÂY DỰNG CORE MẠCH GIAO TIẾP TUẦN TỰ SIO Chuyên ngành: Mã số ngành: Công Nghệ Thông Tin 01.02.10 LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng 12 năm 2004 CÔNG TRÌNH ĐƯC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH Cán hướng dẫn khoa học: TS Phạm Tường Hải Cán chấm nhận xét 1: TS Đinh Đức Anh Vũ Cán chấm nhận xét 2: PGS TS Nguyễn Hữu Phương Luận văn Thạc Só bảo vệ HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA, ngày 29 tháng 12 năm 2004 TRƯỜNG ĐẠI HỌC BÁCH KHOA CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM PHÒNG ĐÀO TẠO SĐH Độc Lập – Tự Do – Hạnh Phúc -TP HCM, ngày tháng năm 200 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên : ĐẶNG HOÀNG HUY Ngày, tháng, năm sinh : 21 / 08 / 1978 Chuyên ngành : Công Nghệ Thông Tin I- TÊN ĐỀ TÀI : Phái : Nam Nơi sinh : TP HCM MSHV: CNTT12 - 011 Triển Khai Ứng Dụng Công Nghệ SoC: Xây Dựng Core Mạch Giao Tiếp Tuần Tự SIO II- NHIỆM VỤ VÀ NỘI DUNG : Tìm hiểu công nghệ SoC, xây dựng đối tượng cụ thể: Core mạch giao tiếp SIO theo công nghệ FPGA Core mạch cần thực mức kiến trúc theo hướng sử dụng lại (IP-Reuse) III- NGÀY GIAO NHIỆM VỤ: 01 / 07 / 2003 IV- NGÀY HOÀN THÀNH NHIỆM VỤ: 30 / 11 / 2004 V- CÁN BỘ HƯỚNG DẪN: TS Phạm Tường Hải CÁN BỘ HƯỚNG DẪN CN BỘ MÔN QL CHUYÊN NGÀNH Nội dung đề cương luận văn thạc só Hội Đồng Chuyên Ngành thông qua Ngày TRƯỞNG PHÒNG ĐT - SĐH tháng năm TRƯỞNG KHOA QL NGÀNH LỜI CẢM ƠN Em xin chân thành cảm ơn thầy TS Phạm Tường Hải tận tình hướng dẫn, dạy, cung cấp tài liệu tạo điều kiện học tập làm việc tốt suốt thời gian làm luận văn tốt nghiệp Những kiến thức mà em thu nhận từ đề tài thực thiết thực hữu ích Xin chân thành cảm ơn ba, mẹ chị tạo điều kiện tốt để con, em thực tốt khóa luận Một lần em xin gửi tới thầy gia đình lời cảm ơn chân thành Tháng 12 năm 2004 TÓM TẮT LUẬN VĂN THẠC SĨ Kết thực nhiệm vụ luận án đúc kết luận văn tốt nghiệp dày 157 trang (không kể phần phụ lục), bố cục thành 14 chương chính, tóm tắt sau: - Các chương từ đến dành cho đặt vấn đề, phương pháp luận, quy trình thiết kế với việc giới thiệu phần mềm MAX+PLUS II với thiết bị phần cứng hỗ trợ hãng Altera - Chương bao gồm thiết kế nhỏ giúp làm quen với công cụ thiết kế, đồng thời kiểm tra, phân tích, đánh giá bước phương pháp luận thiết kế - Các chương từ đến 12, phần nội dung đề tài, xác định đặc tả cho mạch SIO thực hiện, phân tích thiết kế kiến trúc, đặc tả thiết kế mạch SIO - ngôn ngữ VHDL với kết sau biên dịch, mô mặt chức năng, mặt thời gian Chương 13 liên quan đến mô hình kiểm nghiệm thực tế (phần demo) Chương 14 phần kết luận đề tài thực i MỤC LỤC CHƯƠNG PHÁT BIỂU VẤN ĐỀ 1.1 Đặt vấn đề 1.2 Lý thực đề tài 1.3 Phương pháp giải CHƯƠNG CÁC CÔNG TRÌNH ĐÃ CÓ LIÊN QUAN ĐẾN ĐỀ TÀI 2.1 Tại Việt Nam 2.2 Trên giới CHƯƠNG CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ 3.1 Kiến thức chung 3.2 Phương pháp thiết kế Top-Down 3.3 Quá trình thiết kế hệ thống kỹ thuật số 3.3.1 Ý tưởng ban đầu 3.3.2 Thiết kế hành vi 3.3.3 Thieát keá đường liệu 3.3.4 Thiết kế luận lý 3.3.5 Thiết kế vật lý 3.3.6 Xuất xưởng 3.4 Khái niệm ngôn ngữ đặc tả phần cứng HDL VHDL 3.4.1 Ngôn ngữ đặc tả phần cứng 3.4.2 Ngôn ngữ VHDL 3.5 Mô phần cứng 10 3.6 Tổng hợp phần cứng 11 3.7 Kiểm tra hệ thống thiết kế 12 3.8 Các mức trừu tượng giai đoạn thiết kế 12 3.9 Phương pháp thiết kế SoC 13 3.9.1 Quá trình thiết kế cho firm soft core 14 3.9.2 Quá trình thiết kế cho hard core 15 CHƯƠNG TỔNG QUAN NGÔN NGỮ VHDL 18 4.1 Các thành phần ngôn ngữ VHDL 18 4.1.1 Mô tả thành phần 18 4.1.2 Các gói (package) 19 4.1.3 Các thư viện ràng buộc 20 4.2 Các chương trình 20 4.3 Các toán tử VHDL 21 CHƯƠNG CÁC KHÁI NIỆM CƠ BẢN TRONG VHDL 23 5.1 Đặc trưng ngôn ngữ phần cứng 23 ii 5.1.1 Tính thời gian 23 5.1.2 Tính đồng thời 24 5.2 Đối tượng lớp 25 5.3 Phép gán tín hiệu 27 5.3.1 Cơ chế trễ ì 29 5.3.2 Cơ chế trễ lan truyền 29 5.3.3 So sánh độ trễ ì độ trễ lan truyền 29 5.4 Các phép gán đồng thời 31 5.4.1 Các phép gán đồng thời 31 5.4.2 Các phép gán 32 CHƯƠNG TÌM HIỂU MAX+PLUS II 33 6.1 Giới thiệu khái quát Max+Plus II cách cài đặt 33 6.1.1 Toång quan 33 6.1.2 Cấu hình yêu cầu cho việc cài đặt MAX+PLUS II 34 6.1.3 Cài ñaët MAX+PLUS II 34 6.1.4 Cài đặt thiết bị bảo vệ phần mềm (nếu có) 34 6.1.5 Đăng ký hệ thống 34 6.2 Phương pháp luận thieát keá MAX+PLUS II 35 6.2.1 Tổng quan trình thiết kế 35 6.2.2 Cửa sổ quản lý MAX+PLUS II cửa sổ ứng duïng MAX+PLUS II 35 6.2.3 Quaù trình thiết kế 36 6.2.4 Quá trình biên dịch 45 6.2.5 Quá trình phân tích mô 53 6.2.6 Quá trình phân tích định thời 55 6.2.7 Lập trình thiết bị 56 CHƯƠNG CÁC CÔNG CỤ PHẦN CỨNG HỔ TR VIỆC MÔ PHỎNG VÀ KIỂM TRA 60 7.1 Bộ lập trình PL-ASAP2 60 7.1.1 Mô tả, công duïng 60 7.1.2 Cài đặt card lập trình LP6 61 7.1.3 Cài đặt thiết bị lập trình (MPU) 62 7.2 Cáp tải FLEX 63 7.2.1 Mô tả, công dụng 63 7.2.2 Caùch cài đặt 63 7.3 Cáp tải BitBlaster 63 7.3.1 Mô tả, công dụng 63 7.3.2 Cách cài ñaët 63 iii 7.4 Cáp tải ByteBlaster 64 7.4.1 Mô tả, công dụng 64 7.4.2 Cách cài đặt 65 7.4.3 Một số đặc điểm kỹ thuật khác cáp ByteBlasterMV 65 7.5 Board mạch lập trình phát triển UP1, UP2 66 7.5.1 Mô tả, công dụng 66 7.5.2 Cách cài đặt 67 7.5.3 Cách kiểm tra thiết bị lập trình 68 7.6 Đế chuyển đổi PLMJ 1213 68 7.6.1 Mô tả, công dụng 68 7.6.2 Cách cài đặt 68 CHƯƠNG TÌM HIỂU VÀ XÂY DỰNG MỘT SỐ MẠCH TÍCH HP 69 8.1 Ba cổng NOR ngõ vào (7427) 70 8.1.1 Sơ đồ kết nối chân tín hiệu 70 8.1.2 Bảng thực trị 70 8.1.3 Nhaän xeùt 70 8.2 Hai flip flop JK naûy cạnh xuống (7473) 71 8.2.1 Đặc tả 71 8.2.2 Sô đồ kết nối chân tín hiệu 71 8.2.3 Bảng thực trị 71 8.2.4 Nhận xét 71 8.3 Maïch so sánh độ lớn bit (7485) 72 8.3.1 Đặc tả 72 8.3.2 Sơ đồ chân tín hiệu 72 8.3.3 Sơ đồ kết nối 73 8.3.4 Baûng thực trị 73 8.3.5 Nhận xét 74 8.4 Mạch cổng XOR ngõ vào (7486) 74 8.4.1 Đặc taû 74 8.4.2 Sơ đồ kết nối chân tín hiệu 74 8.4.3 Bảng thực trị 74 8.4.4 Nhận xét 75 8.5 Mạch giải mã đường sang 16 đường (74154) 75 8.5.1 Đặc tả 75 8.5.2 Sơ đồ chân tín hiệu 75 8.5.3 Sơ đồ kết noái 76 8.5.4 Bảng thực trị 76 8.5.5 Nhận xét 77 iv 8.6 Mạch đếm lên/xuống BCD đồng (74190) 77 8.6.1 Đặc tả 77 8.6.2 Sơ đồ chân tín hiệu 78 8.6.3 Sơ đồ kết nối 78 8.6.4 Bảng thực trị 79 8.6.5 Nhận xét 79 8.7 Ghi dòch bit hai chieàu (74194) 80 8.7.1 Đặc tả 80 8.7.2 Sơ đồ chân tín hiệu 80 8.7.3 Sô đồ kết nối 81 8.7.4 Bảng thực trị: 81 8.7.5 Nhận xét: 81 8.8 Bộ chọn liệu 1-8 đường ba trạng thái (74251) 82 8.8.1 Đặc tả 82 8.8.2 Sơ đồ chân tín hiệu 82 8.8.3 Sơ đồ kết nối 83 8.8.4 Bảng thực trị 83 8.8.5 Nhận xét 83 8.9 Bốn chốt D hai ngõ bù (74375) 85 8.9.1 Đặc tả 85 8.9.2 Sơ đồ chân tín hiệu 85 8.9.3 Sơ đồ kết nối 85 8.9.4 Bảng thực trị 86 8.9.5 Nhận xét 86 8.10 Tám flip flop D nảy cạnh lên với clock enable chung (74377) 86 8.10.1 Đặc tả 86 8.10.2 Sô đồ chân tín hiệu 86 8.10.3 Sơ đồ kết nối 87 8.10.4 Bảng thực trị 87 8.10.5 Nhận xét 87 8.11 Nhận xét chung 87 CHƯƠNG ĐẶC TẢ CHỨC NĂNG MẠCH GIAO TIẾP TUẦN TỰ SIO 88 9.1 Yêu cầu chung 88 9.2 Các đường tín hiệu 88 9.3 Tổng quát mạch SIO 89 9.3.1 Các ngõ tín hiệu cho phép SIO hoạt động 89 9.3.2 Các ngõ liệu truyền nhaän 89 9.3.3 Các ngõ tín hiệu điều khiển 89 v 9.4 Sô đồ khối chức 90 9.5 Cơ chế hoạt động 90 9.5.1 Truyền bất đồng 93 9.5.2 Nhaän bất đồng 95 9.5.3 Truyền/nhận đồng 96 9.6 Cơ chế kiểm tra lỗi 97 9.6.1 Loãi parity 97 9.6.2 Loãi khung 98 9.6.3 Lỗi nhanh 98 9.7 Mô tả chân tín hiệu: 98 9.8 Các từ điều khiển từ trạng thái 100 9.8.1 Các từ điều khiển 100 9.8.2 Từ trạng thái 102 9.9 Nguoàn xung clock 103 9.9.1 Nguồn xung clock truyền / nhận bất đồng 103 9.9.2 Nguồn xung clock truyền/nhận đồng 103 CHƯƠNG 10 XÂY DỰNG SƠ ĐỒ MẠCH CHI TIẾT CÁC KHỐI CHỨC NĂNG CỦA MẠCH SIO 104 10.1 Bộ đệm bus liệu 104 10.1.1 Mô tả 104 10.1.2 Thieát keá 104 10.1.3 Giản đồ xung 105 10.2 Thanh ghi từ chế độ 106 10.2.1 Mô tả 106 10.2.2 Thieát keá 106 10.2.3 Giản đồ xung 106 10.3 Thanh ghi từ lệnh, đệm truyền 107 10.3.1 Mô tả 107 10.3.2 Thieát keá 107 10.3.3 Giản đồ xung 107 10.4 Boä đệm nhận 108 10.4.1 Mô tả 108 10.4.2 Thieát keá 108 10.4.3 Giản đồ xung 108 10.5 Thanh ghi trạng thái 109 10.5.1 Mô tả 109 10.5.2 Thieát keá 109 10.5.3 Giaûn ñoà xung 110 Trang 202 nclk_out : OUT STD_LOGIC ); END component; component noise_reject IS PORT ( sig_in : IN STD_LOGIC; sig_out : OUT STD_LOGIC); END component; component and2input is port ( i_a , i_b : IN STD_LOGIC; o_c : OUT STD_LOGIC); end component; component and3input is port ( i_a , i_b, i_c : IN STD_LOGIC; o_d : OUT STD_LOGIC); end component; component and4input IS PORT( i_a , i_b, i_c, i_d : IN STD_LOGIC; o_e : OUT STD_LOGIC); end component; component and5input is port ( i_a , i_b, i_c, i_d, i_e : IN STD_LOGIC; o_f : OUT STD_LOGIC); end component; component or2input is port ( i_a , i_b : IN STD_LOGIC; o_c : OUT STD_LOGIC); end component; component or3input is port ( i_a , i_b, i_c : IN STD_LOGIC; o_d : OUT STD_LOGIC); end component; component or4input IS PORT ( i_a, i_b, i_c, i_d : IN STD_LOGIC; o_e : OUT STD_LOGIC); end component; component inv is port ( x : IN STD_LOGIC; y : OUT STD_LOGIC); end component; component nand2input is PORT ( i_a, i_b : IN STD_LOGIC; o_c : OUT STD_LOGIC); end component; component nand3input IS PORT ( i_a, i_b, i_c : IN STD_LOGIC; o_d : OUT STD_LOGIC); end component; component nand4input IS PORT ( i_a, i_b, i_c, i_d : IN STD_LOGIC; o_e : OUT STD_LOGIC); end component; component nand5input IS PORT ( i_a, i_b, i_c, i_d, i_e : IN STD_LOGIC; o_f : OUT STD_LOGIC); end component; Trang 203 component nor2input is PORT (i_a, i_b : IN STD_LOGIC; o_c : OUT STD_LOGIC); end component; component nor3input is PORT ( i_a, i_b, i_c : IN STD_LOGIC; o_d : OUT STD_LOGIC); end component; component xor2input is PORT(i_a, i_b : IN STD_LOGIC; o_c : OUT STD_LOGIC); end component; component xnor2input is PORT( i_a, i_b : IN STD_LOGIC; o_c : OUT STD_LOGIC); end component; component tristate_non_inv IS PORT( x: IN std_logic; y: OUT std_logic; en: IN std_logic); end component; component tristate_non_inv8 IS PORT( x: IN std_logic_vector(7 DOWNTO 0); y: OUT std_logic_vector(7 DOWNTO 0); en: IN std_logic); end component; component jk_ff IS PORT( j, k, nclk, nclr, npre : IN STD_LOGIC; q, nq : OUT STD_LOGIC); end component; component jk_ff_en IS PORT( j, k : IN STD_LOGIC; nclk : IN STD_LOGIC; nclr, npre : IN STD_LOGIC; en : IN STD_LOGIC; q, nq : OUT STD_LOGIC); end component; component rs_ff IS PORT ( r, s, nclk, nclr, npre : IN STD_LOGIC; q, nq : OUT STD_LOGIC ); end component; component d_ff IS PORT ( d, clk : IN STD_LOGIC; nclr : IN STD_LOGIC; npre : IN STD_LOGIC; q, nq : OUT STD_LOGIC); end component; component d_ffn IS PORT ( d : IN STD_LOGIC; clk_bar : IN STD_LOGIC; nclr : IN STD_LOGIC; npre : IN STD_LOGIC; q, nq : OUT STD_LOGIC); end component; component d_ff_en IS PORT( d, clk_en, clk, nclr, npre : IN STD_LOGIC; q : OUT STD_LOGIC); Trang 204 end component; component d_ffn_en IS PORT( d, clk_en, clk_bar, nclr, npre : IN STD_LOGIC; q : OUT STD_LOGIC); end component; component d_latch IS PORT( d, en : IN STD_LOGIC; q : OUT STD_LOGIC); end component; component nandlatch IS PORT ( s, c : IN STD_LOGIC; q, nq : OUT STD_LOGIC); end component; component one_shot IS PORT ( trigger, pre_bar : IN STD_LOGIC; q : OUT STD_LOGIC); end component; component one_shot5ns IS PORT ( trigger, pre_bar : IN STD_LOGIC; q : OUT STD_LOGIC ); end component; END ttl_lib; **************************************************************** - package sio_lib bao gom cac khoi chuc nang library ieee; use ieee.std_logic_1164.all; PACKAGE sio_lib IS component mux2 IS PORT ( in_a, in_b : IN STD_LOGIC; sel : IN STD_LOGIC; out_mux : OUT STD_LOGIC); end component; component mux4 IS PORT ( in0, in1, in2, in3 : IN STD_LOGIC; sel : IN STD_LOGIC_VECTOR (1 DOWNTO 0); out_mux : OUT STD_LOGIC ); end component; component demux2 IS PORT ( data_in : IN STD_LOGIC; sel : IN STD_LOGIC; data_out : OUT STD_LOGIC_VECTOR (1 DOWNTO 0)); end component; component demux4 IS PORT ( data_in : IN STD_LOGIC; sel : IN STD_LOGIC_VECTOR (1 DOWNTO 0); data_out : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)); end component; component mux2_8 IS PORT ( in_a, in_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); sel : IN STD_LOGIC; out_mux : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); end component; Trang 205 component buffer1 IS port ( DB : INOUT STD_LOGIC; I : IN STD_LOGIC; O : OUT STD_LOGIC; ie_bar : IN STD_LOGIC; oe_bar : IN STD_LOGIC ); end component; component databus8 IS port ( DB : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0); data_in : IN STD_LOGIC_VECTOR (7 DOWNTO 0); data_out : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); rd_bar : IN STD_LOGIC; wr_bar : IN STD_LOGIC); end component; component mode_reg IS PORT ( db_in : IN STD_LOGIC_VECTOR (7 DOWNTO 0); clk_en : IN STD_LOGIC; clk : IN STD_LOGIC; clr_bar : IN STD_LOGIC; db_out : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); end component; component comm_reg IS PORT ( db_in : IN STD_LOGIC_VECTOR (7 DOWNTO 0); clk_en : IN STD_LOGIC; clk : IN STD_LOGIC; clr_bar : IN STD_LOGIC; db_out : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); end component; component trans_buf IS PORT ( db_in : IN STD_LOGIC_VECTOR (7 DOWNTO 0); clk_en : IN STD_LOGIC; clk : IN STD_LOGIC; clr_bar : IN STD_LOGIC; db_out : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); end component; component recv_buf IS PORT ( db_in : IN STD_LOGIC_VECTOR (7 DOWNTO 0); clk : IN STD_LOGIC; nclr : IN STD_LOGIC; db_out : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); end component; component status_reg IS PORT ( c0, c1, c2 : IN STD_LOGIC; trigger : IN STD_LOGIC_VECTOR (5 DOWNTO 3); nclr : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); end component; component parin_serout IS PORT ( i_data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); ngo vao bit ds : IN STD_LOGIC; ngo nhap serial clk_bar : IN STD_LOGIC; xung clock clk15_bar : IN STD_LOGIC; tan so nhanh gap lan xung clk_bar pl_bar : IN STD_LOGIC; parellel load en : IN STD_LOGIC; cho phep dich sel_mode : IN STD_LOGIC; bit lua chon che syn : /asyn : sel_length : IN STD_LOGIC; bit chon chieu dai ky tu 7/8: '0'/'1' sel_parity : IN STD_LOGIC; bit lua chon co hay khong co parity parity_value : IN STD_LOGIC; gia tri bit parity sel_stop_bit : IN STD_LOGIC_VECTOR (1 DOWNTO 0); bit lua chon SOUT so luong bit stop : OUT STD_LOGIC ngo xuat tin hieu tuan tu ); Trang 206 end component; -component serin_parout IS PORT ( SIN : IN STD_LOGIC; ngo nhap serial clk_bar : IN STD_LOGIC; xung clock mr_bar : IN STD_LOGIC; master clear en_shift_in : IN STD_LOGIC; sel_mode : IN STD_LOGIC; lua che syn : /asyn : sel_length : IN STD_LOGIC; sel_parity : IN STD_LOGIC; out_data : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); stop_value : OUT STD_LOGIC; parity_value : OUT STD_LOGIC; start_value : OUT STD_LOGIC); end component; component parity_gen IS PORT ( data_in : IN STD_LOGIC_VECTOR (7 DOWNTO 0); pen : IN STD_LOGIC; parity enable ep : IN STD_LOGIC; parity chan gen8 : IN STD_LOGIC; tao parity cho 7/8 bit gen8 = 0/1 bit_check : IN STD_LOGIC; parity_bit : OUT STD_LOGIC; parity_ok_bar : OUT STD_LOGIC parity_bit = bit_check ); end component; -component counter_trans IS PORT ( clk_bar : IN STD_LOGIC; clk_en : IN STD_LOGIC; mr_bar : IN STD_LOGIC; sel_mode : IN STD_LOGIC; sel_length : IN STD_LOGIC; sel_parity : IN STD_LOGIC; sel_stop_bit : IN STD_LOGIC_VECTOR (1 DOWNTO 0); first_trans_pulse : OUT STD_LOGIC; ready : OUT STD_LOGIC); end component; component counter_recv IS PORT ( clk_bar : IN STD_LOGIC; clk_en : IN STD_LOGIC; mr_bar : IN STD_LOGIC; sel_mode : IN STD_LOGIC; sel_length : IN STD_LOGIC; sel_parity : IN STD_LOGIC; first_recv_pulse : OUT STD_LOGIC; ready : OUT STD_LOGIC); end component; -component control_baud IS PORT ( clk_bar : IN STD_LOGIC; mod8 : OUT STD_LOGIC; mod16 : OUT STD_LOGIC; mod32 : OUT STD_LOGIC; mod64 : OUT STD_LOGIC); end component; -component trans_ctrl_baud IS PORT ( TxC_bar : IN STD_LOGIC; SCLK_bar : IN STD_LOGIC; xung dong bo SCLK master sel_mode : IN STD_LOGIC_VECTOR (1 DOWNTO 0); sel_stop_bit : IN STD_LOGIC_VECTOR (1 DOWNTO 0); trans_clk_bar : OUT STD_LOGIC; trans_clk15_bar : OUT STD_LOGIC ); end component; Trang 207 component recv_ctrl_baud IS PORT ( RxC_bar : SCLK_bar : sel_mode : sample_rate : ); end component; END sio_lib; IN STD_LOGIC; IN STD_LOGIC; xung dong bo SCLK master IN STD_LOGIC_VECTOR (1 DOWNTO 0); OUT STD_LOGIC Trang 208 PHUÏ LUÏC E: SOURCE CODE CHO TRÌNH DEMO Source code cho đoạn chương trình minh họa chức chế độ bất đồng // ConfigSIODlg.cpp : implementation file // #include "stdafx.h" #include "ConfigSIODlg.h" #include "SerialPort.h" #include #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = FILE ; #endif using namespace std; bitset mode_char; bitset mode_char_tmp; bitset comm_char; bitset comm_char_tmp; ///////////////////////////////////////////////////////////////////////////// // CConfigSIODlg dialog CConfigSIODlg::CConfigSIODlg(CWnd* pParent /*=NULL*/) : CDialog(CConfigSIODlg::IDD, pParent) { //{{AFX_DATA_INIT(CConfigSIODlg) m_strStopBit = _T(""); m_strMode = _T(""); m_strLength = _T(""); m_strMulX = _T(""); m_bool_RXEN = FALSE; m_bool_TXEN = FALSE; m_strParity = _T(""); m_bool_ESD = FALSE; m_bool_Break = FALSE; m_bool_ER = FALSE; m_bool_IR = FALSE; m_strSend = _T(""); m_strReceive = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CConfigSIODlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CConfigSIODlg) DDX_CBString(pDX, IDC_BIT_STOP, m_strStopBit); DDX_CBString(pDX, IDC_MODE, m_strMode); DDX_CBString(pDX, IDC_LENGTH, m_strLength); DDX_CBString(pDX, IDC_MULX, m_strMulX); DDX_Check(pDX, IDC_RXEN, m_bool_RXEN); DDX_Check(pDX, IDC_TXEN, m_bool_TXEN); Trang 209 DDX_CBString(pDX, IDC_PARITY, m_strParity); DDX_Check(pDX, IDC_ESD, m_bool_ESD); DDX_Check(pDX, IDC_BREAK, m_bool_Break); DDX_Check(pDX, IDC_ER, m_bool_ER); DDX_Check(pDX, IDC_IR, m_bool_IR); DDX_Text(pDX, IDC_SEND, m_strSend); DDX_Text(pDX, IDC_RECEIVE, m_strReceive); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CConfigSIODlg, CDialog) //{{AFX_MSG_MAP(CConfigSIODlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUT_CONFIG, OnButConfig) ON_BN_CLICKED(IDC_RESET, OnReset) ON_MESSAGE(WM_COMM_RXCHAR, OnReceive) ON_MESSAGE(WM_COMM_CTS_DETECTED, OnCTSDetected) ON_EN_CHANGE(IDC_SEND, OnChangeSend) ON_WM_CLOSE() ON_BN_CLICKED(IDC_Exit_Asyn, OnExitAsyn) ON_MESSAGE(WM_MY_KEYPRESSED, OnSendData) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CConfigSIODlg message handlers BOOL CConfigSIODlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here // che bat dong bo, bit chieu dai, bit stop, ko parity, x1, cho phep truyen/nhan m_strMode = "Bat dong bo"; m_strLength = "8 bit"; m_strStopBit = "1 bit"; m_strParity = "No parity"; m_strMulX = "X1"; // Tu lenh m_bool_RXEN = TRUE; m_bool_TXEN = TRUE; UpdateData(FALSE); // init the ports if (m_Ports[0].InitPort(this, 1, 9600)) m_Ports[0].StartMonitoring(); else MessageBox("Khong the mo COM1 Hay tat ung dung khac dang su dung COM1"); // Reset SIO OnReset(); //init mode and command character mode_char.reset(); comm_char.reset(); return TRUE; // return TRUE unless you set the focus to a control Trang 210 } void CConfigSIODlg::OnSysCommand(UINT nID, LPARAM lParam) { CDialog::OnSysCommand(nID, lParam); } // If you add a minimize button to your dialog, you will need the code below // to draw the icon For MFC applications using the document/view model, // this is automatically done for you by the framework void CConfigSIODlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window HCURSOR CConfigSIODlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CConfigSIODlg::OnButConfig() { // TODO: Add your control notification handler code here GenConfiguration(); if (mode_char_tmp != mode_char) { OnReset(); _sleep(200L); mode_char = mode_char_tmp; comm_char = comm_char_tmp; Send_Mode_Char(); Send_Comm_Char(); if (m_Ports[1].InitPort(this, 2, 600)) m_Ports[1].StartMonitoring(); else MessageBox("Khong the mo COM2 Hay tat ung dung khac dang su dung COM2"); } else if (comm_char_tmp != comm_char) { Trang 211 comm_char = comm_char_tmp; Send_Comm_Char(); } } void CConfigSIODlg::GenConfiguration() { UpdateData(TRUE); mode_char_tmp.set(); if (m_strParity == "No parity") { mode_char_tmp.reset(4); mode_char_tmp.reset(5); } else if (m_strParity == "Parity le") mode_char_tmp.reset(5); // Tu Che if (m_strMode == "Dong bo") { mode_char_tmp.reset(1); mode_char_tmp.reset(2); if (m_bool_ESD == FALSE) mode_char_tmp.reset(6); } else if (m_strMode == "Bat dong bo") { if (m_strMulX == "X1") { mode_char_tmp.reset(2); m_intBaudRateCom2 = 1; } else if (m_strMulX == "X16") { mode_char_tmp.reset(1); m_intBaudRateCom2 = 16; } else m_intBaudRateCom2 = 64; if (m_strLength == "7 bit") mode_char_tmp.reset(3); if (m_strStopBit == "1 bit") mode_char_tmp.reset(7); else if (m_strStopBit == "1.5 bit") mode_char_tmp.reset(6); } // Tu Lenh comm_char_tmp.reset(); comm_char_tmp.set(1, true); comm_char_tmp.set(5, true); comm_char_tmp.set(7, true); if (m_bool_TXEN) comm_char_tmp.set(0, true); if (m_bool_RXEN) comm_char_tmp.set(2, true); if (m_bool_Break) comm_char_tmp.set(3, true); if (m_bool_ER) comm_char_tmp.set(4, true); if (m_bool_IR) comm_char_tmp.set(6, true); } void CConfigSIODlg::Send_Mode_Char() { Trang 212 memset(&m_Buf_Send, 0, sizeof(m_Buf_Send)); BYTE n; n = (BYTE) mode_char.to_ulong(); m_Buf_Send[0] = (char) 14; m_Buf_Send[1] = (char) n; m_Ports[0].WriteToPort(m_Buf_Send); _sleep(200L); } void CConfigSIODlg::Send_Comm_Char() { memset(&m_Buf_Send, 0, sizeof(m_Buf_Send)); BYTE n; n = (BYTE) comm_char.to_ulong(); m_Buf_Send[0] = (char) 15; m_Buf_Send[1] = (char) n; m_Ports[0].WriteToPort(m_Buf_Send); if (m_bool_IR) OnReset(); MessageBox("Da cau hinh SIO xong."); } void CConfigSIODlg::OnReset() { // TODO: Add your control notification handler code here memset(&m_Buf_Send, 0, sizeof(m_Buf_Send)); m_Buf_Send[0] = (char) 16; m_Ports[0].WriteToPort(m_Buf_Send); mode_char.reset(); comm_char.reset(); } LONG CConfigSIODlg::OnReceive(WPARAM ch, LPARAM port) { if (port == 1) { m_strReceive += (char)ch; UpdateData(FALSE); } // test if (port == 2) { CString testthu; testthu.Format("%d", ch); MessageBox(testthu); } return 0; } LONG CConfigSIODlg::OnCTSDetected(WPARAM, LPARAM port) { Trang 213 if (port > && port < 3) return 0; else return 1; } void CConfigSIODlg::OnChangeSend() { // TODO: Add your control notification handler code here UpdateData(TRUE); char KeyCodePressed; if (!m_strSend.IsEmpty()) { KeyCodePressed = m_strSend.GetAt(m_strSend.GetLength() - 1); if (KeyCodePressed!= 204) SendMessage(WM_MY_KEYPRESSED, KeyCodePressed, 0); } } void CConfigSIODlg::OnSendData(WPARAM ch, LPARAM lp) { char send[3]; memset(&send, 0, sizeof(send)); send[0] = ch; m_Ports[1].WriteToPort(send); } void CConfigSIODlg::OnClose() { // TODO: Add your message handler code here and/or call default m_Ports[0].ClosePort(); m_Ports[1].ClosePort(); CDialog::OnClose(); } void CConfigSIODlg::OnExitAsyn() { // TODO: Add your control notification handler code here SendMessage(WM_CLOSE); } Source code cho vi điều khiển minh họa chế độ bất đồng ; ; ; ; ; ; 89C51 for Asyn Demo PROGRAMED BY DANG HOANG HUY PORT : DATA BUS PORT : RXC | TXC | WR | RD | A1 | A0 | RESET | CS PORT : PORT : TIN HIEU DA HOP ORG 0000H LJMP MAIN LJMP ECHO_BACK ; dia chi vector ngat cho int0 ORG 000BH LJMP T0ISR ORG 001BH LJMP T1ISR ORG 0030H MAIN: MOV TMOD, #22H Trang 214 MOV MOV TH1, #0FDH TH0, #-48 MOV SCON, #50H MOV IE, #10001011B SETB IT0 SETB TR0 SETB CLR CLR SETB LOOP: JNB MOV CJNE ; cho phep ngat int0 ; int0 tich cuc theo canh TR1 P1.0 P1.1 P1.0 ; thuc hien reset ban dau ; chip select disable RI, LOOP CLR RI A, SBUF A, #14, NOT_EQ14 ; ky tu dau tien la #14 CONT14: JNB RI, CONT14 MOV MOV A, SBUF P0, A CLR CLR CLR SETB CLR SETB SETB P1.0 P1.2 P1.3 P1.4 P1.5 P1.5 P1.0 CLR LJMP RI LOOP ; set bit dia chi ; kich hoat xung ghi NOT_EQ14: CJNE A, #15, NOT_EQ14_15 ; ky tu dau tien la #15 CONT15: JNB RI, CONT15 MOV MOV A, SBUF P0, A CLR SETB CLR SETB CLR SETB SETB P1.0 P1.2 P1.3 P1.4 P1.5 P1.5 P1.0 CLR LJMP RI LOOP ; set bit dia chi ; kich hoat xung ghi ; ky tu dau tien la #16 nghia la yeu cau reset sio NOT_EQ14_15: CLR P1.0 SETB P1.1 CLR P1.1 SETB P1.0 CLR LJMP RI LOOP Trang 215 ECHO_BACK: ; doc du lieu MOV P0, #0FFH CLR P1.0 CLR P1.2 SETB P1.3 SETB P1.5 ; xung wr_bar = CLR P1.4 ; xung rd_bar = MOV A, P0 SETB P1.4 SETB P1.0 MOV SBUF, A ;gui qua COM1 jnb TI, $ clr TI RETI T0ISR: CPL P1.7 RETI T1ISR: RETI END Trang 216 LÝ LỊCH TRÍCH NGANG Họ tên: ĐẶNG HOÀNG HUY Ngày, tháng, năm sinh: 21 / 08 / 1978 Nơi sinh: TP Hồ Chí Minh Địa liên lạc: 163/10 Thành Thái P.14 _ Q.10 _ TP.HCM Điện thoại liên lạc: 8635252 QUÁ TRÌNH ĐÀO TẠO - 10/1996 – 03/2001: Sinh viên quy ngành Công Nghệ Thông Tin trường Đại Học Bách Khoa TP Hồ Chí Minh 09/2001 – 12/2004: Học viên Cao học ngành Công Nghệ Thông Tin trường Đại Học Bách Khoa TP Hồ Chí Minh QUÁ TRÌNH CÔNG TÁC - 07/2001 – 10/2001: lập trình viên công ty InterSOFT 10/2001 – 05/2003: lập trình viên part-time công ty KT Corp ... Trieån Khai Ứng Dụng Công Nghệ SoC: Xây Dựng Core Mạch Giao Tiếp Tuần Tự SIO II- NHIỆM VỤ VÀ NỘI DUNG : Tìm hiểu công nghệ SoC, xây dựng đối tượng cụ thể: Core mạch giao tiếp SIO theo công nghệ. .. phát triển trở thành hướng ngành công nghiệp điện tử - viễn thông đại Xuất phát từ thực tế công nghệ vậy, xuất phát từ tinh thần tiếp cận, lónh hội công nghệ ứng dụng công nghệ vào ứng dụng phục... Công Nghệ & Môi Trường Trung Tâm Thông Tin Khoa Học? ?Công Nghệ nước ta trước chưa có chương trình nghiên cứu triển khai công nghệ SoC 2.2 Trên giới Khi nói công trình liên quan đến công nghệ SoC