《EDA技术》复习期末.docx
- 文档编号:11884670
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:17
- 大小:76.52KB
《EDA技术》复习期末.docx
《《EDA技术》复习期末.docx》由会员分享,可在线阅读,更多相关《《EDA技术》复习期末.docx(17页珍藏版)》请在冰豆网上搜索。
《EDA技术》复习期末
《EDA技术应用》复习提纲
一、VHDL程序分析处理
1画出与以下实体描述对应的原理图符号元件:
ENTITYbuf3sIS--实体1:
三态缓冲器
PORT(input:
INSTD_LOGIC;--输入端
enable:
INSTD_LOGIC;--使能端
output:
OUTSTD_LOGIC);--输出端
ENDbuf3s;
ENTITYmux21IS--实体2:
2选1多路选择器
PORT(in0,in1,sel:
INSTD_LOGIC;
output:
OUTSTD_LOGIC);
2哪一种复位方法必须将复位信号放在敏感信号表中?
给出这两种电路的VHDL描述。
解:
边沿触发复位信号要将复位信号放在进程的敏感信号表中。
(1)边沿触发复位信号
…………………….
ARCHITECTUREbhv0FDFF3IS
SIGNALQQ:
STD_LOGIC;
BEGIN
PROCESS(RST)
BEGIN
IFRST’EVENTANDRST=‘1'THEN
QQ<=(Others=>‘0’);
ENDIF;
ENDPROCESS;
Q1<=QQ;
END;
………………………
(2)电平触发复位信号
…………………….
ARCHITECTUREbhv0FDFF3IS
SIGNALQQ:
STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IFRST=‘1'THEN
QQ<=(Others=>‘0’);
ENDIF;
ENDPROCESS;
Q1<=QQ;
END;
………………………
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
begin
--增加“process(a,b,sel)begin”
ifsel='0'thenc:
=a;elsec:
=b;endif;--应改成“ifsel='0'thenc<=a;elsec<=b;endif;”
--增加“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
BEGIN
PROCESS(a,b,s)
BEGIN
IFs=‘0’THEN
y<=a;
ELSE
y<=b;
ENDIF;
ENDPROCESS;
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多路选择器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux41IS
PORT(a,b,c,d:
INSTD_LOGIC;
s0:
INSTD_LOGIC;
s1:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDENTITYmux41;
ARCHITECTUREif_mux41OFmux41IS
SIGNALs0s1:
STD_LOGIC_VECTOR(1DOWNTO0);--定义标准逻辑位矢量数据
BEGIN
s0s1<=s1&s0;--s1相并s0,即s1与s0并置操作
PROCESS(s0s1,a,b,c,d)
BEGIN
IFs0s1="00"THENy<=a;
ELSIFs0s1="01"THENy<=b;
ELSIFs0s1="10"THENy<=c;
ELSEy<=d;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREif_mux41;
--解2:
用CASE语句实现4选1多路选择器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux41IS
PORT(a,b,c,d:
INSTD_LOGIC;
s0:
INSTD_LOGIC;
s1:
INSTD_LOGIC;
y:
OUTSTD_LOGIC);
ENDENTITYmux41;
ARCHITECTUREcase_mux41OFmux41IS
SIGNALs0s1:
STD_LOGIC_VECTOR(1DOWNTO0);--定义标准逻辑位矢量数据类型
BEGIN
s0s1<=s1&s0;--s1相并s0,即s1与s0并置操作
PROCESS(s0s1,a,b,c,d)
BEGIN
CASEs0s1IS--类似于真值表的case语句
WHEN"00"=>y<=a;
WHEN"01"=>y<=b;
WHEN"10"=>y<=c;
WHEN"11"=>y<=d;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREcase_mux41;
3-7给出1位全减器的VHDL描述;最终实现8位全减器。
要求:
1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-20中h_suber是半减器,diff是输出差(diff=x-y),s_out是借位输出(s_out=1,x 图3-191位全加器 --解(1.1): 实现1位半减器h_suber(diff=x-y;s_out=1,x LIBRARYIEEE;--半减器描述 (1): 布尔方程描述方法 USEIEEE.STD_LOGIC_1164.ALL; ENTITYh_suberIS PORT(x,y: INSTD_LOGIC; diff,s_out: OUTSTD_LOGIC); ENDENTITYh_suber; ARCHITECTUREhs1OFh_suberIS BEGIN Diff<=xXOR(NOTy); s_out<=(NOTx)ANDy; ENDARCHITECTUREhs1; --解(1.2): 采用例化实现图4-20的1位全减器 LIBRARYIEEE;--1位二进制全减器顺层设计描述 USEIEEE.STD_LOGIC_1164.ALL; ENTITYf_suberIS PORT(xin,yin,sub_in: INSTD_LOGIC; sub_out,diff_out: OUTSTD_LOGIC); ENDENTITYf_suber; ARCHITECTUREfs1OFf_suberIS COMPONENTh_suber--调用半减器声明语句 PORT(x,y: INSTD_LOGIC; diff,s_out: OUTSTD_LOGIC); ENDCOMPONENT; SIGNALa,b,c: STD_LOGIC;--定义1个信号作为内部的连接线。 BEGIN u1: h_suberPORTMAP(x=>xin,y=>yin,diff=>a,s_out=>b); u2: h_suberPORTMAP(x=>a,y=>sub_in,diff=>diff_out,s_out=>c); sub_out<=cORb; ENDARCHITECTUREfs1; 三、状态机设计应用 【例7-2】根据图7-5状态图,采用Moore型状态机,设计ADC0809采样控制器。 图7-5控制ADC0809采样状态图 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYADC0809IS PORT(D: INSTD_LOGIC_VECTOR(7DOWNTO0);--来自0809转换好的8位数据 CLK: INSTD_LOGIC;--状态机工作时钟 RST: INSTD_LOGIC;--系统复位控制 EOC: INSTD_LOGIC;--转换状态指示,低电平表示正在转换 ALE: OUTSTD_LOGIC;--8个模拟信号通道地址锁存信号 START: OUTSTD_LOGIC;--转换开始信号 OE: OUTSTD_LOGIC;--数据输出三态控制信号 ADDA: OUTSTD_LOGIC;--信号通道最低位控制信号 LOCK_T: OUTSTD_LOGIC;--观察数据锁存时钟 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: STD_LOGIC;--转换后数据输出锁存时钟信号 BEGIN ADDA<='1';--当ADDA<='0',选择模拟信号通道IN0;当ADDA<='1',则选择通道IN1 LOCK_T<=LOCK; COM: PROCESS(cs,EOC)BEGIN--规定各状态转换方式 CASEcsIS WHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0'; next_state<=st1;--0809初始化 WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0'; next_state<=st2;--启动采样 WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0'; IF(EOC='1')THENnext_state<=st3;--EOC=1表明转换结束 ELSEnext_state<=st2;ENDIF;--转换未结束,继续等待 WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1'; next_state<=st4;--开启OE,输出转换好的数据 WHENst4=>ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0; WHENOTHERS=>next_state<=st0; ENDCASE; ENDPROCESSCOM; REG: PROCESS(CLK,RST) BEGIN IF(RST='1')THENcs<=next_state; ELSIF(CLK'EVENTANDCLK='1')THENcs<=next_state; ENDIF; ENDPROCESSREG;--由信号cs将当前状态值带出此进程: REG LATCH1: PROCESS(LOCK)--此进程中,在LOCK的上升沿,将转换好的数据锁入 BEGIN IFLOCK='1'ANDLOCK'EVENTTHENREGL<=D;ENDIF; ENDPROCESSLATCH1; Q<=REGL; ENDbehav; 【例7-4】捡测数据11010011,高位在前。 (双进程) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYSCHKIS PORT(DIN,CLK,RST: INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号 SOUT: OUTSTD_LOGIC);--检测结果输出 ENDSCHK; ARCHITECTUREbehavOFSCHKIS TYPEstatesIS(s0,s1,s2,s3,s4,s5,s6,s7,s8);--定义各状态 SIGNALST,NST: states: =s0;--设定各状态变量和次态变量 BEGIN COM: PROCESS(ST,DIN)--组合进程,规定各状态转换方式 BEGIN CASESTIS WHENs0=>IFDIN='1'THENNST<=s1;ELSENST<=s0;ENDIF; WHENs1=>IFDIN='1'THENNST<=s2;ELSENST<=s0;ENDIF; WHENs2=>IFDIN='0'THENNST<=s3;ELSENST<=s0;ENDIF; WHENs3=>IFDIN='1'THENNST<=s4;ELSENST<=s0;ENDIF; WHENs4=>IFDIN='0'THENNST<=s5;ELSENST<=s0;ENDIF; WHENs5=>IFDIN='0'THENNST<=s6;ELSENST<=s0;ENDIF; WHENs6=>IFDIN='1'THENNST<=s7;ELSENST<=s0;ENDIF; WHENs7=>IFDIN='1'THENNST<=s8;ELSENST<=s0;ENDIF; WHENs8=>IFDIN='0'THENNST<=s3;ELSENST<=s0;ENDIF; WHENOTHERS=>NST<=s0; ENDCASE; ENDPROCESSCOM; REG: PROCESS(CLK,RST)--时序进程 BEGIN IFRST='1'THENST<=s0;--状态复位到s0 ELSIFCLK'EVENTANDCLK='1'THENST<=NST;--进入下一状态 ENDIF; ENDPROCESSREG; SOUT<='1'WHENST=s8ELSE'0'; ENDbehav; 【例7-7】高位在前的序列11010011捡测器“例7-4(双进程)”改进为单进程状态机。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYSCHKIS PORT(DIN,CLK,RST: INSTD_LOGIC;--串行输入数据位/工作时钟/复位信号 SOUT: OUTSTD_LOGIC);--检测结果输出 ENDSCHK; ARCHITECTUREbehavOFSCHKIS TYPEstatesIS(s0,s1,s2,s3,s4,s5,s6,s7,s8);--定义各状态 SIGNALST,NST: states: =s0;--设定各状态变量和次态变量 BEGIN PROCESS(ST,DIN)--组合进程,规定各状态转换方式 BEGIN IFRST='1'THENST<=s0; ELSIFCLK'EVENTANDCLK='1'THENST<=NST; CASESTIS WHENs0=>IFDIN='1'THENNST<=s1;ELSENST<=s0;ENDIF; WHENs1=>IFDIN='1'THENNST<=s2;ELSENST<=s0;ENDIF; WHENs2=>IFDIN='0'THENNST<=s3;ELSENST<=s0;ENDIF; WHENs3=>IFDIN='1'THENNST<=s4;ELSENST<=s0;ENDIF; WHENs4=>IFDIN='0'THENNST<=s5;ELSENST<=s0;ENDIF; WHENs5=>IFDIN='0'THENNST<=s6;ELSENST<=s0;ENDIF; WHENs6=>IFDIN='1'THENNST<=s7;ELSENST<=s0;ENDIF; WHENs7=>IFDIN='1'THENNST<=s8;ELSENST<=s0;ENDIF; WHENs8=>IFDIN='0'THENNST<=s3;ELSENST<=s0;ENDIF; WHENOTHERS=>NST<=s0; ENDCASE; IFST=s8THENSOUT<='1'; ELSESOUT<='0'; ENDIF; ENDIF; ENDPROCESS; ENDbehav; 7-1根据图7-30(a)所示的状态图,分别按照图7-30(b)和图7-30(c)写出对应结构的VHDL状态机。 图7-30习题7-1状态图 --解: 根据图7-30(a)所示的状态图,按照图7-30(b)单进程状态机端口形式,编写的VHDL程序代码如下: LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYstate_8_16_a_bIS PORT(ina: INSTD_LOGIC_VECTOR(2DOWNTO0); CLK,RESET: INSTD_LOGIC; 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; BEGIN FSM: PROCESS(CLK,RESET) BEGIN IFRESET='1'THENC_ST<=S0; ELSIFCLK'EVENTANDCLK='1'THEN CASEC_STIS WHENS0=>C_ST<=S1; IFina="101"THENouta<="0010"; ELSIFina="111"THENouta<="1100"; ENDIF; WHENS1=>IFina="110"THENC_ST<=S2; ELSEC_ST<=S1; ENDIF; outa<="1001"; WHENS2=>IFina="011"THENC_ST<=S1; ELSIFina="100"THENC_ST<=S3; ELSEC_ST<=S2; ENDIF; outa<="1111"; WHENS3=>C_ST<=S0; IFina="101"THENouta<="1101"; ELSIFina="011"THENouta<="1110"; ELSEouta<="1111"; ENDIF; WHENOTHERS=>C_ST<=S0; ENDCASE; ENDIF; ENDPROCESSFSM; ENDARCHITECTUREbehav; --解: 根据图7-30(a)所示的状态图,按照图7-30(c)双进程状态机端口形式,编写的VHDL程序代码如下: LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYstate_8_16_a_cIS PORT(ina: INSTD_LOGIC_VECTOR(2DOWNTO0); CLK,RESET: INSTD_LOGIC; outa: OUTSTD_LOGIC_VECTOR(3DOWNTO0)); ENDstate_8_16_a_c; ARCHITECTUREbehavOFstate_8_16_a_cIS TYPEST_TYPEIS(S0,S1,S2,S3); SIGNALC_ST,N_ST: ST_TYPE; BEGIN REG: PROCESS(CLK,RESET)--主控时序进程 BEGIN IFRESET='1'THENC_ST<=S0;--检测异步复位信号 ELSIFCLK='1'ANDCLK'EVENTTHEN C_ST<=N_ST; ENDIF; ENDPROCESSREG; COM: PROCESS(C_ST,ina)--主控组合进程 BEGIN CASEC_STIS WHENS0=>N_ST<=S1; IFina="101"THENouta<="0010"; EL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA技术 EDA 技术 复习 期末