EDA技术使用教程课后答案(第三版)潘松版1

2026/1/15 10:27:13

WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;

ENDPROCESSCOM;REG:PROCESS(CLK)BEGIN

IF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;--由信号current_state将当前状态值带出此进程:REGLATCH1:PROCESS(LOCK)--此进程中,在LOCK的上升沿,将转换好的数据锁入BEGIN

IFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;

8-5在不改变原代码功能的条件下用两种方法改写例8-2,使其输出的控制信号(ALE、START、OE、LOCK)没有毛刺。方法1:将输出信号锁存后输出;方法2:使用状态码直接输出型状态机,并比较这三种状态机的特点。--解:\8-2】根据图8-6状态图,采用Moore型状态机,设计ADC0809采样控制器\方法1(将输出控制

信号锁存后输出)的VHDL程序代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;ENTITYADCINTIS

PORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);--来自0809转换好的8位数据

CLK:INSTD_LOGIC;--状态机工作时钟EOC:INSTD_LOGIC;--转换状态指示,低电平表示正在转换ALE:OUTSTD_LOGIC;--8个模拟信号通道地址锁存信号START:OUTSTD_LOGIC;--转换开始信号

OE:OUTSTD_LOGIC;--数据输出三态控制信号ADDA:OUTSTD_LOGIC;--信号通道最低位控制信号LOCK0:OUTSTD_LOGIC;--观察数据锁存时钟

Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位数据输出ENDADCINT;

ARCHITECTUREbehavOFADCINTIS

TYPEstatesIS(st0,st1,St2,st3,st4);--定义各状态子类型SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALLOCK:STD_LOGIC;--转换后数据输出锁存时钟信号SIGNALALE0:STD_LOGIC;--8个模拟信号通道地址锁存信号SIGNALSTART0:STD_LOGIC;--转换开始信号SIGNALOE0:STD_LOGIC;--数据输出三态控制信号BEGIN

ADDA<='1';--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道INIQ<=REGL;--LOCK0<=LOCK;

COM:PROCESS(current_state,EOC,CLK)BEGIN--规定各状态转换方式CASEcurrent_stateIS

WHENst0=>ALE0<='0';START0<='0';LOCK<='0';OE0<='0';

next_state<=st1;--0809初始化

WHENst1=>ALE0<='1';START0<='1';LOCK<='0';OE0<='0';

next_state<=st2;--启动采样

WHENst2=>ALE0<='0';START0<='0';LOCK<='0';OE0<='0';

IF(EOC='1')THENnext_state<=st3;--EOC=1表明转换结束ELSEnext_state<=st2;ENDIF;--转换未结束,继续等待

WHENst3=>ALE0<='0';START0<='0';LOCK<='0';OE0<='1';

next_state<=st4;--开启OE,输出转换好的数据

WHENst4=>ALE0<='0';START0<='0';LOCK<='1';OE0<='1';next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;

IFCLK'EVENTANDCLK='1'THEN

ALE<=ALE0;START<=START0;LOCK0<=LOCK;OE<=OE0;--方法1:信号锁存后输出ENDIF;

ENDPROCESSCOM;REG:PROCESS(CLK)BEGIN

IF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;ENDPROCESSREG;--由信号current_state将当前状态值带出此进程:REGLATCH1:PROCESS(LOCK)--此进程中,在LOCK的上升沿,将转换好的数据锁入BEGIN

IFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;ENDPROCESSLATCH1;ENDbehav;

--解:\8-2】根据图8-6状态图,采用Moore型状态机,设计ADC0809采样控制器\方法2(使用状态码

直接输出型状态机)的VHDL程序代码(【例8-7】的根据状态编码表8-1给出ADC0809数据采样的状态机)如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;ENTITYAD0809ISPORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);

CLK,EOC:INSTD_LOGIC;

ALE,START,OE,ADDA:OUTSTD_LOGIC;

c_state:OUTSTD_LOGIC_VECTOR(4DOWNTO0);

Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDAD0809;

ARCHITECTUREbehavOFAD0809IS

SIGNALcurrent_state,next_state:STD_LOGIC_VECTOR(4DOWNTO0);CONSTANTst0:STD_LOGIC_VECTOR(4DOWNTO0):=\CONSTANTst1:STD_LOGIC_VECTOR(4DOWNTO0):=\CONSTANTst2:STD_LOGIC_VECTOR(4DOWNTO0):=\CONSTANTst3:STD_LOGIC_VECTOR(4DOWNTO0):=\CONSTANTst4:STD_LOGIC_VECTOR(4DOWNTO0):=\SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALLOCK:STD_LOGIC;BEGIN

ADDA<='1';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--规定各状态转换方式CASEcurrent_stateIS

WHENst0=>next_state<=st1;--0809初始化WHENst1=>next_state<=st2;--启动采样

WHENst2=>IF(EOC='1')THENnext_state<=st3;--EOC=1表明转换结束

ELSEnext_state<=st2;--转换未结束,继续等待ENDIF;

WHENst3=>next_state<=st4;--开启OE,输出转换好的数据WHENst4=>next_state<=st0;WHENOTHERS=>next_state<=st0;ENDCASE;

ENDPROCESSCOM;REG:PROCESS(CLK)BEGIN

IF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;ENDIF;

ENDPROCESSREG;--由信号current_state将当前状态值带出此进程:REGLATCH1:PROCESS(LOCK)--此进程中,在LOCK的上升沿,将转换好的数据锁入BEGIN

IFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF;

ENDPROCESSLATCH1;ENDbehav;


EDA技术使用教程课后答案(第三版)潘松版1.doc 将本文的Word文档下载到电脑
搜索更多关于: EDA技术使用教程课后答案(第三版)潘松版1 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219