Tải bản đầy đủ (.pdf) (37 trang)

BÀI tập lớn mô hình hóa các hệ thống rời rạc máy bán hàng tự động

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (984.79 KB, 37 trang )

1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN
KỸ THUẬT ĐO & TIN HỌC CÔNG NGHIỆP
**********************************************






BÀI TẬP LỚN

Môn học: MÔ HÌNH HÓA CÁC HỆ
THỐNG RỜI RẠC
MÁY BÁN HÀNG TỰ ĐỘNG


Giáo viên hướng dẫn : TS : Lê Hải Sâm

Sinh viên thực hiện : Nguyễn Duy Bình
Nguyễn Hữu Hiển
Trần Thành Vinh

Lớp : THCN-KS CLC-K53






HÀ NỘI : 11/2012
2

MỤC LỤC


LỜI MỞ ĐẦU 3
PHẦN 1. GIỚI THIỆU 4
1.1. Giới thiệu về VHDL 4
1.2. Giới thiệu công nghệ (và ứng dụng) thiết kế mạch bằng VHDL . 5
PHẦN 2. BÀI TOÁN ĐIỀU KHIỂN MÁY BÁN HÀNG TỰ ĐỘNG 11
2.1 Mô tả chung 11
2.2 Các phương pháp thiết kế 13
2.3 Mô tả thiết kế 21
2.4 Mô phỏng 25
2.4.1 Code 25
2.4.2 Kết quả mô phỏng 33
PHẦN 3. KẾT LUẬN 37




















3

LỜI MỞ ĐẦU

Ngày nay, với những ứng dụng của khoa học kỹ thuật tiên tiến, thế giới của
chúng ta đã và đang ngày một thay đổi văn minh và hiện đại. Sự phát triển của kỹ
thuật vi điện tử và vi xử lý xâm nhập mạnh mẽ vào tất cả các ngành nghề, đặc
biệt là vào trong lĩnh vực thông tin, ngành bưu chính viển thông. Các bộ xử lý đã
trở thành các phần tử không thể thiếu để điều khiển những thiết bị với các đặc
điểm nổi bật như sự chính xác cao, tốc độ nhanh, gọn nhẹ là những yếu tố rất cần
thiết cho một hệ thống số cấp cao. Đặc biệt sau mỗi năm các bộ xử lý này ngày
càng được thu nhỏ về kích thước, đồng thời tăng khả năng tích hợp một số lượng
transistor lớn hơn trong nó nhờ công nghệ nano. Trong tương lai khả năng tích
hợp này sẽ còn được gia tăng đáng kể, do các nhà khoa học phân tử trên thế giới
bước đầu đã nghiên cứu và đưa vào thử nghiệm thành công một công nghệ tích
hợp tiên tiến hơn – công nghệ pico. Sự phát triển như vũ bão của nền khoa học
công nghệ trên thế giới đã góp phần tạo nên những con chip đa chức năng có thể
giải quyết tất cả các hoạt động phức tạp liên quan đến công nghệ số.
Để thiết kế các con chip này hoạt động theo đúng yêu cầu sử dụng, người
lập trình chip phải viết một chương trình phần mềm điều khiển chip bằng một số
ngôn ngữ máy tính cấp cao như VHDL, verilog HDL, v.v…
Với tầm quan trọng của vấn đề, nhóm thực hiện đồ án "Máy bán hàng tự
động " muốn hướng tới những hiểu biết bước đầu trong lĩnh vực này qua đó, tạo

tiền đề để thực hiện những nghiên cứu thực tế hơn trong tương lai.




4

PHẦN 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ợ
5

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ỳ thuộc 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 tính 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.
1.2. Giới thiệu công nghệ (và ứng dụng) thiết kế mạch bằng VHDL
1.2.1 Ứng dụng của công nghệ thiết kế mạch bằng VHDL
6

