《EDA技术实用教程第四版》习题答案.docx

上传人:b****5 文档编号:11733665 上传时间:2023-03-31 格式:DOCX 页数:57 大小:368.90KB
下载 相关 举报
《EDA技术实用教程第四版》习题答案.docx_第1页
第1页 / 共57页
《EDA技术实用教程第四版》习题答案.docx_第2页
第2页 / 共57页
《EDA技术实用教程第四版》习题答案.docx_第3页
第3页 / 共57页
《EDA技术实用教程第四版》习题答案.docx_第4页
第4页 / 共57页
《EDA技术实用教程第四版》习题答案.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

《EDA技术实用教程第四版》习题答案.docx

《《EDA技术实用教程第四版》习题答案.docx》由会员分享,可在线阅读,更多相关《《EDA技术实用教程第四版》习题答案.docx(57页珍藏版)》请在冰豆网上搜索。

《EDA技术实用教程第四版》习题答案.docx

《EDA技术实用教程第四版》习题答案

《EDA技术实用教程(第四版)》习题

1习题

1-1EDA技术与ASIC设计和FPGA开发有什么关系?

FPGA在ASIC设计中有什么用途?

P3~4

1-2与软件描述语言相比,VHDL有什么特点?

P6

l-3什么是综合?

有哪些类型?

综合在电子设计自动化中的地位是什么?

P5

1-4在EDA技术中,自顶向下的设计方法的重要意义是什么?

P7~10

1-5IP在EDA技术的应用和发展中的意义是什么?

P22~14

1-6叙述EDA的FPGA/CPLD设计流程,以及涉及的EDA工具及其在整个流程中的作用。

(P11~13)

2习题

2-1OLMC(输出逻辑宏单元)有何功能?

说明GAL是怎样实现可编程组合电路与时序电路的。

P34~36

2-2什么是基于乘积项的可编程逻辑结构?

P33~34,40什么是基于查找表的可编程逻辑结构?

P40~41

2-3FPGA系列器件中的LAB有何作用?

P43~45

2-5解释编程与配置这两个概念。

P58

2-6请参阅相关资料,并回答问题:

按本章给出的归类方式,将基于乘积项的可编程逻辑结构的PLD器件归类为CPLD;将基于查找表的可编程逻辑结构的PLD器什归类为FPGA,那么,APEX系列属于什么类型PLD器件?

MAXII系列又属于什么类型的PLD器件?

为什么?

P54~56

3习题

3-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);

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-3图3-17所示的是双2选1多路选择器构成的电路MUXK,对于其中MUX21A,当s=’0’和s=’1’时,分别有y<=‘a’和y<=’b’。

试在一个结构体中用两个进程来表达此电路,每个进程中用CASE语句描述一个2选1多路选择器MUX21A。

图3-17含2选1多路选择器的模块

--解:

用CASE语句实现图4-18所示的是双2选1多路选择器构成的电路

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux31IS

PORT(a1,a2,a3,s0,s1:

INSTD_LOGIC;

outy:

OUTSTD_LOGIC);

ENDENTITYmux31;

ARCHITECTUREcase_mux31OFmux31IS

SIGNALy:

STD_LOGIC;

BEGIN

u1:

PROCESS(s0,a1,a2,a3)

BEGIN

CASEs0IS--类似于真值表的case语句

WHEN'0'=>y<=a2;

WHEN'1'=>y<=a3;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

u2:

PROCESS(s1,a1,a2,a3,y)

BEGIN

CASEs1IS--类似于真值表的case语句

WHEN'0'=>outy<=a1;

WHEN'1'=>outy<=y;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREcase_mux31;

3-4将例3-20程序的计数器改为十二进制计数器,程序用例3-21的方式表述,并且将复位RST改为同步清零控制,加载信号LOAD改为异步控制方式。

讨论例3-20与例3-21的异同点。

--解:

十二进制计数器VHDL程序设计。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT12IS

