VHDL程序设计教程习题解答.docx

上传人:b****8 文档编号:28486524 上传时间:2023-07-14 格式:DOCX 页数:24 大小:23.14KB
下载 相关 举报
VHDL程序设计教程习题解答.docx_第1页
第1页 / 共24页
VHDL程序设计教程习题解答.docx_第2页
第2页 / 共24页
VHDL程序设计教程习题解答.docx_第3页
第3页 / 共24页
VHDL程序设计教程习题解答.docx_第4页
第4页 / 共24页
VHDL程序设计教程习题解答.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

VHDL程序设计教程习题解答.docx

《VHDL程序设计教程习题解答.docx》由会员分享,可在线阅读,更多相关《VHDL程序设计教程习题解答.docx(24页珍藏版)》请在冰豆网上搜索。

VHDL程序设计教程习题解答.docx

VHDL程序设计教程习题解答

VHDL程序设计教程

习题参考解答

第1章思考题解答

1.什么是VHDL?

简述VHDL的发展史。

答:

VHDL是美国国防部为电子项目设计承包商提供的,签定合同使用的,电子系统硬件描述语言。

1983年成立VHDL语言开发组,1987年推广实施,1993年扩充改版。

VHDL是IEEE标准语言,广泛用于数字集成电路逻辑设计。

2.简述VHDL设计实体的结构。

答:

实体由实体名、类型表、端口表、实体说明部分和实体语句部分组成。

根据IEEE标准,实体组织的一般格式为:

ENTITY实体名IS

[GENERIC(类型表);]--可选项

[PORT(端口表);]--必需项

实体说明部分;--可选项

[BEGIN

实体语句部分;]

END[ENTITY][实体名];

3.分别用结构体的3种描述法设计一个4位计数器。

答:

用行为描述方法设计一个4位计数器如下,其它描述方法,读者可自行设计。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

useieee.std_logic_unsigned.all;

ENTITYcountAIS

PORT(clk,clr,en:

INSTD_LOGIC;

Qa,qb,qc,qd:

OUTSTD_LOGIC);

ENDcountA;

ARCHITECTUREexampleOFcountAIS

SIGNALcount_4:

STD_LOGIC_vector(3DOWNTO0);

BEGIN

Qa<=count_4(0);

Qb<=count_4

(1);

Qc<=count_4

(2);

Qd<=count_4(3);

PROCESS(clk,clr)

BEGIN

IF(clr='1')THEN

Count_4<="0000";

