Đề tài Sử dụng ngôn ngữ VHDL xây dựng chuyển mạch không gian đơn giản

LỜI MỞ ĐẦU Xu hướng hiện nay của thế giới là phát triển mạnh công nghệ bán dẫn.Một Chip có thể tích hợp trên nó nhiều cổng logic có thể ứng dụng trong nhiều lĩnh vực. Ngày nay ngành công nghệ chế tạo phần cứng luôn có những đột phá không ngừng. Từ các mạch điện đơn giản đến các mạch số, mạch tích hợp, kiến trúc mạch trở nên ngày một phức tạp hơn. Nhờ những ưu điểm hơn hẳn so với các phương pháp phân tích, mô hình hoá, thiết kế mạch số kiểu truyền thống mà phương pháp sử dụng các ngôn ngữ mô phỏng phần cứng (HDL-Hard ware Description Languages) đang trở thành một phương pháp thiết kế các hệ thống điện tử số phổ biến trên toàn thế giới. Đối với em là sinh viên ngành điện tử viễn thông với luận văn tốt nghiệp của mình. Việc xác định cho mình một đề tài thiết thực và gắn liền với chuyên ngành của mình là một điều cần thiết. Nên em đã chọn đề tài “Sử dụng ngôn ngữ VHDL xây dựng chuyển mạch không gian đơn giản”, đề tài này sẽ xây dựng ứng dụng chuyển mạch tổng đài đơn giản. Bước đầu tìm hiểu ngôn ngữ VHDL, kiểm tra bằng Test bench của phần mềm chuyên dụng XiLinx và cuối cùng là nạp vào KIT để kiểm tra. Bài luận văn bao gồm 4 chương: Chương 1: Tìm hiểu về chuyển mạch trong tổng đài Chương 2: Tìm hiểu về ngôn ngữ VHDL Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i Chương 4: Thiết kế mạch và nạp Kit Trong quá trình thực hiện đề tài này, do còn hạn chế về kiến thức và thời gian nên không tránh được những thiếu sót. Chúng em kính mong quý thầy cô thông cảm và bỏ qua đồng thời chúng em cũng mong nhận được những góp ý và chỉ bảo thêm của quý thầy cô. MỤC LỤC LỜI MỞ ĐẦU LỜI CẢM ƠN CHƯƠNG 1 TÌM HIỂU CHUYỂN MẠCH TRONG TỔNG ĐÀI 1.1. Thực trạng tình hình mạng viễn thông . .1 1.2. Mô hình mạng viễn thông . .1 1.3. Lịch sử và xu hướng phát triển của hệ thống tổng đài . .2 1.3.1. Sơ lược về lịch sử kỹ thuật tổng đài . 2 1.3.2. Xu hướng phát triển . 4 1.4. Phân loại tổng đài điện tử . .4 1.4.1. Phân loại theo phương thức điều khiển . 5 1.4.2. Phân loại theo vị trí . .5 1.4.3. Phân loại theo tín hiệu . .6 1.5. Các loại chuyển mạch kênh . .6 1.5.1. Chuyển mạch tín hiệu tương tự . .6 1.5.2. Chuyển mạch tín hiệu số . .7 1.5.3. Chuyển mạch tín hiệu quang . .7 1.6. Chuyển mạch tương tự . 7 1.7. Chuyển mạch số . .8 1.7.1. Nguyên tắc chung . .8 1.7.2. Trường chuyển mạch không gian . 8 1.7.2.1. Cấu tạo chung của một trường chuyển mạch không gian . 8 1.7.2.2. Nguyên lý hoạt động . 10 1.7.2.3. Chuyển mạch song song . 11 1.7.3. Trường chuyển mạch thời gian . .13 1.7.3.1. Khái niệm chung . 13 1.7.3.2. Trường chuyển mạch thời gian điều khiển liên kết đầu ra . 14 1.7.3.2.1. Cấu tạo . 14 1.7.3.2.2. Nguyên lý làm việc . .14 1.7.3.3. Chuyển mạch thời gian điều khiển liên kết đầu vào . . 16 1.7.3.3.1. Cấu tạo . 16 1.7.3.3.2. Nguyên lý hoạt động . .16 1.7.3.4. Trễ trong chuyển mạch thời gian . .17 1.7.3.5. Đặc tính không tổn thất . .17 1.7.4. Trường chuyển mạch ghép . 17 1.7.4.1. Khái niệm về trường chuyển mạch ghép . .17 1.7.4.2. Trường chuyển mạch TST . .17 CHƯƠNG 2 TÌM HIỂU VỀ NGÔN NGỮ VHDL 2.1. Giới thiệu về VHDL . .20 2.2. Giới thiệu công nghệ và ứng dụng thiết kế mạch bằng VHDL . 21 2.2.1 Ứng dụng của công nghệ thiết kế mạch bằng VHDL . .21 2.2.2 Quy trình thiết kế mạch bằng VHDL . 22 2.2.3. Công cụ EDA . 23 2.2.4. Chuyển mã VHDL vào mạch . 23 2.3. Cấu trúc mã . .26 2.3.1. Các đơn vị VHDL cơ bản . .26 2.3.2. Khai báo Library . 26 2.3.3. Entity ( Thực thể) . 28 2.3.4. Architecture ( Cấu trúc) . .29 2.4. Kiểu dữ liệu . . 33 2.4.1. Các kiểu dữ liệu tiền định nghĩa . 33 2.4.2. Các kiểu dữ liệu người dùng định nghĩa . .36 2.4.3. Các kiểu con (Subtypes) . .37 2.4.4. Mảng (Arrays) . .37 2.4.5. Mảng cổng ( Port Array) . 38 2.4.6. Kiểu bản ghi (Records) . 38 2.4.7. Kiểu dữ liệu có dấu và không dấu ( Signed and Unsigned) . .39 2.4.8. Chuyển đổi dữ liệu . .39 2.4.9. Tóm tắt . . 40 2.5. Toán tử và thuộc tính . . 40 2.4.1. Toán tử . . 40 2.4.1.1 Toán tử gán . . 41 2.4.1.2 Toán tử Logic . 41 2.4.1.3 Toán tử toán học . . 41 2.4.1.4 Toán tử so sánh . 41 2.4.1.5 Toán tử dịch . . 42 2.4.2. Thuộc tính . 42 2.4.2.1.Thuộc tính dữ liệu . . 42 2.4.2.2. Thuộc tính tín hiệu . 43 2.4.3. Thuộc tính được định nghĩa bởi người dùng . . 43 2.4.4. Chồng toán tử . 44 2.4.5. Generic . . 44 2.5. Mã song song . . 45 2.5.1. Song song và tuần tự . 45 2.5.1.1.Mạch tổ hợp và mạch dãy . . 45 2.5.1.2. Mã song song và mã tuần tự . . 46 2.5.2. Sử dụng các toán tử . .46 2.5.3. Mệnh đề WHEN . .47 2.5.4. GENERATE . 47 2.5.5. BLOCK . .48 2.5.5.1.Simple BLOCK . 48 2.5.5.2. Guarded BLOCK . .48 2.6. Mã tuần tự . 49 2.6.1. PROCESS . 49 2.6.2. Signals và Variables . .49 2.6.3. IF . . 50 2.6.4. WAIT . . 50 2.6.5. CASE . . 51 2.6.6. LOOP . . 51 2.6.7. Bad Clocking . . 52 2.6.8. Sử dụng mã tuần tự để thiết kế các mạch tổ hợp . . 52 2.7. Signal và Variable . 52 2.7.1. CONSTANT . 53 2.7.2. SIGNAL . 53 2.7.3. VARIABLE . . 54 CHƯƠNG 3 GIỚI THIỆU KIT SPARTAN 3E VÀ CÔNG CỤ ISE 9.2i 3.1. Các thành phần của KIT . . 55 3.2. Sơ đồ chân của XC3S500E . 56 3.3. Bộ tạo dao động trên KIT . 56 3.4. Các nút chuyển, nút nhấn, Led . .57 3.5. Cấp nguồn . 59 3.6. Cấu hình FPGA . .59 3.6.1. Nạp trực tiếp vào FPGA thông qua cổng JTAG hay cổng USB . . 61 3.6.2. Nạp vào Platform Flash PROM XCF04S (4Mbit), rồi cấu hình cho FPGA ở chế độ Master Serial Mode . . 62 3.6.2.1. Tạo file bitstream (.bit) cho FPGA . . 62 3.6.2.2. Tạo file cấu hình cho PROM . . 64 3.6.2.3. Nạp chương trình vào PROM . 67 3.7. Tổng quan cấu trúc SPARTAN - 3E . 70 3.7.1. Input/Output Blocks (IOBs) : các khối vào ra . . 70 3.7.2. Configurable Logic Blocks (CLBs) : Khối chức năng logic . . 71 3.7.3. Block RAM : Khối nhớ . 72 3.7.4. Dedicated Multipliers : Bộ nhân chuyên dụng . . 72 3.7.5. Digital Clock Managers (DCMs) : Bộ quản lí xung Clock . 73 3.7.6. Interconnect : Các kết nối . . 74 3.8. Sơ lược về ISE 9.2 i . 74 3.8.1. Tạo một Project . 74 CHƯƠNG 4 THIẾT KẾ MẠCH VÀ NẠP KIT 4.1. Ý tưởng thiết kế mạch . . 94 4.2. Thiết kế mạch . . 94 4.3. Cấu trúc mạch và code chương trình . 96 4.3.1. Cấu trúc mạch . .96 4.3.2. Code chương trình . .98 4.3.3. Kết quả mô phỏng bằng Test Bench . 103 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI TÀI LIỆU THAM KHẢO

