y: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); rest: OUT INTEGER RANGE 0 TO 15;
9.5. Bộ điều khiển mỏy bỏn hàng.
Trong vớ dụ này, chỳng ta sẽ thiết kế bộ điều khiển mỏy bỏn hàng, mỏy bỏn hàng sẽ bỏn cỏc thanh kẹo với giỏ 25 xu. Chỳng ta sẽ thiết kế theo mụ hỡnh mỏy FSM. Đầu ra và đầu vào của bộ điều khiển được thể hiện trong hỡnh 9.11.
Tớn hiệu vào là nickel_in, dime_in, và quarter_in thụng bỏo rằng một đồng tiền tương ứng được gửi vào tài khoản. Ngoài ra cũn cú 2 đầu vào điều khiển: đầu vào reset (rst) và đầu vào clock (clk). Bộ điều khiển trả lời bằng 3 tớn hiệu đầu ra: candy_out (để phõn phỏt thanh kẹo), nickel_out và dime_out(cập nhật lại thay đổi).
Trờn hỡnh 9.11 cũng chỉ ra đồ hỡnh trạng thỏi của mỏy FSM. Cỏc số bờn trong cỏc vũng trũn biểu diễn tổng tài khoản của khỏch hàng (chỉ cú cỏc nickel, dime và quarter là được chấp nhận).
Hỡnh 9.11. Đồ hỡnh trạng thỏi của bộ điều khiển mỏy bỏn hàng
Trạng thỏi 0 là trạng thỏi là trạng thỏi khụng làm gỡ cả. Từ đú nếu 1 đồng nickel được gửi vào tài khoản, mỏy sẽ chuyển trạng thỏi đến trạng thỏi 5, nếu 1 đồng dime được gửi vào tài khoản thỡ mỏy chuyển tới trạng thỏi 10 hoặc nếu 1 đồng quarter thỡ mỏy sẽ chuyển đến trạng thỏi 25. Tỡnh huống tương tự sẽ được lặp lại cho tất cả cỏc trạng thỏi, cho tới trạng thai 20. Nếu trạng thỏi 25 được xỏc nhận, thỡ thanh kẹo được phõn phỏt và khụng chuyển đổi. Tuy nhiờn nếu trạng thỏi 40 được xỏc nhận thỡ a nickel được trả lại, bởi vậy trạng thỏi sẽ chuyển tới trạng thỏi 35, đú là 1 trạng thỏi mà 1 dime được trả lại và 1 candy bar được phõn phỏt. Cú 3 trạng thỏi tạo ra chu trỡnh kộp, đú là từ 1 thanh kẹo được phõn phỏt và mỏy trở lại trạng thỏi 0. Bài toỏn này sẽ được chia thành 2 phần:
+ Trong phần đầu: diện mạo cơ bản liờn quan đến thiết kế bộ điều khiển mỏy bỏn hàng (như trong hỡnh 9.11) .
+ Trong phần 2: Cỏc chức năng mở rộng được thờm vào.
Ở đõy chỳng ta chỉ nghiờn cứu phần một của bài toỏn: Nhỡn vào đồ hỡnh trạng thỏi của mỏy ở hỡnh 9.11, chỳng ta thấy cú 10 trạng thỏi, như vậy cần cú 4 bit để mó hoỏ cỏc trạng thỏi, tức là cần sử dụng 4 flip-flop.
Mó thiết kế sẽ như sau:
LIBRARY ieee;
USE ieee.std_logic_1164.all;