【正文】
信號鎖存后輸出)的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。139。當(dāng) ADDA=39。039。,模擬信號進入通道 IN0;當(dāng)ADDA=39。139。,則進入通道 INI Q=REGL。 LOCK0=LOCK。 COM: PROCESS(current_state,EOC,CLK) BEGIN 規(guī)定各狀態(tài)轉(zhuǎn)換方式 CASE current_state IS WHEN st0= ALE0=39。039。START0=39。039。LOCK=39。039。OE0=39。039。 next_state=st1。 0809 初始化 WHEN st1= ALE0=39。139。START0=39。139。LOCK=39。039。OE0=39。039。 next_state=st2 。啟動采樣 WHEN st2= ALE0=39。039。START0=39。039。LOCK=39。039。 OE0=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= ALE0=39。039。START0=39。039。LOCK=39。039。OE0=39。139。 next_state=st4。開啟 OE,輸出轉(zhuǎn)換好的數(shù)據(jù) WHEN st4= ALE0=39。039。START0=39。039。LOCK=39。139。OE0=39。139。next_state=st0。 WHEN OTHERS=next_state=st0。 END CASE。 IF CLK39。EVENT AND CLK= 39。139。 THEN ALE=ALE0。START=START0。LOCK0=LOCK。OE=OE0。方法1:信號鎖存后輸出 END IF。 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 將當(dāng)前狀態(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。 解:【例 82】根據(jù)圖 86 狀態(tài)圖,采用 Moore 型狀態(tài)機,設(shè)計 ADC0809 采樣控制器 方法 2(使用狀態(tài)碼直接輸出型狀態(tài)機)的 VHDL 程序代碼(【例 87】的根據(jù)狀態(tài)編碼表 81 給出 ADC0809數(shù)據(jù)采樣的狀態(tài)機)如下: LIBRARY IEEE。 USE 。 ENTITY AD0809 IS PORT( D: IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 CLK,EOC: IN STD_LOGIC。 ALE,START,OE,ADDA:OUT STD_LOGIC。 c_state:OUT STD_LOGIC_VECTOR(4 DOWNTO 0)。 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 END AD0809。 ARCHITECTURE behav OF AD0809 IS SIGNAL current_state,next_state: STD_LOGIC_VECTOR(4 DOWNTO 0)。 CONSTANT st0: STD_LOGIC_VECTOR(4 DOWNTO 0):=00000。 CONSTANT st1: STD_LOGIC_VECTOR(4 DOWNTO 0):=11000。 CONSTANT st2: STD_LOGIC_VECTOR(4 DOWNTO 0):=00001。 CONSTANT st3: STD_LOGIC_VECTOR(4 DOWNTO 0):=00100。 CONSTANT st4: STD_LOGIC_VECTOR(4 DOWNTO 0):=00110。 SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0)。 SIGNAL LOCK: STD_LOGIC。 BEGIN ADDA=39。139。Q=REGL。START=current_state(4)。ALE=current_state(3)。 OE=current_state(2)。LOCK=current_state(1)。c_state=current_state。 COM: PROCESS(current_state,EOC) BEGIN 規(guī)定各狀態(tài)轉(zhuǎn)換方式 CASE current_state IS WHEN st0= next_state=st1。 0809 初始化 WHEN st1= next_state=st2。 啟動采樣 WHEN st2= IF(EOC=39。139。) THEN next_state=st3。 EOC=1 表明轉(zhuǎn)換結(jié)束 ELSE next_state=st2。 轉(zhuǎn)換未結(jié)束,繼續(xù)等待 END IF。 WHEN st3= next_state=st4。 開啟 OE,輸出轉(zhuǎn)換好的數(shù)據(jù) WHEN st4= 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 將當(dāng)前狀態(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。