pdf118 trang | Chia sẻ: lvcdongnoi | Lượt xem: 3058 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Sử dụng ngôn ngữ VHDL xây dựng chuyển mạch không gian đơn giản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
động chỉ xảy ra khi có sự đồng bộ của xung đồng hồ.). Một cách khác chúng ta chỉ có thể xây dựng dựa trên các mạch tổ hợp. Trong mục này chúng ta tìm hiểu về các đoạn mã song song. Chúng ta chỉ tìm hiểu các đoạn mã được sử dụng bên ngoài PROCESS, FUNCTION, PROCEDURES. Chúng là các khối lện WHEN và GENERATE. Bên cạnh đó, các phép gán dùng các toán tử được sử dụng để tạo các mạch tổ hợp. Cuối cùng một loại khối lện đặc biệt được gọi là BLOCK sẽ được sử dụng. 2.5.2. Sử dụng các toán tử Đây là cách cơ bản nhất dùng để tạo các đoạn mã song song. Các toán tử (AND, OR, ..) được tìm hiểu ở trên sẽ được liệt kê ở bảng dưới đây. Các toán tử có thể được sử dụng như là một thành phần của mạch tổ hợp. Tuy nhiên để rõ ràng, các mạch hoàn chỉnh sẽ sử dụng cách viết tuần tự mặc dù các mạch không chứa các phần tử tuần tự. Chương 2: Tìm hiểu ngôn ngữ VHDL 47 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Bảng 2.3. Các toán tử 2.5.3. Mệnh đề WHEN WHEN là môt thành phần của các khối lện song song. Nó xuất hiện trong hai trường hợp. WHEN / ELSE và WITH / SELECT / WHEN. Cú pháp được trình bày như sau: WHEN / ELSE : asignment WHEN condition ELSE asignment WHEN condition ELSE . . .; WITH / SELECT / WHEN : WITH indentifier SELECT asignment WHEN value asignment WHEN value . . .; 2.5.4. GENERATE GENERATE là một khối lệnh song song khác. Nó tương đương với khối lệnh tuần tự LOOP trong việc cho phép các đoạn lệnh được thực hiện lặp lại một số lần nào đó. Mẫu dùng của nó là FOR / GENERATE. label: FOR identifier IN range GENERATE (concurrent assignments) END GENERATE; Chương 2: Tìm hiểu ngôn ngữ VHDL 48 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Một cách khác sử dụng GENERATE là dùng IF. Ở đây mệnh đề ELSE không được sử dụng. Một cách hay được sử dụng là dùng IF trong FOR/GENERATE. Mẫu sử dụng như sau. label1: FOR identifier IN range GENERATE ... label2: IF condition GENERATE (concurrent assignments) END GENERATE; ... END GENERATE; 2.5.5. BLOCK Có hai loại khối lệnh BLOCK : Simple và Guarded. 2.5.5.1.Simple BLOCK Khối lệnh BLOCK cho phép đặt một khối lệnh song song vào một đoạn, điều đó giúp cho các đoạn lệnh dễ đọc và dễ quản lý hơn. Cấu trúc của chúng như sau: label: BLOCK [declarative part] BEGIN (concurrent statements) END BLOCK label; 2.5.5.2. Guarded BLOCK Một Guarded BLOCK là một khối BLOCK đặc biệt. Nó chứa một điều kiện và BLOCK chỉ được thực hiện khi điều kiện đó có giá trị là TRUE. Cấu trúc như sau: label: BLOCK (guard expression) [declarative part] BEGIN (concurrent guarded and unguarded Chương 2: Tìm hiểu ngôn ngữ VHDL 49 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam statements) END BLOCK label; 2.6. Mã tuần tự 2.6.1. PROCESS PROCESS là phần tuần tự của mã VHDL. Nó được mô tả bởi các câu lệnh IF, WAIT, CASE, hoặc LOOP, và bởi danh sách nhạy (ngoại trừ WAIT được sử dụng). PROCESS phải được cài đặt trong mã chính, và được thực thi ở mọi thời điểm một tín hiệu trong danh sách nhạy thay đổi. Cú pháp: [label:] PROCESS (sensitivity list) [VARIABLE name type [range] [:= initial_value;]] BEGIN (sequential code) END PROCESS [label]; VARIABLES là tuỳ chọn. Nếu sử dụng, chúng phải được khai báo trong phần khai báo của PROCESS (trước từ khoá BEGIN). Giá trị khởi tạo không thể kết hợp, chỉ lấy để đại diện khi mô phỏng. Nhãn cũng được sử dụng tuỳ chọn, mục đích là nâng cao khả năng đọc được của mã. Nhãn có thể là bất kỳ từ nào, ngoại trừ từ khoá. 2.6.2. Signals và Variables VHDL có hai cách định nghĩa các giá trị không tĩnh: bằng SIGNAL hoặc bằng VARIABLE. SIGNAL có thể được khai báo trong PACKAGE, ENTITY hoặc ARCHITECTURE (trong phần khai báo của nó), trong khi VARIABLE có thể được mô tả bên trong một phần của mã tuần tự (trong PROCESS). Do đó, trong khi giá trị của phần ở trước có thể là toàn cục, phần ở sau luôn là cục bộ. Giá trị của VARIABLE có thể không bao giờ định nghĩa ngoài PROCESS một cách trực tiếp, nếu cần, thì nó phải được gán thành SIGNAL. Trong cách xử lý khác, cập nhật VARIABLE là tức thì, ta có thể tính toán tức thì giá trị mới của nó trong dòng lệnh tiếp theo. Điều đó không phải là trường hợp Chương 2: Tìm hiểu ngôn ngữ VHDL 50 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam của SIGNAL (khi được sử dụng trong PROCESS), giá trị mới của nó chỉ tổng quát được bảo toàn để có thể dùng được sau khi kết thúc quá trình chạy hiện tại của PROCESS. Phép toán gán cho SIGNAL là “<=” (sig <= 5), trong khi với VARIABLE là “:=” (var := 5). 2.6.3. IF IF, WAIT, CASE, và LOOP là các câu lệnh đối với mã tuần tự. Do đó, chúng chỉ có thể được sử dụng bên trong PROCESS, FUNCTION hoặc PROCEDURE. Về nguyên tắc, có một kết quả phủ định, tổng hợp sẽ tối ưu hoá cấu trúc và tránh đi sâu vào phần cứng. Cú pháp: IF conditions THEN assignments; ELSIF conditions THEN assignments; ... ELSE assignments; END IF; Ví dụ: IF (x<y) THEN temp:="11111111"; ELSIF (x=y AND w='0') THEN temp:="11110000"; ELSE temp:=(OTHERS =>'0'); 2.6.4. WAIT Phép toán WAIT đôi khi tương tự như IF. Tuy nhiên, nhiều hơn một định dạng có thể dùng được. Hơn nữa, khi IF, CASE, hoặc LOOP được sử dụng, PROCESS không thể có một danh sách nhạy khi WAIT được sử dụng. Cú pháp: WAIT UNTIL signal_condition; WAIT ON signal1 [, signal2, ... ]; WAIT FOR time; Chương 2: Tìm hiểu ngôn ngữ VHDL 51 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam 2.6.5. CASE CASE là lệnh duy nhất cho mã tuần tự (đi kèm với IF, LOOP, và WAIT). Cú pháp: CASE identifier IS WHEN value => assignments; WHEN value => assignments; ... END CASE; 2.6.6. LOOP LOOP hữu ích khi một phần của mã phải được thể hiện nhiều lần. Giống như IF, WAIT, và CASE, LOOP là duy nhất đối với mã tuần tự, vì vậy nó cũng có thể được sử dụng bên trong PROCESS, FUNCTION, hay PROCEDURE. Có nhiều cách sử dụng LOOP. Cú pháp: FOR/LOOP: vòng lặp được lặp lại một số lần cố định. [label:] FOR identifier IN range LOOP (sequential statements) END LOOP [label]; WHILE/LOOP: vòng lặp được lặp cho đến khi điều kiện không thảo mãn. [label:] WHILE condition LOOP (sequential statements) END LOOP [label]; EXIT: sử dụng để kết thúc vòng lặp. [label:] EXIT [label] [WHEN condition]; NEXT: sử dụng để bỏ qua các bước vòng lặp. [label:] NEXT [loop_label] [WHEN condition]; Một đặc điểm quan trọng của FOR/LOOP (tương tự tạo với GENERATE) là giới hạn tối thiểu phải là tĩnh. Do đó, một khai báo kiểu “FOR i IN 0 TO choice Chương 2: Tìm hiểu ngôn ngữ VHDL 52 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam LOOP” , với choice là một tham số đầu vào (không tĩnh), không kết hợp tổng quát được. 2.6.7. Bad Clocking Trình biên dịch nói chung không có khả năng tổng hợp các mã chứa các phép gán cho tín hiệu giống nhau tại cả chuyển tiếp của tín hiệu đồng hồ (clock) tham chiếu (tại sườn dương cộng tại sườn âm). Trong trường hợp này, trình biên dịch có thể thông báo một thông điệp “signal does not hold value after clock edge” hoặc tương tự. 2.6.8. Sử dụng mã tuần tự để thiết kế các mạch tổ hợp Mã tuần tự có thể được sử dụng để thực hiện các hệ dãy hay tổ hợp. Trong trường hợp hệ dãy, các thanh ghi là cần thiết, vì vậy sẽ được suy ra bởi trình biên dịch. Tuy nhiên, điều này sẽ không xảy ra trong trường hợp hệ tổ hợp. Hơn nữa, nếu mã được dùng cho hệ tổ hợp, thì bảng thật đầy đủ nên được môt tả rõ ràng trong mã. Để thoả mãn các tiêu chuẩn trên có các luật được xét: - Luật 1: Đảm bảo tất cả tín hiệu đầu vào sử dụng trong PROCESS xuất hiện trong danh sách nhạy của nó. Trình biên dịch đưa ra cảnh báo nếu một tín hiệu đầu vào đã cho không được chứa trong danh sách nhạy, và sau đó xử lý nếu tín hiệu đã được chứa. - Luật 2: Đảm bảo tất cả tổ hợp các tín hiệu đầu vào/đầu ra được bao gồm trong mã, bảng thật đầy đủ của mạch có thể được chứa (điều này đúng với cả mã tuần tự và mã đồng thời). Các đặc tả không đầy đủ của các tín hiệu đầu ra có thể gây cho việc tổng hợp để suy ra các chốt để giữ các giá trị liền trước. 2.7. Signal và Variable VHDL cung cấp hai đối tượng để giải quyết các giá trị dữ liệu không tĩnh (non- static): SIGNAL và VARIABLE. Nó còn cung cấp các cách để thiết lập các giá trị mặc định (static): CONSTANT và GENERIC. CONSTANT và GENERIC có thể là toàn cục và có thể được sử dụng trong cả kiểu mã, đồng thời hoặc tuần tự. VARIABLE là cục bộ, chỉ có thể được sử dụng bên trong một phần của mã tuần tự (trong PROCESS, FUNCTION, hoặc PROCEDURE). Chương 2: Tìm hiểu ngôn ngữ VHDL 53 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam 2.7.1. CONSTANT CONSTANT phục vụ cho việc thiết lập các giá trị mặc định. Cú pháp: CONSTANT name : type := value; Ví dụ: CONSTANT set_bit : BIT := '1'; CONSTANT datamemory : memory := (('0','0','0','0'), ('0','0','0','1'), ('0','0','1','1')); CONSTANT có thể được khai báo trong PACKAGE, ENTITY và ARCHITECTURE. Khi khai báo trong gói (package), nó là toàn cục, gói có thể được sử dụng bởi nhiều thực thể (entity). Khi khai báo trong thực thể (sau PORT), nó là toàn cục với tất cả các kiến trúc (architecture) theo thực thể. Khi khai báo trong kiến trúc (trong phần khai báo của nó), nó chỉ toàn cục với mã của kiến trúc đó. 2.7.2. SIGNAL SIGNAL phục vụ giải quyết các giá trị vào và ra của mạch, cũng như là giữa các đơn vị bên trong của nó. Tín hiệu biểu diễn cho việc kết nối mạch (các dây). Thể hiện là, tất cả các PORT của ENTITY là các tín hiệu mặc định. Cú pháp: SIGNAL name : type [range] [:= initial_value]; Khai báo của SIGNAL có thể được tạo ra ở các chỗ giống nhau như là khai báo CONSTANT. Khía cạnh quan trọng của SIGNAl, khi sử dụng bên trong một phần của mã tuần tự (PROCESS), sự cập nhật nó không tức thì. Giá trị mới của không nên được đợi để được đọc trước khi kết thúc PROCESS, FUNCTION, hoặc PROCEDURE tương ứng. Khía cạnh khác ảnh hưởng đến kết quả khi nhiều phép gán được tạo cùng SIGNAL. Trình biên dịch có thể thông báo và thoát sự tổng hợp, hoặc có thể suy ra mạch sai (bằng cách chỉ xét phép gán cuối cùng). Do đó, việc xét lập các giá trị khởi tạo, nên được thực hiện với VARIABLE. Chương 2: Tìm hiểu ngôn ngữ VHDL 54 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam 2.7.3. VARIABLE Ngược lại với CONSTANT và SIGNAL, VARIABLE chỉ biểu diễn thông tin cục bộ. Nó chỉ có thể được sử dụng bên trong PROCESS, FUNCTION, hay PROCEDURE (trong mã tuần tự). Việc cập nhật giá trị của nó là tức thì, vì vậy giá trị mới có thể được lập tức sử dụng trong dòng lệnh tiếp theo của mã. Cú pháp: VARIABLE name : type [range] [:= init_value]; Ví dụ: VARIABLE control: BIT := '0'; VARIABLE count: INTEGER RANGE 0 TO 100; VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := "10001000"; Khi VARIABLE chỉ có thể được sử dụng trong m. tuần tự, khai báo của nó chỉ có thể được thực hiện trong phần khai báo của PROCESS, FUNCTION, hay PROCEDURE. Phép toán gán của VARIABLE là “:=” (count:=35;). Cũng giống như trường hợp của SIGNAl, giá trị khởi tạo không thể tổng hợp được, chỉ được xét khi mô phỏng. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 55 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam CHƯƠNG 3 GIỚI THIỆU KIT SPARTAN 3E VÀ CÔNG CỤ ISE 9.2i 3.1. Các thành phần của KIT  Xilinx XC3S500E Spartan-3E FPGA : con chính của KIT  Xilinx 4 Mbit Platform Flash configuration PROM  Xilinx 64-macrocell XC2C64A CoolRunner CPLD  64 MByte (512 Mbit) of DDR SDRAM, x16 data interface, 100+ MHz  16 MByte (128 Mbit) of parallel NOR Flash (Intel StrataFlash)  16 Mbits of SPI serial Flash (STMicro)  2-line, 16-character LCD screen  PS/2 mouse or keyboard port  VGA display port  10/100 Ethernet PHY (requires Ethernet MAC in FPGA)  Two 9-pin RS-232 ports (DTE- and DCE-style)  On-board USB-based FPGA/CPLD download/debug interface  50 MHz clock oscillator  SHA-1 1-wire serial EEPROM for bitstream copy protection  Hirose FX2 expansion connector  Three Digilent 6-pin expansion connectors  Four-output, SPI-based Digital-to-Analog Converter (DAC)  Two-input, SPI-based Analog-to-Digital Converter (ADC) with programmable-gain  Pre-amplifier  ChipScope™ SoftTouch debugging port  Rotary-encoder with push-button shaft Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 56 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam  Eight discrete LEDs  Four slide switches 3.2. Sơ đồ chân của XC3S500E XC3S500E có kiểu chân BGA, 320 chân như hình: Cách đánh số chân: Vị trí của 1 chân được xác định theo qui tắc ma trận 2 chiều. Chiều ngang (dòng) là số từ 0 tới 18. Chiều dọc (cột) là chữ từ A tới V. Ví dụ: chân A1, là chân ở dòng A, cột 1. Đây là chân GND của FPGA. Tài nguyên: 10000 logic cells, có 232 chân I/O cho người dùng tự định nghĩa. Hình 3.1. Sơ đồ chân của XC3S500E 3.3. Bộ tạo dao động trên KIT Có 3 nguồn cập xung clk cho FPGA: Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 57 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam  Dùng thạch anh có sẵn 50 MHz trên board. Ngõ ra của thạch anh nối với chân C9 của chip.  Cấp xung clk thông qua chân cắm 8 pin trên board (hình 3.1) Ngõ ra của thạch anh nối với chân B8 của chip.  Cấp xung clk thông qua chân cắm SMA, chân cắm này chỉ nhận clk từ máy phát clk, không dùng trực tiếp thạch anh được . Ngõ ra clk nối với chân A10 của chip. Hình 3.2. Bộ tạo dao động trên Kit 3.4. Các nút chuyển, nút nhấn, Led 4 nút chuyển (hình 2-1) theo thứ tự là : SW0, SW1, SW2, SW3 kết nối với chân tương ứng của chip là : L13, L14, H18, N17 của chip FPGA. Để ý: đây là các chân ngõ vào của FPGA. Trên Chip chỉ có 232 chân I/O tùy chọn. Khi các nút SWx (x = 0-3) ON (bật lên) thì chân FPGA tương ứng ở mức cao (3.3V) và ngược lại. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 58 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.3. 4 Switches 4 nút nhấn (hình 2-3) theo thứ tự là BTN_EAST (phải), BTN_NORTH ( trên), BTN_SOUTH (dưới), BTN_WEST (trái) kết nối tương ứng với các chân H13, K14, V17, D18 , là các chân input của FPGA. Khi nhấn các nút trên thì chân tương ứng với nó sẽ lên mức cao. Khi không nhấn, cần dùng 1 điện trở nội pull-down để tạo mức thấp. (bắt buộc). Nút Encoder : có 3 ngõ ra: ROT_A, ROT_B, ROT_CENTER : nối với chân K18, G18, V16 của FPGA. Nút Encoder có 2 chức năng : Như nút nhấn : nhấn xuống sẽ đưa chân V16 của FPGA lên mức cao. Xoay phải (hay trái) sẽ tạo xung encoder ngõ ra tương ứng (hình 2-8). Cả 3 chân ngõ ra của encoder điều cần dùng điện trở pull-up nội. Hình 3.4. Ngõ ra của nút Encoder 8 Led (góc dưới cùng bên phải) LD0, …, LD7 nối với 8 chân tương ứng F9, E9, D11, C11, F11, E11, E12, F12 của FPGA. Đầu còn lại của các Led nối với GND thông qua điện trở 290 (hình 3.5). Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 59 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.5. 8 LEDs 3.5. Cấp nguồn Tất cả các chân của FPGA điều có 2 lựa chọn nguồn cấp 2.5 v hoặc 3.3V thông qua jumper JP9. (cắm bên trái 2.5 V, cắm bên phải 3.3 V). 3.6. Cấu hình FPGA Có 4 cách để nạp chương trình cho FPGA (hình 4-1). o Nạp trực tiếp vào FPGA thông qua cổng JTAG hay cổng USB. o Nạp vào Platform Flash PROM XCF04S (4Mbit), rồi cấu hình cho FPGA ở chế độ Master Serial Mode. o Nạp vào serial Flash PROM ST Microelectronics (16 Mbit), rồi cấu hìnhc ho FPGA ở chế độ SPIMode. o Nạp vào StrataFlash parallel PROM Intel (128 Mbit), rồi cấu hình cho FPGA ở chế độ BPI Up Mode hay BPI Down Mode. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 60 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.6. Các lựa chọn cấu hình Chip FPGA Để thiết lập các chế nạp cho FPGA, ta set jumper JP 30 như bảng 3-1. Mỗi lần thay đổi chế độ cấu hình phải nhấn nút PROG (hình) để restart lại cấu hình. Hình 3.7. Cấu hình chế độ PROG Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 61 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Bảng 3-1. Cài đặt Jumper ở chế độ cấu hình FPGA 3.6.1. Nạp trực tiếp vào FPGA thông qua cổng JTAG hay cổng USB Set Jumper như bảng 4-1 trên. Mở Tool iMPACT rồi nạp bình thường như với CPLD. Nếu dùng cổng USB sẽ có cảnh báo: Chọn OK, rồi nạp bình thường (file có đuôi .bit). Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 62 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Để ý: Chương trình cấu hình cho FPGA bị mất khi cắt nguồn. 3.6.2. Nạp vào Platform Flash PROM XCF04S (4Mbit), rồi cấu hình cho FPGA ở chế độ Master Serial Mode Đây là PROM cấu hình của xilinx. PROM này sẽ giữ cấu hình của FPGA nên khi cắt nguồn , file cấu hình sẽ không bị mất. Thực hiện: - Set Jumper như bảng 4-1 trên. - Cắm cổng USB. - Cài drive nếu máy (window) yêu cầu. 3.6.2.1. Tạo file bitstream (.bit) cho FPGA Click phải vào Generator Programming File, chọn Properties (hình 3.8). Hình 3.8. Cài đặt thuộc tính cho Bitstream Generator Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 63 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Chọn Configuration Options, chọn Configuration Rate là 25 (để tốc độ nạp vào PROM là nhanh nhất 25 MHz). Cuối cùng nhấn OK để hoàn tất lựa chọn ( Hình 3.9) Hình 3.9. Set CCLK Configuration Rate under Configuration Options Click đúp vào Generate Programming File để tạo file .bit. (hình 4-12). Hình 3.10. Double-Click Generate Programming File Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 64 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam 3.6.2.2. Tạo file cấu hình cho PROM File để nạp cho FPGA là .bit, file để nạp vào Flash PROM XCF04S của là .mcs. Do đó file .mcs được được tạo ra từ file .bit đã tạo được ở bước 1. Thực hiện: Click đúp vào Generate PROM, ACE, or JTAG File để khởi động chương trình iMPACT (hình 4-13). Hình 3.11. Double-Click Generate PROM, ACE, or JTAG File Click đúp vào PROM File Formatter (hình 3.12). Hình 3.12. Double-Click PROM File Formatter Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 65 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Phần target PROM type chọn Xilinx PROM. Phần PROM File Formats chọn MCS. (chọn định dạng khác cũng được, nhưng MCS là phổ biến). Phần PROM File Name đặt tên cho file nạp vào PROM. (hình 3.13). Hình 3.13. Choose the PROM Target Type, the, Data Format, and File Location Tiếp tục click Next, chọn xcf04s. Click Add, rồi click Next và Finish để hoàn tất lựa chọn. Chương trình sẽ hỏi file .bit , chọn file .bit rồi click OK. Tiếp tục click NO rồi OK để bắt đầu format và config PROM (hình 3.14). Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 66 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.14. Format và config PROM Kết quả sẽ như hình 3.15. Giá trị % ở PROM là dung lượng file so với tổng dung lượng của PROM. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 67 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.15. PROM Formatting Completed Để tạo file thật sự cho PROM ta chọn : Operations -> Generate File (hình 3.16). Hình 3.16. Click Operations -> Generate File to Create the Formatted PROM File Đến đây đã hoàn tất việc tạo file cấu hình cho PROM (hình 4-21). Hình 3.17. PROM File Formatter Succeeded 3.6.2.3. Nạp chương trình vào PROM Ở bước 1 và 2 đã tạo ra các file cần thiết cho việc cấu hình FPGA. Bước này là nạp file cấu hình vào PROM. Trong cửa sổ iMPACT, chọn Boundary Scan (hình 3.18). Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 68 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.18. Switch to Boundary Scan Mode Gán file PROM vào XCF04S bằng cách click phải vào biểu tượng của XCF04S và chọn Assign New Configuration File, chọn file PROM được tạo ở bước trên rồi click OK (hình 3.19). Hình 3.19. Assign the PROM File to the XCF04S Platform Flash PROM Tiếp tục click phải vào biểu tượng của XCF04S và chọn Program (hình 3.20). Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 69 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.20. Program the XCF04S Platform Flash PROM Chương trình sẽ hỏi kiểu PROM mà ta cần nạp vào, lựa chọn XCF04S và click OK (hình 3.21). Hình 3.21. Select XCF04S Platform Flash PROM Trước khi nạp vào PROM ta nên thêm tùy chọn sau: Đánh chéo (check) vào các ô: Erase Before Programming, Verify, Load FPGA rồi click OK (hình 3.22). Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 70 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.22. PROM Programming Options Cuối cùng click OK để hoàn thành. Quá trình nạp vào PROM và cấu hình lại FPGA sẽ được thực hiện và chương trình sẽ cho biết quá trình nạp có thành công hay không. Nếu không chéo vào ô Load FPGA (hình 3.22) thì phải nhấn nút PROG_B (hình 3.7) để reset lại cấu hình cho FPGA. Nếu thành công led DONE (hình 3.7) sẽ sáng. 3.7. Tổng quan cấu trúc SPARTAN - 3E Các thành phần: - Input/Output Blocks (IOBs) : các khối vào ra - Configurable Logic Blocks (CLBs) : được cấu tạo từ Look-Up Tables (LUTs). - Block RAM : Hỗ trợ 16 Kb RAM trên mỗi Block RAM, số lượng các Block RAM tùy thuộc vào mỗi chip , với XC3S500E có 20 Block RAM. - Multiplier Blocks : Khối nhân 2 lối vào 18 bit. - Digital Clock Manager (DCM) Blocks : khối điều khiển xung clk. - Interconnect : Các kết nối. 3.7.1. Input/Output Blocks (IOBs) : các khối vào ra Bao gồm các khối vào ra 2 chiều I/O và các khối ngõ vào input path (không thể làm ngõ ra). Ngõ vào là một khối chức năng có tác dụng làm trì hoãn tín hiệu vào trước khi nó được đưa vào các khối bên trong. Cũng có thể thiết lập sự trì hoãn cho các ngõ I/O. Ta có thể không dùng chức năng trì hoãn này. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 71 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Sau khi cấu hình cho FPGA, các chân không sử dụng, theo mặc định được thiết lập thành ngõ vào với một điện trở nội pull-down. Cấp nguồn cho IOBs : VCCO : Cấp nguồn cho ngõ ra, tức điện thế ngõ ra sẽ bằng với VCCO. Khoảng 3.3 V VCCINT : Cấp nguồn cho các khối bên trong FPGA. Khoảng 1.2 V. VCCAUX : Nguồn hỗ trợ. Ít quan trọng. Khoảng 2.5 V. 3.7.2. Configurable Logic Blocks (CLBs) : Khối chức năng logic Khối này thực hiện các chức năng logic và lưu trữ. Mỗi CLBs có 8 bảng tìm kiếm LUTs (Look-Up Table) và 8 phần tử nhớ. LUTs là một khối có chức năng thực hiện các biểu thức logic, ngoài ra mỗi LUTs có thể cấu hình thành một RAM 16 bit hay một thanh ghi 16 bit. Phần tử nhớ là một khối mà có thể chỉ định để trở thành một Flip-Flop hay latch. XC3S500E có 1164 CLBs. Tương ứng với 9312 LUTs và 9312 Flip-Flop. Logic Cell : Mỗi một LUTs kết hợp với một phần phần tử nhớ gọi là một “Logic Cell”. XC3S500E có 10476 Logic Cell. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 72 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.23. CLB Locations 3.7.3. Block RAM : Khối nhớ Các LUTs ở phần CLBs (phần 3.7.2) có thể cấu hình như RAM, nhưng RAM này thường dùng như một bộ buffer dữ liệu, trong khi các Block RAM thường dùng cho việc chứa dữ liệu có kích thước lớn hơn. XC3S500E có chứa 20 Block RAM. Mỗi Block RAM có thể chứa 18 Kbit data (hình 3.24). Hình 3.24. Spartan 3E Family Architecture 3.7.4. Dedicated Multipliers : Bộ nhân chuyên dụng Các bộ nhân được đặt cùng với các Block RAM thành một khối. Bộ nhân hỗ trợ 2 ngõ vào 18 bit và ngõ ra 36 bit. Có thể ghép chồng (cascade) các bộ nhân để tăng số ngõ vào (hình 3.25). Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 73 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.25. Principle Ports and Functions of Dedicated Multiplier Blocks 3.7.5. Digital Clock Managers (DCMs) : Bộ quản lí xung Clock Bộ quản lí xung clock là một khối có 3 chức năng chính (hình 3.26): - Loại bỏ sự lệch xung clock (Clock-skew Elimination): Giúp tăng tốc độ chuyển mạch. - Tổng hợp tần số (Frequency Synthesis): Giúp thay đổi tần số ở ngõ ra xung clock. Qui tắc thực hiện: - Trong đó CLKOUT là Clock ra, CLKIN là Clock vào, Integer_1 là tùy chọn từ 2 – 32, Integer_2 là tùy chọn từ 1- 32. - Dịch Pha (Phase Shifting) : Giúp thay đổi pha clock. XC3S500E có: - 16 ngõ vào clock toàn cục GCLK0 – GCLK 15 đặt ở phía trên và dưới của FPGA. - 8 ngõ vào clock phía phải RHCLK0 – RHCLK7. - 8 ngõ vào clock phía trái RLCLK0 – RLCLK7. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 74 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 3.26. DCM Functional Blocks and Associated Signals 3.7.6. Interconnect : Các kết nối Cung cấp các đường (segment) kết nối, các ma trận chuyển mạch (switch matrix) để tạo thành một mạng các đường tín hiệu giúp kết nối các IOBs, CLBs, DCMs và block RAM lại với nhau (hình 3.27). Hình 3.27. Bốn kiểu kết nối (CLBs, IOBs, DCMs, and Block RAM/ Multiplier) 3.8. Sơ lược về ISE 9.2 i 3.8.1. Tạo một Project Vào Start > All Programs > Xilinx ISE 9.2i > Project Navigator để khởi động chương trình. Vào File > New Project cửa sổ hướng dẫn hiện ra : Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 75 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Project Name: Đặt tên project. Project location : Nơi chứa project. Click Next, cửa sổ mới hiện ra. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 76 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Ô Family : chọn Spartan3E . Ô Device : chọn XC3S500E. Ô Package : chọn FG320. Tiếp tục click Next , cửa mới hiện ra, chọn thanh : New Source. Cửa sổ mới hiện ra, chọn VHDL Module để viết code vhdl, nếu viết bằng verilog thì chọn : Verilog Module. Chọn tên file vhdl ở ô File name. (ở đây ta đang tạo bộ đếm nên chọn tên là counter). Tiếp tục click Next . Cửa sổ mới hiện ra , ta sẽ chọn giao diện cho vào ra cho khối counter: Cột Port Name để chọn tên cổng Cột Direction để chọn chân là lối vào, lối ra hay cả hai vào/ra Cột Bus : nếu dùng bus thì tréo vào ô này. Ở đây, bộ đếm của ta có ngõ ra là một port 4 bit nên ta chéo ô này. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 77 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Tiếp tục click Next -> Next -> Finish. Xuất hiện cửa sổ thông báo tổng quan về cái project của mình. Nên bỏ nó đi, ta sẽ ra cái này: Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 78 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Đến đây ta đã tạo ra một project có tên thavali và trong project này có chứa một file vhdl tên là counter. ( sau này chúng ta cần add thêm một số file khác nữa vào project). Công việc tiếp theo là viết code vhdl . Đoạn code cho bộ counter sẽ như sau: (coppy và bỏ vào cửa sổ soạn thảo). library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitive in this code. --library UNISIM; --use UNISIM.VComponents.all; entity counter is Port ( CLOCK : in STD_LOGIC; Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 79 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam DIRECTION : in STD_LOGIC; COUNT_OUT : out STD_LOGIC_VECTOR (3 downto 0)); end counter; architecture Behavioral of counter is signal count_int : std_logic_vector(3 downto 0) := "0000"; begin process (CLOCK) begin if CLOCK='1' and CLOCK'event then if DIRECTION='1' then count_int <= count_int + 1; else count_int <= count_int - 1; end if; end if; end process; COUNT_OUT <= count_int; end Behavioral; Ta được kết quả sau: Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 80 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Tới đây ta có thể tổng hợp (synthesis) được rồi. Tuy nhiên ta cần mô phỏng kết quả để kiểm tra hoạt động của mạch. Do đó ta cần tạo file mô phỏng (test bench wave form). Ta làm như sau: Chọn Project –> New source Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 81 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Sẽ xuất hiện lại cửa sổ sau: Chọn Test Bench WaveForm, đặt tên cho file là test (file này trong project có đuôi là .tbw). Tiếp tục click Next -> Next -> Finish. Sẽ ra cửa sổ như sau: Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 82 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Đây là cửa sổ để ta thiết lập các giá trị khởi tạo cho việc mô phỏng. Ở ô Clock Information chọn kiểu mạch mà ta muốn mô phỏng. Mạch ta tạo ra là một bộ đếm, là mạch tuần tự có một xung clock nên chọn Single Clock. Nếu là mạch tổ hợp ta chọn combinatorial. Các tham số khác cũng đã được giải thích ngay trong ảnh. Click Finish để hoàn tất lựa chọn. Ta được cửa sổ sau: Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 83 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Click vào dòng tín hiệu ngõ vào DIRECTION để có thể thay đổi dạng sóng của nó (click vào các chấm xanh da trời). Tất cả các tín hiệu ngõ vào điều có thể thay đổi theo ý, còn ngõ ra thì không ( điều hiển nhiên). Click File -> Save để lưu tùy chọn dạng sóng. Bây giờ quay lại cửa sổ sources window để tổng hợp và chạy mô phỏng. Xem kết quả mô phỏng: Trong cửa sổ Sources Window chọn : Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 84 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Behavioral Simulation Trong cửa sổ mới chọn test.tbw. Trong ô Processes click đúp vào Simulate Behavioral Model và chờ một lát. Kết quả sẽ xuất hiện của sổ thể hiện kết quả mô phỏng. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 85 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Đến đây ta đã hoàn thành việc mô phỏng, như vậy trong Project của ta lúc này có thêm một file nữa là test.tbw. Bây giờ ta sẽ thực hiện các ràng buộc (Constraints), gán chân (Assigning Pin), tổng hợp (Synthesis) và nạp vào chip FPGA . Trước hết là tạo các ràng buộc. Quay lại cửa sổ Sources Window chọn Synthesis/ Implement Design và chọn counter-behavioral. Trong cửa sổ processes click vào dấu + ở dòng User Constraints . Click đúp vào Create Timing Constraints sẽ xuất hiện thông báo yêu cầu thêm file .UCF vào project, đương nhiên ta đồng ý (chọn YES ). Cửa sổ mới xuất hiện: Phía dưới cửa sổ chọn Global, phía trên chọn CLOCK rồi click vào nút (ở dưới chữ window). Sẽ xuất hiện cửa sổ mới, chọn các giá trị như hình. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 86 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam 40 ns : chu kì clock. 50 % : cycle duty. Click OK để hoàn thành lựa chọn. Tiếp tục click vào biểu tượng để thiết lập pad to setup. Pad to setup là thời gian tối ta mà dữ liệu phải đặt vào chân ngõ vào của chip trước khi có xung clock. Tức là ta phải có dữ liệu ở chân ngõ vào một khoảng thời gian trước khi có xung clock. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 87 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Ta chọn các thông số cho pad to setup như hình liền dưới, rồi click OK. Tiếp tục click vào biểu tượng để thiết lập thông số Clock to Pad . Clock to Pad là thời gian tối thiểu để dữ liệu ở ngõ vào được đưa tới ngõ ra sau khi có cạnh (lên hay xuống) của xung clock. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 88 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Cửa sổ xuất hiện, ta chọn các thông số như hình liền dưới rồi click OK. Cuối cùng ta được kết quả như hình sau: Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 89 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Chọn File -> Save để lưu kết quả lại. Ta cũng có thể đóng luôn cửa sổ Constraints Editor lại. Như vậy ta đã tạo xong các ràng buộc (Constraints). Việc tiếp theo là gán chân (Assigning Pin). Bây giờ quay trở lại cửa sổ chương trình chính ISE. Click đúp vào Assign Package Pins cửa sổ mới hiện ra, chọn thanh Package View ở phía dưới. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 90 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Dùng chuột kéo các tín hiệu của bộ counter của cửa sổ Design Object List (ở bên trái) rồi thả vào các chân của FPGA (bên phải). Bỏ CLOCK vào chân U10. (đây là chân cấp clock cho FPGA) Bỏ DIRECTION vào chân U1. (chân input của FPGA) Bỏ COUNT_OUT(0) vào chân T12. (chân I/O của FPGA) Bỏ COUNT_OUT(1) vào chân R12. (chân I/O của FPGA) Bỏ COUNT_OUT(2) vào chân R11. (chân I/O của FPGA) Bỏ COUNT_OUT(3) vào chân R10. (chân I/O của FPGA) Kết quả ta được như sau: Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 91 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Click File -> Save -> OK để hoàn thành việc gán chân. Ta có thể đóng cửa sổ của PACE editor lại. Tới đây ta đã hoàn thành công việc gán chân. Tiếp theo là tổng hợp (synthesis). Thực ra trong quá trình mô phỏng thì quá trình tổng hợp đã xảy ra rồi. Thực ra, nếu bạn chỉ mô phỏng không thôi thì tổng hợp sẽ là công việc đầu tiên và không cần các bước ràng buộc (Constraints), gán chân (Assigning Pin) gì cả. Do đó bước này phải gọi là: Map, Place and Route mới đúng. Trở về chương trình chính ISE, ở cửa sổ processes click vào Implement Design. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 92 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Như vậy bạn đã xong công việc place and route. Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 93 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Bạn cũng có thể xem mạch được tổng hợp như thế nào bằng cách: Trong cửa sổ Processes, chọn synthesize -> View Technology Schematic (mức cổng). hay: synthesize -> View RTL Schematic (mức thanh ghi). Bước cuối cùng là nạp chương trình cho FPGA. Chương 4: Thiết kế mạch và nạp Kit 94 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam CHƯƠNG 4 THIẾT KẾ MẠCH VÀ NẠP KIT 4.1. Ý tưởng thiết kế mạch Hiện nay, chuyển mạch không gian đang được sử dụng phổ biến trong các loại tổng đài điện tử số hiện đại. Trong khuôn khổ một đồ án tốt nghiệp, chúng em chỉ đưa ra mô hình chuyển mạch không gian đơn giản dùng ma trận chuyển mạch. Hình 4.1. Ma trận chuyển mạch không gian Chuyển mạch ma trận gồm m × n điểm thông đóng/ mở được điều khiển bởi bộ nhớ CM. Mỗi địa chỉ nhị phân đánh dấu một điểm thông thích hợp để thiết lập nối kết giữa ngõ ra và ngõ vào trên bus. Kích thước mỗi từ của CM phải đáp ứng được yêu cầu cất giữ địa chỉ nhị phân cho 1 trong n điểm thông và có thể thêm 1 địa chỉ để thể hiện rằng mọi điểm thông trong cột là mở. Như vậy gồm n +1 địa chỉ. Vậy, mỗi từ CM gồm log2(n +1) bits. Mỗi bộ nhớ CM phải lưu được toàn bộ địa chỉ điểm thông trong 1 khung và để CM làm việc một cách đồng bộ với ma trận chuyển mạch nên các ô nhớ của CM sẽ tương ứng với thứ tự các khe thời gian vào, cho nên , nó phải có ít nhất R ô nhớ ( R là số khe thời gian trong một khung). Như vậy, địa chỉ của điểm thông sẽ được nối trong khe thời gian TS1 sẽ được lưu trữ trong ô nhớ đầu tiên trong CM. 4.2. Thiết kế mạch Từ nguyên lý trên, ta có thể thiết kế một ma trận chuyển mạch đơn giản ban đầu bao gồm 4 ngõ vào và 4 ngõ ra. Chương 4: Thiết kế mạch và nạp Kit 95 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Ở mô hình trên, ta chỉ xét tới chuyển mạch không gian mà không để ý tới thời gian của chuyển mạch. Nguyên lý như sau: Giả sử ma trận chuyển mạch 4 × 4 gồm 4 đầu vào là A, B, C, D và 4 đầu ra la X, Y, Z, T. (hình 4.2) Hình 4.2. Chuyển mạch không gian 4*4 Khi nút mạch A-X hoạt động, ngõ ra X sẽ được nối với ngõ vào A, và khi đó các nút A-Y, A-Z, A-T, B-X, C-X, D-X sẽ bị cấm (hình 4.3). Hình 4.2. Ngõ vào A-X thông thoại Lúc này, giả sử ta cho thêm ngõ vào B-Z, khi đó thêm các ngõ B-Y,B-T, C-Z và D-Z sẽ bị cấm (hình 4.3) X X X X X X Chương 4: Thiết kế mạch và nạp Kit 96 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 4.3. Ngõ vào A-X, B-Z tích cực Ta thấy, lúc này chỉ còn các nút mạch C-Y, C-T, D-Y, D-T là có thể được nối, giả sử ta chọn C-Y thì C-T và D-Y sẽ bị cấm, và chỉ còn một nút cuối cùng (D-T). Như vậy tại một thời điểm, ma trận chuyển mạch 4*4 sẽ đáp ứng được tối đa 4 cuộc gọi (như hình 4.4). Hình 4.4. Ma trận chuyển mạch 4 ngõ tích cực 4.3. Cấu trúc mạch và code chương trình 4.3.1. Cấu trúc mạch Ma trận chuyển mạch 4*4 gồm 16 cổng AND 9 ngõ vào và 2 ngõ ra được kết nối như hình 4.5 X X X X X X X X X X X X Chương 4: Thiết kế mạch và nạp Kit 97 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam U1 AND10 1 2 3 4 5 6 7 8 9 10 11 row4 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 row1 D Y U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 C O L 2 U5 OR4 1 2 3 4 5 U2 OR4 1 2 3 4 5 C O L 4 B U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 Z U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U3 OR4 1 2 3 4 5 A row2 row3 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 C X T U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 U1 AND10 1 2 3 4 5 6 7 8 9 10 11 C O L 3 U4 OR4 1 2 3 4 5 C O L 1 Hình 4.5. Mô hình ma trận chuyển mạch 4*4 Cấu tạo của mỗi cổng AND :  Một ngõ ra bình thường và một ngõ ra đảo. Cổng AND nằm ở cột nào thì ngõ ra được nối tương ứng với cột đó.  9 ngõ vào bao gồm: - Ngõ thứ nhất được nối với ngõ vào tín hiệu, cổng AND nằm ở hàng nào thì ngõ vào được nối tương ứng với hàng đó. - Hai ngõ tiếp theo nối vào chân điều khiển hàng, cột theo quy luật nằm ở hàng nào, cột nào thì nối vào hàng, cột tương ứng. - Sáu ngõ còn lại gồm 3 ngõ được nối với ngõ ra đảo của các cổng AND nằm cùng hàng với nó và 3 ngõ ra đảo của các cổng AND nằm cùng cột với nó nhằm mục đích disable các cổng AND tại hàng và cột đang có kênh thoại. Chương 4: Thiết kế mạch và nạp Kit 98 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Ví dụ: Giả sử các cổng AND được đánh số thứ tự như sau: Khi A-X thông thoại qua cổng AND (1) thì các cổng AND (2), (3), (4), (5), (9), (13) có một chân nối với ngõ ra đảo của cổng AND(1) nên bị disable. 4.3.2. Code chương trình  Cổng AND9: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity CONGAND9 is PORt ( E : in STD_LOGIC_VECTOR (7 downto 0); I : in STD_LOGIC; Z : out STD_LOGIC; ZBU : out STD_LOGIC); end CONGAND9; architecture Behavioral of CONGAND9 is begin Z <= I AND E(7) AND E(6) AND E(5) AND E(4) AND E(3) AND E(2) AND E(1) AND E(0); ZBU <= NOT(I AND E(7) AND E(6) AND E(5) AND E(4) AND E(3) AND E(2) AND E(1) AND E(0)); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Chương 4: Thiết kế mạch và nạp Kit 99 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam end Behavioral;  Tổng đài 4*4: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity td44nhieukenh is Port ( A : in STD_LOGIC; B : in STD_LOGIC; C : in STD_LOGIC; D : in STD_LOGIC; X : out STD_LOGIC; Y : out STD_LOGIC; Z : out STD_LOGIC; T : out STD_LOGIC; ROW : in STD_LOGIC_VECTOR (4 downto 1); COL : in STD_LOGIC_VECTOR (4 downto 1)); end td44nhieukenh; --;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; architecture Behavioral of td44nhieukenh is COMPONENT CONGAND9 is PORt ( E : in STD_LOGIC_VECTOR (7 downto 0); I : in STD_LOGIC; Z : out STD_LOGIC; ZBU : out STD_LOGIC); END COMPONENT; COMPONENT CONG_OR_4 IS -- Port ( A : in STD_LOGIC; B : in STD_LOGIC; C : in STD_LOGIC; D : in STD_LOGIC; Z : OUT STD_LOGIC); END COMPONENT; Chương 4: Thiết kế mạch và nạp Kit 100 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam SIGNAL OUT_AND :STD_LOGIC_VECTOR (16 downto 1); SIGNAL OUT_AND_BU :STD_LOGIC_VECTOR (16 downto 1); Begin U0 : CONGAND9 PORT MAP (I => A, E(7) => OUT_AND_BU(2), E(6) => OUT_AND_BU(3),E(5) => OUT_AND_BU(4),E(4) => OUT_AND_BU(5), E(3) => OUT_AND_BU(9),E(2) => OUT_AND_BU(13),E(1) => ROW(1), E(0) => COL(1), Z =>OUT_AND(1) , ZBU => OUT_AND_BU(1)); U1 : CONGAND9 PORT MAP (I => A, E(7) => OUT_AND_BU(1), E(6) => OUT_AND_BU(3),E(5) => OUT_AND_BU(4),E(4) => OUT_AND_BU(6), E(3) => OUT_AND_BU(10),E(2) => OUT_AND_BU(14),E(1) => ROW(1), E(0) => COL(2), Z =>OUT_AND(2) , ZBU => OUT_AND_BU(2)); U2 : CONGAND9 PORT MAP (I => A, E(7) => OUT_AND_BU(1), E(6) => OUT_AND_BU(2),E(5) => OUT_AND_BU(4),E(4) => OUT_AND_BU(7), E(3) => OUT_AND_BU(11),E(2) => OUT_AND_BU(15),E(1) => ROW(1), E(0) => COL(3), Z =>OUT_AND(3) , ZBU => OUT_AND_BU(3)); U3 : CONGAND9 PORT MAP (I => A, E(7) => OUT_AND_BU(1), E(6) => OUT_AND_BU(2),E(5) => OUT_AND_BU(3),E(4) => OUT_AND_BU(8), E(3) => OUT_AND_BU(12),E(2) => OUT_AND_BU(16),E(1) => ROW(1), E(0) => COL(4), Z =>OUT_AND(4) , ZBU => OUT_AND_BU(4)); --=================== U4 : CONGAND9 PORT MAP (I => B, E(7) => OUT_AND_BU(6), E(6) => OUT_AND_BU(7),E(5) => OUT_AND_BU(8),E(4) => OUT_AND_BU(1), E(3) => OUT_AND_BU(9),E(2) => OUT_AND_BU(13),E(1) => ROW(2), E(0) => COL(1), Z =>OUT_AND(5) , ZBU => OUT_AND_BU(5)); U5 : CONGAND9 PORT MAP (I => B, E(7) => OUT_AND_BU(5), E(6) => OUT_AND_BU(7),E(5) => OUT_AND_BU(8),E(4) => OUT_AND_BU(2), E(3) => OUT_AND_BU(10),E(2) => OUT_AND_BU(14),E(1) => ROW(2), E(0) => COL(2), Z =>OUT_AND(6) , ZBU => OUT_AND_BU(6)); U6 : CONGAND9 PORT MAP (I => B, E(7) => OUT_AND_BU(5), E(6) => OUT_AND_BU(6),E(5) => OUT_AND_BU(8),E(4) => OUT_AND_BU(3), E(3) => OUT_AND_BU(11),E(2) => OUT_AND_BU(15),E(1) => ROW(2), E(0) => COL(3), Z =>OUT_AND(7) , ZBU => OUT_AND_BU(7)); Chương 4: Thiết kế mạch và nạp Kit 101 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam U7 : CONGAND9 PORT MAP (I => B, E(7) => OUT_AND_BU(5), E(6) => OUT_AND_BU(6),E(5) => OUT_AND_BU(7),E(4) => OUT_AND_BU(4), E(3) => OUT_AND_BU(12),E(2) => OUT_AND_BU(16),E(1) => ROW(2), E(0) => COL(4), Z =>OUT_AND(8) , ZBU => OUT_AND_BU(8)); --==================== U8 : CONGAND9 PORT MAP (I => C, E(7) => OUT_AND_BU(10), E(6) => OUT_AND_BU(11),E(5) => OUT_AND_BU(12),E(4) => OUT_AND_BU(1), E(3) => OUT_AND_BU(5),E(2) => OUT_AND_BU(13),E(1) => ROW(3), E(0) => COL(1), Z =>OUT_AND(9) , ZBU => OUT_AND_BU(9)); U9 : CONGAND9 PORT MAP (I => C, E(7) => OUT_AND_BU(9), E(6) => OUT_AND_BU(11),E(5) => OUT_AND_BU(12),E(4) => OUT_AND_BU(2) ,E(3) => OUT_AND_BU(6),E(2) => OUT_AND_BU(14),E(1) => ROW(3), E(0) => COL(2), Z =>OUT_AND(10) , ZBU => OUT_AND_BU(10)); U10 : CONGAND9 PORT MAP (I => C, E(7) => OUT_AND_BU(9), E(6) => OUT_AND_BU(10),E(5) => OUT_AND_BU(12),E(4) => OUT_AND_BU(3), E(3) => OUT_AND_BU(7),E(2) => OUT_AND_BU(15),E(1) => ROW(3), E(0) => COL(3), Z =>OUT_AND(11) , ZBU => OUT_AND_BU(11)); U11 : CONGAND9 PORT MAP (I => C, E(7) => OUT_AND_BU(9), E(6) => OUT_AND_BU(10),E(5) => OUT_AND_BU(11),E(4) => OUT_AND_BU(4), E(3) => OUT_AND_BU(8),E(2) => OUT_AND_BU(16),E(1) => ROW(3), E(0) => COL(4), Z =>OUT_AND(12) , ZBU => OUT_AND_BU(12)); --=============================== U12 : CONGAND9 PORT MAP (I => D, E(7) => OUT_AND_BU(14), E(6) => OUT_AND_BU(15),E(5) => OUT_AND_BU(16),E(4) => OUT_AND_BU(1), E(3) => OUT_AND_BU(5),E(2) => OUT_AND_BU(9),E(1) => ROW(4), E(0) => COL(1), Z =>OUT_AND(13) , ZBU => OUT_AND_BU(13)); U13 : CONGAND9 PORT MAP (I => D, E(7) => OUT_AND_BU(13), E(6) => OUT_AND_BU(15),E(5) => OUT_AND_BU(16),E(4) => OUT_AND_BU(2), E(3) => OUT_AND_BU(6),E(2) => OUT_AND_BU(10),E(1) => ROW(4), E(0) => COL(2), Z =>OUT_AND(14) , ZBU => OUT_AND_BU(14)); U14 : CONGAND9 PORT MAP (I => D, E(7) => OUT_AND_BU(13), Chương 4: Thiết kế mạch và nạp Kit 102 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam E(6) => OUT_AND_BU(14),E(5) => OUT_AND_BU(16),E(4) => OUT_AND_BU(3), E(3) => OUT_AND_BU(7),E(2) => OUT_AND_BU(11),E(1) => ROW(4), E(0) => COL(3), Z =>OUT_AND(15) , ZBU => OUT_AND_BU(15)); U15 : CONGAND9 PORT MAP (I => D, E(7) => OUT_AND_BU(13), E(6) => OUT_AND_BU(14),E(5) => OUT_AND_BU(15),E(4) => OUT_AND_BU(4), E(3) => OUT_AND_BU(8),E(2) => OUT_AND_BU(12),E(1) => ROW(4), E(0) => COL(4), Z =>OUT_AND(16) , ZBU => OUT_AND_BU(16)); --================================== U16 : CONG_OR_4 PORT MAP (A => OUT_AND(1), B => OUT_AND(5), C => OUT_AND(9), D => OUT_AND(13), Z => X); U17 : CONG_OR_4 PORT MAP (A => OUT_AND(2), B => OUT_AND(6), C => OUT_AND(10), D => OUT_AND(14), Z => Y); U18 : CONG_OR_4 PORT MAP (A => OUT_AND(3), B => OUT_AND(7), C => OUT_AND(11), D => OUT_AND(15), Z => Z); U19 : CONG_OR_4 PORT MAP (A => OUT_AND(4), B => OUT_AND(8), C => OUT_AND(12), D => OUT_AND(16), Z => T); end Behavioral; 4.3.3. Kết quả mô phỏng bằng Test Bench Ta có thể mô phỏng chương trình bằng công cụ Test Bench. Sau khi mô phỏng ta được dạng sóng như hình sau: Chương 4: Thiết kế mạch và nạp Kit 103 GVHD: ThS. Trần Hoàng Quân SVTH: Nguyễn Đình Thi, Nguyễn Vương Nam Hình 4.6. Mô phỏng chuyển mạch 4*4 Từ mô hình ma trận chuyển mạch 4*4 như trên, ta có thể mở rộng thành ma trận 8*8. Mô hình kết nối bao gồm 64 cổng AND được nối với nhau. Mỗi cổng AND bao gồm 17 ngõ vào và 2 ngõ ra, sơ đồ kết nối và nguyên lý hoạt động tương tự như chuyển mạch 4*4 đã trình bày ở trên. Sau khi mô phỏng bằng Test Bench, ta được dạng sóng ra của tổng đài 8*8 như sau: Hình 4.7. Mô phỏng tổng đài 8*8 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI Nghiên cứu kỹ thuật chuyển mạch tổng đài là một quá trình lâu dài. Với sự ra đời và đổi mới của nhiều hệ thống tổng đài điện tử hiện nay đáp ứng tính di động trong mạng không dây, nhưng cũng làm tăng thêm nhiều khó khăn trong việc quản lý và điều hành, thiết kế một hệ thống mạng đáp ứng nhu cầu người sử dụng càng tăng. Bên cạnh đó cũng có nhiều vấn đề mới nảy sinh, vì vậy việc nghiên cứu và xây dựng một hệ thống mới luôn là vấn đề hàng đầu. Trong giới hạn là một đồ án tốt nghiệp của mình chúng em chỉ ứng dụng những gì đã có trước để xây dựng một mô hình tổng đài đơn giản. Với mục tiêu chính là tìm hiểu ngôn ngữ lập trình mới hiện nay là VHDL, sử dụng công cụ ISE để tạo mã VHDL, bước đầu tìm hiểu làm quen với KIT Spartan 3E, sử dụng KIT để kiểm tra và mô phỏng mạch. Với vốn kiến thức còn hạn chế, chúng em xin dừng lại ở những chuyển mạch đơn giản. Hướng phát triển cho đề tài sẽ bao gồm chuyển mạch không gian kết hợp với thời gian, các mô hình chuyển mạch phức tạp hơn (về kích thước và chức năng) và kiểm chứng bằng nhiều cách sử dụng kit FPGA. TÀI LIỆU THAM KHẢO Tiếng Việt: 1. Cơ sở Kỹ thuật chuyển mạch & Tổng đài – 2 tập – Nguyễn Hồng Sơn - NXB Giáo dục 2001. 2. Giáo trình Kỹ thuật Chuyển mạch – TS.Hoàng Minh, ThS.Hoàng Trọng Minh – Học Viện Bưu Chính Viễn Thông HN – 2008. 3. Giáo trình cơ sở lý thuyết tổng đài (dùng cho các trường công nhân bưu điện – hệ 18 tháng), Tổng Công ty Bưu chính Viễn thông Việt Nam, NXB Bưu điện. 4. Hệ thống viễn thông 2 – Lê Tiến Thường – NXB ĐHQG TPHCM 2005. 5. Hệ thống viễn thông, Vũ Đình Thành, NXB Đại học Quốc gia TP HCM 2003. 6. Kỹ thuật chuyển mạch – Mai Văn Quý, Nguyễn Hữu Kiên, Nguyễn Văn Giáo – Học Viện Kỹ Thuật Quân Sự HN – 2003. 7. Sổ tay lập trình VHDL. Nguồn Internet, biên tập bởi lythanhthuan. 8. Tổng Quan Viễn Thông – ThS. Nguyễn Văn Đát, ThS. Nguyễn Thị Thu Hằng, KS. Lê Sỹ Đạt, KS. Lê Hải Châu – 2007. 9. Switching Engineering – Nguyễn Việt Duy – 2004. Tiếng Anh: 1. VHDL Programming by Example 4th - Tác giả Douglas L. Perry. - Nhà xuất bản McGraw.Hill.

Các file đính kèm theo tài liệu này:

  • pdfSử dụng ngôn ngữ VHDL xây dựng chuyển mạch không gian đơn giản.pdf