日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于有限状态机的自动售货机控制电路

發布時間:2024/1/1 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于有限状态机的自动售货机控制电路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、該售貨機的功能為每件商品25元,投入總金額大于25元時可找回零錢。(如圖為狀態轉移圖)
2、使用VHDL實現

library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity veding_machine isport(clk,rst: in std_logic;nickel_in,dime_in,quarter_in : in std_logic;candy_out,nickel_out,dime_out:out std_logic); end veding_machine; ------------------------------------------------- architecture Behavioral of veding_machine istype state is (st0,st5,st10,st15,st20,st25,st30,st35,st40,st45);signal present_state,next_state : state; beginprocess (rst,clk)beginif(rst='1') then present_state <= st0;elsif(clk'event and clk ='1')thenpresent_state<= next_state;end if;end process; ------------------------------------- process(present_state,nickel_in,dime_in,quarter_in) begincase present_state iswhen st0 =>candy_out <= '0';nickel_out <='0';dime_out <='0';if (nickel_in= '1') then next_state <= st5;elsif(dime_in= '1') then next_state<= st10;elsif(quarter_in= '1') then next_state <= st25;else next_state <= st0;end if ;when st5 =>candy_out <= '0';nickel_out <='0';dime_out <='0';if (nickel_in= '1') then next_state <= st10;elsif(dime_in= '1') then next_state<= st15;elsif(quarter_in= '1') then next_state <= st30;else next_state <= st5;end if ;when st10 =>candy_out <= '0';nickel_out <='0';dime_out <='0';if (nickel_in= '1') then next_state <= st15;elsif(dime_in= '1') then next_state<= st20;elsif(quarter_in= '1') then next_state <= st35;else next_state <= st10;end if ;when st15 =>candy_out <= '0';nickel_out <='0';dime_out <='0';if (nickel_in= '1') then next_state <= st20;elsif(dime_in= '1') then next_state<= st25;elsif(quarter_in= '1') then next_state <= st40;else next_state <= st15;end if ;when st20 =>candy_out <= '0';nickel_out <='0';dime_out <='0';if (nickel_in = '1') then next_state <= st25;elsif(dime_in= '1') then next_state<= st30;elsif(quarter_in= '1') then next_state <= st35;else next_state <= st20;end if ;when st25 =>candy_out <= '1';nickel_out <='0';dime_out <='0';next_state <= st0;when st30 =>candy_out <= '1';nickel_out <='1';dime_out <='0';next_state <= st0;when st35 =>candy_out <= '1';nickel_out <='0';dime_out <='1';next_state <= st0;when st40 =>candy_out <= '0';nickel_out <='1';dime_out <='0';next_state <= st35;when st45 =>candy_out <= '0';nickel_out <='0';dime_out <='1';next_state <= st35;end case; end process; end Behavioral;

3、生成原理圖

4、添加testbench在modelsim中仿真

LIBRARY ieee; USE ieee.std_logic_1164.ALL;ENTITY tb_candy IS END tb_candy;ARCHITECTURE behavior OF tb_candy IS COMPONENT veding_machinePORT(clk : IN std_logic;rst : IN std_logic;nickel_in : IN std_logic;dime_in : IN std_logic;quarter_in : IN std_logic;candy_out : OUT std_logic;nickel_out : OUT std_logic;dime_out : OUT std_logic);END COMPONENT;--Inputssignal clk : std_logic := '0';signal rst : std_logic := '0';signal nickel_in : std_logic;signal dime_in : std_logic;signal quarter_in : std_logic;--Outputssignal candy_out : std_logic;signal nickel_out : std_logic;signal dime_out : std_logic;-- Clock period definitionsconstant clk_period : time := 10 ns;BEGINuut: veding_machine PORT MAP (clk => clk,rst => rst,nickel_in => nickel_in,dime_in => dime_in,quarter_in => quarter_in,candy_out => candy_out,nickel_out => nickel_out,dime_out => dime_out);clk_process :processbeginclk <= '0';wait for clk_period/2;clk <= '1';wait for clk_period/2;end process;stim_proc: processbegin rst <= '1';wait for 10 ns; rst <= '0';wait;end process;buy_candy: processbegin nickel_in <= '1';dime_in <= '0';quarter_in <= '0';wait for 40 ns;nickel_in <= '0';dime_in <= '1';quarter_in <= '0';wait for 40 ns;nickel_in <= '0';dime_in <= '0';quarter_in <= '1';wait;end process; END;

查看仿真波形:

總結

以上是生活随笔為你收集整理的基于有限状态机的自动售货机控制电路的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。