ELSIF(clk'EVENTANDclk='1')THEN

IF(en='1')THEN

IF(count_4="1111")THEN

count_4<="0000";

ELSE

count_4<=count_4+'1';

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

ENDexample;

第2章思考题解答

1.什么叫对象?

对象有哪几个类型?

答:

在VHDL语言中,凡是可以赋于一个值的客体叫对象(object)。

VHDL对象包含有专门数据类型,主要有4个基本类型:

常量(CONSTANT)、信号(SIGNAL)、变量(VARIABLE)和文件(FILES)。

2.VHDL语言定义的标准类型有哪些?

答VHDL语言标准所定义的标准数据类型

(1)整数类型(INTEGERTYPE)

(2)实数类型或浮点类型(REALTYPE&FLOATINGTYPE)

(3)位类型(BITTYPE)

(4)位矢量类型(BIT_VECTORTYPE)

(5)布尔类型(BOOLEANTYPE)

(6)字符类型(CHARACTERTYPE)

(7)时间类型或物理类型(TIMETYPE&PHYSICALTYPE)

(8)错误类型(NOTE,WARNIING,ERROR,FAILURETYPE)

(9)自然数、整数类型(NATURALTYPE)

(10)字符串类型(TRINGTYPE)

3.简述VHDL语言操作符的优先级。

答:

在表2.1中,取反和取绝对值优先级较高,与、或逻辑运算的优先级低于算术运算的优先级。

4.哪3种方法可用来进行类型转换?

答:

进行不同类型的数据变换,有3种方法:

类型标记法、函数转换法和常数转换法。

第3章思考题解答

1.什么叫进程?

简述进程的工作方式。

答:

进程(process)是由外部信号触发执行的一段程序。

进程语句是并行处理语句,即各个进程是同时处理的,在结构体中多个Process语句是同时并发运行的。

在进程内部是顺序执行的。

Process语句在VHDL程序中,是描述硬件并行工作行为的最常用、最基本的语句。

进程Process语句中一般带有几个信号量例表,称为该进程的敏感量表。

这些信号无论哪一个发生变化都将启动Process进程。

一旦启动,进程Process中的程序将从上到下顺序执行一遍,由新变化的量引导进程产生变化结果输出。

当进程的最后一个语句执行完成后,就返回到进程开始处,等待敏感量的新变化,引发进程的再一次执行。

周而复始,循环往复,以至无穷。

这就是进程的执行过程。

2.什么叫模块?

区分模块与进程。

答:

模块(Block)语句是结构体中积木化设计语言,适用于复杂项目设计。

Block块是一个独立的子结构,可以包含PORT语句、GENERIC语句,允许设计者通过这两个语句将Block块内的信号变化传递给Block块的外部信号。

同样,也可以将Block块的外部信号变化传递给Block块的内部信号。

对VHDL语言中的Block模块进行仿真时,Block模块中所描述的各个语句是可以并发执行的,和模块中的语句书写顺序无关。

进程语句是一段程序,这段程序是顺序执行的。

3.用结构描述法和GENERATE语句设计一个8位移位寄存器。

答:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYshift_registerIS

PORT(a,clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDENTITYshift_regester;

ARCHITECTUREeight_BIT_shift_registerOFshift_registerIS

COMPONENTdff--dff元件调用

PORT(a,Clk:

INSTD_LOGIC;

b:

OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALX:

STD_LOGIC_VECTOR(0TO4);

BEGIN

X(0)<=a;

dff1:

dffPORTMAP(X(0),clk,Z

(1));

dff2:

dffPORTMAP(X

(1),clk,Z

(2));

dff3:

dffPORTMAP(X

(2),clk,Z(3));

dff4:

dffPORTMAP(X(3),CLK,Z(4));

dff5:

dffPORTMAP(X(4),CLK,Z(5));

dff6:

dffPORTMAP(X(5),CLK,Z(6));

dff7:

dffPORTMAP(X(6),CLK,Z(7));

dff4:

dffPORTMAP(X(7),CLK,Z(8));

B<=X(8);

ENDARCHITECTUREeight_bit_shift_register;

4.设计一个3-8优先级编码器。

答:

参考书中第5章编码器设计。

5.设计一个4-16译码器。

答:

参考书中第5章译码器设计。

第4章思考题解答

1.配置语句的书写格式是怎样的?

答:

配置语句的书写形式为:

CONFIGURAT10N配置名OF实体名IS

FOR选配构造体名

ENDFOR;

END配置名;

2.配置说明中的映射有哪两种方法?

答:

位置关联法和名称关联法。

3.在配置语句中用GENERIC指定参数,设计一个译码器。

答:

LIBRARYIEEE;

USEIEEE.std_logic_1164.ALL;

ENTITYdecodeIS

PORT(a,b,en:

INstd_logic;

Q0,q1,q2,q3:

OUTstd_logic);

ENDdecode;

ARCHITECTUREstructuralOFdecodeIS

COMPONENTinv

PORT(a:

INstd_logic;

b:

OUTstd_logic);

ENDCOMPONENT;

COMPONENTand3

PORT(a1,a2,a3:

INstd_logic;

O1:

OUTstd_logic);

ENDCOMPONENT;

SIGNALnota,notb:

std_logic;

BEGIN

I1:

inv

PORTMAP(a,nota);

I2:

inv

PORTMAP(b,notb);

AN1:

and3

PORTMAP(nota,en,notb,q0);

AN2:

and3

PORTMAP(a,en,notb,q1);

AN3:

and3

PORTMAP(nota,en,b,q2);

AN4:

and3

PORTMAP(a,en,b,q3);

ENDstructural;

-------------------------------------------

CONFIGURATIONdecode_gen1_conOFdecodeIS

FORstructural

FORI1:

invUSEENTITYWORK.inv(inv_gen1)

GENERICMAP(int_rise=>1.2ns,

Int_fall=>1.7ns,

Ext_rise=>2.6ns,

Ext_fall=>2.5ns);

ENDFOR;

FORI2:

invUSEENTITYWORK.inv(inv_gen1)

GENERICMAP(int_rise=>1.3ns,

Int_fall=>1.4ns,

Ext_rise=>2.8ns,

Ext_fall=>2.9ns);

ENDFOR;

FORAN1:

and3USEENTITYWORK.and3(and3_gen1)

GENERICMAP(int_rise=>2.2ns,

Int_fall=>2.7ns,

Ext_rise=>3.6ns,

Ext_fall=>3.5ns);

ENDFOR;

FORAN2:

and3USEENTITYWORK.and3(and3_gen1)

GENERICMAP(int_rise=>2.2ns,

Int_fall=>2.7ns,

Ext_rise=>3.1ns,

Ext_fall=>3.2ns);

ENDFOR;

FORAN3:

and3USEENTITYWORK.and3(and3_gen1)

GENERICMAP(int_rise=>2.2ns,

Int_fall=>2.7ns,

Ext_rise=>3.3ns,

Ext_fall=>3.4ns);

ENDFOR;

FORAN4:

and3USEENTITYWORK.and3(and3_gen1)

GENERICMAP(int_rise=>2.2ns,

Int_fall=>2.7ns,

Ext_rise=>3.0ns,

Ext_fall=>3.1ns);

ENDFOR;

ENDFOR;

ENDdecode_gen1_con;

4.计一个加法器,元件例化后放入库中备用。

答:

半加器及全加器VHDL程序设计

(1)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYfull_adderIS

PORT(a,b,cin:

INSTD_LOGIC;

Sum,co:

OUTSTD_LOGIC);

ENDfull_adder;

ARCHITECTUREfull1OFfull_adderIS

COMPONENThalf_adder

PORT(a,b:

INSTD_LOGIC;

S,co:

OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALu0_co,u0_s,u1_co:

STD_LOGIC;

BEGIN

U0:

half_adderPORTMAP(a,b,u0_s,u0_co);

U1:

half_adderPORTMAP(u0_s,cin,sum,u1_co);

Co<=u0_coORu1_co;

ENDfull1;

半加器及全加器VHDL程序设计

(2)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYhalf_adderIS

PORT(a,b:

INSTD_LOGIC;

S,co:

OUTSTD_LOGIC);

ENDhalf_adder;

ARCHITECTUREhalf1OFhalf_adderIS

SIGNALc,d:

STD_LOGIC;

BEGIN

C<=aORb;

D<=aNANDb;

Co<=NOTd;

S<=cANDd;

ENDhalf1;

5.简述层次化设计的过程。

答:

层次化设计是指对于一个大型设计任务,将目标层层分解,在各个层次上分别设计的方法。

有些设计,在一些模块的基础上,通过搭建积木的方法进行设计。

有人称,在整个设计任务上进行行为描述的设计方法,称为高层次设计,而从事某一模块、某一元件行为设计称为底层设计方法。

6.什么是库,程序包,子程序,过程调用,函数调用?

答:

库(libraries)和程序包(package)用来描述和保存元件、类型说明、函数、模块等,以便在其他设计中可随时引用它们。

库(libraries)是用来存储和放置可编译的设计单元的地方,通过其目录可查询、调用。

设计库中的设计单元(实体说明、结构体、配置说明、程序包说明和程序包体)可以用作其他VHDL描述的资源。

函数和过程统称为子程序。

子程序由过程和函数组成。

在子程序调用过程中,过程能返回多个变量,函数能返回一个变量。

若子程序调用是一个过程,就称为过程调用;若子程序调用是一个函数,则称为函数调用。

过程调用和函数调用都是子程序调用。

函数的参数都是输入参数。

过程的参数有输入、输出和双向参数。

函数有顺序函数、并行函数。

过程有顺序过程、并行过程。

7.编写一个OR函数,重载它,对不同的数据类型进行OR运算。

答:

参考例4-24读者自行编写。

第5章思考题解答

1.CLK信号怎样用VHDL语言描述?

答:

时钟信号的上升沿的描述:

ifclk‘eventandclk=‘1’then…;

时钟信号的下降沿的描述:

ifclk‘eventandclk=‘1’then…;

2.异步复位怎样用VHDL语言描述?

答:

当复位信号低电平有效时,VHDL的描述为:

ifreset=‘0’then…;

当复位信号高电平有效时,VHDL的描述为:

ifreset=‘1’then…;

3.设计一个8位循环移位寄存器。

答:

8位循环计寄存器的VHDL参考程序设计如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcircleshift8IS

PORT(seldata:

instd_logic_vector(2downto0);

clr,clk:

INSTD_LOGIC;

sel:

OUTSTD_LOGIC_vector(7downto0));

ENDcircleshift8;

ARCHITECTUREsampleOFcircleshift8IS

begin

process(clk,clr)

Begin

if(clr='1')thensel<="00000000";

elsifclk'eventandclk='1'then

caseseldatais

when"001"=>sel<="00000001";

when"010"=>sel<="00000010";

when"011"=>sel<="00000100";

when"100"=>sel<="00001000";

when"101"=>sel<="00010000";

when"110"=>sel<="00100000";

when"111"=>sel<="01000000";

whenothers=>sel<="00000000";

endcase;

endif;

endprocess;

endsample;

4.设计一个六十进制计数器。

答:

60进制计数器的VHDL参考程序设计如下:

Libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

--*******************************************************

Entitycounter60is

port(

cp:

instd_logic;

bin:

outstd_logic_vector(6downto0);

s:

instd_logic;

clr:

instd_logic;

ec:

instd_logic;

cy60:

outstd_logic

);

Endcounter60;

--*******************************************************

Architecturebofcounter60is

signalq:

std_logic_vector(6downto0);

signalrst,dly:

std_logic;

begin

process(rst,cp)

begin

ifrst='1'thenq<="0000000";--cy(60)<='0';

elsifcp'eventandcp='1'thendly<=q(5);

ifec='1'then

ifq=59thenq<="0000000";

else

q<=q+1;

endif;

else

q<=q;

endif;

endif;

endprocess;

cy60<=notq(5)anddly;

rst<=clr;

bin<=qwhens='1'else

"1111111";

Endb;

5.设计一个八位编码器。

答:

八位编码器的VHDL参考程序设计如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYpriotyencoderIS

PORT(d:

INStd_Logic_Vector(7Downto0);

E1:

INStd_Logic;

GS,E0:

OUTBITSTD_LOGIC;

Q:

OUTStd_Logic_Vector(2Downto0);

ENDpriotyencoder;

ARCHITECTUREencoderOFpriotyencoderIS

BEGIN

P1:

PROCESS(d)

BEGIN

IF(d(0)=0ANDE1=0)THEN

Y<=111;

GS<=0;

E0<=1;

ELSIF(d

(1)=0ANDE1=0)THEN

Q<=110;

GS<=0;

E0<=1;

ELSIF(d

(2)=0ANDE1=0)THEN

Q<=101;

GS<=0;

E0<=1;

ELSIF(d(3)=0ANDE1=0)THEN

Q<=100;

GS<=0;

E0<=1;

ELSIF(d(4)=0ANDE1=0)THEN

Q<=011;

GS<=0;

E0<=1;

ELSIF(d(5)=0ANDE1=0)THEN

Q<=010;

GS<=0;

E0<=1;

ELSIF(d(6)=0ANDE1=0)THEN

Q<=001;

GS<=0;

E0<=1;

ELSIF(d(7)=0ANDE1=0)THEN

Q<=000;

GS<=0;

E0<=1;

ELSIF(E1=1)THEN

Q<=111;

GS<=1;

E0<=1;

ELSIF(d=11111111ANDE1=0)THEN

Q<=111;

GS<=1;

E0<=0;

ENDIF;

ENDPROCESSP1;

ENDencoder;

6.设计一个三八译码器。

答:

三八译码器的VHDL参考程序设计如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYdecoder3_8IS

PORT(a,b,c,g1,g2a,g2b:

INSTD_LOGIC;

Y:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDdecoder3_8;

ARCHITECTURErtlOFdecoder3_8IS

SIGNALindata:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

Indata<=c&b&a;

PROCESS(indata,g1,g2a,g2b)

BEGIN

IF(g1=1ANDg2a=0ANDg2b=0)THEN

CASEindataIS

WHEN000=>y<=11111110;

WHEN001=>y<=11111101;

WHEN010=>y<=11111011;

WHEN011=>y<=11110111;

WHEN100=>y<=11101111;

WHEN101=>y<=11011111;

WHEN110=>y<=10111111;

WHEN111=>y<=01111111

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

当前位置:首页 > 高等教育 > 院校资料

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

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