PORT(CLK,RST,EN,LOAD:

INSTD_LOGIC;

DATA:

INSTD_LOGIC_VECTOR(3DOWNTO0);--4位预置数

DOUT:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);--计数值输出

COUT:

OUTSTD_LOGIC);--计数进位输出

ENDCNT12;

ARCHITECTUREbehavOFCNT12IS

SIGNALQ:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

REG:

PROCESS(CLK,RST,EN,LOAD,Q)

BEGIN

IFLOAD='0'THENQ<=DATA;--允许加载

ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿

IFRST='0'THENQ<=(OTHERS=>'0');--计数器异步复位

ELSE

IFEN='1'THEN--检测是否允许计数或加载(同步使能)

IFLOAD='0'THENQ<=DATA;--允许加载

ELSE

IFQ<12THENQ<=Q+1;--允许计数,检测是否小于9

ELSEQ<=(OTHERS=>'0');--大于等于9时,计数值清零

ENDIF;

ENDIF;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

COM:

PROCESS(Q)

BEGIN

IFQ=12THENCOUT<='1';--计数大于9,输出进位信号

ELSECOUT<='0';

ENDIF;

DOUT<=Q;--将计数值向端口输出

ENDPROCESS;

ENDbehav;

3-5设计含有异步清零和计数使能的16位二进制加减可控计数器。

--解:

用VHDL实现含有异步清零和计数使能的16位二进制加减可控计数器。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYADD_SUB_16IS

