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
118 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3171 | Lượt tải: 1
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:
- Sử dụng ngôn ngữ VHDL xây dựng chuyển mạch không gian đơn giản.pdf