五、實驗要求
根據(jù)以上的實驗內(nèi)容寫出實驗報告,包括程序設(shè)計、軟件編譯、仿真分析、硬件測試和實驗過程;設(shè)計程序、程序分析報告、仿真波形圖及其分析報告。
1. 設(shè)計思路
6. 由題意知,我們要設(shè)計一個電路與A/D轉(zhuǎn)換器ADC0809相連,通過接受時鐘輸入來決定狀態(tài),通過對不同狀態(tài)輸出不同的控制信號,實現(xiàn)對ADC0809的采樣控制,最終輸出穩(wěn)定的采樣電壓。本實驗中將設(shè)計如下進程。
設(shè)置兩個信號Current_State、Next_State,以便實現(xiàn)狀態(tài)的通知。
?、?主控時序進程REG
總體設(shè)計思想:用REG控制整個采樣控制電路的狀態(tài),是整個電路的總指揮。
通過監(jiān)測ADC0809輸出的信號,實現(xiàn)不同狀態(tài)的轉(zhuǎn)換,進而控制不同不同的進程Process。
主控時序進程REG只輸出狀態(tài),只接收ST1。
當狀態(tài)為ST0的時候,開始新一輪的采樣;
當接收ST1的時候,通知COM2將采樣數(shù)據(jù)鎖存,輸出。
進程REG對信號:CLK、Next_State信號敏感
?、?組合進程COM1
總體設(shè)計思想:用COM1實現(xiàn)COM2對REG的通知,是整個電路的傳令兵;用COM2控制整個電路,是整個電路狀態(tài)改變的具體執(zhí)行者。
。
當EOC=1的時候,通知REG,以便改變電路狀態(tài)。
進程COM1對信號Current_State和EOC敏感
?、?進程LATCH
總體設(shè)計思想:用LATCH來鎖存轉(zhuǎn)換好的數(shù)據(jù),并控制數(shù)據(jù)的輸出。
進程LATCH對信號LOCK,REGL敏感
程序設(shè)計
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITY ADCINT IS
PORT(D :INSTD_LOGIC_VECTOR(7DOWNTO0);--來自0809轉(zhuǎn)換好的8位數(shù)據(jù)
CLK:INSTD_LOGIC; --狀態(tài)機工作時鐘
EOC:INSTD_LOGIC; --轉(zhuǎn)換狀態(tài)指示,低電平表示正在轉(zhuǎn)換
ALE:OUTSTD_LOGIC; --8個模擬信號通道地址鎖存信號
START:OUTSTD_LOGIC; --轉(zhuǎn)換開始信號
OE:OUTSTD_LOGIC; --數(shù)據(jù)輸出3態(tài)控制信號
ADDA:OUTSTD_LOGIC; --信號通道最低位控制信號
LOCK0:OUTSTD_LOGIC; --觀察數(shù)據(jù)鎖存時鐘
LED:OUTSTD_LOGIC; --用來指示仿真程序是否正確
-- LED2: OUT STD_LOGIC; --2用來指示仿真程序是否正確
Q :OUTSTD_LOGIC_VECTOR(7DOWNTO0)--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(7DOWNTO0);
SIGNAL LOCK :STD_LOGIC; --轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時鐘信號
BEGIN
ADDA 《= ‘1’;--當ADDA《=‘0’,模擬信號進入通道IN0,當ADDA《=‘1’,則進入通道IN1
Q 《= REGL; LOCK0 《= LOCK;
------------------進程REG---------------------
--用REG控制整個采樣控制電路的狀態(tài),是整個電路的總指揮。
PROCESS(CLK)
BEGIN
IF CLK=‘1’ and CLK‘eventTHEN -- 檢測時鐘上升沿
--LED《=’0‘;
IF next_state=st0 THEN -- 初始化狀態(tài)機
current_state《=st0;
ELSIF next_state=st1 THEN --開始轉(zhuǎn)換(st1)
current_state《=st1;
ELSIF next_state=st2 THEN --等待轉(zhuǎn)化完畢,檢測EOC是否為高電平
current_state《=st2;
ELSIF next_state=st3 THEN
-- LED《=’1‘;
current_state《=st3;
ELSIF next_state=st4 THEN
current_state《=st4;
ENDIF;
ENDIF;
ENDPROCESS;
------------------進程COM2---------------------
--用COM2控制整個電路,是整個電路狀態(tài)改變的具體執(zhí)行者。
PROCESS(current_state,EOC)
VARIABLE First_EOC :STD_LOGIC;
BEGIN
--LED2《=’0‘;
IF current_state=st0 THEN -- 初始化狀態(tài)機
ALE《=’1‘;
START《=’0‘;
OE《=’0‘;
LOCK《=’0‘;
next_state《=st1;
ELSIF current_state=st1 THEN --開始轉(zhuǎn)換(st1)
START《=’1‘;
ALE《=’0‘;
--IF EOC=’0‘ THEN -- 轉(zhuǎn)換結(jié)束
next_state《=st2;
First_EOC:=EOC;--在狀態(tài)1記錄EOC,以便后面判斷AD是否開始轉(zhuǎn)換
--END IF;
ELSIF current_state=st2 THEN --等待轉(zhuǎn)化完畢,檢測EOC是否為高電平
START《=’0‘;
OE《=’0‘;
if ’1‘=(First_EOC XOR EOC)then
IF EOC=’1‘ THEN
-- IF EOC=’1‘ THEN
next_state《=st3;
-- END IF;
-- else
-- next_state《=st2;
ENDIF;
else
next_state《=st2;
ENDIF;
ELSIF current_state=st3 THEN
--LED2《=’1‘;
IF EOC=’1‘ THEN -- 轉(zhuǎn)換結(jié)束
OE《=’1‘;
next_state《=st4;
ELSE
OE《=’0‘;
ENDIF;
ELSIF current_state=st4 THEN
OE《=’0‘;
LOCK《=’1‘;
next_state《=st0; --開啟下一輪新的轉(zhuǎn)換
ENDIF;
ENDPROCESS;
------------------進程LATCH---------------------
--用來控制電路的輸出
PROCESS(LOCK,REGL)
VARIABLE cq :std_logic_vector(7DOWNTO0);--用來保存數(shù)值
BEGIN
IF LOCK=’0‘ THEN
cq:=D;
ELSIF LOCK=’1‘ THEN
REGL《=cq;
ENDIF;
ENDPROCESS;
ENDARCHITECTURE behav;
2. 仿真分析
圖8-5 仿真波形圖
由8-5可知,仿真波形和圖8-4控制ADC0809采樣時序圖一致。
3. 硬件測試和實驗過程
表1-1 ADCINT在GWAC6板上目標芯片EP1C6Q240C8的引腳鎖定信息
評論
查看更多