phuongii_le
New Member
Đề 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 cách đ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
http://s1.luanvan.co/qYjQuXJz1boKCeiU9qAb3in9SJBEGxos/swf/2013/06/23/de_tai_su_dung_ngon_ngu_vhdl_xay_dung_chuyen_mach.CZTYYBD9RT.swf luanvanco /luan-van/de-tai-ung-dung-tren-liketly-31470/
Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí
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, hay 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 để thay mặt 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 hay bằng
VARIABLE. SIGNAL có thể được khai báo trong PACKAGE, ENTITY hay
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 hay 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
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, hay 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” hay
tương tự.
2.6.8. Sử dụng mã tuần tự để thiết kế c
Download miễn phí Đề 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 cách đ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
http://s1.luanvan.co/qYjQuXJz1boKCeiU9qAb3in9SJBEGxos/swf/2013/06/23/de_tai_su_dung_ngon_ngu_vhdl_xay_dung_chuyen_mach.CZTYYBD9RT.swf luanvanco /luan-van/de-tai-ung-dung-tren-liketly-31470/
Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí
Tóm tắt nội dung tài liệu:
động chỉ xảy ra khi có sự đồng bộ của xung đồng hồ.). Một cách khác chúngta 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, hay 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 để thay mặt 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 hay bằng
VARIABLE. SIGNAL có thể được khai báo trong PACKAGE, ENTITY hay
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 hay 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
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, hay 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” hay
tương tự.
2.6.8. Sử dụng mã tuần tự để thiết kế c
Tags: phân tích mạch dùng vhdl