Hiện nay 2 ứng dụng chính và trực tiếp của VHDL là các ứng dụng trong
các thiết bị logic có thể lập trình được (Programmable Logic Devices – PLD)
(bao gồm các thiết bị logic phức tạp có thể lập trình được và các FPGA - Field
Programmable Gate Arrays) và ứng dụng trong ASICs(Application Specific
Integrated Circuits).
Khi chúng ta lập trình cho các thiết bị thì chúng ta chỉ cần viết mã VHDL
một lần, sau đó ta có thể áp dụng cho các thiết bị khác nhau (như Altera, Xilinx,
Atmel,…) hoặc có thể để chế tạo một con chip ASIC. Hiện nay, có nhiều thương
mại phức tạp (như các vi điều khiển) được thiết kế theo dựa trên ngôn ngữ
VHDL.
1.2.2 Quy trinh thiết kế mạch bằng VHDL.
Như đề cập ở trên, một trong số lớn các ứng dụng của VHDL là chế tạo
các mạch hoặc hệ thống trong thiết bị có thể lập trình được (PLD hoặc FPGA)
hoặc trong ASIC. Việc chế tao ra vi mạch sẽ được chia thành 3 giai đoạn như
sau:
- Giai đoạn 1:
Chúng ta bắt đầu thiết kế bằng viết mã VHDL. Mã VHDL này sẽ được lưu
vào file có đuôi là .vhd và có tên cùng với tên thực thể. Mã VHDL sẽ được mô tả
ở tầng chuyển đổi thanh ghi.

7




Hình 1.1. Tóm tắt quy trình thiết kế VHDL
- Giai đoạn 2: Giai đoạn chế tạo:
Bước đầu tiên trong quá trình chế tạo là biên dich. Quá trình biên dịch sẽ
chuyển mã VHDL vào một netlist ở tầng cổng.
Bước thứ 2 của quá trình chế tạo là tối ưu. Quá trình tối ưu được thực hiện
trên netlist ở tầng cổng về tốc độ và phạm vi.
Trong giai đoạn này, thiết kế có thể được mô phỏng để kiểm tra phát hiện
những lỗi xảy ra trong quá trình chế tạo.
- Giai đoạn 3:
Là giai đoạn ghép nối đóng gói phần mềm. Ở giai đoạn này sẽ tạo ra sự sắp
xếp vật lý cho chip PLD/FPGA hoặc tạo ra mặt nạ cho ASIC.
1.2.3. Công cụ EDA.
Các công cụ phục vụ cho quá trình thiết kế vi mạch sẽ là:
- Công cụ Active – HDL: Tạo mã VHDL và mô phỏng
8

- Công cụ EDA (Electronic Design Automation): là công cụ tự động thiết
kế mạch điện tử. Công cụ này được dùng để phục vụ cho việc chế tạo, thực thi và
mô phỏng mạch sử dụng VHDL.
- Công cụ cho đóng gói: Các công cụ này sẽ cho phép tổng hợp mã
VHDL vào các chip CPLD/FPGA của Altera hoặc hệ ISE của Xilinx, for Xilinx’s
CPLD/FPGA chips).
1.2.4. Chuyển mã VHDL vào mạch.
Một bộ cộng đầy đủ được mô tả trong hình dưới đây:

Hinh 1.2.a. Sơ đồ tổng quát về bộ cộng đầy đủ

Trong đó, a , b là các bit vào cho bộ cộng, cin là bit nhớ. Đầu ra s là bit
tổng, cout là bit nhớ ra. Hoạt động của mạch được chỉ ra dưới dạng bảng chân lý:


Hình 1.2.b. Bảng chân lý của bộ cộng đầy đủ
Bit s và cout được tính như sau:

Từ công thức tính s và cout ta viết đoạn mã VHDL như dưới đây:
9


Hình 1.3. Mã thiết kế bộ cộng
Từ mã VHDL này, mạch vật lý được tạo ra. Tuy nhiên có nhiều cách để
thực hiện phương trình được miêu tả trong ARCHITECTURE OF, vì vậy mạch
thực tế sẽ phụ thuộc vào bộ biên dịch/bộ tối ưu đang được sử dụng và đặc biệt
phụ thuộc mục đích công nghệ. Hình vẽ sau đây thể hiện một số dạng kiến trúc
của mạch cộng:



10

Hình 1.4.a. Các ví dụ về sơ đồ mạch có thể có ứng với mã như hình 1.
Trong trường hợp này, nếu mục đích công nghệ của chúng ta là thiết bị lgic
có thê lập trình được (PLD, FPGA), thì 2 kết quả cho cout thoả mãn là ở hình (b)
và hình (c) ( ). Còn nếu mục đích công nghệ là ASIC, thì
chúng ta có thể sử dụng hình (d). Hình D sử dụng công nghệ CMOS với các tầng
transistor và các mặt nạ phủ.
Bất cứ một cái mạch nào được tao ra từ mã, thì những thao tác của nó sẽ
luôn luôn được kiểm tra ở mức thiết kế, như ta đã chỉ ra ở hình 1. Tất nhiên,
chúng ta cũng có thể kiểm tra nó ở tầng vật lý, nhưng sau đó những thay đổi là rất
tai hại.
Hình dưới đây là mô phỏng kết quả của đoạn chương trình đã viết ở trên
cho mạch bộ cộng đầy đủ ở hình 1.3.




