VHDL习题解答.docx
- 文档编号:30590055
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:23
- 大小:78.64KB
VHDL习题解答.docx
《VHDL习题解答.docx》由会员分享,可在线阅读,更多相关《VHDL习题解答.docx(23页珍藏版)》请在冰豆网上搜索。
VHDL习题解答
VHDL程序设计教程习题参考解答
第一章习题参考答案
1.什么是VHDL?
VHDL的实现有哪几种形态?
硬件描述语言(HardwareDescriptionLanguage,HDL),顾名思义,是电子系统硬件行为描述、结构描述、数据流描述的语言。
VHDL语言的英文全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,即超高速集成电路硬件描述语言。
2.简述VHDL的发展史。
1981年6月VHDL工作小组成立,提出了一个满足电子设计各种要求的能够作为工业标准的硬件描述语言。
1983年第三季度,由IBM公司、TI公司、Intermetrics公司签约,组成开发小组,工作任务是提出语言版本和开发软件环境。
1986年IEEE标准化组织开始工作,讨论VHDL语言标准,历时一年有余,于1987年12月通过标准审查,VHDL1.0版本宣布实施,即IEEESTD1076-1987。
1993年经过重新修订,发布VHDL2.0版本,从而形成新的标准即IEEESTD1076-1993。
2006年VHDL发布VHDL3.0版本;
2008年8月,VHDL4.0版本发布,解决了3.0版本中发现的多个问题。
2009年1月,IEEE公布了VHDL4.0的标准版本,最新VHDL标准IEEE1076-2008在2009年1月实施。
3.详述VHDL设计IP模块的流程。
第1种设计形态,VHDL程序以IP模块的形态存在,VHDL-IP设计流程如图1.6所示。
IP模块是与集成电路工艺无关的芯片设计方案,可以移植到不同的设计环境。
IP产品形态有规范,有IP包装规则和复用规则,是原生态的芯片硬件设计产品。
图1.6VHDL-IP设计流程
4.简答VHDL设计用FPGA实现的意义。
可编程器件FPGA具有容量大、密度高等特点,是科学实验、小批量生产、样机研制的载体。
这种产品形态可以作为科学实验、小批量产品研发的最佳实现方案。
5.叙述用VHDL设计ASIC的流程。
VHDL设计的ASIC芯片实现,流程如图1.8所示。
工程项目的VHDL功能设计与某一集成电路工艺相结合,形成集成电路版图设计,并在晶圆上实现实现集成电路芯片的制造。
图1.8VHDL-ASIC设计流程
工程项目经过集成电路前端设计(VHDL设计、功能时序设计)、后端设计(版图设计),后端仿真、设计规则检查(DRC)、形式验证后的版图,交付集成电路芯片代工厂进行工业化大规模生产。
6.怎样建立一个基本VHDL设计环境?
把VHDL语言输入界面、编辑界面、编译工具、器件库、函数库的组合称为VHDL设计环境。
许多EDA工具均提供了VHDL设计环境,如ALTERA公司的QuartusII。
7.开展IP设计需要什么条件?
VHDL程序以IP模块的形态存在。
IP模块是与集成电路工艺无关的芯片设计方案,可以移植到不同的设计环境。
IP产品形态有规范,有IP包装规则和复用规则,是原生态的芯片硬件设计产品。
开展IP设计需要EDA工具提供VHDL语言编译环境。
8.片上系统设计的知识要求和实验条件有那些?
片上系统设计需要SOC系统知识,嵌入式计算机体系结构知识,IP复用知识,底层驱动软件编写技能。
实验条件,需要相对高级、复杂一些的FPGA开发板。
第二章习题参考答案
1.什么是对象?
对象有哪几种类型?
在VHDL语言中,对象(Objects)是具有特定数据类型且可以被赋值的客体。
VHDL语言中的对象有4类:
常量(Constant)、信号(Signal)、变量(Variable)和文件(Files)。
2.变量和信号的区别是什么?
变量(Variable)是一个局部量,主要用于对临时数据进行局部存储。
信号(Signal)可用于电路内部硬件设计实体相互连接的抽象表示。
信号是全局量,通常在实体说明、结构体和包中使用。
3.VHDL语言定义的标准数据类型有哪些?
VHDL语言预定义的数据类型包括:
①整数类型(IntegerType)、
2实数类型或浮点类型(RealType&FloatingType)、
3位类型(BitType)、
4位矢量类型(Bit_VectorType),
5布尔类型(BooleanType)、
6字符类型(CharacterType),
7时间类型或物理类型(TimeType&PhysicalType)、
8错误类型(Note,Warning,Error,FailureType),
9自然数、整数类型(NaturalType)
10字符串类型(TringType)。
用户自定义的数据类型:
①枚举类型(EnumeratedType)、
②数组类型(ArrayType)、
3存取类型(AccessType)、
4文件类型(FilesType)
⑤记录类型(RecodeType)。
4.哪些数据类型不能被综合?
物理类型是不能被综合的。
5.简述VHDL语言操作符的优先级。
运算符的优先级
优先级顺序
运算操作符类型
操作符
操作符功能
高
低
逻辑运算符
NOT
取非
算术运算符
ABS
取绝对值
**
指数运算
REM
取余
MOD
求模
/
除法
*
乘
-
负
+
正
并置运算符
&
并置
算术运算符
-
减
+
加
关系运算符
>=
大于等于
<=
小于等于
>
大于
<
小于
/=
不等于
=
等于
逻辑运算符
XOR
异或
NOR
或非
NAND
与非
OR
或
AND
与
6.哪3种方法可用来进行类型转换?
有3种方法:
类型标记法、函数转换法和常数转换法。
7.状态运算符的有哪两个值?
“TRUE”,和“FALSE”。
8.标示符与保留字有何不同?
对VHDL编程有何约束?
标识符用于命名实体、结构体、信号和变量等。
VHDL语言中的保留字不可以用于标识符的命名中,保留字有些用于VHDL程序设计的关键字。
第三章习题参考答案
1.简述VHDL设计实体的结构。
实体(Entity)提供了被设计系统或器件的公共信息,指明了输入与输出引脚。
实体由实体名、类型说明、端口说明、实体说明部分和实体语句部分组成。
实体的一般格式为:
ENTITY实体名IS
[GENERIC语句;]--可选项(参数说明)
PORT语句;--必需项(端口说明)
[实体说明部分;]--可选项
[BEGIN
实体语句部分;]
END[ENTITY][实体名];
2.用结构体的3种描述法设计一个4位计数器。
3.什么叫进程?
简述进程的工作方式。
进程语句不是一条语句,而是一段程序结构,这段程序描述了一个靠敏感信号触发的硬件模块反复执行的工作过程。
进程语句(Process)是并行处理语句,即在结构体中多个进程语句是同时并发运行的。
进程语句的一般书写形式为:
[进程名:
]PROCESS[敏感信号表]
变量声明语句
…
BEGIN
…
顺序语句
…
ENDPROCESS[进程名];
进程语句中一般带有一个敏感信号表。
这些信号无论哪一个发生变化都将启动进程,进程中的程序将从上到下顺序执行一遍,产生新的结果并输出。
当进程执行完毕,就返回进程开始处,等待敏感量的新变化,引发进程的下一次执行。
周而复始,循环往复,以至无穷。
4.什么叫模块?
区分模块与进程。
模块(Block)语句是结构体中的一系列并行语句的组合,适用于复杂项目的模块化设计。
模块调用必须说明属性、配置和连接关系。
模块语句的一般格式如下:
块名:
BLOCK[控制条件的布尔表达式][IS]
{[GENERIC子句
[GENERIC映射;]]}
{[端口子句
[端口映射;]]
{块说明部分}
BEGIN
{并行语句A;
并行语句B;
…}
ENDBLOCK[块名];
模块是一个独立的子结构,可以包含PORT语句和GENERIC语句,允许设计者通过这两个语句将模块的内部信号变化传递给模块的外部信号。
同样,也可以将模块的外部信号变化传递给模块的内部信号。
进程不是独立的硬件结构描述,进程用于含有触发条件的、需要反复运行的程序结构。
5.简述过程与函数的区别。
过程语句(procedure)结构
过程语句的一般格式如下:
PROCEDURE 过程名|运算符号
[generic子句;
[generic映射;]]
[[parameter](参数列表)]IS
[子程序声明区];
BEGIN
[顺序处理语句];
END[PROCEDURE]过程名|运算符号;
过程语句中的输入输出参数列在过程名后面的括号里,一般地,IN作为常量,OUT和INOUT作为变量。
当过程语句在主程序调用结束后,将变量OUT和INOUT拷贝到调用者的信号和变量中。
函数是具有某一特定功能的程序段,能够被主程序调用。
函数被调用时,首先要初始化,执行处理功能后,将处理结果传递给主程序。
函数内部的值不能保持,函数返回后,才能被再次调用,再次初始化。
VHDL程序中函数语句的结构与其他语句一样,也有规定的书写格式:
FUNCTION 函数名|运算符号
[generic子句;
[generic映射;]
[[parameter](参数列表)]
RETURN 数据类型名IS
[子程序声明区];
BEGIN
[顺序处理语句];
RETURN[返回变量名];
END [FUNCTION][函数名|运算符号];
6.用结构化描述方法设计一个加法器。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYhalf_adderIS--实体名half_adder
PORT(a,b:
INBit;
S,C:
OUTBit);--实体端口说明
ENDENTITYhalf_adder;
ARCHITECTUREaddr1OFhalf_addIS--结构体1的名字为addr1
BEGIN
S<=aXORb;
C<=aANDb;
ENDARCHITECTUREaddr1;
-----------------
ARCHITECTUREaddr2OFhalfIS--结构体2的名字为addr2
BEGIN
example:
block--模块名example
PORT(a,b:
INBit;--端口子句
s,c:
OUTBit);
PORTMAP(a,b,s,c);--端口映射
BEGIN
P1:
PROCESS(a,b)IS--进程1的标号P1
BEGIN
s<=aXORb;
ENDPROCESSP1;
P2:
PROCESS(a,b)IS--进程2的标号P2
BEGIN
c<=aandb;
ENDPROCESSP2;
ENDBlockexample;
ENDARCHITECTUREaddr2;
7.采用多模块设计方法设计一个日历时钟
见教材。
8.单模块的端口信号与芯片引脚是什么关系?
PORTMAP语句通过映射实现了block块内信号和结构体信号的连接,实现了实体端口引脚的连接,当实体端口信号发生变化时,通过映射,block块内信号也会发生变化,即这种信号变化被传递到了块内,block块的行为根据新的输入信号的变化而变化。
9.多模块的端口信号与模块间互联信号是什么关系?
一个结构体中可以含有多个模块,一个模块中可以含有多个进程。
如此嵌套、循环,就构成一个复杂的电子系统。
模块的端口信号用于模块间的互联信号。
多模块构成的新系统,端口信号重新定义。
第四章习题参考答案
1.什么叫进程?
简述进程的工作方式。
略
2.什么叫模块?
区分模块与进程。
略
3.用结构描述法和GENERATE语句设计一个8位移位寄存器。
上机编程并编译实现。
4.设计一个3-8优先级编码器。
上机编程并编译实现。
5.设计一个4-16译码器。
上机编程并编译实现。
6.设计一个十进制计数器。
上机编程并编译实现。
7.用生成语句设计一个数组存储阵列。
上机编程并编译实现。
8.用断言语句、report语句,编写一段测试诊断报告VHDL程序。
上机编程并编译实现。
第五章习题参考答案
1.配置语句的书写格式是怎样的?
配置的一般书写格式为:
CONFIGURATION配置名OF实体名IS
FOR选配结构体名
{
[USEENTITY实体名(结构体名);]
[GENERICMAP语句;]
[PORTMAP语句;]
[块配置]
}
ENDFOR;
END[CONFIGURATION][配置名];
2.配置说明中的映射有哪两种方法?
形式端口与实际端口可以是名字关联映射,也可以是位置顺序关联映射。
3.在配置语句中用GENERIC指定参数,设计一个译码器。
上机编程实验。
4.设计一个加法器,元件例化后放入库中备用。
上机编程实验。
5.简述层次化设计的过程。
层次化设计是指在一个大型设计任务中,将目标层层分解,在各个层次上分别进行设计的方法。
在有些设计中,设计者先构建一些模块,然后再将这些模块组合起来,最终完成整个系统的设计。
有人把在整个设计任务上的层面上展开行为描述的设计方法,称为高层次设计,而对某一模块、某一元件的结构描述称为底层设计。
6.什么是库、程序包、子程序、过程调用、函数调用?
库(Library)用来存储已编译的设计单元,通过其目录可查询、调用其中的设计单元。
包(package)用来封装一些类别相近的元件。
包是库中一个存储单元。
多个包存储在一个元件库中。
子程序包含过程与函数。
过程与函数是两种不同VHDL程序片段。
反复完成一些数学计算的元件行为,写VHDL函数较合适;反复完成某一处理过程的元件行为,写VHDL过程较合适。
在系统设计中,过程的调用程序编写,称为过程调用,函数的调用程序的编写,称为函数调用。
这些调用的前提是过程模块、函数模块在库中已经存在。
7.编写一个OR函数,重载它,对不同的数据类型进行OR运算。
上机编程实验。
8.写一段textio程序,并给出实验报告。
上机编程实验。
第六章习题参考答案
1.CLK信号怎样用VHDL语言描述?
时钟上升沿的描述语句:
IFclk'CURRENT_VALUE=0ANDclk'EVENTANDclkLAST_VALUE=1;
时钟下降沿的描述语句:
IFclk'CURRENT_VALUE=1ANDclk'EVENTANDclkLAST_VALUE=0;
2.异步复位怎样用VHDL语言描述?
清零语句在时钟语句外执行时,与时钟无关,称谓“异步清零”。
P1:
PROCESS(clk,clr)
BEGIN
IF(clr=‘0’)THEN--异步清零
Q<=‘0’;
ELSIF(clk’EVENTANDclk=‘1’)THEN
Q<=d;--时钟上升沿时刻,q=d;
ENDIF;
ENDPROCESSP1;
3.设计一个8位循环移位寄存器。
学生上机编程实践
4.设计一个六十进制计数器。
学生上机编程实践
5.设计一个八位编码器。
学生上机编程实践
6.设计一个三八译码器。
学生上机编程实践
7.设计一个N位通用加法器。
学生上机编程实践
8.为什么要层次化设计?
大型项目,需要多人协同设计。
就需要把项目层层分解,把子项目分配给团队成员。
复杂项目,需要基础模块设计和顶层设计,这样模块间的组装时,构成的电子门系统结构比较清晰。
9.Moore型状态机和Mealy型状态机有什么相同和不同?
Moore型状态机的输出信号仅与现态相关。
Mealy型状态机输出是现态和输入的函数。
两种类型的区分如图所示。
状态机的区分
10.一位有效状态机有什么优点?
一般情况下,运行速度的提高,是以牺牲资源、提高成本为代价的。
一位有效编码,比顺序编码方式占用资源多,这种方法在某些情况下不是最佳设计方案。
当目标器件具有较多寄存器资源,并且寄存器之间组合逻辑较少时,一位有效编码是一个比较合适的方法。
一位有效编码方式下状态机输出由状态位译码输出。
这是因为各个状态编码仅对应单独的状态位。
11.设计一个3位8状态机。
学生上机编程实践
12.设计一个基于PCIBUS数字图像处理芯片,画出层次分解图,由几个人分别编程,再组合通调,写出一个团体协作的案例,总结成功失败的经验
学生上机编程实践
第七章习题参考答案
1.简答功能仿真和时序仿真的不同。
功能仿真:
在RTL层进行的仿真,其特点是不考虑构成电路逻辑延迟和门时间延迟,着重考虑电路在理想环境下的行为和设计结构的一致性;
时序仿真:
在电路已经映射到特定的工艺环境后,将电路的路径延迟和门延迟考虑进对电路行为的影响后,来比较电路的行为是否还能够在一定条件下满足设计要求。
2.为什么VHDL设计仅需要功能仿真?
VHDL设计硬件电路,以功能设计为设计目标,与具体的集成电路工艺无关。
在不同工艺条件下,时序延时是不同的。
由于VHDL设计与工艺无关,因此仅需要功能仿真。
当VHDL模块移植在不同工艺条件下,时序仿真才有意义。
3.为什么集成电路设计版图设计需要时序仿真?
集成电路版图设计的前提是在某一特定的工艺条件下,进行芯片的物理层设计,由于不同工艺时序不同,所以需要时序仿真,同时也需要功能仿真。
在集成电路设计行业内,把版图设计的时序仿真和功能仿真彻称为“后仿真”。
4.熟练掌握使用仿真工具进行功能仿真和时序仿真,并写出仿真步骤。
学生上机实验
5.设计一个10进制计数器,编写仿真Testbench,用ModeSim工具仿真出波形。
学生上机实验
6.设计一个串行移位寄存器,编写仿真Testbench,用ModeSim工具仿真出波形。
学生上机实验
7.设计一个千兆网络收发器,编写仿真Testbench,用ModeSim工具仿真出波形
学生上机实验
8.设计一个512MB容量的DDR3控制器,仿真出状态机功能和读写时序波形。
学生上机实验
第八章习题参考答案
1.VHPI有哪些功能?
VHPI为每个功能提供了一个VHPI操作。
在VHPI头文件中,对每个功能都定义了一个vhpiCapabilitiesT类型的枚举型常量。
VHPI功能有:
1.层次化功能:
用于访问设计层次信息模型,对应的枚举型常量为vhpiProvidesHierachy,表示静态解释区域的对象、声明的对象,以及访问声明过的对象的值。
2.静态访问功能:
用于访问设计层次信息模型,对应的枚举型常量为vhpiProvidesStaticAccess,表示静态解释语句的对象和表达式。
3.互联功能:
用于访问设计层次信息模型中,对应的枚举型常量为vhpiProvidesConnectivity,表示驱动、负载和端口关联等的对象。
4.事后分析功能:
用于访问库信息模型中的对象,以及访问由本地静态表达式初始化的已声明对象的值。
对应的枚举型常量为vhpiProvidesPostAnalysis。
5.基本外部模型功能:
该功能支持外部模型的创建和回调;支持访问层次信息模型中,表示外部模型的对象。
对应的枚举型常量为vhpiProvidesForeignModel。
6.高级外部模型功能:
该功能支持外部驱动的创建、处理和事务调度。
对应的枚举型常量为vhpiProvidesAdvanceForeignModel。
7.保存/重启能力:
用于支持外部模型和应用程序的保存和重启。
对应的枚举型常量为vhpiProvidesSaveRestart。
8.重置功能:
用于支持外部模型重置和回调。
对应的枚举型常量为vhpiProvidesReset。
9.基本调试和运行时仿真功能:
对应的枚举型常量为vhpiProvidesDebugRuntime。
支持vhpi_control、vhpi_get_time和vhpi_get_next_time函数;支持信号、端口和驱动对象值的变动和更新回调,支持时间和动作回调。
10.高级调试和运行时仿真功能:
支持变量的对象值的变动和更新回调以及LineOffset属性。
对应枚举型常量为vhpiProvidesAdvancedDebugRuntime。
11.动态解释功能:
对应的枚举型常量为vhpiProvidesDynamicElab,这一能力集需要基本调试和运行仿真功能、高级调试和运行仿真功能。
支持访问动态解释区域、声明或构造对象。
2.在VHPI工具运行的各个阶段分别可以进行何类操作?
VHDL工具各个运行阶段为:
●vhpiRegistrationPhase:
工具开始注册、执行阶段。
注册阶段包括两个步骤,具体如下:
(1)完成外部模型应用以及外部模型的库注册。
(2)完成每个已注册和已激活的vhpiCbStartOfTool回调运行。
当所有的已注册和已激活的vhpiCbStartOfTool回调返回到VHPI工具后,注册阶段完成。
在注册阶段,调用函数vhpi_get(vhpiPhaseP,NULL),返回vhpiRegistrationPhase。
●vhpiAnalysisPhase:
开始分析设计文件阶段。
分析阶段包含3个步骤,具体如下:
(1)每个已注册和激活的vhpiCbStartOfAnalysis回调都已运行。
(2)一个或多个设计文件已完成分析。
(3)每个注册和激活的vhpiCbEndOfAnalysis回调都已运行。
在分析阶段,调用函数vhpi_get(vhpiPhaseP,NULL),返回vhpiAnalysisPhase。
●vhpiElaborationPhase:
开始静态解释(Elaboration)设计层次阶段。
解释阶段包含下列步骤:
(1)每个已注册和激活的vhpiCbStartOfElaboration回调都已运行。
(2)设计层次已解释。
如果存在注册过的外部结构体,这一行为会为这些外部结构体唤起解释函数。
(3)每个注册和激活的vhpiCbEndOfElaboration回调都已运行。
在解释阶段,调用vhpi_get(vhpiPhaseP,NULL),返回vhpiElaborationPhase。
●vhpiInitializationPhase:
开始初始化阶段。
初始化阶段用于设计层次的初始化。
初始化阶段可以包含为已注册的外部结构体调用运行函数。
在初始化阶段,调用函数vhpi_get(vhpiPhaseP,NULL),返回vhpiInitializationPhase。
●vhpiSimulationPhase:
开始执行仿真阶段。
仿真阶段涉及仿真周期的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 习题 解答