PORT(CLK,RST,ADD_EN,SUB_EN:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VECTOR(15DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDENTITYADD_SUB_16;

ARCHITECTUREA_S_16OFADD_SUB_16IS

BEGIN

PROCESS(CLK,RST,ADD_EN,SUB_EN)

VARIABLECQI:

STD_LOGIC_VECTOR(15DOWNTO0);

BEGIN

IFRST='1'THENCQI:

=(OTHERS=>'0');--计数器异步复位

ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿

IFADD_EN='1'THEN--检测是否允许计数(同步他能)

IFCQI<16#FFFF#THENCQI:

=CQI+1;--允许计数,检测是否小于65535

ELSECQI:

=(OTHERS=>'0');--大于65535,计数值清零

ENDIF;

IFCQI=16#FFFF#THENCOUT<='1';--计数大于9,输出进位信号

ELSECOUT<='0';

ENDIF;

ENDIF;

IFSUB_EN='1'THEN--检测是否允许计数(同步他能)

IFCQI>0THENCQI:

=CQI-1;--允许计数,检测是否小于65535

ELSECQI:

=(OTHERS=>'1');--大于65535,计数值清零

ENDIF;

IFCQI=0THENCOUT<='1';--计数大于9,输出进位信号

ELSECOUT<='0';

ENDIF;

ENDIF;

ENDIF;

CQ<=CQI;--将计数值向端口输出

ENDPROCESS;

ENDARCHITECTUREA_S_16;

3-6图3-18是一个含有上升沿触发的D触发器的时序电路(sxdl),试写出此电路的VHDL设计文件。

图3-18时序电路

--解:

实现图4-19电路的VHDL程序t4_19.vhd

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYt4_19IS

PORT(CL,CLK0:

INSTD_LOGIC;

OUT1:

OUTSTD_LOGIC);

ENDENTITYt4_19;

ARCHITECTUREsxdlOFt4_19IS----时序电路sxdl

SIGNALQ:

STD_LOGIC;

BEGIN

PROCESS(CLK0)

BEGIN

IFCLK0'EVENTANDCLK0='1'THEN--检测时钟上升沿

Q<=NOT(QORCL);

ENDIF;

ENDPROCESS;

OUT1<=NOTQ;

ENDARCHITECTUREsxdl;

3-7给出1位全减器的VHDL描述;最终实现8位全减器。

要求:

1)首先设计1位半减器,然后用例化语句将它们连接起来,图4-20中h_suber是半减器,diff是输出差(diff=x-y),s_out是借位输出(s_out=1,x

c

yin

xin

diff_out

b

a

图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;

(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-8给出一个4选1多路选择器的VHDL描述。

选通控制端有四个输入:

S0、S1、S2、S3。

当且仅当S0=0时:

Y=A;S1=0时:

Y=B;S2=0时:

Y=C;S3=0时:

Y=D。

--解:

4选1多路选择器VHDL程序设计。

LIBRARYIEEE;--图3-20(c)RTL图的VHDL程序顶层设计描述

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux41aIS

PORT(A,B,C,D:

INSTD_LOGIC;

S0,S1,S2,S3:

INSTD_LOGIC;

Y:

OUTSTD_LOGIC);

ENDENTITYmux41a;

ARCHITECTUREoneOFmux41aIS

SIGNALS0_3:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

S0_3<=S0&S1&S2&S3;

y<=AWHENS0_3="0111"ELSE

BWHENS0_3="1011"ELSE

CWHENS0_3="1101"ELSE

DWHENS0_3="1110"ELSE

'Z';

ENDARCHITECTUREone;

3-9分频方法有多种,最简单的是二分频和偶数分频甚至奇数分频,这用触发器或指定计数模的计数器即可办到。

但对于现场实现指定分频比或小数分频率的分频电路的设计就不是很简单了。

试对例3-20的设计稍作修改,将其进位输出COUT与异步加载控制LOAD连在一起,构成一个自动加载型16位二进制数计数器,也即一个16位可控的分频器,给出其VHDL表述,并说明工作原理。

设输入频率fi=4MHz,输出频率fo=516.5±1Hz(允许误差±0.1Hz),16位加载数值是多少?

--解:

3-916位数控分频器(可进行奇偶数分频)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYDVF16IS

PORT(CLK:

INSTD_LOGIC;

D:

INSTD_LOGIC_VECTOR(15DOWNTO0);

FOUT:

OUTSTD_LOGIC);

ENDENTITYDVF16;

ARCHITECTUREoneOFDVF16IS

SIGNALFULL:

STD_LOGIC;

BEGIN

P_REG:

PROCESS(CLK)

VARIABLECNT8:

STD_LOGIC_VECTOR(15DOWNTO0);

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCNT8="0000000000000000"THEN

CNT8:

=D-1;--当CNT8计数归0时,预置CNT8=D-1;

--计数范围(D=n):

n-1~n/2取整(n=10:

9\8\7\6\5计数,前后半周期相同)

FULL<='1';--同时使溢出标志信号FULL输出为高电平

--(n=11:

10\9\8\7\6\5计数,前比后半周期多一个时钟)

ELSIFCNT8=('0'&D(15DOWNTO1))THEN

CNT8:

=('0'&D(15DOWNTO1))-1;--当CNT8=n/2取整时,预置CNT8=D/2取整-1;

--计数范围(D=n):

n/2取整~0(n=10:

4\3\2\1\0计数)

FULL<='1';--同时使溢出标志信号FULL输出为高电平(n=11:

4\3\2\1\0计数)

ELSECNT8:

=CNT8-1;--否则继续作加1计数

FULL<='0';--且输出溢出标志信号FULL为低电平

ENDIF;

ENDIF;

ENDPROCESSP_REG;

P_DIV:

PROCESS(FULL)

VARIABLECNT2:

STD_LOGIC;

BEGIN

IFFULL'EVENTANDFULL='1'THEN

CNT2:

=NOTCNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反

IFCNT2='1'THENFOUT<='1';

ELSEFOUT<='0';

ENDIF;

ENDIF;

ENDPROCESSP_DIV;

ENDARCHITECTUREone;

3-10用VHDL设计一个功能类似74LS160的计数器。

--解:

3-10用VHDL设计一个功能类似74LS160(异步复位和同步使能加载、计数的十进制加法计数器)的计数器。

LIBR

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1