Hình 1.4.b: Kết quả mô phỏng bộ cộng được thiết kế theo hình 1.3










11

PHẦN 2. BÀI TOÁN ĐIỀU KHIỂN MÁY BÁN HÀNG
TỰ ĐỘNG
2.1 Mô tả chung
Đồ án thực hiện nghiên cứu và lập trình hoạt động của một máy bán đồ
uống tự động dựa trên ngôn ngữ VHDL và được mô phỏng với phần mềm
Xilinx ISE 14.2.Quá trình xây dựng đồ án bao gồm:
 Thiết kế theo kiến trúc Top Level
 Thiết kế sơ đồ khối cơ bản
 Thực hiện code và biên dịch
 RTL Viewer
 Mô phỏng quá trình
Chức năng máy bán hàng tự động :
 Tính năng bán tự động 3 loại đồ uống (ví dụ Coca Cola, 7Up…)
 Người mua đưa tiền vào máy và lựa chọn đồ uống ưa thích

 Kiểm tra lượng tiền đưa vào và chọn loại đồ uống thích hợp
 Hoàn trả tiền dư (nếu có)
Mô tả giao diện hoạt động
 Giao diện người sử dụng
o 3 phím bấm: lựa chọn loại đồ uống
o Hiển thị LED
o Nút Reset
 Tín hiệu vào/ra
o Xung đồng hồ Clk
o In_Select
o In_Released
o Out_drink
o In_Coin



12




Hình 2.1: Minh họa máy bán hàng
Để lựa chọn đồ uống, người mua ấn vào 3 phím bấm, đèn LED sẽ báo sáng
cho biết còn hàng để bán không. Nếu còn hàng, máy sẽ xuất đồ uống ra ngoài sau
khi kiểm tra người mua đã nạp đủ tiền đồng thời kiểm tra nếu vượt quá giá định
sẵn sẽ hoàn trả tiền dư. Quá trình được thực hiện với điều kiện người mua biết
giá của các loại đồ uống và trong một lần giao dịch, chỉ có thể mua được một
loại đồ uống.
3 Switch
Drink

In_release
Out_Drink
Refund_Coin
In_Coin
13


Hình 2.2: minh họa hoạt động máy bán đồ uống
2.2 Các phương pháp thiết kế
Để thiết kể và triển khai ứng dụng máy bàn hàng, chúng em chia bài toán
thiết kế ra làm 2 phần
a) The Design Approach
b) The Design Flow
The Design Approach
Có 6 bước trong giai đoạn thiết kế được sử dung để thiết kế ứng dụng máy
bàn hàng
1. Hiểu đặc tả của bài toán
2. Mô tả finite state diagram (FSM)
3. To perform a state minimization
4. To perform a state assignment
5. Lựa chọn loại flip-flop cho các thanh ghi trạng thái của FSM
6. Triển khai FSM
7. Bước 1: Tìm hiều bài toán
14


Hình 2.3:Sơ đồ khối đơn giản của máy bán hàng
Sơ đồ trên mô tả các khối cơ bản của máy bán hàng. Máy bán hàng có khả
năng bán 3 loại đồ uống. Giá cả của của 3 loại đồ uống này nằm trong khoảng
RM 0.30 và RM 0.50

Ví dụ:
i. Đồ uống A có giá là RM 0.30
ii. Đồ uống B có giá là RM 0.40
iii. Đồ uống C có giá là RM 0.50
Máy bán hàng này có thể chấp nhận tiền xu có mệnh giá 0.10, 0.20,0. 50. Nếu
lượng tiền đưa vào nhiều hơn giá tiền của đồ uống thì máy sẽ tự động trả lại tiền
thừa cho người mua.
Bước 2:
Ta quy ước như sau:
a. Bảng quy ước đầu vào của máy bán hàng
‘O’ biều diễn đồng tiền có mệnh giá RM 0.10
‘T’ biều diễn đồng tiền có mệnh giá RM 0.20
‘F’ biều diễn đồng tiền có mệnh giá RM 0.50
b. Đồ uống A –RM 0.30
3 đồng tiền giá RM 0.10 = ‘O’, ‘O’, ‘O’
1 đồng tiền giá RM 0.20 và 1 đồng tiền giá RM 0.10 = ‘ T ’ , ‘ O ’
15

