《EDA技术实 用教程(第五版)》习题_第1页
《EDA技术实 用教程(第五版)》习题_第2页
《EDA技术实 用教程(第五版)》习题_第3页
《EDA技术实 用教程(第五版)》习题_第4页
《EDA技术实 用教程(第五版)》习题_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

1习题

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

途?P3~4

EDA技术与ASIC设计和FPGA开发有什么关系?答:利用EDA技术进行电子系统设

计的最后目标是完成专用集成电路ASIC的设计和实现;FPGA和CPLD是实现这一途仔的主

流器件。FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)

和ASIC设计,以及对自助设计与自动实现最典型的诠释。

FPGA在AS1C设计中有什么用途?答:卜FGA和CPLD通常也被称为可编程专用1C,或

可编程ASICoFPGA实现ASIC设计的现场可编程器件。

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

答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU

而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其

特定的硬件电路结构所利用。

综合器将VHDL程序转化的目标是底层的电路结构网表文件,这种满足VHDL设计程

序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性。综合器在将VHDL(硬

件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性和创造

性,它不是机械的一一对应式的''翻译",而是根据设计库、工艺库以及预先设置的各类约

束条件,选择最优的方式完成电路结构的设计。

1-3什么是综合?有哪必类型?综合在电子设计自动化中的地位是什么?P6

什么是综合?答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达

的电子系统转换为低层次的便于具体实现的模块组合装配的过程。

有哪些类型?答:(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。(2)从

算法表示转换到寄存器传输级(RegisterTransportLevel,RTL),即从行为域到结构域的综

合,即行为综合。(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。(4)

从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综

合或结构综合。

综合在电子设计自动化中的地位是什么?答:是核心地位(见图「3)。综合器具有更

复杂的工作环境,综合器在接受VHDL程序并准备对其综合前,必须获得与最终实现设计电

路硬件挣征相关的上2摩信息,以及获得优化综合的诸多约束条件信息;根据工々库和约束

条件信息,将VHDL程序转化成电路实现的相关信息。

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

答:在EDA技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐步

求精的过程。

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

答:IP核具有规范的接口协议,良好的可移植与可测试性,为系统开发提供了可靠的

保证。

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

用。(P12-14)

答:1.设计输入(原理图/HDL文本编辑)(EDA设计输入器将电路系统以一定的表达方

式输入计算机);2.综合(EDA综合器就是将电路的高级语言(如行为描述)转换成低级的,

可与FPGA/CPU)的基本结构相映射的网表文件或程序。);3,适配(EDA适配器的功能是将

由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、

JAM格式的文件。);4.时序仿真(EDA时序仿真器就是接近真实器件运行特性的仿真,仿真

文件中已包含了器件硬件特性参数,因而,仿真精度高,)与功能仿真(EDA功能仿真器直

接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是

否满足原设计的要求,仿真过程不涉及任何具体器件的硬件特性。);5.编程下载(EDA编

程下载把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD下载,以便

进行硬件调试和验证(HardwareDebugging)o);6.硬件测试(最后是将含有载入了设计的

FPGA或CPLD的硬件系统进行统一测试,以便最终验证设计项目在目标系统上的实际工作情

况,以排除错误,改进设计。具中EDA的嵌入式逻辑分析仪是将含有载入了设计的bPGA

的硬件系统进行统一测试,并将测试波形在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被编程后改变了电可擦除存储单元中的信息,掉电后可保存。电可擦除编程工

艺的优点是编程后信息不会因掉电而丢失,但编程次数有限,编程的速度不快。

配置:基于SRAY查找表的编程单元。编程信息是保存在SRAM中的,SRAM在掉电

后编程信息立即丢失,在下次上电后,还需要重新载入编程信息。大部分FPGA采用该种编

程工艺。该类器件的编程一般称为配置。对于SRAM型FPGA来说,配置次数无限,且速度快;

在加电时可随时更改逻辑;下载信息的保密性也不如电可擦除的编程。

2-6请参阅相关资料,并回答问题:按本章给出的归类方式,将基于乘积项的可编程逻

辑结构的PLD器件归类为CPLD;将基于查找表的可编程逻辑结构的PLD器什归类为

FPGA,那么,APEX系列属于什么类型PLD器件?MAXII系列又属于什么类型的PLD器

件?为什么?P47~51

答:APEX(AdvancedLogicElementMatrix)系列属于FPGA类型PLD器件;编程信息

存于SRAM中。MAXH系列属于CPLD类型的PLD器件;编程信息存于EEPROM中。

3习题

3-1说明端口模式INOUT和BUFFER有何异同点。P60

INOUT:具有三态控制的双向传送端口

BUFFER:具有输出反馈的单向东湖出口。

3-2画出与以下实体描述对应的原理图符号元件:

ENTITYbuf3sIS-实体1:三态缓冲器

PORT(input:INSTD.LOGIC;一输入端

enable:INSTD_LOGIC;一使能端

output:OUTSTDLOGIC);一输出端

ENDbuf3s;

ENTITYmux21IS-实体2:2选1多路选择器

PORT(inO,ini,sei:INSTD.LOGIC;

output:OUTSTD_LOGIC);

mux21

inO

3-3试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程序,选择控

制信号si和sO的数据类型为STD_LOGIC_VECTOR;Ssl='O',sO='O';sl='O',sO=T;

sl="\sO=XT和sl="\sO=T时,分别执行yv=a、y<=b、yv=c、y〈=d。

-解I:用IF_THEN语句实现4选1多路选择器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux41IS

PORT(a,b,c,d:INSTD_LOGIC;

sO:INSTD.LOGIC;

si:INSTD_LOGIC;

y:OUTSTD_LOGIC);

ENDENTITYmux4l;

ARCHITECTUREiCmux41OFmux41IS

SIGNALsOsI:STD_LOGIC_VECTOR(IDOWNTO());-定义标准逻辑位矢量数据

BEGIN

s()sl<=sl&sO;-si相并sO,即si与sO并置操作

PR()CESS(s()sl,a,b,c,d)

BEGIN

IFsOsl="OO1'THENy<=a;

ELSIFsOsl="01"THENy<=b;

ELSIFsOsl="10"THENy<=c;

ELSEy<=d;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREif_mux41;

一解2:用CASE语句实现4选1多路选择器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_i164.ALL;

ENTITYmux41IS

PORT(a.b,c,d:INSTDLOGIC;

sO:INSTD.LOGIC;

si:INSTD.LOGIC;

y:OUTSTD.LOGIC);

ENDENTITYmux41;

ARCHITECTUREcase_mux41OFmux41IS

SIGNALsOsl:STD_LOGIC_VECTOR(1DOWNTO0);-定义标准逻辑位矢量数据类型

BEGIN

sOsl<=sl&sO;-si相并s0,即si与sO并置操作

PROCESS(sOsl,a,b,c,d)

BEGIN

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

WHEN"00"y<=a;

WHEN"Ol"=>y<=b;

WHENM10"y

WHEN"11"yd;

WHENOTHERS=>NULL

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREcase_mux41;

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

1)首先-1位半减器,然后用例化语句将它们连接起来、图4-20中hsuber是半减器.diff是

vi•nU

3c输出差(diff二x・y),s_out是借位输出(s_out=l,x<y),sub_in是借位输入。

X

y

sub

图3-18全减器结构图

一解(1.1):实现1位半减器h_suber(diff二x-y;s_out=1,x<y)

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;

ENDARCHITECTUREhsl;

-解(1.2):采用例化实现图4-20的1位全减器

LIBRARYIEEE;位二进制全减器顺层设计描述

USEIEEE.STD_LOG1C_1164.ALL;

ENTITYf_subcrIS

PORT(xin,yin,sub_in:INSTD_LOGIC;

sub_out,difLout:OUTSTD_LOGIC);

ENDENTITYLsubcr;

ARCHITECTUREfslOFf_subcrIS

COMPONENTh_subcr-调用半减器声明语句

PORT(x,y:INSTD.LOGIC;

diff,s_out:OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALa,b,c:STD_LOGIC;一定义1个信号作为内部的连接线。

BEGIN

ill:h_subcrPORTMAP(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)以I位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设

计(减法运算是x-y-sun_in=difft)«

串行借位的8位减法器

-解(2):采用例化方法,以1位全减器为基本硬件:实现串行借位的8位减法器(上图所示)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsuber_8IS

PORT(xO,xI,x2,x3,x4.x5,x6,x7:INSTD.LOGIC;

yO,y1,y2,y3,y4,y5,y6.y7,sin:INSTD_LOGIC;

diffO,diffl.dift2,diff3:OUTSTD_LOGIC;

diff4,diff5,diff6,diff7,sout:OUTSTD_LOGIC);

ENDENTITYsubcr_8;

ARCHITECTUREs8OFsubcr_8IS

COMPONENTf.subcr-调用全减器声明语句

PORT(xin,yin,sub_in:INSTD.LOGIC;

sub_out,difLout:OUTSTD.LOGIC);

ENDCOMPONENT;

SIGNALaO,aI,a2,a3,a4,a5,a6:STD_LOG1C;一定义1个信号作为内部的连接线。

BEGIN

uO:LsuberPORTMAP(xin=>xO,yin=>yOJiff_out=>diffO,sub_in=>sin,sub_out=>aO);

ul:LsuberPORTMAP(xin=>x1,yin=>y1,diff_out=>diffl,sub_in=>aO,sub_out=>a1);

u2:f_suberPORTMAP(xin=>x2,yin=>y2,diff_out=>diff2,sub_in=>al,sub_out=>a2);

u3:fsuberPORTMAP(xin=>x3.yin=>y3,diffout=>diff3,subin=>a2.subout=>a3):

u4:LsuberPORTMAP(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;一为使用类型转换函数,打开此程序包。

ENTITYdecoder3t08IS

port(DIN:INSTD_LOGIC_VECTOR(2D0WNT00);

DOUT:OUTBIT_VECTOR(7DOWNTOO));

ENDdccoder3to8;

ARCHUECIUREbehaveObdecoder3to8IS

BEGIN

WITHCONVJNTEGER(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_LOG1C_UNSIGNED.ALL;-为使用类型转换函数,打开此程序包。

ENTITYdecoder3t08IS

port(DIN:INSTD_LOGIC_VECTOR(2D0WNT00);

DOUT:OUTB1T_VECTOR(7DOWNTOO));

ENDdecoder3to8;

ARCHITECTUREbehaveOFdecoder3t08IS

BEGIN

PROCESS(DIN)

BEGIN

CASECONVJNTEGER(DIN)IS

WHEN0=>DOUTvFOOOOOOOl”;

WHEN1=>DOUT<="00000010";

WHEN2=>DOUT<="00000100";

WHEN3=>DOUTvFOOOOlOOO”;

WHEN4=>DOUT<="00010000";

WHEN5=>DOUT<="00100000";

WHEN6=>DOUT<="Oi000000";

WHEN7=>D()UT<="100(X)000";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDbehave;

解(3):if_else语句

-3-53到8译码器设计(if_clse语句实现)

LIBRARYIEEE;

USE1EEE.S1D_LOG1C_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;--为使用类型转换函数,打开此程序包。

ENTITYdecoder3t08IS

port(DIN:INSTD_LOGIC_VECTOR(2DOWNTO0);

DOUT:OUTBITVECTOR(7DOWNTO0)):

ENDdecoder3t08;

ARCHITECTUREbehaveOFdecoder3to8IS

BEGIN

PROCESS(DIN)

BEGIN

IFCONVJNTEGER(DIN)=0THENDOUT<="00000001";

ELSIFCONVJNTEGER(DIN)=1THENDOUT<=-00000010";

ELSIFCONVJNTEGER(DIN)=2THENDOUT<='00000100";

ELSIFCONV」NTEGER(DIN)=3THENDOUT<='()0001000";

ELSIFC0NV」NTEGER(DIN)=4THENDOUT<="()()()10000”;

ELSIFCONV」NTEGER(DIN)=5THENDOUTVOO100000”;

ELSIFCONV」NTEGER(DIN)=6THENDOUT<='0100000()";

ELSIFCONV」NTEGER(DIN)=7THENDOUT<='10000000";

ENDIF;

ENDPROCESS;

ENDbehave;

解(4):移位操作符

-3-53到8译码器设计(移位操作实现)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STDLOGICUNSIGNED.ALL:--为使用类型转换函数,打开此程序包。

ENTITYdecoder3t08IS

port(DIN:INSTD_LOGIC_VECTOR(2DOWNTO0);

DOUT:OUTBIT_VECTOR(7DOWNTO0));

ENDdecoder3t08;

ARCHITECTUREbehaveOFdecoder3to8IS

BEGIN

DOUT<="00000001"SLLCONV」NTEGER(DIN);-被移位部分是常数

ENDbehave;

3-6设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。

-解:3-6设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOG1C_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(dJn)

BEGIN

IF(d_in>"0101")THEN

cmp_outv=T;一输入数据大于5,比较输出U

else

cmp_out<='0,;-输入数据小于等于5,比较输出Oo

ENDIF;

ENDPROCESS;

ENDBHV;

3-7利用if语句设计一个全加器。

-3-7利用if语句设计一个全加器

LIBRARYIEEE;-I位二进制全加器顶层设计描述

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYLadderIS

PORT(ain,bin,cin:INSTD.LOGIC;

cout,sum:OUTSTD_LOGIC);

ENDENTITYLadder;

ARCHITECTUREtdlOhLadderIS

BEGIN

PROCESS(ain,bin,cin)

BEGIN

IFain='1'XORbin='1'XORcin='1'THENsum<='1':ELSEsum<='0':ENDIF:

IF(ain=TANDbin='r)OR(ain='l'ANDcin=T)OR(bin=TANDcin=T)OR(ain=TAND

bin-1'ANDcin=T)

THENcout<='l';

ELSEcoutv='O';

ENDIF:

ENDPROCESS;

ENDARCHITECTUREfd1;

3-8设计一个求补码的程序,输入数据是一个有符号的8位二进制数。

-解:3-8设计一个求补码的程序,输入数据是一个有符号的8位二进制数。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYorg_patchIS

P0RT(org_data:INSTD_LOGIC_VECTOR(7D0WNT00);一原码输入

patch_data:OUTSTD_L0GIC_VECT0R(7DOWNTO0));一补码输出

ENDorg_patch;

ARCHUECIUREBHVOForg_patchIS

BEGIN

PROCESS(org_data)

BEGIN

IF(orgdata(7)='O')THEN

patch_data<=org_data;-org_data>=0,补码=原码。

else

patch_data<=org_data(7)&(notorg_data(6DOWNTO0))+1;-org_data<0,补码=|原

码I取反+1。

ENDIF;

ENDPROCESS;

ENDBHV;

3-9设计一个格雷码至二进制数的转换器。

-3-9设计一个格雷码至二进制数的转换器。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;一为使用类型转换函数,打开此程序包。

ENTITYgrayTObinaryIS

port(DIN:INSTD_LOGIC_VECTOR(3D0WNT00);

DOUT:OUTBIT_VECTOR(3DOWNTOO));

ENDgrayTObinary;

ARCHUECIUREbehaveObgrayiObinaryIS

BEGIN

PROCESS(DIN)

BEGIN

CASEDINIS

WHEN"0000"=>DOUT<=,,0000";

WHEN"0001"=>DOUTv="0001”;

WHEN"0011"=>DOUT<="0010";

WHEN"0010"=>DOUT<="00H";

WHEN"0110"=>DOUTv="0100”;

WHEN"0111"=>DOUT<="0101";

WHEN"0101"=>DOUT<="OHO";

WHEN"0100"=>DOUT<="0111";

WHEN"1100"=>DOUTblOOO";

WHEN“1101"=>DOUT<="1001

WHEN"1111"=>DOUT<="1010";

WHEN"1110°=>DOUT<="1()11";

WHEN"1010"=>DOUT<=,,UOO,*;

WHEN"1011"=>DOUT<="1101”;

WHEN"1001"=>DOUT<="1110";

WHEN"1000"=>DOUT<="llir';

WHENO1HERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDbehave;

3-10利用if语句设计一个3位二进制数A[2..0]、B[2..0]的比较器电路。对于比较(A<B)、

(A>B)、(A=B)的结果分别给出输出信号LT=1、GT=kEQ=lo

-3-10利用if语句设计一个3位二进制数A[2..0]、B[2..O]的比较器电路。

一对于比较(AvB)、(A>B)、(A=B)的结果分别给出输出信号LT=1、GT=1>EQ=L

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCOMPIS

PORT(A.B:INSTD_L0GIC_VECT0R(2DOWNTO0);--两个3位输入

Ur:OUTSTD_LOG1C;一小于输出

GT:OUTSTD_LOGIC;一大于输出

EQ:OUTSTD.LOGIC);一等于输出

ENDENTITYCOMP:

ARCHITECTUREONEOFCOMPIS

BEGIN

PROCESS(A,B)

BEGIN

IF(A<B)THENLl'<=liELSELr<='O';ENDIF;

IF(A>B)THENGT<='1';ELSEGT<='0';ENDIF;

IF(A=B)THENEQ<='1';ELSEEQ<='0';ENDIF;

ENDPROCESS;

-LT<=(AvB):--小于

-GTv=(A>B);--大于

—EQ<=(A=B);--笔于

ENDARCHITECTUREONE;

3-11利用8个全加器,可以构成一个8位加法器。利用循环语句来实现这项设计。并以

此项设计为例,使用GENERIC参数传递的功能,设计一个32位加法器。

-3-11利用GENERIC参数和循环语句将8个全加器构成成8位加法器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOG1C_ARITH.ALL;

ENTITYADDER8BIS

GENERIC(S:INTEGER:=8);一定义参数S为整数类型,且等于4

P0RT(A,B:INSTD_LOG1C_VECTOR(S-1DOWNTO0);

CIN:INSTD.LOGIC;

SUM:OUTSTD_LOGIC_VECTOR(S-1DOWNTO0);

COUT:OUTSTD_LOGIC);

ENDENTITYADDER8B;

ARCHITECTUREONE0FADDER8BIS

BEGIN

PROCESS(A,B,CIN)

VARIABLESI:STDLOGICVECTOR(S-1DOWNTO0):

VARIABLECl:STD_LOGIC;-_VECTOR(SDOWNTO0);

BEGIN

C1:=CIN;

-C1(O):=CIN;

FORiIN1TOSLOOP

IFA(i-1)=TXORB(i-1)=TXORC1=TTHENSl(i-1):=T;ELSESl(i-1i:='O';

ENDIF;

IF(A(i-l)='l'ANDB(i-l)=T)OR(A(i-l)=TANDCl='r)OR(B(i-l)='rAND

Cl='r)OR(A(i-l)='rANDB(i-1)=TANDCl='l')

THENC1:=T;

ELSECl

ENDIF;

ENDLOOP;

SUM<=S1;COUT<=C1;

ENDPROCESS;

ENDARCHITECTUREONE;

3-12设计一个2位BCD码减法器。注意可以利用BCD码加法器来实现。因为减去一个

二进制数,等于加上这个数的补码。只是需要注意,作为十进制的BCD码的补码获取方式

与普通二进制数稍有不同,我们知道二进制数的补码是这个数的取反加1。假设有一个4位

二进制数是0011,其取补实际上是用1111减去0011,再加上1。相类似,以4位二进制表

达的BCD码的取补则是用9(1001)减去这个数再加上U

-3-12设计2位BCD码减法器(利用减去数等于加上该数补码方法)(a-b=a+[-b]补码)

LIBRARYIEEE;■待例化元件

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_arith.ALL;

USEIEEE.STD_LOGIC_unsigned.ALL;

ENTITYSUB2BCDIS

PORT(a,b:INSTD_LOGIC_VECTOR(7DOWNTO0);

diff:outSTD_LOGIC_VECTOR(7DOWNTO0);

sout:OUTSTD_LOGIC);

ENDSUB2BCD;

ARCHITECTUREbehaveOFSUB2BCDIS

BEGIN

PROCESS(a.b)

VARIABLEcc:STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

IFa<bTHENsout〈=T;ELSEsout<='0';ENDIF;

cc:="10011010,r-b;

IFcc(3DOWNTO0)>"l001"THENcc:=cc+"00000110";ENDIF;

IFcc(7DOWNTO4)>,,1001"THENcc:=cc+"01100000";ENDIF;

cc:=a+cc;

IFcc(3DOWNTO0)>"1001"THENcc:=cc+"00000110";ENDIF;

IFcc(7DOWNTO4)>"1001"THENcc:=cc+"01100000";ENDIF;

IFa<bTHEN

cc:=,,10011010"-cc;

IFcc(3DOWNTO0)>,,1001"THENcc:=cc+"00000110";ENDIF;

IFcc(7DOWNTO4)>01001"THENcc:=cc+"01100000";ENDIF;

ENDIF;

diff<=cc;

ENDPROCESS;

ENDbehave;

3-13设计一个4位乘法器,为此首先设计一个加法器,用例化语句调用这个加法器,用

移位相加的方式完成乘法s并以此项设计为基础,使用GENERIC参数传递的功能,设计一

个16位乘法器。

-3-134位移位相加型乘法器设计(例化调用加法器)

LIBRARYIEEE;

USEIEEE.STD_LOGIC_i164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STDLOGICARITH.ALL:

ENTITYMULT4BIS

GENERIC(S:INTEGER:=4);-定义参数S为整数类型,旦等于4

PORT(R:OUTSTD_LOGIC_VECTOR(2*S-1DOWNTO0);

A,B:INSTD_LOGIC_VECTOR(S-1DOWNTO0));

ENDENTITYMULT4B;

ARCHITECTUREONEOFMULT4BIS

COMPONENTaddemIS

PORT(a,b:INSTD_LOGIC_VECTOR;

result:outSTD_LOGIC_VECTOR);

ENDCOMPONENT;

SIGNALAO:STD_LOGIC_VECTOR(2*S-1DOWNTO0);

SIGNALRR3,RR2,RR1,RR0,ZZ1,ZZ0:STD_LOGIC_VECTOR(2*S-1DOWNTO0);

BEGIN

AO<=CONV_STD_LOGIC_VECTOR(0,S)&A;

PROCESS(A,B)

BEGIN

lF(B(O)='r)THENRRO<=TO_STDL(XiICVECTOR(TO_BITVECrOR(AO)SLL0):ELSERR(R=(OTHERS=>'0'):ENDIF:

IF(B(l)='r)THENRR1<=TO_STDLOGICVECTOR(TO_BITVECrOR(AO)SLL1):ELSERR1<=(OTHERS=>0'):ENDIF:

IF(B(2)='r)THENRR2<=TO_STDLOGICVECTOR(TO_BITVECrOR(AO)SLL2):ELSERR2<=(OTHERS=>'0'):ENDIF:

IF(B(3)='r)THENRR3<=TO_SIDLOGICVECTORCTO_BITVECrOR(AO)SLL3):ELSERR3<=(OrHERS=>'0'):ENDIF:

ENDPROCESS;

uO:addernPORTMAP(a=>RR0,b=>RR1,result=>ZZO);

ul:addernPORTMAP(a=>ZZ0,b=>RR2,result=>ZZl);

u2:addernPORTMAP(a=>ZZ1,b=>RR3,result=>R);

ENDARCHITECTUREONE;

-3-13a16位乘法器(通过底层3-13_MULTSB和顶层GENERIC参数和传递例化语句实

现)

LIBRARYIEEE:

USEIEEE.STD_LOG1C_1164.ALL;

ENTITYMULT16BIS

PORT(D),D2:INSTD_LOGIC_VECTOR(15DOWNTO0);

Q:OUTSTD_LOGIC_VECTOR(31DOWNTO0));

END;

ARCHITECTUREBHVOFMULT16BIS

COMPONENTMULTSB-MULTS8模块的调用声明

GENERIC(S:integer);一照抄MULTSB实体中关于参数“端M”定义的语句

PORIXR:OUTstd_logic_vector(2*S-lDOWNTO0);

A,B:INstd_logic_vector(S-1DOWNTO0));

ENDCOMPONENT;

BEGIN

ul:MULTSBGENERICMAP(S=>I6)PORTMAP(R=>Q.A=>D1.B=>D2):

END;

3-14用循环语句设计一个7人投票表决器。

-解:3-14用循环语句设计一个7人投票表决器,及一个4位4输出最大数值检测电路。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYvote_7IS

I»ORT(DIN:INSlD_LOGlC_VECrOR(6DOWNTO0):-7位表决输入(I:同意,0:不同意)

G_4:OUTSTD.LOGIC;-超过半数指示

CNTH:OUTSTD_LOGIC_VECTOR(2DOWNTO0));一表决结果统计数

ENDvote_7;

ARCHITECTUREBHVOFvote_7IS

BEGIN

PROCESS(DIN)

VARIABLEQ:STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

Q:="0(X)";

FORnIN0TO6LOOP-n是LOOP的循环变量

IF(DIN(n)='r)THENQ:=Q+1;ENDIF;

ENDLOOP;

CNTHv=Q;

IFQ>=4THENG_4v=T;ELSEG_4<='0';ENDIF;

ENDPROCESS;

ENDBHV;

3-15设计一个4位4输入最大数值检测电路。

-3-15设计一个4位4输入最大数值检测电路。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL:

ENTITYMAXDM'AIS

P0RT(A:INSTD_LOGIC_VECTOR(3D0WNT00);

MAXOUT:OUTSTD.LOGIC);

ENDENTITYMAXDATA;

ARCHITECTUREONEOFMAXDATAIS

BEGIN

PROCESS(A)

BEGIN

IFA="llll"THENMAXOUT<=T;ELSEMAXOUT<='0';ENDIF;

ENDPROCESS;

ENDARCHITECTUREONE;

3-16设计VHDL程序,实现两个8位二进制数相加,然后将和左移或右移4位,并分别

将移位后的值存入变量AA和BB中。

-3-16设计VHDL程序,实现两个8位二进制数相加,然后将和左移或右移4位,并分别

将移位后的值存入变量A和B中。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

ENTITYADDER8BIS

GENERIC(S:INTEGER:=8);-定义参数S为整数类型,且等于4

PORT(A,B:INSTD_LOGIC_VECTOR(S-1DOWNTO0);

CIN:INSTD.LOGIC;

SUM:OUTSTD_LOGIC_VECTOR(S-1DOWNTO0);

COUT:OUTSTD.LOGIC;

AA,BB:OUTSTD_LOGIC_VECTOR(S-1+4DOWNTO0));

ENDENTITYADDER8B;

ARCHITECTUREONEOFADDER8BIS

BEGIN

PROCESS(A.B,CIN)

VARIABLES!:STD_LOGIC_VECTOR(S-1DOWNTO0);

VARIABLECl:STD_LOGIC;

VARIABLEAB:STDLOGICVECTOR(S-I+4DOWNTO0):

BEGIN

CI:=CIN;

FORiIN1TOSLOOP

IFA(i-l)=(rXORB(i-l)='rXORC1=TTHENSl(i-1):=T;ELSESl(i-11:='0';

ENDIF;

IF(A(i/)=TANDB(i-l)=T)OR(A(i-l)=TANDCl=T)OR(B(i-l)=TAND

Cl='r)OR(A(i-l)='rANDB(i-1)=TANDC1=T)

THENCl

ELSEC1:='O';

ENDIF;

ENDLOOP;

SUM<=S1;COUT<=C1;

AA<=TO_STDLOGICVECTOR(TO_BITVECTOR("0000"&S1)SLL4);

BB<=TO_STDLOGICVECTOR(TO_BITVECTOR("0000"&S1)SRL4);

ENDPROCESS;

ENDARCHITECTUREONE;

3-17举例说明GENERIC说明语句(在实体定义语句中定义类属常数)和GENERIC映射

语句(在例化语句中将类属常数赋予新值)有何用处。P82

3-18表达式C<=A+B中,A、B和C的数据类型都是STD_LOGIC_VECTOR,是否能直

接进行加法运算?说明原因和解决方法。能(第一种将A、B转换成整型数相加结果再转换

成逻辑位矢后送CP89;第二种使用USEIEEE.SDTLOGICUNSIGNED.ALL语句打开重载

运算符程序包。P70,P130)

3-19VHDL中有哪三种数据对象?详细说明它们的功能特点以及使用方法,举例说明数据

对象与数据类型的关系。信号,变量,常量P71

3-20能把任意一种进制的值向一整数类型的数据对象赋值吗?如果能,怎样做?能(若

A,B,C,D是信号整数类型,A<=16#df#;B<=8#23#;C<=2#01#;D<=10)P83

3-21回答有关BIT和BOOLEAN数据类型的问题:P59

(1)解释BIT(B「T)和BOOLEAN(“TRUE”,“FALSE”)类型的区别。

(2)对于逻辑操作应使用哪种类型?BIT

(3)关系操作的结果为哪种类型?BOOLEAN

(4)IF语句测试的表达式是哪种类型?BOOLEAN

3-22用两种方法设计8位比较器,比较器的输入是两个待比较的8位数A=[A7.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论