Goodwyn

New Member

Download miễn phí Đề tài Thiết kế mạch bằng vhdl


Chương 1: Giới thiệu

1.1. Giới thiệu về VHDL

VHDL là ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ rất
cao, là một loại ngôn ngữ mô tả phần cứng được phát triển dùng cho trương
trình VHSIC( Very High Speed Itergrated Circuit) của bộ quốc phòng Mỹ.
Mục tiêu của việc phát triển VHDL là có được một ngôn ngữ mô phỏng phần
cứng tiêu chuẩn và thống nhất cho phép thử nghiệm các hệ thống số nhanh hơn
cũng như cho phép dễ dàng đưa các hệ thống đó vào ứng dụng trong thực tế.
Ngôn ngữ VHDL được ba công ty Intermetics, IBM và Texas Instruments bắt
đầu nghiên cứu phát triển vào tháng 7 năm 1983. Phiên bản đầu tiên được công
bố vào tháng 8-1985. Sau đó VHDL được đề xuất để tổ chức IEEE xem xét
thành một tiêu chuẩn chung. Năm 1987 đã đưa ra tiêu chuẩn về VHDL( tiêu
chuẩn IEEE-1076-1987).
VHDL được phát triển để giải quyết các khó khăn trong việc phát triển,
thay đổi và lập tài liệu cho các hệ thống số. VHDL là một ngôn ngữ độc lập
không gắn với bất kỳ một phương pháp thiết kế, một bộ mô tả hay công nghệ
phần cứng nào. Người thiết kế có thể tự do lựa chọn công nghệ, phương pháp
thiết kế trong khi chỉ sử dụng một ngôn ngữ duy nhất. Và khi đem so sánh với
các ngôn ngữ mô phỏng phần cứng khác ta thấy VHDL có một số ưu điểm hơn
hẳn là:

- Thứ nhất là tính công cộng:

VHDL được phát triển dưới sự bảo trợ của chính phủ Mỹ và hiện nay là
một tiêu chuẩn của IEEE. VHDL được sự hỗ trợ của nhiều nhà sản xuất thiết bị
cũng như nhiều nhà cung cấp công cụ thiết kế mô phỏng hệ thống.

- Thứ hai là khả năng được hỗ trợ bởi nhiều công nghệ và nhiều phương
pháp thiết kế:

VHDL cho phép thiết kế bằng nhiều phương pháp ví dụ phương pháp
thiết kế từ trên xuống, hay từ dưới lên dựa vào các thư viện sẵn có. VHDL
cũng hỗ trợ cho nhiều loại công cụ xây dựng mạch như sử dụng công nghệ
đồng bộ hay không đồng bộ, sử dụng ma trận lập trình được hay sử dụng mảng
ngẫu nhiên.

- Thứ ba là tính độc lập với công nghệ:

VHDL hoàn toàn độc lập với công nghệ chế tạo phần cứng. Một mô tả
hệ thống dùng VHDL thiết kế ở mức cổng có thể được chuyển thành các bản
tổng hợp mạch khác nhau tuỳ từng trường hợp công nghệ chế tạo phần cứng mới ra đời nó
có thể được áp dụng ngay cho các hệ thống đã thiết kế.

- Thứ tư là khả năng mô tả mở rộng:

VHDL cho phép mô tả hoạt động của phần cứng từ mức hệ thống số cho
đến mức cổng. VHDL có khả năng mô tả hoạt động của hệ thống trên nhiều
mức nhưng chỉ sử dụng một cú pháp chặt chẽ thống nhất cho mọi mức. Như thế
ta có thể mô phỏng một bản thiết kế bao gồm cả các hệ con được mô tả chi tiết.

- Thứ năm là khả năng trao đổi kết quả:

Vì VHDL là một tiêu chuẩn được chấp nhận, nên một mô hình VHDL
có thể chạy trên mọi bộ mô tả đáp ứng được tiêu chuẩn VHDL. Các kết quả mô
tả hệ thống có thể được trao đổi giữa các nhà thiết kế sử dụng công cụ thiết kế
khác nhau nhưng cùng tuân theo tiêu chuẩn VHDL. Cũng như một nhóm thiết
kế có thể trao đổi mô tả mức cao của các hệ thống con trong một hệ thống lớn
(trong đó các hệ con đó được thiết kế độc lập).

- Thứ sáu là khả năng hỗ trợ thiết kế mức lớn và khả năng sử dụng lại các
thiết kế:

VHDL được phát triển như một ngôn ngữ lập trình bậc cao, vì vậy nó có
thể được sử dụng để thiết kế một hệ thống lớn với sự tham gia của một nhóm
nhiều người. Bên trong ngôn ngữ VHDL có nhiều chức năng hỗ trợ việc quản
lý, thử nghiệm và chia sẻ thiết kế. Và nó cũng cho phép dùng lại các phần đã có
sẵn.


Mục lục
Trang
Mục lục . - 1 -
Danh mục hình: . - 3 -
Danh mục bảng: - 5 -
Chương 1: Giới thiệu - 6 -
1.1. Giới thiệu về VHDL - 6 -
1.2. Giới thiệu công nghệ (và ứng dụng) thiết kế mạch bằng VHDL. . - 7 -
1.2.1 Ứng dụng của công nghệ thiết kế mạch bằng VHDL . - 7 -
1.2.2 Quy trinh thiết kế mạch bằng VHDL. . - 7 -
1.2.3. Công cụ EDA. . - 8 -
1.2.4. Chuyển mã VHDL vào mạch . - 9 -
Chương 2. Cấu trúc mã - 12 -
2.1. Các đơn vị VHDL cơ bản. - 12 -
2.2. Khai báo Library. . - 12 -
2.3. Entity ( thực thể). - 14 -
2.4. ARCHITECTURE ( cấu trúc). - 14 -
2.5. Các ví dụ mở đầu. . - 17 -
Chương 3: Kiểu dữ liệu - 20 -
3.1. Các kiểu dữ liệu tiền định nghĩa. . - 20 -
3.2. Các kiểu dữ liệu người dùng định nghĩa. - 23 -
3.3. Các kiểu con (Subtypes). - 23 -
3.4. Mảng (Arrays). - 24 -
3.5. Mảng cổng ( Port Array). . - 27 -
3.6. Kiểu bản ghi (Records). - 28 -
3.7. Kiểu dữ liệu có dấu và không dấu ( Signed and Unsigned). . - 28 -
3.8. Chuyển đổi dữ liệu. . - 29 -
3.9. Tóm tắt. . - 31 -
3.10. Các ví dụ. - 31 -
Chương 4: Toán tử và thuộc tính. . - 36 -
4.1. Toán tử. - 36 -
4.1.1 Toán tử gán. - 36 -
4.1.2 Toán tử Logic. . - 36 -
4.1.3 Toán tử toán học. - 36 -
4.1.4 Toán tử so sánh. - 37 -
4.1.5 Toán tử dịch. . - 37 -
4.2. Thuộc tính. . - 37 -
4.1.1. Thuộc tính dữ liệu. - 37 -
4.1.2. Thuộc tính tín hiệu. . - 38 -
4.3. Thuộc tính được định nghĩa bởi người dùng. . - 38 -
4.4. Chồng toán tử. . - 38 -
4.5. GENERIC. . - 39 -
4.6. Ví dụ. . - 39 -
Chương 5: Mã song song - 44 -
5.1. Song song và tuần tự. - 44 -
5.1.1. Mạch tổ hợp và mạch dãy. - 44 -
5.1.2. Mã song song và mã tuần tự. - 44 -
5.2. Sử dụng các toán tử. . - 45 -
5.3. Mệnh đề WHEN. . - 46 -
5.4. GENERATE. . - 52 -
5.5. BLOCK. . - 53 -
5.5.1. Simple BLOCK - 53 -
5.5.2. Guarded BLOCK - 54 -
Chương 6: Mã tuần tự - 56 -
6.1. PROCESS - 56 -
6.2. Signals và Variables. . - 57 -
6.3. IF. - 57 -
6.4. WAIT - 59 -
6.5. CASE. . - 62 -
6.6. LOOP. - 66 -
6.7. Bad Clocking. - 71 -
6.8. Sử dụng mã tuần tự để thiết kế các mạch tổ hợp. - 73 -
Chương 7: Signal và Variable - 76 -
7.1. CONSTANT. . - 76 -
7.2. SIGNAL. - 76 -
7.3. VARIABLE . - 78 -
7.4. Số thanh ghi. - 84 -
Chương 8: Máy trạng thái - 93 -
8.1. Giới thiệu. - 93 -
8.2. Thiết kế theo kiểu 1 (thiết kế theo mô hình may moore). - 94 -
8.3. Thiết kế kiểu 2. - 100 -
8.4. Kiểu mã hoá: từ nhị phân sang Onehot. . - 110 -
Chương 9: Thiết kế thêm các mạch . - 112 -
9.1. Barrel Shifte r. - 112 -
9.2. Bộ so sánh không dấu và có dấu. . - 114 -
9.3. Bộ cộng Carry Ripple và bộ cộng Carry Look Ahead. . - 116 -
9.4. Bộ chia dấu chấm tĩnh. . - 120 -
9.5. Bộ điều khiển máy bán hàng. . - 123 -
9.6. Bộ nhận dữ liệu nối tiếp - 126 -
9.7. Bộ chuyển song song thành nối tiếp. . - 128 -
9.8. Trò chơi trên led 7 thanh. . - 129 -
9.9. Bộ phát tín hiệu. - 132 -
9.10. Thiết kế bộ nhớ. . - 134 -
Tài liệu tham khảo: . - 140 -
Phân công công việc: . - 140 -


