《EDA技术实用教程第五版》习题答案第110章潘.docx
- 文档编号:24944584
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:100
- 大小:605.94KB
《EDA技术实用教程第五版》习题答案第110章潘.docx
《《EDA技术实用教程第五版》习题答案第110章潘.docx》由会员分享,可在线阅读,更多相关《《EDA技术实用教程第五版》习题答案第110章潘.docx(100页珍藏版)》请在冰豆网上搜索。
《EDA技术实用教程第五版》习题答案第110章潘
《EDA技术实用教程(第五版)》习题答案(第1-10章)--潘
《EDA技术实用教程(第五版)》习题
1习题
1-1EDA技术与ASIC设计和FPGA开发有什么关系?
FPGA在ASIC设计中有什么用途?
P3~4
EDA技术与ASIC设计和FPGA开发有什么关系?
答:
利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC的设计和实现;FPGA和CPLD是实现这一途径的主流器件。
FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)和ASIC设计,以及对自动设计与自动实现最典型的诠释。
FPGA在ASIC设计中有什么用途?
答:
FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC。
FPGA实现ASIC设计的现场可编程器件。
1-2与软件描述语言相比,VHDL有什么特点?
P4~6
答:
编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其特定的硬
(P12~14)
答:
1.设计输入(原理图/HDL文本编辑)(EDA设计输入器将电路系统以一定的表达方式输入计算机);2.综合(EDA综合器就是将电路的高级语言(如行为描述)转换成低级的,可与FPGA/CPLD的基本结构相映射的网表文件或程序。
);3.适配(EDA适配器的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、JAM格式的文件。
);4.时序仿真(EDA时序仿真器就是接近真实器件运行特性的仿真,仿真文件中已包含了器件硬件特性参数,因而,仿真精度高。
)与功能仿真(EDA功能仿真器直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求,仿真过程不涉及任何具体器件的硬件特性。
);5.编程下载(EDA编程下载把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD下载,以便进行硬件调试和验证(HardwareDebugging)。
);6.硬件测试(最后是将含有载入了设计的FPGA或CPLD的硬件系统进行统一测试,以便最终验证设计项目在目标系统上的实际工作情况,以排除错误,改进设计。
其中EDA的嵌入式逻辑分析仪是将含有载入了设计的FPGA的硬件系统进行统一测试,并将测试波形在PC机上显示、观察和分析。
)。
2习题
2-1OLMC(输出逻辑宏单元)有何功能?
说明GAL是怎样实现可编程组合电路与时序电路的。
P34~36
OLMC有何功能?
答:
OLMC单元设有多种组态,可配置成专用组合输出、专用输入、组合输出双向口、寄存器输出、寄存器输出双向口等。
说明GAL是怎样实现可编程组合电路与时序电路的?
答:
GAL(通用阵列逻辑器件)是通过对其中的OLMC(逻辑宏单元)的编程和三种模式配置(寄存器模式、复合模式、简单模式),实现组合电路与时序电路设计的。
2-2什么是基于乘积项的可编程逻辑结构?
P33~34,40什么是基于查找表的可编程逻辑结构?
P40~42
什么是基于乘积项的可编程逻辑结构?
答:
GAL、CPLD之类都是基于乘积项的可编程结构;即包含有可编程与阵列和固定的或阵列的PAL(可编程阵列逻辑)器件构成。
什么是基于查找表的可编程逻辑结构?
答:
FPGA(现场可编程门阵列)是基于查找表的可编程逻辑结构。
2-3FPGA系列器件中的LAB有何作用?
P42~44
答:
FPGA(Cyclone/CycloneII)系列器件主要由逻辑阵列块LAB、嵌入式存储器块(EAB)、I/O单元、嵌入式硬件乘法器和PLL等模块构成;其中LAB(逻辑阵列块)由一系列相邻的LE(逻辑单元)构成的;FPGA可编程资源主要来自逻辑阵列块LAB。
2-4与传统的测试技术相比,边界扫描技术有何优点?
P47~50
答:
使用BST(边界扫描测试)规范测试,不必使用物理探针,可在器件正常工作时在系统捕获测量的功能数据。
克服传统的外探针测试法和“针床”夹具测试法来无法对IC内部节点无法测试的难题。
2-5解释编程与配置这两个概念。
P51~56
答:
编程:
基于电可擦除存储单元的EEPROM或Flash技术。
CPLD一股使用此技术进行编程。
CPLD被编程后改变了电可擦除存储单元中的信息,掉电后可保存。
电可擦除编程工艺的优点是编程后信息不会因掉电而丢失,但编程次数有限,编程的速度不快。
配置:
基于SRAM查找表的编程单元。
编程信息是保存在SRAM中的,SRAM在掉电后编程信息立即丢失,在下次上电后,还需要重新载入编程信息。
大部分FPGA采用该种编程工艺。
该类器件的编程一般称为配置。
对于SRAM型FPGA来说,配置次数无限,且速度快;在加电时可随时更改逻辑;下载信息的保密性也不如电可擦除的编程。
2-6请参阅相关资料,并回答问题:
按本章给出的归类方式,将基于乘积项的可编程逻辑结构的PLD器件归类为CPLD;将基于查找表的可编程逻辑结构的PLD器什归类为FPGA,那么,APEX系列属于什么类型PLD器件?
MAXII系列又属于什么类型的PLD器件?
为什么?
P47~51
答:
APEX(AdvancedLogicElementMatrix)系列属于FPGA类型PLD器件;编程信息存于SRAM中。
MAXII系列属于CPLD类型的PLD器件;编程信息存于EEPROM中。
3习题
3-1说明端口模式INOUT和BUFFER有何异同点。
P60
INOUT:
具有三态控制的双向传送端口
BUFFER:
具有输出反馈的单向东湖出口。
3-2画出与以下实体描述对应的原理图符号元件:
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);
3-3试分别用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。
--解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-4给出1位全减器的VHDL描述;最终实现8位全减器。
要求:
1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-20中h_suber是半减器,diff是输出差(diff=x-y),s_out是借位输出(s_out=1,x 图3-18全减器结构图 --解(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; (2)以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设计(减法运算是x-y-sun_in=difft)。 --解 (2): 采用例化方法,以1位全减器为基本硬件;实现串行借位的8位减法器(上图所示)。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYsuber_8IS PORT(x0,x1,x2,x3,x4,x5,x6,x7: INSTD_LOGIC; y0,y1,y2,y3,y4,y5,y6,y7,sin: INSTD_LOGIC; diff0,diff1,diff2,diff3: OUTSTD_LOGIC; diff4,diff5,diff6,diff7,sout: OUTSTD_LOGIC); ENDENTITYsuber_8; ARCHITECTUREs8OFsuber_8IS COMPONENTf_suber--调用全减器声明语句 PORT(xin,yin,sub_in: INSTD_LOGIC; sub_out,diff_out: OUTSTD_LOGIC); ENDCOMPONENT; SIGNALa0,a1,a2,a3,a4,a5,a6: STD_LOGIC;--定义1个信号作为内部的连接线。 BEGIN u0: f_suberPORTMAP(xin=>x0,yin=>y0,diff_out=>diff0,sub_in=>sin,sub_out=>a0); u1: f_suberPORTMAP(xin=>x1,yin=>y1,diff_out=>diff1,sub_in=>a0,sub_out=>a1); u2: f_suberPORTMAP(xin=>x2,yin=>y2,diff_out=>diff2,sub_in=>a1,sub_out=>a2); u3: f_suberPORTMAP(xin=>x3,yin=>y3,diff_out=>diff3,sub_in=>a2,sub_out=>a3); u4: f_suberPORTMAP(xin=>x4,yin=>y4,diff_out=>diff4,sub_in=>a3,sub_out=>a4); u5: f_suberPORTMAP(xin=>x5,yin=>y5,diff_out=>diff5,sub_in=>a4,sub_out=>a5); u6: f_suberPORTMAP(xin=>x6,yin=>y6,diff_out=>diff6,sub_in=>a5,sub_out=>a6); u7: f_suberPORTMAP(xin=>x7,yin=>y7,diff_out=>diff7,sub_in=>a6,sub_out=>sout); ENDARCHITECTUREs8; 3-5用VHDL设计一个3-8译码器,要求分别用(条件)赋值语句、case语句、ifelse语句或移位操作符来完成。 比较这4种方式中,哪一种最节省逻辑资源。 解 (1): 条件赋值语句 --3-53到8译码器设计(条件赋值语句实现) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL;--为使用类型转换函数,打开此程序包。 ENTITYdecoder3to8IS port(DIN: INSTD_LOGIC_VECTOR(2DOWNTO0); DOUT: OUTBIT_VECTOR(7DOWNTO0)); ENDdecoder3to8; ARCHITECTUREbehaveOFdecoder3to8IS BEGIN WITHCONV_INTEGER(DIN)SELECT DOUT<="00000001"WHEN0, "00000010"WHEN1, "00000100"WHEN2, "00001000"WHEN3, "00010000"WHEN4, "00100000"WHEN5, "01000000"WHEN6, "10000000"WHEN7, UNAFFECTEDWHENOTHERS; ENDbehave; 解 (2): case语句 --3-53到8译码器设计(case语句实现) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL;--为使用类型转换函数,打开此程序包。 ENTITYdecoder3to8IS port(DIN: INSTD_LOGIC_VECTOR(2DOWNTO0); DOUT: OUTBIT_VECTOR(7DOWNTO0)); ENDdecoder3to8; ARCHITECTUREbehaveOFdecoder3to8IS BEGIN PROCESS(DIN) BEGIN CASECONV_INTEGER(DIN)IS WHEN0=>DOUT<="00000001"; WHEN1=>DOUT<="00000010"; WHEN2=>DOUT<="00000100"; WHEN3=>DOUT<="00001000"; WHEN4=>DOUT<="00010000"; WHEN5=>DOUT<="00100000"; WHEN6=>DOUT<="01000000"; WHEN7=>DOUT<="10000000"; WHENOTHERS=>NULL; ENDCASE; ENDPROCESS; ENDbehave; 解(3): if_else语句 --3-53到8译码器设计(if_else语句实现) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL;--为使用类型转换函数,打开此程序包。 ENTITYdecoder3to8IS port(DIN: INSTD_LOGIC_VECTOR(2DOWNTO0); DOUT: OUTBIT_VECTOR(7DOWNTO0)); ENDdecoder3to8; ARCHITECTUREbehaveOFdecoder3to8IS BEGIN PROCESS(DIN) BEGIN IFCONV_INTEGER(DIN)=0THENDOUT<="00000001"; ELSIFCONV_INTEGER(DIN)=1THENDOUT<="00000010"; ELSIFCONV_INTEGER(DIN)=2THENDOUT<="00000100"; ELSIFCONV_INTEGER(DIN)=3THENDOUT<="00001000"; ELSIFCONV_INTEGER(DIN)=4THENDOUT<="00010000"; ELSIFCONV_INTEGER(DIN)=5THENDOUT<="00100000"; ELSIFCONV_INTEGER(DIN)=6THENDOUT<="01000000"; ELSIFCONV_INTEGER(DIN)=7THENDOUT<="10000000"; ENDIF; ENDPROCESS; ENDbehave; 解(4): 移位操作符 --3-53到8译码器设计(移位操作实现) LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL;--为使用类型转换函数,打开此程序包。 ENTITYdecoder3to8IS port(DIN: INSTD_LOGIC_VECTOR(2DOWNTO0); DOUT: OUTBIT_VECTOR(7DOWNTO0)); ENDdecoder3to8; ARCHITECTUREbehaveOFdecoder3to8IS BEGIN DOUT<="00000001"SLLCONV_INTEGER(DIN);--被移位部分是常数 ENDbehave; 3-6设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。 --解: 3-6设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYg_5_cmpIS PORT(d_in: INSTD_LOGIC_VECTOR(3DOWNTO0);--输入数据 cmp_out: OUTSTD_LOGIC);--比较输出(1: 输入数据>5) ENDg_5_cmp; ARCHITECTUREBHVOFg_5_cmpIS BEGIN PROCESS(d_in) BEGIN IF(d_in>"0101")THEN cmp_out<='1';--输入数据大于5,比较输出1。 else cmp_out<='0';--输入数据小于等于5,比较输出0。 ENDIF; ENDPROCESS; ENDBHV; 3-7利用if语句设计一个全加器。 --3-7利用if语句设计一个全加器 LIBRARYIEEE;--1位二进制全加器顶层设计描述 USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED.ALL; ENTITYf_adderIS PORT(ain,bin,cin: INSTD_LOGIC; cout,sum: OUTSTD_LOGIC); ENDENTITYf_adder; ARCHITECTUREfd1OFf_adderIS BEGIN PROCESS(ain,bin,cin) BEGIN IFain='1'XORbin='1'XORcin='1'THENsum<='1';ELSEsum<='0';ENDIF; IF(ain='1'ANDbin='1')OR(ain='1'ANDcin='1')OR(bin='1'ANDcin='1')OR(ain='1'ANDbin='1'ANDcin='1') THENcout<='1'; ELSEcout<='0'; ENDIF; ENDPROCESS; ENDARCHITECTUREfd1; 3-8设计一个求补码的程序,输入数据是一个有符号的8位二进制数。 --解: 3-8设计一个求补码的程序,输入数据是一个有符号的8位二进制数。 LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; U
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA技术实用教程第五版 EDA 技术 实用教程 第五 习题 答案 110 章潘