《EDA技术》复习期末Word格式文档下载.docx
《《EDA技术》复习期末Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《EDA技术》复习期末Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
IFRST=‘1'
3判断下面三个程序中是否有错误,若有则指出错误所在,并给出完整程序。
程序1:
SignalA,EN:
std_logic;
…………………
Process(A,EN)
VariableB:
std_logic;
Begin
ifEN=lthenB<
=A;
endif;
--将“B<
=A”改成“B:
=A”
endprocess;
程序2:
Architectureoneofsampleis
variablea,b,c:
integer;
begin
c<
=a+b;
--将“c<
=a+b”改成“c:
=a+b”
end;
程序3:
libraryieee;
useieee.std_logic_1164.all;
entitymux21is
PORT(a,b:
instd_logic;
sel:
instd_loglc;
c:
outstd_logle;
);
--将“;
)”改成“)”
endsam2;
--将“sam2”改成“entitymux21”
architectureoneofmux2lis
--增加“process(a,b,sel)begin”
ifsel='
0'
thenc:
=a;
elsec:
=b;
--应改成“ifsel='
thenc<
elsec<
”
--增加“endprocess;
endtwo;
--将“two”改成“architectureone”
二、电路设计应用
【例3-1】2选1多路选择器
图3-1mux21a实体图3-2mux21a结构体
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux21aIS
PORT(a,b,s:
INBIT;
y:
OUTBIT);
ENDENTITYmux21a;
ARCHITECTUREone0Fmux21aIS
PROCESS(a,b,s)
IFs=‘0’THEN
y<
ELSE
ENDIF;
3-2图3-16所示的是4选1多路选择器,试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程序,选择控制信号s1和s0的数据类型为STD_LOGIC_VECTOR;
当s1=’0’,s0=’0’;
s1=’0’,s0=’1’;
s1=’1’,s0=’0’和s1=’1’,s0=’1’时,分别执行y<
=a、y<
=b、y<
=c、y<
=d。
图3-164选1多路选择器
--解1:
用IF_THEN语句实现4选1多路选择器
ENTITYmux41IS
PORT(a,b,c,d:
s0:
s1:
OUTSTD_LOGIC);
ENDENTITYmux41;
ARCHITECTUREif_mux41OFmux41IS
SIGNALs0s1:
STD_LOGIC_VECTOR(1DOWNTO0);
--定义标准逻辑位矢量数据
s0s1<
=s1&
s0;
--s1相并s0,即s1与s0并置操作
PROCESS(s0s1,a,b,c,d)
IFs0s1="
00"
THENy<
=a;
ELSIFs0s1="
01"
=b;
10"
=c;
ELSEy<
=d;
ENDARCHITECTUREif_mux41;
--解2:
用CASE语句实现4选1多路选择器
ARCHITECTUREcase_mux41OFmux41IS
--定义标准逻辑位矢量数据类型
CASEs0s1IS--类似于真值表的case语句
WHEN"
=>
y<
11"
WHENOTHERS=>
NULL;
ENDCASE;
ENDARCHITECTUREcase_mux41;
3-7给出1位全减器的VHDL描述;
最终实现8位全减器。
要求:
1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-20中h_suber是半减器,diff是输出差(diff=x-y),s_out是借位输出(s_out=1,x<
y),sub_in是借位输入。
yin
xin
diff_out
b
a
图3-191位全加器
c
--解(1.1):
实现1位半减器h_suber(diff=x-y;
s_out=1,x<
y)
--半减器描述
(1):
布尔方程描述方法
ENTITYh_suberIS
PORT(x,y:
diff,s_out:
ENDENTITYh_suber;
ARCHITECTUREhs1OFh_suberIS
Diff<
=xXOR(NOTy);
s_out<
=(NOTx)ANDy;
ENDARCHITECTUREhs1;
--解(1.2):
采用例化实现图4-20的1位全减器
--1位二进制全减器顺层设计描述
ENTITYf_suberIS
PORT(xin,yin,sub_in:
sub_out,diff_out:
ENDENTITYf_suber;
ARCHITECTUREfs1OFf_suberIS
COMPONENTh_suber--调用半减器声明语句
PORT(x,y:
ENDCOMPONENT;
SIGNALa,b,c:
STD_LOGIC;
--定义1个信号作为内部的连接线。
u1:
h_suberPORTMAP(x=>
xin,y=>
yin,diff=>
a,s_out=>
b);
u2:
a,y=>
sub_in,diff=>
diff_out,s_out=>
c);
sub_out<
=cORb;
ENDARCHITECTUREfs1;
三、状态机设计应用
【例7-2】根据图7-5状态图,采用Moore型状态机,设计ADC0809采样控制器。
图7-5控制ADC0809采样状态图
ENTITYADC0809IS
PORT(D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
--来自0809转换好的8位数据
CLK:
--状态机工作时钟
RST:
--系统复位控制
EOC:
--转换状态指示,低电平表示正在转换
ALE:
OUTSTD_LOGIC;
--8个模拟信号通道地址锁存信号
START:
--转换开始信号
OE:
--数据输出三态控制信号
ADDA:
--信号通道最低位控制信号
LOCK_T:
--观察数据锁存时钟
Q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
--8位数据输出
ENDADC0809;
ARCHITECTUREbehavOFADC0809IS
TYPEstatesIS(st0,st1,St2,st3,st4);
--定义各状态子类型
SIGNALcs,next_state:
states:
=st0;
SIGNALREGL:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALLOCK:
--转换后数据输出锁存时钟信号
ADDA<
='
1'
;
--当ADDA<
,选择模拟信号通道IN0;
当ADDA<
,则选择通道IN1
LOCK_T<
=LOCK;
COM:
PROCESS(cs,EOC)BEGIN--规定各状态转换方式
CASEcsIS
WHENst0=>
ALE<
START<
LOCK<
OE<
next_state<
=st1;
--0809初始化
WHENst1=>
=st2;
--启动采样
WHENst2=>
OE<
IF(EOC='
)THENnext_state<
=st3;
--EOC=1表明转换结束
ELSEnext_state<
=st2;
--转换未结束,继续等待
WHENst3=>
=st4;
--开启OE,输出转换好的数据
WHENst4=>
next_state<
WHENOTHERS=>
ENDPROCESSCOM;
REG:
PROCESS(CLK,RST)
IF(RST='
)THENcs<
=next_state;
ELSIF(CLK'
EVENTANDCLK='
ENDPROCESSREG;
--由信号cs将当前状态值带出此进程:
REG
LATCH1:
PROCESS(LOCK)--此进程中,在LOCK的上升沿,将转换好的数据锁入
IFLOCK='
ANDLOCK'
EVENTTHENREGL<
=D;
ENDPROCESSLATCH1;
Q<
=REGL;
ENDbehav;
【例7-4】捡测数据11010011,高位在前。
(双进程)
ENTITYSCHKIS
PORT(DIN,CLK,RST:
--串行输入数据位/工作时钟/复位信号
SOUT:
--检测结果输出
ENDSCHK;
ARCHITECTUREbehavOFSCHKIS
TYPEstatesIS(s0,s1,s2,s3,s4,s5,s6,s7,s8);
--定义各状态
SIGNALST,NST:
=s0;
--设定各状态变量和次态变量
PROCESS(ST,DIN)--组合进程,规定各状态转换方式
CASESTIS
WHENs0=>
IFDIN='
THENNST<
=s1;
ELSENST<
WHENs1=>
=s2;
WHENs2=>
=s3;
WHENs3=>
=s4;
WHENs4=>
=s5;
WHENs5=>
=s6;
WHENs6=>
=s7;
WHENs7=>
=s8;
WHENs8=>
NST<
PROCESS(CLK,RST)--时序进程
IFRST='
THENST<
--状态复位到s0
ELSIFCLK'
=NST;
--进入下一状态
SOUT<
WHENST=s8ELSE'
【例7-7】高位在前的序列11010011捡测器“例7-4(双进程)”改进为单进程状态机。
IFST=s8THENSOUT<
;
ELSESOUT<
7-1根据图7-30(a)所示的状态图,分别按照图7-30(b)和图7-30(c)写出对应结构的VHDL状态机。
图7-30习题7-1状态图
--解:
根据图7-30(a)所示的状态图,按照图7-30(b)单进程状态机端口形式,编写的VHDL程序代码如下:
ENTITYstate_8_16_a_bIS
PORT(ina:
INSTD_LOGIC_VECTOR(2DOWNTO0);
CLK,RESET:
outa:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYstate_8_16_a_b;
ARCHITECTUREbehavOFstate_8_16_a_bIS
TYPEST_TYPEIS(S0,S1,S2,S3);
SIGNALC_ST:
ST_TYPE;
FSM:
PROCESS(CLK,RESET)
IFRESET='
THENC_ST<
=S0;
CASEC_STIS
WHENS0=>
C_ST<
=S1;
IFina="
101"
THENouta<
="
0010"
ELSIFina="
111"
1100"
WHENS1=>
110"
=S2;
ELSEC_ST<
outa<
1001"
WHENS2=>
011"
100"
=S3;
1111"
WHENS3=>
1101"
1110"
ELSEouta<
C_ST<
ENDPROCESSFSM;
ENDARCHITECTUREbehav;
根据图7-30(a)所示的状态图,按照图7-30(c)双进程状态机端口形式,编写的VHDL程序代码如下:
ENTITYstate_8_16_a_cIS
ENDstate_8_16_a_c;
ARCHITECTUREbehavOFstate_8_16_a_cIS
TYPEST_TYPEIS(S0,S1,S2,S3);
SIGNALC_ST,N_ST:
PROCESS(CLK,RESET)--主控时序进程
--检测异步复位信号
ELSIFCLK='
ANDCLK'
EVENTTHEN
=N_ST;
PROCESS(C_ST,ina)--主控组合进程
N_ST<
THEN