c. Đồ uống B – RM 0.40
4 đồng tiền giá RM 0.10 = ‘ O ‘, ‘ O ’ , ‘ O ’ , ’ O ’
2 đồng tiền giá RM 0.10 và 1 đồng tiền giá RM 0.20 = ‘O‘,‘O‘,‘T‘
2 đồng tiền giá RM 0.20 = ‘T‘,‘T‘
d. Đồ uống C – RM 0.50
5 đồng tiền giá RM 0.10 = ‘O‘,‘O’,‘O‘,’O’,‘O‘
3 đồng tiền giá RM 0.30 và 1 đồng tiền giá RM 0.20 =
‘O‘,‘O‘,‘O‘,‘T‘
1 đồng tiền giá RM 0.10 và 2 đồng tiền giá RM 0.20 = ‘O‘,‘T‘,‘T‘
1 đồng tiền giá RM 0.50 = ‘F‘
e. The state diagram
Input :- ‘ O ‘, ‘ T ‘, ‘ F ‘ và reset

Output :- open


Hình2.4: Biều đồ trạng thái của máy bán hàng
Trạng thái RM 10
Trạng thái RM 20
16

Trạng thái RM 30
Trạng thái RM 40
Trạng thái RM 50

Bước 3: (State minimization)
Nhờ sử dụng Moore state machine ta thấy số trạng thái giảm đi, chỉ còn 6
trạng thái RM 00, RM 10, RM 20, RM 30, RM 40, RM 50

Hình2.5: Biểu đồ trạng thái Moore
17


Hình 2.6: Bảng trạng thái của máy bán hàng
Bước 4, 5, và 6
Sử dụng 3 đầu vào O, T , F làm cho việc mã hóa trạng thái khó khăn hơn. Thay
vì sử dụng 3 đầu vào, ta dùng 2 đầu vào để biểu diễn bảng state encoding. Dưới
đây là ví dụ 2 đầu vào cho đồ uống A có giá RM 30. 2 đầu vào là đồng tiền giá RM
10 và RM 20
Bảng trạng thái cho đồ uống A
18



Hình 2.7: Bảng trạng thái cho đồ uống loại A

Hình 2.8 : Mã hóa trạng thái
19

Từ bảng mã hóa state ta có thể tạo ra K-map để tạo ra các phương trinh
Boolean đơn giản hơn. Hình dưới đây biều hiễn phương trình Boolean với các
đầu vào là D1, D0 và ‘Open’


01
11000
011
QQOPEN
DQNQNQQND
NQDQD




Bước cuối cùng là thiết kế mạch logic tương ứng với phương trình Boolean
thu được từ bước trước.

Hình 2.9 : Khối Logic trạng thái
20

Đầu ra của ‘Open’ là Q
1
Q
0

. Từ hình trên ta thấy mạch logic dùng 8 cổng
vào và 2 flip-flops.
The Design Flow

Hình 2.10 : Design flow
Bước đầu tiên của quá trình thiết kế máy bán hàng là tìm hiểu requirement
của máy. Ví dụ, trong bước thứ nhất, yêu cầu của máy bán hàng là nó có khả
năng bán các loại đồ uống có giá thành khác nhau.
Trong bước thứ 2 của quy trình thiết kế, chúng ta sử dụng VHDL (Very High
Speed Integrated Circuit Description Level) để mô tả chức năng của máy bán hàng.
Sau quá trình biên dịch, chúng ta sẽ thấy biểu đồ chương trình dưới góc nhìn chức
năng RTL (Register Transfer Logic). Đây là biều đồ mô tả sự kết hợp của các cổng
logic, flip-flop và multiplexer.
Bước cuối cùng khi chương trình được coi như là chạy tốt và không phát
hiện ra lỗi, chúng ta sẽ download chương trình máy bán hàng vào FPGA board
21

2.3 Mô tả thiết kế
Kiến trúc TOP LEVEL

Theo kiến trúc này, máy bán hàng có khả năng tiếp nhận và xử lý các thông
tin : lựa chọn các loại đồ uống, các loại tiền xu khác nhau, trả lại tiền thừa nếu số
tiền đưa vào lớn hơn giá của loại đồ uống đã chọn.
Khối "Máy bán hàng " đóng vai trò chính để phát tín hiệu điều khiển.
Khối "Giao tiếp bàn phím" giúp quá trình tương tác giữa người và máy bán
hàng thuận tiện hơn.
Khối " Hiển thị LED " đưa ra thông tin về loại đồ uống còn trong máy và
loại đồ uống đã chọn mua.

Máy bán hàng

Hiển thị LED
Giao tiếp bàn phím
Xuất đồ uống

