VHDL复习题.docx
- 文档编号:4844250
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:30
- 大小:158.87KB
VHDL复习题.docx
《VHDL复习题.docx》由会员分享,可在线阅读,更多相关《VHDL复习题.docx(30页珍藏版)》请在冰豆网上搜索。
VHDL复习题
习题
3、1比较常用硬件描述语言VHDL、Verilog与ABEL语言得优劣。
1、VHDL:
描述语言层次较高,不易控制底层电路,因而对综合器得性能要求较高。
有多种EDA工具选择,已成为IEEE标准。
应用VHDL进行工程设计得优点就是多方面得,具体如下:
(1)与其她得硬件描述语言相比,VHDL具有更强得行为描述能力。
(2)VHDL具有丰富得仿真语句与库函数,使得在任何大系统得设计早期,就能查验设计系统得功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程得结构与功能可行性做出判断。
(3)VHDL语句得行为描述能力与程序结构,决定了它具有支持大规模设计得分解与已有设计得再利用功能。
(4)用VHDL完成一个确定得设计,可以利用EDA工具进行逻辑综合与优化,并自动把VHDL描述设计转变成门级网表(根据不同得实现芯片)。
(5)VHDL对设计得描述具有相对独立性。
(6)VHDL具有类属描述语句与子程序调用等功能,对于完成得设计,在不改变源程序得条件下,只需改变类属参量或函数,就能轻易地改变设计得规模与结构。
2、Verilog:
设计者需要了解电路得结构细节,对综合器得性能要求较低。
有多种EDA工具选择,已成为IEEE标准。
3、ABEL:
设计者需要了解电路得结构细节,对综合器得性能要求较低。
支持ABEL得综合器只有一家,ABEL正朝国际化标准努力。
3、2VHDL程序一般包括几个组成部分?
每部分得作用就是什么?
(1)三个基本组成部分:
库、程序包使用说明,实体描述与实体对应得结构体描述。
(2)库、程序包使用说明:
用于打开调用本设计实体将用到得库、程序包
实体描述:
用于描述该设计实体与外界得接口信号说明
结构体描述:
用于描述该设计实体内部得组成及内部工作得逻辑关系
结构体配置语句主要用于层次化得方式对特定得设计实体进行元件得例化,或就是为实体选定某个特定得结构体
3、3VHDL语言中数据对象有几种?
各种数据对象得作用范围如何?
各种数据对象得实际物理含义就是什么?
(1)数据对象有三种:
变量、常量、信号
(2)常量得作用范围取决于其所定义得位置。
若在程序包中定义,则可以用在调用该程序包得所有设计实体中。
若定义在实体中,则可在这个实体得所有结构体中使用。
若定义在结构体中,则只能用于该结构体。
若定义在进程/子程序中,则只能用于该进程/子程序。
变量属于局部量,作用范围仅限于所定义得进程或子程序内部。
信号属于全局量,作用范围取决于其所定义得位置。
若在程序包中定义,则可以用在调用该程序包得所有设计实体中。
若定义在实体中,则可在这个实体得所有结构体中使用。
若定义在结构体中,则只能用于该结构体。
(3)信号表示硬件中得连线,用于各并行语句模块之间得通信。
变量一般用于存储局部/临时数据。
常量表示电路中得恒定电平,可使代码中常数易于阅读与修改。
3、4什么叫标识符?
VHDL得基本标识符就是怎样规定得?
(1)标识符用来定义常量、变量、信号、端口、子程序或者参数得名字。
(2)VHDL得基本标识符就就是以英文字母开头,不连续使用下划线,不以下划线结尾得,由26个英文大小写字母,数字0-9以及下划线组成得字符串。
3、5信号与变量在描述与使用时有哪些主要区别?
(1)变量只能在进程或子程序内部定义,用于存储局部/临时数据。
信号只能在进程或子程序得外部定义,表示硬件中得连线,用于各并行语句模块之间得通信。
(2)信号用signal关键字定义,赋值符号为”<=”。
变量用variable关键字定义,赋值符号为”:
=”
(3)信号赋值,可以设定延时量,需要延时一段时间后才执行;变量赋值立即执行。
3、6VHDL语言中得标准数据类型有哪几类?
用户可以自己定义得数据类型有哪几类?
并简单介绍各数据类型。
(1)标量型:
属单元素最基本得数据类型,通常用于描述一个单值数据对象,它包括实数类型、整数类型、枚举类型与时间类型。
复合类型:
可以由细小得数据类型复合而成,如可有标量复合而成。
复合类型主要有数组型与记录型。
存取类型:
为给定得数据类型得数据对象提供存取方式。
文件类型:
用于提供多值存取类型。
(2)用户可自定义得数据类型:
枚举类型、整数类型、数组类型、记录类型、时间类型、实数类型等
3、7BIT数据类型与STD_LOGIC数据类型有什么区别?
BIT数据类型只能取值0或1,而STD_LOGIC数据类型就是BIT数据类型得扩展,除了0与1外,还包括7种数据类型,分别就是U,X,Z,W,L,H,_
3、8用户怎样自定义数据类型?
试举例说明。
利用类型定义语句TYPE与子类型定义语句SUBTYPE实现。
如TYPEWEEKIS(SON,MON,TUE,WED,THU,FRI,SAT)SUBTYPEDIGITSINTEGERRANGE0TO9
3、9VHDL语言有哪几类操作符?
在一个表达式中有多种操作符时应按怎样得准则进行运算?
下列三个表达式就是否等效:
①A<=NOTBANDCORD;②A<=(NOTBANDC)ORD;③A<=NOTBAND(CORD)、
(1)主要有四种操作符逻辑运算符,关系运算符,算术运算符,符号运算符此外还有重载运算符。
(2)按照操作符得优先级高低进行运算
(3)这三个表达式不等效。
1式表达错误,对同一优先级得不同运算符应加上括号。
2与3式得运算顺序不同。
VHDL操作符优先级:
(关系操作符得结果只有TRUE或FALSE两种。
)
3、10简述六种移位操作符SLL、SRL、SLA、SRA、ROL与ROR得含义及操作规定?
并举例说明。
(1)SLL:
逻辑左移,bit或布尔一维数组
SRL:
逻辑右移,bit或布尔一维数组
SLA:
算数左移,bit或布尔一维数组
SRA:
算数右移,bit或布尔一维数组
ROL:
逻辑循环左移,bit或布尔一维数组
ROR:
逻辑循环右移,bit或布尔一维数组
(2)A=“10010101"
Asll2 得"01010100"(逻辑左移,用'0'填补空位)
Asrl3 得"00010010"(逻辑右移,用'0'填补空位)
Asla3 得"10101111"(算术左移,用最左端位填补空位)
Asra2 得"11100101"(算术右移,用最右端位填补空位)
Arol3 得"10101100"(循环左移)
Aror5 得"10101100"(循环右移)
3、11什么叫重载操作符?
使用重载操作符有什么好处?
怎样使用重载操作符?
含有重载操作符得运算怎样确定运算结果?
(1)对已存在得操作符重新定义,使其能进行不同类型操作数之间得运算。
(2)方便各种不同数据类型间得运算。
(3)引用数据包:
STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED与STD_LOGIC_即可使用重载操作符。
3、12VHDL程序设计中得基本语句系列有几种?
它们得特点如何?
它们各使用在什么场所?
它们各自包括些什么基本语句?
答:
(1)顺序语句与并行语句。
(2)顺序语句得执行与它们得书写顺序基本一致(指仿真或逻辑上得顺序执行),但实际上硬件电路就是并行工作得。
顺序语句用在进程与子程序得内部。
并行语句得执行与书写顺序无关,各语句就是同时执行得,在执行过程中各并行语句之间可通过信号进行通信,同步运行;也可以互为独立、互不相关,异步运行。
(3)顺序语句:
变量/信号赋值语句,流程控制语句(if,case,loop,next,exit),等待语句,子程序调用语句,返回语句,空操作语句等。
并行语句:
进程语句,块语句,信号赋值语句,元件例化语句,生成语句,子程序调用等语句。
3、13VHDL中信号赋值与变量赋值得有什么区别?
其赋值符号就是否异同?
信号赋值延时更新数据,一般生成时序电路,用得就是"<="
变量赋值立即更新数据,一般生成组合电路,用得就是":
="
(变量具有局部特征,它得有效性只局限于所定义得一个进程中,或一个子程序中,它就是一个局部得、暂时性数据对象,对于它得赋值就是立即发生得。
信号具有全局特征,它不但可以作为一个设计实体内部各单元之间数据传送得载体,而且可通过信号与其她得实体进行通信,信号得赋值不就是立即发生得,它发生在一个进程结束时。
)
3、14段下标元素与集合块元素就是怎样赋值得?
试举例说明。
(1)段下标元素赋值目标表示形式:
标识符(下标1TO或DOWNTO下标2)(其中下标1、下标2必须用具体数值表示,并且其数值范围必须在所定义得数组下标范围内)
例如:
VARIABLEa,b:
STD_LOGIC_VECTOR(1TO4)
b(1TO4):
=”1011”;
a:
=b;
a(1TO2):
=b(3TO4);--a
(1)=’1’,a
(2)=’1’;
a(1TO4):
=”1011”;
(2)集合块元素
3、15转向控制语句有几种?
它们各用在什么场所?
它们使用时特别需要注意什么?
IF语句;CASE选择语句;LOOP循环语句;NEXT语句与EXIT语句
(1)if 条件表达式1 then 顺序语句;
elsif 条件表达式2 then 顺序语句;
else 条件表达式n then 顺序语句;
end if;
if语句可根据一个或多个布尔条件,有选择得执行指定得顺序语句。
使用时应注意:
1、关键字then后可包含一个或多个顺序语句。
2、elsif子句可以有多个或没有,每个elsif子句执行时具有向前与得作用。
3、else子句可以没有。
4、关键字then后得顺序语句可以就是if语句,即if语句可以嵌套。
(2)case选择表达式 is
when 选择值1 => 顺序语句;
when 选择值2 => 顺序语句; 、、、、、、
end case;
case语句可根据一个表达式得不同取值执行不同得顺序语句。
使用时应注意:
1、表达式得值可以就是整型或枚举型得,或就是这些数据类型构成得数组。
2、选择值可以就是单个取值,如4;也可以就是一个取值范围,如2 to 5;也可以就是多个并列得取值,如2|6;还可以就是以上三种取值方式得混合。
3、case语句执行时,根据选择表达式得值来选择执行哪个顺序语句,选择得结果与每个选择值得顺序无关,只要求对于选择表达式得每个可能取值,有且仅有一个选择值与之匹配即可。
4、常用 when others表示其它未列出得选择值。
5、“=> ”后面得顺序语句可以有多个。
(3)[标号:
] for 循环变量 in 范围 loop [标号:
] while 条件 loop
顺序语句; 顺序语句;
end loop [标号]; end loop [标号];
for循环用于循环次数已知得情况;while 循环用于循环次数未知得情况。
使用时应注意:
for循环中得循环变量无需事先定义,可自动加/减1。
(4)next; 无条件中止当前循环,返回循环起点,开始下次循环。
exit; 无条件退出当前循环。
next loop标号; 无条件中止LOOP标号标明得循环,返回LOOP标号处,开始下次循环。
exit loop标号; 无条件退出LOOP标号标明得循环。
next loop标号 when 条件; 条件为真时中止LOOP标号标明得循环,返回LOOP标号处,开始下次循环。
exit loop标号when 条件; 条件为真时退出LOOP标号标明得循环。
3、16在CASE语句中在什么情况下可以不要WHENOTHERS语句?
在什么情况下一定要WHENOTHERS语句?
答:
case语句执行时,根据选择表达式得值来选择执行哪个顺序语句,要求对于选择表达式得每个可能取值,有且仅有一个选择值与之匹配。
因此,当已列出得选择值能够覆盖选择表达式得所有可能取值时,可以不要when others语句。
否则,要用 when others表示其它未列出得选择值。
3、17FOR-LOOP语句应用于什么场合?
循环变量怎样取值?
就是否需要事先在程序中定义?
在重复得次数已知得情况下可以使用该语句。
循环变量得取值就是根据系统得功能要求给定得,要事先在程序上定义。
3、18分别用IF语句、CASE语句设计一个四—十六译码器。
a:
用IF语句设计一个四-十六译码器
PROCESS(G1,g2a,g2b,sel)
begin
if(g1='1'andg2a='0'andg2b='0')then
if(sel="0000")theny<="1111111111111110";
elsif(sel="0001")theny<="1111111111111101";
elsif(sel="0010")theny<="1111111111111011";
elsif(sel="0011")theny<="1111111111110111";
elsif(sel="0100")theny<="1111111111101111";
elsif(sel="0101")theny<="1111111111011111";
elsif(sel="0110")theny<="1111111110111111";
elsif(sel="0111")theny<="1111111101111111";
elsif(sel="1000")theny<="1111111011111111";
elsif(sel="1001")theny<="1111110111111111";
elsif(sel="1010")theny<="11111";
elsif(sel="1011")theny<="11111";
elsif(sel="1100")theny<="11111";
elsif(sel="1101")theny<="11111";
elsif(sel="1110")theny<="11111";
elsif(sel="1111")theny<="11111";
elsey<="XXXXXXXXXXXXXXXX";
endif;
elseY<="1111111111111111";
endif;
endprocess;
b:
用CASE语句设计一个四-十六译码器
caseselis
when"0000"=>y<="1111111111111110";
when"0001"=>y<="1111111111111101";
when"0010"=>y<="1111111111111011";
when"0011"=>y<="1111111111110111";
when"0100"=>y<="1111111111101111";
when"0101"=>y<="1111111111011111";
when"0110"=>y<="1111111110111111";
when"0111"=>y<="1111111101111111";
when"1000"=>y<="1111111011111111";
when"1001"=>y<="1111110111111111";
when"1010"=>y<="11111";
when"1011"=>y<="11111";
when"1100"=>y<="11111";
when"1101"=>y<="11111";
when"1110"=>y<="11111";
when"1111"=>y<="11111";
whenothers=>y<="XXXXXXXXXXXXXXXX";
endcase;
3、19WAIT语句有几种书写格式?
哪些格式可以进行逻辑综合?
waituntil结构waiton结构其中waituntil结构可以进行逻辑组合
3、20VHDL得预定义属性得作用就是什么?
哪些项目可以具有属性?
常用得预定义属性有哪几类?
(1)作用在于可对信号或其她得项目多种属性进行检测或统计。
(2)具有属性得项目:
类型,子类型,过程,函数,信号,变量,常量,实体,结构体,配置,程序包,元件,语句标号。
(3)常用得属性有信号类属性,数据区间类属性,数值类属性,数组属性
3、21试用’EVENT属性描述一种用时钟CLK上升沿触发得D触发器及一种用时钟CLK下降沿触发得JK触发器。
LIBRARYIEEE;
USEIEEE、STD_LOGIC_1164、ALL;
USEIEEE、STD_LOGIC_UNSIGNED、ALL;
ENTITYdtriggerIS
PORT(clk:
INSTD_LOGIC;
d:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDdtrigger;
ARCHITECTUREbehaveOFdtriggerIS
BEGIN
PROCESS(clk)
BEGIN
IFclk'EVENTANDclk='1'THEN
q:
=d;
ENDIF;
ENDPROCESS;
ENDbehave;
3、22什么叫进程语句?
您就是如何理解进程语句得并行性与顺序性得双重特性得?
(1)进程实际上就是顺序语句描述得一种进程过程,进程就是用于描述事件得,process语句结构包含了一个代表实体中部分逻辑行为得独立得顺序语句描述得进程
(2)一个结构体中可以有多个并行进程结构,而有一个进程内部结构却就是由一系列顺序语句来构成得,即进程语句间就是并行执行得进程得内部就是顺序执行得
( 进程语句就是一种描述硬件行为得语句,进程语句内部就是由顺序语句构成得,内部执行时就是顺序性得,但进程语句属于并行语句,多个进程之间得执行并行运行。
)
3、23进程得启动条件就是什么?
如果进程有两个基本点敏感变量,其中一个由“0”变“1”,等待一段时间以后再由“1”变“0”;而另一个只由“1”变“0”改变一次,请问该进程将执行几遍?
答:
进程得启动条件:
敏感信号列表中得任何一个敏感信号得值发生变化,或者wait语句中得条件为真。
3遍
3、24有人说,进程中得语句顺序颠倒一下并不会改变所描述电路得功能,这种说法对吗?
为什么?
不对。
因为PLC得扫描过程就是从左到右,从上到下进行得。
同一进程中得逻辑描述语句就是顺序运行得。
3、25并行信号赋值语句有几类?
比较其异同。
(1)1、简单信号赋值语句2、条件信号赋值语句3、选择信号赋值语句
(2)共同点:
赋值目标都就是信号,都就是并行语句,都相当于一个隐含得进程语句(信号赋值语句中得所有读入信号都作为该进程得敏感信号)。
不同点:
简单信号赋值语句就是最简单得并行语句,执行时直接将表达式得值赋给信号。
条件信号赋值语句得功能与if语句相同,在执行时按书写得先后顺序测试每个条件,一旦条件为真,则将表达式得值赋给信号。
选择信号赋值语句与case语句相似。
当关键字with后得选择表达式得值发生变化时,就将该值与每个选择值进行比较,将选择值匹配得子句中得表达式得值赋给信号。
3、26分别用条件信号赋值语句、选择信号赋值语句设计一个四—十六译码器。
LIBRARY IEEE;
USE IEEE、STD_LOGIC_1164、ALL;
USE IEEE、STD_LOGIC_UNSIGNED、ALL;
ENTITY DECODER IS
PORT(A, B, C,D:
IN STD_LOGIC;
Y:
OUT BIT_VECTOR (15 DOWNTO 0));
END ENTITY DECODER;
ARCHITECTURE ART1 OF DECODER IS
SIGNAL SR:
STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
SR<= D&C&B&A;
Y(0)<='1' WHEN SR="0000" ELSE '0';
Y
(1)<='1' WHEN SR="0001" ELSE '0';
Y
(2)<='1' WHEN SR="0010" ELSE '0';
Y(3)<='1' WHEN SR="0011" ELSE '0';
Y(4)<='1' WHEN SR="0100" ELSE '0';
Y(5)<='1' WHEN SR="0101" ELSE '0';
Y(6)<='1' WHEN SR="0110" ELSE '0';
Y(7)<='1' WHEN SR="0111" ELSE '0';
Y(8)<='1' WHEN SR="1000" ELSE '0';
Y(9)<='1' WHEN SR="1001" ELSE '0';
Y(10)<='1' WHEN SR="1010" ELSE '0';
Y(11)<='1' WHEN SR="1011" ELSE '0';
Y(12)<='1' WHEN SR="1100" ELSE '0';
Y(13)<='1' WHEN SR="1101" ELSE '0';
Y(14)<='1' WHEN SR="1110" ELSE '0';
Y(15)<='1' WHEN SR="1111" ELSE '0';
END ARCHITECTURE ART1;
ARCHITECTURE ART2 OF DECODER IS
SIGNAL SR:
STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
WITH SR SELECT
Y<= “0000_0000_0000_0001” WHEN “0000”,
“0000_0000_0000_0010” WHEN “0001”,
“0000_0000_0000_0100” WHEN “0010”,
“0000_0000_0000_1000” WHEN “0011”,
“0000_0000_0001_0000” WHEN “0100”,
“0000_0000_0010_0000” WHEN “0101”,
“0000_0000_0100_0000” WHEN “0110”,
“0000_0000_1000_0000” WHEN “0111”,
“0000_0001_0000_0000” WHEN “1000”,
“0000_0010_0000_0000” WHEN “1001”,
“0000_0100_0000_0000” WHEN “1010”,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 复习题
![提示](https://static.bdocx.com/images/bang_tan.gif)