Để 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:

teA =>
x <= a;
IF (d='1') THEN nx_state <= stateB;
ELSE nx_state <= stateA;
END IF;
WHEN stateB =>
x <= b;
IF (d='1') THEN nx_state <= stateA;
ELSE nx_state <= stateB;
END IF;
END CASE;
END PROCESS;
END state_machine;
----------------------------------------------
Kết quả mô phỏng:
Hình 8.5. Kết quả mô phỏng cho ví dụ 8.2
8.3. Thiết kế kiểu 2.
Như chúng ta thấy trong kiểu thiết kế 1 thì chỉ có trạng thái hiện tại
được lưu trữ. Tất cả các mạch như vậy sẽ được tóm tắt như trong hình 8.6.1.
Trong trường hợp này nếu mạch là máy Mealy (đầu ra của nó phụ thuộc vào
§Ò Tµi 4: ThiÕt kÕ vi m¹ch b»ng VHDL Nhãm 4
- 101 -
đầu vào hiện tại), đầu ra có thể thay đổi khi đầu vào thay đổi (đầu ra không
đồng bộ).
Trong nhiều ứng dụng, tín hiệu được yêu cầu là đồng bộ, thì đầu ra sẽ
chỉ cập nhật khi thay đổi sườn clock. Để tạo ra máy đồng bộ Mealy, đầu ra phải
được lưu trữ tốt, như trong hình 8.6.2
Hình 8.6.1 Sơ đồ mạch kiểu 1 Hình 8.6.2. Sơ đồ mạch kiểu 2
Cấu trúc như trong hình 8.6.2 sẽ là đối tượng của thiết kế kiểu 2.
Để thực hiện cấu trúc mới này, chúng ta cần có vài sự thay đổi so với
thiết kế kiểu 1. Ví dụ, chúng ta có thể sử dụng một tín hiệu thêm (như tín hiệu
trung gian) để tính toán giá trị đầu ra (đoạn trên), nhưng chỉ chuyển các giá trị
của nó thành tín hiệu đầu ra khi sự kiện clock thay đổi (phần mạch dãy). Sự
thay đổi này chúng ta sẽ thấy trong khuôn mẫu chỉ ra dưới đây:
Khuôn mẫu máy trạng thái của thiết kế 2
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-------------------------------------------------------
ENTITY IS
PORT (input: IN ;
reset, clock: IN STD_LOGIC;
output: OUT );
END ;
-------------------------------------------------------
ARCHITECTURE OF IS
TYPE states IS (state0, state1, state2, state3, ...);
SIGNAL pr_state, nx_state: states;
SIGNAL temp: ;
BEGIN
---------- Phan mach day: --------------------------
PROCESS (reset, clock)
BEGIN
IF (reset='1') THEN
pr_state <= state0;
ELSIF (clock'EVENT AND clock='1') THEN
output <= temp;
pr_state <= nx_state;
END IF;
END PROCESS;
§Ò Tµi 4: ThiÕt kÕ vi m¹ch b»ng VHDL Nhãm 4
- 102 -
So sánh khuôn mẫu của thiết kế kiểu 2 với thiết kế kiểu 1, chúng ta thấy
chỉ có một sự khác nhau duy nhất, đó là xuất hiện tín hiệu trung gian temp. Tín
hiệu này sẽ có tác dụng lưu trữ đầu ra của máy. Chỉ cho các giá trị chuyển
thành đầu ra khi khi có sự thay đổi sự kiện clock.
Ví dụ 8.3:
Chúng ta sẽ nhìn lại thiết kế của ví dụ 8.2. Tuy nhiên ở đây chúng ta
muốn đầu ra là đồng bộ (chỉ thay đổi khi có sự kiện thay đổi clock). Vì vậy
trong ví dụ này chúng ta sẽ thiết kế theo kiểu 2.
----------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
----------------------------------------------
ENTITY VD_FSM2 IS
PORT ( a, b, d, clk, rst: IN BIT;
x: OUT BIT);
END VD_FSM2;
----------------------------------------------
ARCHITECTURE VD_FSM2 OF VD_FSM2 IS
TYPE state IS (stateA, stateB);
SIGNAL pr_state, nx_state: state;
SIGNAL temp: BIT;
BEGIN
----- Phan mach day: ----------------------
PROCESS (rst, clk)
---------- Phan mach to hop: --------------------------
PROCESS (pr_state)
BEGIN
CASE pr_state IS
WHEN state0 =>
temp ;
IF (condition) THEN nx_state <= state1;
...
END IF;
WHEN state1 =>
temp ;
IF (condition) THEN nx_state <= state2;
...
END IF;
WHEN state2 =>
temp ;
IF (condition) THEN nx_state <= state3;
...
END IF;
...
END CASE;
END PROCESS;
END ;
§Ò Tµi 4: ThiÕt kÕ vi m¹ch b»ng VHDL Nhãm 4
- 103 -
BEGIN
IF (rst='1') THEN
pr_state <= stateA;
ELSIF (clk'EVENT AND clk='1') THEN
x <= temp;
pr_state <= nx_state;
END IF;
END PROCESS;
---------- Phan mach to hop: -----------------
PROCESS (a, b, d, pr_state)
BEGIN
CASE pr_state IS
WHEN stateA =>
temp <= a;
IF (d='1') THEN nx_state <= stateB;
ELSE nx_state <= stateA;
END IF;
WHEN stateB =>
temp <= b;
IF (d='1') THEN nx_state <= stateA;
ELSE nx_state <= stateB;
END IF;
END CASE;
END PROCESS;
END VD_FSM2;
----------------------------------------------
Ở đây chúng ta thấy có 2 flip – flop được sử dụng, một cái để mã hoá trạng thái
của máy, một cái để lưu trữ đầu ra.
Bộ mô phỏng kết quả được chỉ ra trong hình dưới đây:
Hình 8.7.Kết quả mô phỏng cho ví dụ 8.3
Ví dụ 8.4. Bộ phát hiện chuỗi
Chúng ta muốn thiết kế một mạch mà đầu vào là luồng bit nối tiếp và
đầu ra là 1 khi đầu có xuât hiện chuỗi “111”, là 0 trong các trường hợp còn lại
Đồ hình trạng thái của máy được chỉ ra trong hình 8. Ở đây chúng ta có
4 trạng thái và chúng ta quy ước là trạng thái zero, one, tow, three.
+ Trang thái 0 là trạng thái chờ 1 đầu tiên.
+ Trang thai 1 là trang thái đã có 1 và chờ 1 thứ 2
§Ò Tµi 4: ThiÕt kÕ vi m¹ch b»ng VHDL Nhãm 4
- 104 -
+ Trạng thái 2 là trạng thái đã có 11 và đang chờ 1 thứ 3.
+ Trạng thái 3 là trạng thái thu đựơc xâu 111.
Hình 8.8. Sơ đồ trạng thái của bộ phát hiện chuỗi
Mã của máy được thiết kế như sau:
----------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
----------------------------------------------
ENTITY Bo_doan_xau IS
PORT ( d, clk, rst: IN BIT;
q: OUT BIT);
END Bo_doan_xau;
--------------------------------------------
ARCHITECTURE state_machine OF Bo_doan_xau IS
TYPE state IS (zero, one, two, three);
SIGNAL pr_state, nx_state: state;
BEGIN
--------- Phan mach day: --------------------
PROCESS (rst, clk)
BEGIN
IF (rst='1') THEN
pr_state <= zero;
ELSIF (clk'EVENT AND clk='1') THEN
pr_state <= nx_state;
END IF;
END PROCESS;
---------- Phan mach to hop: ---------------
PROCESS (d, pr_state)
BEGIN
CASE pr_state IS
WHEN zero =>
q <= '0';
IF (d='1') THEN nx_state <= one;
ELSE nx_state <= zero;
END IF;
WHEN one =>
q <= '0';
IF (d='1') THEN nx_state <= two;
§Ò Tµi 4: ThiÕt kÕ vi m¹ch b»ng VHDL Nhãm 4
- 105 -
ELSE nx_state <= zero;
END IF;
WHEN two =>
q <= '0';
IF (d='1') THEN nx_state <= three;
ELSE nx_state <= zero;
END IF;
WHEN three =>
q <= '1';
IF (d='0') THEN nx_state <= zero;
ELSE nx_state <= three;
END IF;
END CASE;
END PROCESS;
END state_machine;
--------------------------------------------
Kết quả mô phỏng sẽ như sau:
Hình 8.9.Kết quả mô phỏng cho bộ đoán nhận xâu.
Ví dụ 8.5: Bộ điều khiển đèn giao thông (TLC)
Như đã giới thiệu ở phần mạch mạch tổ hợp, bộ điều khiển số là mạch ví
dụ tốt để có thể thực hiện hiệu quả khi mô hình hoá máy trạng thái. Trong ví dụ
này, chúng ta sẽ thiết kế một TLC với những đặc điểm được tóm lược như
trong hình 8.10:
Hình 8.10.a. Sơ đồ nguyên lý hoạt động của TLC
§Ò Tµi 4: ThiÕt kÕ vi m¹ch b»ng VHDL Nhãm 4
- 106 -
Hình 8.10.b. Đồ hình trạng thái của TLC
Ở đây chúng ta thấy có 3 chế độ thao tác:
+ Chế độ bình thường: Ở chế độ này, mạch có 4 trạng thái, mỗi trạng
thái là độc lập, thời gian lập trình ….?
+ Chế độ kiểm tra: Cho phép tất cả thời gian được lập trình trước được
viết lên với 1 giá trị nhỏ, do vậy hệ thống có thể dễ dàng được kiểm tra trong
suốt quá trình baỏ dưỡng.
+ Chế độ Standby: Nếu thiết lập hệ thống sẽ kích hoạt đèn vàng trong
khi tín hiệu standby được kích hoạt.
Đồng thời 1 đông hồ tần số 60 HZ luôn hoạt động.
Mã thiết kế:
------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
ENTITY Bodk_den_giao_thong IS
PORT ( clk, stby, test: ...
 

Kiến thức bôn ba

Các chủ đề có liên quan khác

Top