Tải bản đầy đủ (.doc) (39 trang)

BÁO CÁO THỰC TẬP-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 (693.86 KB, 39 trang )

1
MỤC LỤC
MỤC LỤC 1
LỜI GIỚI THIỆU 2
PHẦN 1. GIỚI THIỆU 3
1.1. Giới thiệu về VHDL 3
1.2. Giới thiệu công nghệ (và ứng dụng) thiết kế mạch bằng VHDL 5
1.2.1 Ứng dụng của công nghệ thiết kế mạch bằng VHDL 5
1.2.2 Quy trinh thiết kế mạch bằng VHDL 5
1.2.3. Công cụ EDA 6
1.2.4. Chuyển mã VHDL vào mạch 7
PHẦN 2. BÀI TOÁN ĐIỀU KHIỂN MÁY BÁN HÀNG TỰ ĐỘNG 10
2.1 Mô tả chung 10
2.2 Các phương pháp thiết kế 12
The Design Approach 12
The Design Flow 19
2.3 Mô tả thiết kế 20
2.4 Mô phỏng 25
2.4.1 Code 25
2.4.2 Kết quả mô phỏng 34
PHẦN 3. KẾT LUẬN 39
1
2
LỜI GIỚI THIỆ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.
2
3
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ế:
3
4
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ỳ 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
4
5
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
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.
5
6
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
6
7
-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:
7
8
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:

8
9

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
9
10
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 9.1.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
10
11
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.
11
3 Switch
Drink
In_release
Out_Drink
Refund_Coin
In_Coin
12
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
Bước 1: Tìm hiều bài toán
12
13
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 ’
13
14
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
14
15
Trạng thái RM 20
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
15

16
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
16
17
Bảng trạng thái cho đồ uống A
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
17
18
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
18

19
Đầ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.
19
20
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
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.
20
Máy bán hàng
Hiển thị LED
Giao tiếp bàn phím
Xuất đồ uống
21
Đầ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ử
21
vending machine
CLK
RESET
Q

D
N
select 1
select 2
select 3
out_drink
out_led
open
refund
22
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.
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.
22
23
23
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.
24
Xử lý tiền dư
refund
remn
quyết định cách trả tiền dư
25
2.4 Mô phỏng
2.4.1 Code
Chương trình chính
/////////////////////////////////////////////////////////////////
BAI TAP LON
/////////////////////////////////////////////////////////////////
Xay dung chuong trinh may ban hang don gian
May ban do uong tu dong
Ba loai do uong:
Cocacola
7Up
Pepsi
Nhom thuc hien:
Nguyen Van Hung
Le Duy Hung
Dinh Hoang Linh
Nguyen Trong Nghia
Lop Tin Hoc Cong Nghiep K49
Dai Hoc Bach Khoa Ha Noi

//////////////////////////////////////////////////////////////////
library IEEE;
use ieee.std_logic_1164.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)

constant RELEASE :bit := '0' ;
constant NORELEASE :bit := '1' ;
variable chg : integer range 0 to 255 := 0; tien dua vao
variable remn : integer range 0 to 255 := 0; tien thua
variable in_dispatched :integer range 0 to 255 := 0; da dua do
uong ra
variable in_stock : std_logic_vector (2 downto 0) := "111"; bao
loai do uong con trong may
begin
25

×