25:設(shè)計一個自動飲料售賣機,飲料10分錢,硬幣有5分和10分兩種,并考慮找零,
1.畫出fsm(有限狀態(tài)機)
2.用verilog編程,語法要符合fpga設(shè)計的要求
3.設(shè)計工程中可使用的工具及設(shè)計大致過程?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity drink_auto_sale is
port(clk: in std_logic;
reset:in std_logic;
sw101:in std_logic;
sw102:in std_logic;
buy : out std_logic;
back: out std_logic);
end drink_auto_sale;
architecture Behavioral of drink_auto_sale is
type state_type is(st0,st1);
signal cs ,ns : state_type;
begin
process(clk,reset)
begin
if(reset = '1') then
cs <= st0;
elsif(clk'event and clk = '1') then
cs <= ns;
end if;
end process;
process(reset ,cs)
begin
case cs is
when st0 => if( sw101 = '1') then
ns <= st1;
buy<= '0';
back<= '0';
elsif(sw102 = '1') then
ns <= st0;
buy<= '1';
back <= '0';
else
ns <= st0 ;
buy <= '0';
back <= '0';
end if;
when st1 => if(sw101 = '1') then
ns <= st0;
buy <= '1';
back <= '0';
elsif(sw102 = '1') then
ns <= st0;
buy <= '1';
back <= '1';
end if;
when others => ns <= st0;
buy<= '0';
back <= '0';
end case;
end process;
end Behavioral;
設(shè)計過程:設(shè)定三個狀態(tài):0分,5分;當狀態(tài)為0分時,接收到5分信號脈沖后轉(zhuǎn)為5分;接收到10分信號脈沖時,轉(zhuǎn)到0分狀態(tài),同時彈出飲料,不找零;狀態(tài)為5分時,接受到5分信號,彈出飲料,不找零,返回0分狀態(tài);當接受到10分狀態(tài)時,彈出飲料,找零,并返回零分狀態(tài)。
所用設(shè)計工具:ISE7.1,modelsim,synplify
(不知道為什么上面的狀態(tài)機設(shè)計在synplify的RTL view中沒能看到狀態(tài)機流程圖,所以狀態(tài)轉(zhuǎn)移圖就沒畫)。
Q26:什么是"線與"邏輯,要實現(xiàn)它,在硬件特性上有什么具體要求?
線與邏輯是兩個輸出信號相連可以實現(xiàn)與的功能。在硬件上,要用oc門來實現(xiàn),由于不用 oc門可能使灌電流過大,而燒壞邏輯門. 同時在輸出端口應(yīng)加一個上拉電阻。Oc門就是集電極開路門。
Q27:什么是競爭與冒險現(xiàn)象?怎樣判斷?如何消除?
在組合電路中,某一輸入變量經(jīng)過不同途徑傳輸后,到達電路中某一匯合點的時間有先有后,這種現(xiàn)象稱競爭;由于競爭而使電路輸出發(fā)生瞬時錯誤的現(xiàn)象叫做冒險。(也就是由于競爭產(chǎn)生的毛刺叫做冒險)。判斷方法:代數(shù)法(如果布爾式中有相反的信號則可能產(chǎn)生競爭和冒險現(xiàn)象);卡諾圖:有兩個相切的卡諾圈并且相切處沒有被其他卡諾圈包圍,就有可能出現(xiàn)競爭冒險;實驗法:示波器觀測;
解決方法:1:加濾波電路,消除毛刺的影響;2:加選通信號,避開毛刺;3:增加冗余項消除邏輯冒險。
電子發(fā)燒友App











評論