【文章內(nèi)容簡介】
LIBRARY IEEE。 USE 。 ENTITY MOORE1 IS PORT(DATAIN: IN STD_LOGIC_VECTOR(1 DOWNTO 0)。 CLK,RST: IN STD_LOGIC。 Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))。 END MOORE1。 ARCHITECTURE behav OF MOORE1 IS TYPE ST_TYPE IS (ST0,ST1,ST2,ST3,ST4)。 SIGNAL C_ST,N_ST: ST_TYPE。 BEGIN REG: PROCESS(CLK,RST) BEGIN IF RST=39。139。 THEN C_ST=ST0。 Q=0000。 ELSIF CLK39。EVENT AND CLK=39。139。 THEN C_ST=N_ST。 END IF。 END PROCESS REG。 COM: PROCESS(C_ST,DATAIN) BEGIN CASE C_ST IS WHEN ST0= IF DATAIN=10 THEN N_ST=ST1。 ELSE N_ST=ST0。 END IF。 Q=1001。 WHEN ST1= IF DATAIN=11 THEN N_ST=ST2。 ELSE N_ST=ST1 。END IF。 Q=0101。 WHEN ST2= IF DATAIN=01 THEN N_ST=ST3。 ELSE N_ST=ST0 。END IF。 Q=1100。 WHEN ST3= IF DATAIN=00 THEN N_ST=ST4。 ELSE N_ST=ST2。 END IF。 Q=0010。 WHEN ST4=IF DATAIN=11 THEN N_ST=ST0。 ELSE N_ST=ST3 。END IF。 Q=1001 。 WHEN OTHERS= N_ST=ST0。 END CASE。 END PROCESS COM。 END behav。 82 為確保例 85(2 進程 Mealy 型狀態(tài)機)的狀態(tài)機輸出信號沒有毛刺,試用例 84 的方式構(gòu)成一個單進程狀態(tài),使輸出信號得到可靠鎖存,在相同輸入信號條件下,給出兩程序的仿真波形。解:【例 85】改寫如下: LIBRARY IEEE。 USE 。 ENTITY MEALY1 IS PORT(CLK,DATAIN,RESET: IN STD_LOGIC。 Q:OUT STD_LOGIC_VECTOR(4 DOWNTO 0))。 END MEALY1。 ARCHITECTURE behav OF MEALY1 IS TYPE states IS (st0,st1,st2,st3,st4)。 SIGNAL STX: states。 BEGIN PROCESS(CLK,RESET) 單一進程 BEGIN IF RESET=39。139。 THEN STX=ST0。 ELSIF CLK39。EVENT AND CLK=39。139。 THEN CASE STX IS WHEN st0= IF DATAIN=39。139。 THEN STX=st1。 END IF。 IF DATAIN=39。139。 THEN Q=10000。 ELSE Q=01010 。 END IF。 WHEN st1= IF DATAIN=39。039。 THEN STX=st2。 END IF。 IF DATAIN=39。039。 THEN Q=10111。 ELSE Q=10100 。 END IF。 WHEN st2= IF DATAIN=39。139。 THEN STX=st3。 END IF。 IF DATAIN=39。139。 THEN Q=10101。 ELSE Q=10011 。 END IF。 WHEN st3= IF DATAIN=39。039。 THEN STX=st4。 END IF。 IF DATAIN=39。039。 THEN Q=11011。 ELSE Q=01001。 END IF 。 WHEN st4= IF DATAIN=39。139。 THEN STX=st0。 END IF。 IF DATAIN=39。139。 THEN Q=11101。 ELSE Q=01101。 END IF。 WHEN OTHERS= STX=st0。 Q=00000。 END CASE。 END IF。 END PROCESS。 END behav。圖 86 控制 ADC0809 采樣狀態(tài)圖 【例 82】根據(jù)圖 86 狀態(tài)圖,采用 Moore 型狀態(tài)機,設計ADC0809 采樣控制器。 LIBRARY IEEE。 USE 。 ENTITY ADCINT IS PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 來自0809 轉(zhuǎn)換好的 8 位數(shù)據(jù) CLK: IN STD_LOGIC。 狀態(tài)機工作時鐘 EOC: IN STD_LOGIC。 轉(zhuǎn)換狀態(tài)指示,低電平表示正在轉(zhuǎn)換 ALE:OUT STD_LOGIC。 8 個模擬信號通道地址鎖存信號 START:OUT STD_LOGIC。 轉(zhuǎn)換開始信號 OE:OUT STD_LOGIC。 數(shù)據(jù)輸出三態(tài)控制信號 ADDA:OUT STD_LOGIC。 信號通道最低位控制信號 LOCK0:OUT STD_LOGIC。 觀察數(shù)據(jù)鎖存時鐘 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 8 位數(shù)據(jù)輸出 END ADCINT。 ARCHITECTURE behav OF ADCINT IS TYPE states IS(st0,st1,St2,st3,st4)。 定義各狀態(tài)子類型 SIGNAL current_state,next_state: states:=st0。 SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0)。 SIGNAL LOCK: STD_LOGIC。轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時鐘信號 BEGIN ADDA=39。139。當 ADDA=39。039。,模擬信號進入通道 IN0;當ADDA=39。139。,則進入通道 INI Q=REGL。LOCK0=LOCK。 COM: PROCESS(current_state,EOC) BEGIN 規(guī)定各狀態(tài)轉(zhuǎn)換方式 CASE current_state IS WHEN st0= ALE=39。039。START=39。039。LOCK=39。039。OE=39。039。 next_state=st1。 0809 初始化 WHEN st1= ALE=39。139。START=39。139。LOCK=39。039。OE=39。039。 next_state=st2 。啟動采樣 WHEN st2= ALE=39。039。START=39。039。LOCK=39。039。 OE=39。039。 IF(EOC=39。139。) THEN next_state=st3。EOC=1 表明轉(zhuǎn)換結(jié)束 ELSE next_state=st2。 END IF。 轉(zhuǎn)換未結(jié)束,繼續(xù)等待 WHEN st3= ALE=39。039。START=39。039。LOCK=39。039。OE=39。139。 next_state=st4。開啟 OE,輸出轉(zhuǎn)換好的數(shù)據(jù) WHEN st4= ALE=39。039。START=39。039。LOCK=39。139。OE=39。139。next_state=st0。 WHEN OTHERS=next_state=st0。 END CASE。 END PROCESS COM。 REG:PROCESS(CLK) BEGIN IF(CLK39。EVENT AND CLK=39。139。) THEN current_state=next_state。 END IF。 END PROCESS REG。 由信號 current_state 將當前狀態(tài)值帶出此進程:REG LATCH1: PROCESS(LOCK) 此進程中,在 LOCK 的上升沿,將轉(zhuǎn)換好的數(shù)據(jù)鎖入 BEGIN IF LOCK=39。139。 AND LOCK39。EVENT THEN REGL=D。 END IF。 END PROCESS LATCH1。 END behav。 85 在不改變原代碼功能的條件下用兩種方法改寫例 82,使其輸出的控制信號(ALE、START、OE、LOCK)沒有毛刺。方法 1:將輸出信號鎖存后輸出;方法 2:使用狀態(tài)碼直接輸出型狀態(tài)機,并比較這三種狀態(tài)機的特點。 解:【 例 82】根據(jù)圖 86 狀態(tài)圖,采用 Moore 型狀態(tài)機,設計 ADC0809 采樣控制器 方法 1(將輸出控制信號鎖存后輸出)的 VHDL 程序代碼如下: LIBRARY IEEE。 USE 。 ENTITY ADCINT IS PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 來自0809 轉(zhuǎn)換好的 8 位數(shù)據(jù) CLK: IN STD_LOGIC。 狀態(tài)機工作時鐘 EOC: IN STD_LOGIC。 轉(zhuǎn)換狀態(tài)指示,低電平表示正在轉(zhuǎn)換 ALE: OUT STD_LOGIC。 8 個模擬信號通道地址鎖存信號 START: OUT STD_LOGIC。 轉(zhuǎn)換開始信號 OE: OUT STD_LOGIC。 數(shù)據(jù)輸出三態(tài)控制信號 ADDA: OUT STD_LOGIC。 信號通道最低位控制信號 LOCK0: OUT STD_LOGIC。 觀察數(shù)據(jù)鎖存時鐘 Q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 8 位數(shù)據(jù)輸出 END ADCINT。 ARCHITECTURE behav OF ADCINT IS TYPE states IS(st0,st1,St2,st3,st4)。 定義各狀態(tài)子類型 SIGNAL current_state,next_state: states:=st0。 SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0)。 SIGNAL LOCK: STD_LOGIC。轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時鐘信號 SIGNAL ALE0: STD_LOGIC。 8 個模擬信號通道地址鎖存信號 SIGNAL START0: STD_LOGIC。 轉(zhuǎn)換開始信號 SIGNAL OE0: STD_LOGIC。 數(shù)據(jù)輸出三態(tài)控制信號 BEGIN ADDA=39。13