Professional Documents
Culture Documents
i
CÁC QUY ĐỊNH KHI THỰC HÀNH
A. Quy định chung
- Khi vào phòng thí nghiệm (TN409, TN411), sinh viên phải đeo thẻ; để giầy
dép, túi xách đúng nơi quy định; chỉ được thí nghiệm, thực hành đúng bài đúng
bàn; thực hiện qui trình, qui phạm kỹ thuật theo hướng dẫn của giáo viên; tuyệt
đối không được tự tiện sử dụng thiết bị khi chưa có sự đồng ý của cán bộ hướng
dẫn.
- Nghiêm cấm mang đồ vật liên quan đến chất dễ gây cháy nổ vào phòng máy; có
ý thức bảo vệ tài sản thiết bị, không làm hỏng mất các thiết bị.
- Khi ra khỏi phòng: Sinh viên tắt thiết bị theo đúng quy định, sắp xếp bàn ghế,
thiết bị, làm vệ sinh chỗ ngồi; nếu phát hiện thiết bị hư hỏng thì phải báo ngay
cho cán bộ hướng dẫn biết.
- Các trường hợp vi phạm nội quy đều bị xử lý; nếu vi phạm thiệt hại về tài sản
thiết bị thì phải bồi hoàn bằng thời giá hiện tại của thiết bị đó.
- Sinh viên phải có mặt đúng thời gian nhóm đã đăng ký với giáo viên (buổi sáng
từ 7h00, buổi chiều từ 13h30).
B. Quy định đối với thực hành học phần Kỹ thuật điện tử số
1. Chuẩn bị của sinh viên:
- Theo dõi các thông báo về lịch thực hành và chia nhóm thực hành của bộ môn
- Photo tài liệu thực hành do Bộ môn Kỹ thuật điện tử cung cấp
- Tham gia thực hành đầy đủ và nộp đủ báo cáo
- Trước khi tiến hành thực hành, phải chuẩn bị kiến thức cơ bản thông qua việc
nghiên cứu tài liệu hướng dẫn thực hành và tham khảo các sách chuyên nghành
khác, cần chú ý các nét chính:
+ Tên bài thực hành
+ Mục đích thực hành
+ Cơ sở lý thuyết
+ Thao tác thực hành
+ Lấy số liệu và phương pháp xử lý số liệu
- Trước khi thực hành học phần Thiết kế mạch tích hợp số, yêu cầu sinh viên biết
sử dụng máy phát hàm, máy hiện sóng, cài đặt các phần mềm hỗ trợ.
- Chuẩn bị các vật dụng, giấy vở ghi chép số liệu thực hành
1
Sự chuẩn bị của sinh viên phải được thông qua kiểm tra của cán bộ hướng dẫn
thực hành. Nếu không đạt, sẽ không được tham gia thực hành, việc sinh viên có được
thực hành lại vào buổi khác hay không sẽ do cán bộ hướng dẫn buổi thực hành đó
quyết định.
2. Trong các buổi thực hành
- Đi thực hành đúng giờ. Sau 15 phút (tính từ 7h00 buổi sáng và 13h00 buổi
chiều ) không được vào thực hành.
- Tuân thủ nội quy phòng thực hành và thực hiện thực hành theo hướng dẫn của
cán bộ hướng dẫn thực hành, không tự tiện rời phòng thực hành trong thời gian
làm thực hành nếu không được sự cho phép của cán bộ hướng dẫn thực hành.
- Sau khi kết thúc thực hành: dọn dẹp phòng thực hành, ký tên vào danh sách
trong nhật ký thực hành (theo các bài), xin xác nhận của cán bộ hướng dẫn.
3. Làm bù thực hành
- Trường hợp sinh viên bị trùng lịch thực hành với các môn học khác (hoặc đổi
lịch với lý do chính đáng) phải báo cáo với cán bộ hướng dẫn thực hành buổi đó
tối thiểu trước 02 ngày. Sinh viên phải chủ động liên lạc với các giáo viên bộ
môn để làm bù thực hành vào buổi khác.
- Trường hợp sinh viên xin phép nghỉ đột xuất: Sinh viên phải liên lạc với cán bộ
hướng dẫn thực hành trực tiếp nhóm của mình để xin phép. Ngay sau khi nghỉ
(có phép), sinh viên phải liên lạc với các giáo viên bộ môn để đăng ký làm bù
thực hành.
Lưu ý:
- Sinh viên không được phép bỏ bất kỳ một buổi thực hành nào. Chỉ giải quyết
cho làm bù thực hành với các sinh viên bị ốm và có giấy cho phép nghỉ học của
bác sỹ tại các bệnh viện hoặc trạm xá trường ĐH KTCN.
- Nếu sinh viên vắng từ 01 buổi trở lên, sẽ bị đánh giá điểm 0 của môn học Kỹ
thuật điện tử tương tự.
4. Viết báo cáo thực hành
- Sinh viên học học phần Kỹ thuật điện tử số phải hoàn thành 03 bài thực hành
trước khi thi kết thúc học phần có xác nhận của giáo viên hướng dẫn thực hành
(theo mẫu 02 cuối tài liệu hướng dẫn). Báo cáo thực hành được trình bày một
2
mặt trên khổ giấy A4, đóng quyển, bìa mềm mỗi sinh viên có một quyển báo
cáo riêng. Quyển báo cáo nộp cho giáo viên giảng dạy lý thuyết.
- Nội dung báo cáo bao gồm:
▪ Bìa và bìa phụ của quyển báo cáo (theo mẫu 01 của cuối tài liệu hướng dẫn)
▪ Tổng hợp những kết quả chính cho nội dung báo cáo
▪ Phương pháp xử lý kết quả thực hành
▪ Các kết quả, bản vẽ đặc tính
▪ Nhận xét kết quả:
+ Các kết quả thu được từ thực hành
+ So sánh kết quả thực hành với lý thuyết
+ Mức độ kết quả đạt được so với yêu cầu đề ra
▪ Kiến nghị.
5. Chấm điểm bài thực hành
Việc chấm điểm thực hành dựa trên điểm đã chấm của cán bộ hướng dẫn thực
hành (bao gồm việc đến thực hành đúng giờ, chuẩn bị bài đầy đủ, thái độ thực hiện
thực hành, phương pháp thực hiện thực hành) và nội dung sinh viên viết báo cáo thực
hành.
3
BÀI 1
SỬ DỤNG CÁC CÔNG CỤ MÔ PHỎNG TRONG THIẾT KẾ MẠCH
LOGIC SỐ
Mục đích
1) Sử dụng chương trình mô phỏng Logisim, Multisim để xây dựng mạch mô
phỏng, kiểm tra thiết kế logic theo phương pháp truyền thống
2) Sử dụng chương trình mô phỏng Modelsim để kiểm tra thiết kế logic theo
phương pháp sử dụng ngôn ngữ VHDL.
Công cụ phục vụ thực hành : Máy tính, phần mềm Notepad++, Multisim, Modelsim
Thời gian : 5 tiết
1.1. Mô tả bài toán và thiết kế thủ công
1.1.1. Mô tả bài toán thiết kế
Thiết kế mạch cảnh báo an ninh (bằng chuông) trên một chiếc xe ô tô. Biết hệ
thống cảnh báo sẽ hoạt động trong các trường hợp sau (chuông kêu):
- Khi xe đang hoạt động (biểu hiện là chìa khóa đề đang ở trong ổ) nhưng quên
không đóng cửa
- Khi xe đang hoạt động nhưng quên thắt dây an toàn
- Quên tắt đèn trong xe khi không dùng
1.1.2. Thiết kế theo phương pháp thủ công truyền thống
▪ Bước 1: Phân tích bài toán, các định các biến vào/ra logic
Từ bài toán ta xác định 4 biến đầu vào là: chìa khóa đề, trạng thái cửa xe, đèn xe
và dây an toàn, hàm đầu ra là trạng thái chuông báo. Ta quy ước các trạng thái của
hàm và các biến logic như sau:
Tên biến Ký hiệu Điều kiện Hoạt động
Tín hiệu chuông A A=1 Chuông kêu
Chìa khóa K K=1 Chìa khóa trong ổ đề
Cửa D D=1 Cửa mở
Đèn L L=1 Đèn sáng
Dây an toàn S S=1 Dây an toàn được thắt
▪ Bước 2: Xây dựng bảng chân lý
Từ phát biểu ngôn ngữ ta có bảng chân lý:
4
K D L S A
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 1
0 1 0 0 0
0 1 0 1 0
0 1 1 0 1
0 1 1 1 1
1 0 0 0 1
1 0 0 1 0
1 0 1 0 1
1 0 1 1 0
1 1 0 0 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 1
Từ bảng chân lý ta có thể viết hàm A(K,D,L,S) theo dạng tuyển chuẩn tắc như
sau:
A( K , D, L, S ) = m(2,3, 6, 7,8,10,12,13,14,15) = K DLS + K DLS + KDLS + KDLS +
K DLS + K DLS + KDLS + KDLS + KDLS + KDLS
Hàm A(K,D,L,S) theo dạng hội chuẩn tắc như sau:
A( K , D, L, S ) = M (0,1, 4,5,9,11) = ( K + D + L + S )( K + D + L + S )( K + D + L + S )
( K + D + L + S )( K + D + L + S )( K + D + L + S )
5
F ( K , D, L, S ) = KL + K S + KD
▪ Bước 4: Vẽ sơ đồ logic
- Sơ đồ logic tối giản dạng tuyển thực hiện bằng các cổng logic cơ bản như sau:
X1
2.5V
K U5
NOT U7
0
Key = Space U1
D AND2
1 U2
Key = Space U3 OR2
L U6
OR2
0 AND2
Key = Space NOT
S U4
0
Key = Space AND2
Với phương án thiết kế hoàn toàn dựa trên thủ công, đến bước này người thiết kế
sẽ phải lựa chọn các IC rời rạc phù hợp, lắp mạch và kiểm chứng thực tế.
1.2. Thiết kế và mô phỏng sử dụng phần mềm Logisim
1.2.1. Cài đặt phần mềm Logisim
Logisim là một công cụ giáo dục để thiết kế và mô phỏng các mạch logic kỹ
thuật số. Với giao diện thanh công cụ đơn giản và mô phỏng các mạch khi bạn xây
dựng chúng, nó đủ đơn giản để tạo điều kiện thuận lợi cho việc học các khái niệm cơ
bản nhất liên quan đến mạch logic. Với khả năng xây dựng các mạch lớn hơn từ các
mạch phụ nhỏ hơn và để vẽ các bó dây chỉ bằng một thao tác kéo chuột, Logisim có
thể được sử dụng để thiết kế và mô phỏng toàn bộ CPU cho mục đích giáo dục.
6
Hình 1.1 Giao diện chương trình Logisim
Logisim được sử dụng bởi sinh viên tại các trường cao đẳng và đại học trên khắp
thế giới trong nhiều loại lớp học, từ một đơn vị ngắn gọn về logic trong khảo sát khoa
học máy tính giáo dục phổ thông, các khóa học tổ chức máy tính, đến các khóa học
toàn học kỳ về kiến trúc máy tính.
Logisim là một chương trình chạy, được viết trên nền Java. Để down load
Logism, chúng ta có thể vào link sau đây:
https://sourceforge.net/projects/circuit/
Do phần mềm chạy trên nền java, ta cần phải cài đặt công cụ hỗ trợ
https://www.oracle.com/java/technologies/downloads/#java8-windows
1.2.2. Các bước thiết kế và mô phỏng
Với sự hỗ trợ của phần mềm Logisim, ta có thể dễ dàng thiết kế và mô phỏng bài
toán mô tả ở trên bằng máy tính (Thay cho phướng pháp thủ công) theo các bước như
sau:
▪ Bước 1 Khởi tạo biến logic vào và hàm logic đầu ra
Từ giao diện chính, click vào menu Window -> Computational Analysis. Trong
cửa sổ Computational Analysis, ta click vào Input, nhập và add các biến logic đầu vào
K, D, L, S. Tiếp đó ta ta click vào Output nhập và add hàm đầu ra A.
7
Hình 1.2 Nhập các đầu vào/ra
Bước 2: Nhập bảng chân lý
Trong cửa sổ Computational Analysis, chọn menu Table và nhập các giá trị
tương ứng mà tại đó hàm đầu ra bằng 0, 1 hoặc không xác định
8
Hình 1.4 Tối giản dạng tuyển
9
Hình 1.6 Lựa chọn vẽ mạch logic
Hình 1.7 Mô tả mạch logic thu được từ phép tối ưu dạng hội. Click vào các đầu
vào K, D, L, S ta có thể quan sát mọi thay đổi của đầu ra khi các đầu vào thay đổi. Từ
đó, ta có thể so sánh kết quả hoạt động của mạch mô phỏng so với bảng chân lý đã đề
ra ở trên.
Hình 1.7 Kết quả xây dựng mạch bằng AND, OR, NOT hai đầu vào
Hình 1.8 cho thấy, với sự hỗ trợ của phần mềm, ta dễ dàng biểu diễn hàm logic
dưới dạng NAND hai đầu vào và tự động đưa ra sơ đồ mạch tương ứng.
10
Hình 1.8 Kết quả xây dựng mạch bằng NAND 2 đầu vào
1.3. Mô phỏng thiết kế logic với Multisim 14
1.3.1. Cài đặt phần mềm Mutilsim 14
Để bắt đầu quá trình sử dụng phần mềm Mutilsim 14, chúng ta copy hoặc tải
phần mềm Mutilsim 14 về máy tính. Sau đó tiến hành cài đặt, dung lượng tối thiểu để
cài đặt phần mềm trên ổ C ít nhất là 2GB. Click vào link dưới đây để down phần mềm
về và giải nén.
https://drive.google.com/file/d/0B2Ts0TXptTLmNWw2Y1RTc1hiWFk/view?usp=sha
ring&resourcekey=0-ZDKyMxOFmRbcc448AesTzw
Khi ấn file “NI_Circuit_Design_Suite_14_0”, kích chuột phải ấn Open, màn
hình hiển thị giao diện:
11
Kích chọn Unzip -> Install NI_Circuit_Design_Suite_14_0, sau đó mở file NI
License Activator 1.2 -> kích chọn Options -> Generate Serial Number. Copy mã key
rồi điền vào mục Serial Number
12
1.3.2. Sử dụng Multisim 14 trong phân tích mạch logic số
13
Hình 1.14 Lấy linh kiện cần vẽ
+ Kích chọn transistor NOT nếu nhìn thấy ngay trong mục Compnent hoặc ấn
Search để tìm kiếm, sau đó ấn OK, Di chuyển con trỏ đến vị trí ta muốn đặt
nguồn. Kích chuột vào nơi chúng ta muốn đặt.
XLC1
AB
K D L S
U5
U7
NOT U1
AND2
U2
U3 A
U6 OR2
OR2
AND2
NOT
U4
AND2
Hình 1.15 Mạch cần phân tích được vẽ lại và nối với Logic Converter
14
+ Cứ như vậy chúng ta tiến hành lấy hết các linh kiện như trong bản vẽ, tiến
hành sắp xếp linh kiện, kết nối như trong sơ đồ mạch điện
Bước 2: Thực hiện chuyển đổi logic
- Kích đúp vào biểu tượng của máy Logic Converter.
- Kích nút và chờ cho đến khi cột có dấu ? hiển thị kết quả
đầy đủ (0 hoặc 1) ta sẽ được bảng sự thật.
- Kích vào nút ta sẽ được biểu thức Boolean chưa đơn giản
hiển thị phía bên dưới máy Logic Converter ta có kết quả sau:
Out=A'B'CD'+A'B'CD+A'BCD'+A'BCD+AB'C'D'+AB'CD'+ABC'D'+
+ABC'D+ABCD'+ABCD
15
A B C D
12 16
15
13
14
17 18
19 20
21
12
14 16
15 17
13 20
19 21
18
22
Hình 1.18 Mạch tương đương dùng NAND hai đầu vào
1.3.3. Sử dụng Multisim 14 trong thiết kế và mô phỏng logic số
Bước 1: Tạo bảng chân lý sử dụng bộ chuyển đổi logic
- Mở file mới (File/Open)
- Từ menu Simulate/Instruments/Logic Converter đặt vào cửa sổ thiết kế mạch
16
Hình 1.20 Bảng chân lý tự động trong khối Logic Converter
- Kích vào A, B, C, D để tạo 3 ngõ vào (Tương ứng với K, D, L, S), các trường
hợp có thể có của 4 đầu vào sẽ được hiển thị phía dưới nó.
17
Hình 1.22 Tạo bảng chân lý của mạch logic cần thiết kế
Bước 2: Thiết kế và mô phỏng sử dụng bộ chuyển đổi logic
Sau khi chúng ta tạo xong bảng chân lý cho mạch số mà chúng ta cần thiết kế.
Bây giờ chúng ta sẽ thực hiện việc chuyển đổi.
- Kích chuột vào nút , ta sẽ được biểu thức Boolean hiển thị
phía dưới máy Logic Converter theo dạng tuyển chính quy là:
F(A,B,C,D)=A'B'CD'+A'B'CD+A'BCD'+A'BCD+AB'C'D'+AB'CD'+ABC'D'+
ABC'D+ABCD'+ABCD
- Tiếp tục Kích vào nút , ta sẽ được biểu thức Boolean đơn
giản hiển thị phía dưới máy Logic Converter là: A'C+AD'+AB
- Tiếp tục Kích vào nút , ta sẽ được mạch điện của biểu thức
Boolean đơn giản như sau:
XLC1
AB
A B C D
1 5
2
3
6 7
8 9
10
18
- Kích chuột vào nút ta sẽ được mạch điện dùng toàn cổng NAND hai ngõ vào
tương đương với mạch điện trên.
A B C D
12
14 16
15 17
13 20
19 21
18
22
Hình 1.24 Mạch logic tối giản dùng NAND hai đầu vào
Để mô phỏng hoạt động, ta chuyển các đầu vào A, B, C, D về lại dạng K, D, L, S
và đưa thêm các đầu vào số có thể thay đổi trạng thái và đầu ra là LED để kiểm chứng
hoạt động so với yêu cầu của bài toán thiết kế.
19
Hình 1.26 Lấy đầu ra LED đại diện cho A
X1
2.5V
K U5
U7
0
Key = Space NOT U1
D AND2
1 U2
U3
Key = Space U6 OR2
L OR2
0 AND2
NOT
Key = Space
S U4
0
Key = Space AND2
20
công ty khác nhau phát triển. Điểm chung của các chương trình này là đều phải có một
trình biên dịch và có khả năng mô phỏng mạch theo thời gian thực, kết xuất kết quả
một số dạng nhất định như File text, file định kiểu, hay phổ biến và trực quan nhất là
dưới dạng giản đồ sóng. Dưới đây sẽ giới thiệu chương trình mô phỏng là ModelSim,
đây là một chương trình mô phỏng khá mạnh và chính xác được phát triển bởi Mentor
Graphics.
22
Sau đây chúng ta sẽ lần lượt học cách sử dụng chương trình thông qua việc thiết
kế và mô phỏng bài toán đã mô tả ở trên.
1.4.2. Sử dụng Model sim trong thiết kế và mô phỏng VHDL
1.4.2.1. Viết mã nguồn VHDL
Mã nguồn cho mạch logic tổ hợp trên có cấu trúc như Hình 1.31. Chương trình
được soạn thảo trên phần mềm Notepad++. Để thực hiện được việc này, người thiết kế
phải có kiến thức cơ bản về thiết kế logic dùng VHDL.
23
Bước 1: Tạo trong thư mục D:\VD_Modelsim một thư mục có tên BT1. Thư mục
chúng ta làm việc sẽ là D:\VD_Modelsim\BT1
Bước 2: Trong Notepad++ tạo mới một file bằng cách chọn menu File/new, soạn thảo
file với nội dung, soạn thảo xong, sau đó chọn File/Save, và lưu file dưới tên Vd1.vhd
trong thư mục làm việc D:\VD_Modelsim\BT1, lưu ý để lưu dưới dạng .vhd ở ô chọn
File types phải chọn là All files(*) (Xem Hình 1.32)
Hình 1.34. Giao diện sau khi chọn File → New → Project …
25
▪ Create New File: Dùng khi muốn soạn thảo ngay file .vhd trên môi trường
Modelsim. Đối với Create New File, chương trình sẽ chuyển sang cửa sổ Create
Project File. Ở cửa sổ này tại File Name chúng ta nhập tên file (trong hình sau tên
file được nhập và chuongtrinh1), và Add file as type ta click vào mũi tên xuống
chọn ngôn ngữ là VHDL và mục Folder ta chọn Top Level như Hình 1.35.
26
tên xuống chọn VHDL, mục Folder vẫn chọn Top Level . Chương trình sẽ thêm
file vừa chọn vào thiết kế để chúng ta có thể mở xem hoặc chỉnh sửa nếu cần thiết.
Chú ý: Ta cũng có thể tạo thêm file mới trong thiết kế hoặc tiếp tục bổ sung thêm 1
file chương trinh đã soạn thảo sẵn vào thiết kế bằng cách ở cửa sổ Project (bên trái) , ta
click chuột file chọn Add to Project , sau đó chọn New File … (tạo mới) hoặc Existing
File …(thêm vào thiết kế file đã có sẵn). Các bước còn lại quay lại giống nhưng các
bước đã hướng dẫn ở trên.
Hình 1.37. Giao diện sau khi đã tạo hoặc thêm file .vhd
Bước 5.1: Biên dịch, Sau khi đã soạn thảo xong chương trình hoặc thêm các file
chương trình đã có sẵn vào thiết kế ta tiến hành dịch chương trình bằng cách vào
menu Compile → Compile All hoặc click chuột phải vào file .vhd trong cửa sổ
project và chọn như Hình 1.38.
27
Phần mềm ModelSim sẽ dịch file chương trình và thông báo kết quả. Trường
hợp chương trình có lỗi thì trình dịch sẽ báo lỗi. Ta có thể click đôi chuột vào ngay
dòng báo lỗi để xem thông tin chi tiết về lỗi gặp phải.
Nếu biên dịch có lỗi: click đôi chuột vào ngay dòng báo lỗi để xem thông tin
chi tiết về lỗi gặp phải. Ta đọc phần báo lỗi trên, suy nghĩ và tìm sửa lỗi mắc phải,
lưu lại chương trình và dịch lại cho đến khi không còn lỗi nữa.
28
Hình 1.41. Tạo project, thêm và biên dịch file Vd1
Bước 7.1: Đặt các tín hiệu đầu vào. Do 4 đầu vào a,b,c,d theo thứ tự có trọng số giảm
dần nên để quét tất cả các trường hợp của đầu vào (từ 0000 đến 1111) ta có thể cho các
đầu vào thay đổi dưới dạng clock. Trong cửa sổ wave, click chuột phải vào các tín
hiệu a, b, c, d và chọn clock (Hình 1.42). Các tham số để cài đặt clock cho các đầu vào
a, b, c, d được mô tả theo Hình 1.43. Trong đó, chu kỳ clock của d, c, b, a tăng dần
(lần lượt là 10, 20, 40, 80 ns). Ta chọn First Edge ở chế độ Falling sẽ làm cho a, b, c ,d
chạy từ 0000 đến 1111. Kết quả thu được sau khi mô phỏng 100ns được thể hiện trong
Hình 1.44. Ta cũng có thể sử dụng lệnh Force hoặc NoForce để đạt tín hiệu vào ở dạng
bất kỳ.
29
Hình 1.43. Thông số để đặt tín hiệu vào a,b,c,d bằng Clock
30
Bước 5.2: Tạo thư viện work bằng cách gõ lệnh sau vào cửa sổ Transcript của
Modelsim:
vlib work
31
Khi trình biên dịch phát hiện ra lỗi về mặt cú pháp thì nó sẽ thông báo chính
xác dòng tương ứng gây ra lỗi. Nếu như mã nguồn của thiết kế không có lỗi thì biên
dịch xong sẽ cho ra kết quả như Hình 1.47.
Kiểm tra nhanh thiết kế bằng cách đưa vào đầu vào các giá trị cố định và kiểm
tra trực tiếp kết quả đầu ra. Kiểm tra nhanh cho phép phát hiện và sửa những lỗi về
mặt chức năng đơn giản trước khi bước vào bước kiểm tra với số lượng lớn tổ hợp giá
trị đầu vào.
Bước 7.2: Để kiểm tra nhanh mạch logic thiết kế ở trên tạo thêm một file VD1_tb.vhd
trong thư mục làm việc với nội dung như sau như sau:
-----------------Testbench 1 cua Vd1--------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-------------------------------------------
entity BT1_test is
end BT1_test;
-------------------------------------------
architecture test of BT1_test is
component BT1 is
port (a,b,c,d : in std_logic;
F : out std_logic
);
end component;
signal ain,bin,cin,din,Fout : std_logic;
begin
DUT:BT1 port map(ain, bin,cin, din, Fout);
process
variable err_cnt: integer := 0;
begin
-- Test case 2
ain <= '0';
bin <= '0';
cin <= '1';
din <= '0';
wait for 10 ns;
assert (Fout='0')
report "Failed Case1!" severity error;
if (Fout='1') then
err_cnt := err_cnt +1;
end if;
-- Test case 3
ain <= '0';
bin <= '0';
cin <= '1';
din <= '1';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
32
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 6
ain <= '0';
bin <= '1';
cin <= '1';
din <= '0';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 7
ain <= '0';
bin <= '1';
cin <= '1';
din <= '1';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 8
ain <= '1';
bin <= '0';
cin <= '0';
din <= '0';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 10
ain <= '1';
bin <= '0';
cin <= '1';
din <= '0';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 12
ain <= '1';
bin <= '1';
cin <= '0';
din <= '0';
wait for 10 ns;
33
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 13
ain <= '1';
bin <= '1';
cin <= '0';
din <= '1';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 14
ain <= '1';
bin <= '1';
cin <= '1';
din <= '0';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- Test case 15
ain <= '1';
bin <= '1';
cin <= '1';
din <= '1';
wait for 10 ns;
assert (Fout='1')
report "Failed Case1!" severity error;
if (Fout='0') then
err_cnt := err_cnt +1;
end if;
-- summary of all the tests to see if any errors
if (err_cnt=0) then
assert false report "Testbench completed successfully!"
severity note;
else
assert true
report "Something wrong, try again pls!"
severity error;
end if;
wait; -- stop running
end process;
end test;
--------------------------------------------------------------
configuration CFG_test of BT1_test is
for test
34
end for;
end CFG_test;
--------------------------------------------------------------
VD1_tb.vhd là một thiết kế mà không chứa bất cứ cổng vào ra nào ở phần
khai báo. Kiến trúc của nó gồm hai phần, phần khai báo tín hiệu sẽ khai báo các tín
hiệu vào ra của BT1. Phần hai là khai báo sử dụng BT1 như một khối con có tên là dut
(device under test) và gán các cổng vào ra tương ứng như trên.
Bước 8.2: Tiến hành biên dịch file VD1_tb.vhd này bằng lệnh sau trong cửa sổ
transcript tương tự làm trong bước 6.
vcom VD1_tb.vhd
Bước 9.2: Khởi tạo mô phỏng thiết kế bằng lệnh:
vsim BT1_test
35
Hình 1.49. Minh họa bước 10
Bước 11.2: Chạy mô phỏng và quan sát kết quả trên waveform bằng cách gõ lệnh run
100 ns vào cửa sổ Transcript sau đó mở rộng cửa sổ Waveform bên phải để quan sát.
run 1000 ns
Khi gặp lệnh này chương trình sẽ chạy mô phỏng trong 1000 ns. Kết quả ra như sau:
36
add wave sim:/BT1_test/din
add wave sim:/BT1_test/Fout
run 1000 ns
Dòng thứ nhất để kết thúc bất kỳ mô phỏng nào đang thực thi nếu nó tồn tại,
dòng thứ hai tạo thư viện work nếu nó chưa tồn tại, tiếp đến là các lệnh vcom để biên
dịch các file mã nguồn từ thấp đến cao. Lệnh vsim để tiến hành mô phỏng, sau đó là
các lệnh bổ xung tín hiệu cần theo dõi vào giản đồ sóng. Lệnh cuối cùng là lệnh run
dùng để chạy mô phỏng.
Bước 13.2: Trong cửa sổ transcript của modelsim để biên dịch và chạy lại mô phỏng ta
chỉ như sau.
do run.do
Phần trên mô tả các bước sử dụng Modelsim để kiểm tra nhanh một thiết kế
VHDL bao gồm cả kiểm tra lỗi cú pháp (Complile) và kiểm tra lỗi thiết kế
(waveform). Việc kiểm tra lỗi thiết kế được thực hiện nhờ file testbench VD1_tb.vhd.
Tuy nhiên, file này chỉ bao gồm các kịch bản cho phép kiểm tra nhanh 13 trạng thái
mà Fout đạt giá trị bằng 1 chứ không phải tất cả các trạng thái có thể có của đầu vào.
Để kiểm tra đầy đủ, ta sử dụng file testbench VD1_tb2.vhd có nội dung như sau:
-----------------Testbench 2 cua VD1--------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-------------------------------------------
entity BT1_test is
end BT1_test;
-------------------------------------------
architecture test of BT1_test is
type sample is record
a,b,c,d: std_logic;
end record sample;
type sample_array is array (natural range <>) of sample;
constant test_data: sample_array :=
(
('0','0','0','0'),('0','0','0','1'),('0','0','1','0'),
('0','0','1','1'),('0','1','0','0'),('0','1','0','1'),
('0','1','1','0'),('0','1','1','1'),('1','0','0','0'),
('1','0','0','1'),('1','0','1','0'),('1','0','1','1'),
('1','1','0','0'),('1','1','0','1'),('1','1','1','0'),
('1','1','1','1')
);
component BT1 is
port (a,b,c,d : in std_logic;
F : out std_logic
);
end component;
-- khai bao cac tin hieu vao ra cho DUT
37
signal ain,bin,cin,din,Fout : std_logic;
begin
process
begin
for i in test_data'range loop
ain <= test_data(i).a;
bin <= test_data(i).b;
cin <= test_data(i).c;
din <= test_data(i).d;
wait for 10 ns;
end loop;
wait;
end process;
DUT:BT1 port map(ain, bin,cin, din, Fout);
end;
---------------------------------------------
Ở đây, tất cả các trường hợp có thể có của đầu vào đã được đưa vào trong mảng
test_data. Với việc sử dụng vòng lặp for, các tín hiệu đầu vào lần lượt được
gán bằng mẫu test_data(i). Qua câu lệnh DUT:BT1 port map(ain,
bin,cin, din, Fout)ta sẽ thu được đầu ra tương ứng và so sánh với yêu cầu thiết
kế. Để có được kết quả đánh giá, ta thực hiện theo các bước đã nêu trong phần 1.3 và
thu được kết quả như Hình 1.51.
38
Hình 1.52. Tạo project, thêm và biên dịch file Vd1
Bước 5.3: Tạo file testbench: Project -> Add to Project -> New File (Existing File)
40
Bước 8.3: Bắt đầu chạy mô phỏng : Simulate -> Run -> Run 100
Hình 1.60. Lựa chọn phù hợp để quan sát dạng sóng
41
Chú ý: ta có thể thực hiện kiểm tra tự động hoàn toàn mà không cần quan tâm
đến dạng sóng bằng cách khai báo luôn đầu ra mong muốn trong các mẫu test và lập
trình cho máy tính tự động so sánh đầu ra mô phỏng và đầu ra mong muốn như trong
file testbench dưới đây
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-------------------------------------------
entity Alarm_test is
end Alarm _test;
-------------------------------------------
architecture test of Alarm _test is
type sample is record
a,b,c,d,F: std_logic;
end record sample;
type sample_array is array (natural range <>) of sample;
constant test_data: sample_array :=
(
('0','0','0','0','0'),('0','0','0','1','0'),('0','0','1','0','1'),
('0','0','1','1','1'),('0','1','0','0','0'),('0','1','0','1','0'),
('0','1','1','0','1'),('0','1','1','1','1'),('1','0','0','0','1'),
('1','0','0','1','0'),('1','0','1','0','1'),('1','0','1','1','0'),
('1','1','0','0','1'),('1','1','0','1','1'),('1','1','1','0','1'),
('1','1','1','1','1')
);
component BT1 is
port (a,b,c,d : in std_logic;
F : out std_logic);
end component;
-- khai bao cac tin hieu vao ra cho DUT
signal ain,bin,cin,din,Fout : std_logic;
begin
process
begin
for i in test_data'range loop
ain <= test_data(i).a;
bin <= test_data(i).b;
cin <= test_data(i).c;
din <= test_data(i).d;
wait for 10 ps;
assert Fout = test_data(i).F
report "output F is wrong!"
severity error;
end loop;
wait;
end process;
DUT: BT1 port map(ain, bin,cin, din, Fout);
end;
1.5. Nhiệm vụ sinh viên
SV đọc kỹ hướng dẫn, chuẩn bị bài ở nhà và thực hiện các nội dung được giao
trong bài tập dưới đây. Sau khi thực hiện, SV viết báo cáo và nộp lại cho giảng viên
hướng dẫn.
42
Bài tập thực hành:
Cho một hệ thống giám sát nhiệt độ được mô tả trong Hình 1.61. Trong đó, cảm
biến nhiệt độ hoạt động trong dải từ 0oC đến 100oC được đưa qua bộ biến đổi ADC 4
bit (ký hiệu là x3 x2 x1 x0 ) và đưa vào khối điều khiển (Đầu ra của khối điều khiển ký
hiệu là F). Đèn hiển thị sẽ sáng khi nhiệt độ nằm trong dải mô tả ở cột 5 (Bảng 1).
Cảm biến
nhiệt độ
ADC (4 bit)
2 (25o C − 450 C )
3 (40o C − 850 C )
4 (5o C − 550 C )
43
5 (25o C − 350 C ) (60o C − 940 C )
6 (15o C − 650 C )
7 (35o C − 940 C )
8 (0o C − 400 C )
9 (10o C − 500 C )
10 (20o C − 600 C )
11 (30o C − 700 C )
12 (40o C − 800 C )
13 (50o C − 900 C )
14 (20o C − 700 C )
15 (30o C − 800 C )
16 (40o C − 900 C )
17 (10o C − 600 C )
18 (0o C − 500 C )
26 (0o C − 600 C )
27 (0o C − 700 C )
44
28 (0o C − 800 C )
29 (10o C − 700 C )
30 (10o C − 800 C )
31 (20o C − 800 C )
32 (30o C − 900 C )
33 (40o C − 940 C )
34 (50o C − 940 C )
35 (20o C − 900 C )
36 (15o C − 500 C )
37 (15o C − 600 C )
38 (15o C − 700 C )
42 (25o C − 450 C )
43 (40o C − 850 C )
44 (5o C − 550 C )
46 (15o C − 650 C )
47 (35o C − 940 C )
48 (0o C − 400 C )
49 (10o C − 500 C )
50 (20o C − 600 C )
45
51 (30o C − 700 C )
52 (40o C − 800 C )
53 (50o C − 900 C )
54 (20o C − 700 C )
55 (30o C − 800 C )
56 (40o C − 900 C )
57 (10o C − 600 C )
58 (0o C − 500 C )
66 (0o C − 600 C )
67 (0o C − 700 C )
68 (0o C − 800 C )
69 (10o C − 700 C )
70 (10o C − 800 C )
71 (20o C − 800 C )
72 (30o C − 900 C )
73 (40o C − 940 C )
46
74 (50o C − 940 C )
75 (20o C − 900 C )
76 (15o C − 500 C )
77 (15o C − 600 C )
78 (15o C − 700 C )
47
Mẫu 01
ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP
48
Mẫu 02
BẢNG ĐIỂM THỰC HÀNH
HỌC PHẦN KỸ THUẬT ĐIỆN TỬ SỐ
49