VHDL复习题总结.docx
- 文档编号:9889797
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:18
- 大小:21.25KB
VHDL复习题总结.docx
《VHDL复习题总结.docx》由会员分享,可在线阅读,更多相关《VHDL复习题总结.docx(18页珍藏版)》请在冰点文库上搜索。
VHDL复习题总结
VHDL复习题
1.什么是VHDL?
简述VHDL的发展史。
答:
VHDL是美国国防部为电子项目设计承包商提供的,签定合同使用的,电子系统硬件描述语言。
1983年成立VHDL语言开发组,1987年推广实施,1993年扩充改版。
VHDL是IEEE标准语言,广泛用于数字集成电路逻辑设计。
2.简述VHDL设计实体的结构。
答:
实体由实体名、类型表、端口表、实体说明部分和实体语句部分组成。
根据IEEE标准,实体组织的一般格式为:
ENTITY实体名IS
[GENERIC(类型表);]--可选项
[PORT(端口表);]--必需项
实体说明部分;--可选项
[BEGIN
实体语句部分;]
END[ENTITY][实体名];
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;
4.什么叫对象?
对象有哪几个类型?
答:
在VHDL语言中,凡是可以赋于一个值的客体叫对象(object)。
VHDL对象包含有专门数据类型,主要有4个基本类型:
常量(CONSTANT)、
信号(SIGNAL)、变量(VARIABLE)和文件(FILES)。
5.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)
6.简述VHDL语言操作符的优先级。
答:
在表2.1中,取反和取绝对值优先级较高,
与、或逻辑运算的优先级低于算术运算的优先级。
7.哪3种方法可用来进行类型转换?
答:
进行不同类型的数据变换,
有3种方法:
类型标记法、函数转换法和常数转换法。
8.什么叫进程?
简述进程的工作方式。
答:
进程(process)是由外部信号触发执行的一段程序。
进程语句是并行处理语句,即各个进程是同时处理的,在结构体中多个Process语句是同时并发运行的。
在进程内部是顺序执行的。
Process语句在VHDL程序中,是描述硬件并行工作行为的最常用、最基本的语句。
进程Process语句中一般带有几个信号量例表,称为该进程的敏感量表。
这些信号无论哪一个发生变化都将启动Process进程。
一旦启动,进程Process中的程序将从上到下顺序执行一遍,由新变化的量引导进程产生变化结果输出。
当进程的最后一个语句执行完成后,就返回到进程开始处,等待敏感量的新变化,引发进程的再一次执行。
周而复始,循环往复,以至无穷。
这就是进程的执行过程。
9什么叫模块?
区分模块与进程。
答:
模块(Block)语句是结构体中积木化设计语言,适用于复杂项目设计。
Block块是一个独立的子结构,可以包含PORT语句、GENERIC语句,允许设计者通过这两个语句将Block块内的信号变化传递给Block块的外部信号。
同样,也可以将Block块的外部信号变化传递给Block块的内部信号。
对VHDL语言中的Block模块进行仿真时,Block模块中所描述的各个语句是可以并发执行的,和模块中的语句书写顺序无关。
进程语句是一段程序,这段程序是顺序执行的。
10.用结构描述法和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;
10设计一个加法器,
答:
半加器及全加器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;
11简述层次化设计的过程。
答:
层次化设计是指对于一个大型设计任务,将目标层层分解,在各个层次
上分别设计的方法。
有些设计,在一些模块的基础上,通过搭建积木的方法
进行设计。
有人称,在整个设计任务上进行行为描述的设计方法,称为高层
次设计,而从事某一模块、某一元件行为设计称为底层设计方法。
12什么是库,程序包,子程序,过程调用,函数调用?
答:
库(libraries)和程序包(package)用来描述和保存元件、类型说明、函数、模块等,以便在其他设计中可随时引用它们。
库(libraries)是用来存储和放置可编译的设计单元的地方,通过其目录可查询、调用。
设计库中的设计单元(实体说明、结构体、配置说明、程序包说明和程序包体)可以用作其他VHDL描述的资源。
函数和过程统称为子程序。
子程序由过程和函数组成。
在子程序调用过程中,过程能返回多个变量,函数能返回一个变量。
若子程序调用是一个过程,就称为过程调用;若子程序调用是一个函数,则称为函数调用。
过程调用和函数调用都是子程序调用。
函数的参数都是输入参数。
过程的参数有输入、输出和双向参数。
函数有顺序函数、并行函数。
过程有顺序过程、并行过程。
13CLK信号怎样用VHDL语言描述?
答:
时钟信号的上升沿的描述:
ifclk‘eventandclk=‘1’then…;
时钟信号的下降沿的描述:
ifclk‘eventandclk=‘1’then…;
14异步复位怎样用VHDL语言描述?
答:
当复位信号低电平有效时,VHDL的描述为:
ifreset=‘0’then…;
当复位信号高电平有效时,VHDL的描述为:
ifreset=‘1’then…;
15设计一个八位编码器。
答:
八位编码器的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;
15.设计一个三八译码器。
答:
三八译码器的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;
WHENOTHERS=>y<=XXXXXXXX;
ENDCASE;
ELSE
Y<=11111111;
ENDIF;
ENDPROCESS;
ENDrtl;
16、改正以下程序中的错误,简要说明原因,并指出可综合成什么电路。
1.libraryieee;
useieee.std_logic_1164.all;
entityd_flip_flopis
port(d,clk:
instd_logic;
q:
outstd_logic);
endd_flip_flop;
architecturertlofd_flip_flopis
begin
ifclk’eventandclk=’1’then
q<=d;
endif;
endrtl;
2.libraryieee;
useieee.std_logic_1164.all;
entityd_latchis
port(d,ena:
instd_logic;
q:
outstd_logic);
endd_latch;
architecturertlofd_latchis
begin
ifena=’1’then
q<=d;
endif;
endrtl;
3.libraryieee;
useieee.std_logic_1164.all;
entitytestis
port(d,clk:
instd_logic;
q:
outstd_logic);
endtest;
architecturertloftestis
begin
process(clk)
begin
waituntilclk’eventandclk=’1’
q<=d;
endprocess;
endrtl;
4.libraryieee;
useieee.std_logic_1164.all;
entitytestis
port(d1,d2:
instd_logic;
sel:
instd_logic;
q:
outstd_logic);
endtest;
architecturertloftestis
begin
process(d1,d2,sel)
begin
caseselis
when‘0’=>q<=d1;
when‘1’=>q<=d2;
endcase;
endprocess;
endrtl;
5.libraryieee;
useieee.std_logic_1164.all;
entitytestis
port(d1,d2:
instd_logic;
sel:
instd_logic;
q:
outstd_logic);
endtest;
architecturertloftestis
begin
process(d1,d2,sel)
begin
q<=d1whensel=’0’else
d2;
endprocess;
endrtl;
6.libraryieee;
useieee.std_logic_1164.all;
entitytestis
port(clk:
instd_logic;
count:
bufferstd_logic_vector(3downto0));
endtest;
architecturertloftestis
begin
process(clk)
begin
ifclk’eventandclk=’1’then
count<=count+1;
endif;
endprocess;
endrtl;
17、用VHDL设计电路:
1.设计一个2输入与门
2.设计一个四选一选择器。
3.设计一个3-8译码器。
4.设计一个8位的串入串出移位寄存器。
5.设计一个具有置数功能、使能端、清除端的13进制计数器
18.判断改错题
1.已知A和Q均为BIT类型的信号,请判断下面的程序片断:
ARCHITECTUREtestOFtestIS
BEGIN
CASEAIS
WHEN'0'=>Q<='1';
WHEN'1'=>Q<='0';
ENDCASE;
ENDtest;
【参考答案】:
CASE语句应该存在于进程PROCESS内。
2.已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片断:
ARCHITECTUREtestOFtestIS
BEGIN
SIGNALB:
STD_LOGIC;
Q<=B;
ENDtest;
【参考答案】:
信号SIGNAL的申明语句应该放在BEGIN语句之前。
4.已知A和B均为STD_LOGIC类型的信号,请判断下面的语句:
A<='0';
B<='x';
【参考答案】:
不定态符号应该由小写的‘x’改为大写的‘X’。
5.已知A为INTEGER类型的信号,B为STD_LOGIC类型的信号,请判断下面的程序片断:
ARCHITECTUREtestOFtestIS
BEGIN
B<=A;
ENDtest;
【参考答案】:
A和B的数据类型不一致,不能相互赋值。
6.已知sel是STD_LOGIC_VECTOR(1DOWNTO0)类型信号,而a、b、c、d、q均为STD_LOGIC类型信号,请判断下面给出的CASE语句:
CASEselIS
WHEN“00”=>q<=a;
WHEN“01”=>q<=b;
WHEN“10”=>q<=c;
WHEN“11”=>q<=d;
ENDCASE;
【参考答案】:
CASE语句缺“WHENOTHERS”语句。
19.简述Top-Down设计方法及其基本步骤。
【参考答案】:
所谓Top-Down的设计过程是指从系统硬件的高层次抽象描述向最底层物理描述的一系列转换过程。
具体讲这一过程由功能级、行为级描述开始;寄存器传输(RTL)级描述为第一个中间结果;再将RTL级描述由逻辑综合得到网表(Net-list)或电路图;由网表即可自动生成现场可编程门阵列(FPGA)/复杂可编程逻辑器件(CPLD)或专用集成电路(ASIC),从而得到电路与系统的物理实现。
20.请从申明格式、赋值符号、赋值生效时间、作用范围等方面对信号和变量进行比较分析。
【参考答案】:
①申明时关键字不一样,变量为:
VARIABLE;信号为:
SIGNAL。
但申明时赋初值均用“:
=”符号。
②赋值符号不同:
信号赋值用“﹤=”;变量赋值用“:
=”。
③赋值生效时间:
信号赋值△延时后生效;变量赋值立即生效。
④声明引用范围:
信号在构造体内(进程外)申明,整个构造体内有效;变量主要在进程内申明,只在进程内有效。
20.VHDL程序主要有三种描述方式:
行为描述方式、RTL描述方式、结构描述方式。
21.VHDL程序中数值的载体称为对象。
VHDL中有四种对象,分别是:
常量(CONSTANT)、变量(VARIABLE)、信号(SIGNAL)、文件(FILE)。
22、在VHDL中,(D)的数据传输是立即发生的,不存在任何延时的行为。
A、信号; B、常量; C、数据; D、变量
23、在VHDL中,(A)的数据传输是不是立即发生的,目标信号的赋值需要一定的延时时间。
A、信号; B、常量; C、数据; D、变量
24、在VHDL中,为目标变量赋值的符号是(C)。
A、=:
; B、= ; C、:
= ; D、<=
23、在VHDL中,为目标信号赋值的符号是(D)。
A、=:
; B、= ; C、:
= ; D、<=
25、在VHDL中,定义信号名时,可以用(C)符号为信号赋初值。
A、=:
; B、= ; C、:
= ; D、<=
26设计一数据选择器MUX,其系统模块图和功能表如下图所示。
试采用下面三种方式中的两种来描述该数据选择器MUX的结构体。
(a)用if语句。
(b)用case语句。
(c)用whenelse语句。
Libraryieee;
Useieee.std_logi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 复习题 总结