【文章內(nèi)容簡介】
led1,led2,led3:out std_logic)。控制三個指示燈的輸出端口end entity asm。 狀態(tài)機編程實現(xiàn) 狀態(tài)機設(shè)置了三個狀態(tài),分別是:so,s1,s2. 三個狀態(tài)各代表三種觸發(fā)信號。狀態(tài)處于so時,當(dāng)clr=‘1’,上升沿到來時,call1輸入高電平信號,觸發(fā)控制kg1,使相應(yīng)的二極管變亮;狀態(tài)機處于s1,當(dāng)clr=’1’,clk=’1’時,call2作為輸入端輸入高電平,觸發(fā)控制kg2,點亮相應(yīng)的二極管;狀態(tài)機處于s2,clr=’1’,clk=’1’時,call3為輸入端輸入高電平,觸發(fā)控制kg2,點亮相應(yīng)的二極管。在整個程序中,狀態(tài)機起的是中央控制器的作用,由它控制的信號來影響整個程序中的其他相關(guān)部分,比如指示燈和電燈,還有延時模塊。 狀態(tài)機的程序設(shè)計如下: architecture a of asm istype states is (s0,s1,s2)。 對狀態(tài)機的狀態(tài)進行聲明。signal q:std_logic_vector(0 to 2)。 指明信號類型signal state:states。beginp1: process(clk,clr) 第一個進程beginif(clr=39。039。)then state=s0。elsif(clk39。event and clk=39。139。)thencase state is 用case語句描述狀態(tài)機最方便。when s0= 指定進程的跳轉(zhuǎn) state=s1。 when s1=state=s2。 when s2= state=s0。end case。end if。 end process p1。 p2:process(call1,call2,call3) 第二個進程beginif clr=39。039。 then 定義初始狀態(tài)kg1=39。039。led1=39。139。 kg2=39。039。led2=39。139。kg3=39。039。led3=39。139。 else case state is when s0 = 狀態(tài)處于第一個觸摸開關(guān)觸發(fā)狀態(tài) if call1=39。139。then kg1=39。139。led1=39。039。 kg2=39。039。 kg3=39。039。 else kg1=39。039。led1=39。139。 kg2=39。039。 kg3=39。039。 end if。 when s1= 狀態(tài)處于第二個觸摸開關(guān)觸發(fā)狀態(tài) if call2=39。139。then kg2=39。139。led2=39。039。 kg1=39。039。 kg3=39。039。 elsekg2=39。039。led2=39。139。 kg1=39。039。 kg3=39。039。 end if。 when s2 = 狀態(tài)處于第三個觸摸開關(guān)觸發(fā)狀態(tài)if call3=39。139。then kg3=39。139。led3=39。039。 kg1=39。039。 kg2=39。039。 else kg3=39。039。led3=39。139。 kg1=39。039。 kg2=39。039。end if。end case。end if。end process p2?!?模N計 數(shù)器模50計 數(shù)器模N+50計 數(shù)器CLKCLKSYNC圖三在5 MHz時鐘CLK控制下對同步信號SYNC進行N延時(SYNC脈沖寬度為2 μs,脈沖重復(fù)頻率為1 kHz;0μs≤N≤998 μs)。要求每次在同步脈沖上升沿到來時開始延時,并在延時結(jié)束后產(chǎn)生寬度為10 μs的選通信號。需要產(chǎn)生的延時時序如圖2所示(延時量N=)。這里采用3個計數(shù)器和1個或門產(chǎn)生上述延時信號,如圖3所示,模N計數(shù)器計延時量;模50計數(shù)器計選通信號的寬度;模N+50計數(shù)器用于產(chǎn)生使能信號。用VHDL硬件描述語言進行硬件電路設(shè)計時,同一個進程中不能用2個時鐘來觸發(fā),而時序圖中又要求在同步脈沖SYNC的上升沿開始延時,為了解決這一問題, 用了模N+50計數(shù)器和1個或門。當(dāng)同步脈沖為高電平時,模N計數(shù)器和模N+50計數(shù)器開始計數(shù),并置dly_en為高電平。模N計數(shù)器滿,置dly_enl為高電平同時產(chǎn)生選通信號。當(dāng)模N+50計數(shù)器計滿即選通信號產(chǎn)生完之后置dly_en為低電平。當(dāng)下一個同步脈沖到來時重復(fù)以上過程。這種設(shè)計電路的好處是