22


Đầu vào:
N : tích cực cao khi người mua đưa xu RM10 (nickel)
D : tích cực cao khi người mua đưa xu RM20 (dime)
Q : tích cực cao khi người mua đưa xu RM50 (quarter)
SELECT : tín hiệu chọn loại đồ uống
CLK : xung đồng hồ đồng bộ hoạt động của máy
RESET : Tín hiệu reset đưa máy trở về trạng thái ban đầu
Đầu ra :
out_drink : Đưa tín hiệu điều khiển loại đồ uống ra cửa máy
out_led : Hiển thị loại đồ uống đưa ra và loại đồ uống còn trong máy
refund : Đưa ra tín hiệu trả lại tiền khi khách đưa vào thừa tiền
Open : Tích cực thấp khi hoàn thành quá trình mua đồ uống. Lon nước sẽ
đẩy ra ngoài.
Các module nhỏ khác :
Mạch tuần tự đồng bộ tín hiệu xung đồng hồ
Máy bán hàng được thiết kế dựa trên nguyên lý hoạt động của máy Moore,
gồm tập các trạng thái cơ bản S0, S10, S20, S50. Kí hiệu được sử dụng là
"SXX" với " S " được gán thay cho biến trạng thái và "XX " biểu diễn các mức
trạng thái.
23

Trạng thái S0 là trạng thái reset. Máy bán hàng trở về trạng thái này sau mỗi
lần thực hiện bán hàng thành công.

Quá trình chuyển dịch giữa các trạng thái dựa trên thông tin các xu đưa vào.
Nếu xu RM10 đưa vào, máy chuyển đến trạng thái S10, nếu là xu RM20 ta có
trạng thái S20, tương tự là trạng thái S50 với xu RM50. Sau trạng thái S80, máy
sẽ để người mua lựa chọn loại đồ uống mong muốn, và chuyển lại tiền thừa (nếu
cần)

Bộ điều khiển “vendingmachine”:
Nguyên lý hoạt động chính của máy cần có các bộ đếm. Ta có 3 bộ đếm để
xác định số tiền người mua đưa vào theo các loại xu RM10, RM20 và RM50.
Ngoài ra, cần có thêm một bộ dồn kênh để lấy giá trị bộ đếm đặt tại các thanh ghi
tạm thời. Các thanh ghi này có vai trò ghi nhớ số tiền xu đã được đưa vào tại thời
điểm mua hàng.
24




















Khối logic tính toán tiền dư
Giả sử trong khối logic đã có một số lượng nhất định các xu 10, 20, 50. Khi
người mua đưa vào số tiền vượt quá giá đồ uống, khối logic sẽ chọn ra phương án
tối ưu nhất để hoàn trả tiền cho khách hàng.
Số tiền dư remn được tính toán để đưa ra cách trả lại tiền dư hợp lý nhất.





25

2.4 Mô phỏng
2.4.1 Code
Chương trình chính


Xay dung chuong trinh
May ban do uong tu dong
Ba loai do uong:
Cocacola
7Up
Pepsi
Nhom thuc hien:
Nguyen Duy Binh
Nguyen Huu Hien
Tran Thanh Vinh
Lop Tin Hoc Cong Nghiep - KSCLC - K53

Dai Hoc Bach Khoa Ha Noi


library IEEE;
use ieee.std_logic_1164.all;

Uncomment the following library declaration if using
arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.ALL;

Uncomment the following library declaration if instantiating
any Xilinx primitives in this code.
library UNISIM;
use UNISIM.VComponents.all;


entity vendingmachine is
port (CLK,Q,D,N,RESET : in std_logic;
in_select : in std_logic_vector (2 downto 0); Chon loai do uong
100: Coca
010: 7Up
001: Pepsi
out_drink : out std_logic_vector (2 downto 0) := "000"; loai do uong ra
out_LED : out std_logic_vector (2 downto 0) := "000"; hien thi loai do uong
ra
Open1 : out bit := '1'; do uong da ra
refund : out bit := '0'); thua tien
end vendingmachine;

architecture machine of vendingmachine is

type vend_state_type is (s_wait_for_m, s_show_stock, s_out_drink);
signal state_vend, next_state:vend_state_type;
signal Quarter,Dime, Nickel : bit;
begin
main process
process(CLK,RESET)
begin
if RESET = '0' then
state_vend <= s_wait_for_m;
elsif (CLK 'event and CLK = '1')then
state_vend <= next_state;
end if;
end process;
vending_machine : process (state_vend, Q, D, N)

×