EDA技术复习题.docx
《EDA技术复习题.docx》由会员分享,可在线阅读,更多相关《EDA技术复习题.docx(41页珍藏版)》请在冰豆网上搜索。
EDA技术复习题
这是一份vhdl的复习题,考试题大多数都来自此处,
一、EDA名词解释
1、ASIC:
专用集成电路(ApplicationSpecificIntegratedCircuits)
2、EDA:
电子设计自动化(ElectronicDesignAutomation)
3、PROM:
可编程只读存储器(ProgrammableReadMemory)
4、IP:
知识产权核(IntellectualProperty)
5、SOC:
片上系统(SystemOnChip)
6、VHDL:
超高速集成电路硬件描述语言(VHSICHardwareDescriptionLanguage)。
7、RTL:
寄存器传输级(RegisterTransportLevel)
8、SOPC:
可编程片上系统(SystemOnProgrammableChip)
9、PLD:
可编程逻辑器件(ProgrammableLogicArray)
10、GAL:
通用阵列逻辑(GeniricArrayLogic)
11、FPGA:
现场可编程门阵列(FieldProgrammableGateArray)
12、CPLD:
复杂可编程逻辑器件(ComplexProgrammableLogicDevice)
二、简答题
1、简述VHDL程序的基本结构。
库、程序包、实体、结构体、配置
2、子程序分为那两类,其结构为什么。
子程序有两种类型,即过程(PROCEDURE)和函数(FUNCTION)。
FUNCTION函数名(参数表)RETURN数据类型--函数首
FUNCTION函数名(参数表)RETURN数据类型IS--函数体
[说明部分]
BEGIN
顺序语句;
ENDFUNCTION函数名;
PROCEDURE过程名(参数表)--过程首
PROCEDURE过程名(参数表)IS--过程体
[说明部分]
BIGIN
顺序语句;
ENDPROCEDURE过程名;
3、信号与变量的赋值有何区别?
。
信号延时赋值,变量立即赋值;
信号的代入使用<=,变量的代入使用:
=;
信号在实际的硬件当中有对应的连线,变量没有
4、可编程器件分为哪些类?
答:
一类是集成度较低的,早期出现的PROM、PLD、PAL、GAL,可用的逻辑门数大约在500门以下,称为简单PLD。
另一类是芯片集成度较高的,如现在大量使用的CPLD和FPGA器件,称为复杂PLD。
5、CASE语句使用当中的注意事项。
(1)条件句中的选择值必在表达式的取值范围内。
(2)除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用"OTHERS”表示,它代表己给的所有条件句中未能列出的其它可能的取值。
关键词OTHERS只能出现一次,目只能作为最后一种条件取值。
使用OTHERS的目的是为了使条件句中的所有选择值能涵盖表达式的所有取值,以免综合器会插入不必要的锁存器。
这一点对于定义为STD_LOGIC和STD_LOGIC_VECTOR数据类型的值尤为重要,因为这些数据对象的取值除了1和0以外,还可能有其它的取值,如高阻态Z、不定态X等。
(3)CASE语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。
(4)CASE语句执行中必须选中,目只能选中所列条件语句中的一条。
这表明CASE语句中至少要包含一个条件语句。
6、赋值语句分哪些类,分别写出一句赋值语句。
信号赋值语句,S<=
变量赋值语句,V≔
7、数据对象有哪些种,分别写出定义这些数据对象的一般表述格式。
Constant(常量)在程序中不可以被赋值
Variable(变量)在程序中可以被赋值(用“:
=”),赋值后立即变化为新值。
Signal(信号)在程序中可以被赋值(用“<=”),但不立即更新,当进程挂起后,才开始更新。
8、简述进程语句的使用要点?
[进程名:
]
process[(触发信号列表)]
[定义语句;]
begin
[串行处理语句sequentialstatement;]
endprocess
PROCESS...ENDPROCESS
9、写出VHDL常用的顺序语句的名称。
赋值语句
流程控制语句
等待语句
子程序调用语句
返回语句
空操作语句
10、VHDL语言中的逻辑操作符有那些?
逻辑运算符AND、OR、NAND、NOR、XOR、XNOR及NOT
11、使用原理图输入设计功能的优势何优点?
与传统的数字电路实验相比,Quartus提供原理图设计功能具有不可比拟的优势和先进性:
设计者不必具备许多诸如编程技术、硬件描述语言等知识就能迅速设计入门,完成大规模的电路系统设计
能进行任意层次的数字系统设计(传统的数字电路实验只能完成单一层次的设计);
能对系统中的任一层次,或任一元件的功能进行精确的时序仿真
通过时序仿真,能迅速定位电路系统的错误所在,并随时纠正。
能对设计方案进行随时更改,并储存设计工程中所有电路和测试文件入档;
通过编译和下载,能在FPGA或CPLD上对设计项目随时进行硬件测试验证;
如果使用FPGA和配置编程方式,将不会有损坏和损耗的问题
符合现代电子设计技术规范。
12、VHDL的操作符有那几大类?
每一类的操作符分别是什么?
每一类操作符可以对那些数据进行操作(运算)?
在VHDL中有四类操作符即逻辑操作符(LogicalOperator)、关系操作符(RelationalOperator)、算术操作符(ArithmeticOperator)和符号操作符(SignOperator)。
前三类操作符是完成逻辑和算术运算的最基本的操作符单元。
13、标准逻辑位数据类型常用的数值有哪几种?
'U'--Uninitialized未初始化的
'X'--ForcingUnknown强未知的
'0'--Forcing0强0
'1'--Forcing1强1
'Z'--HighImpedance高阻态
'W'--WeakUnknown弱未知的
'L'--Weak0弱0
'H'--Weak1弱1
'-'--Don'tcare忽略
14、在VHDL语言中常见的数据类型有那些?
VHDL中的数据类型可以分成四大类。
标量型(ScalarType)
复合类型(CompositeType)
存取类型(AccessType)
文件类型(FilesType)
15、实体部分的端口模式有四个类型。
IN模式:
IN定义的通道确定为输入端口,并规定为单向只读模式,可以通过此端口将变量(Variable)信息或信号(Signal)信息读入设计实体中。
OUT模式:
OUT定义的通道确定为输出端口,并规定为单向输出模式,可以通过此端口将信号输出设计实体,或者说可以将设计实体中的信号向此端口赋值。
INOUT模式:
INOUT定义的通道确定为输入输出双向端口,即从端口的内部看,可以对此端口进行赋值,也可以通过此端口读入外部的数据信息;而从端口的外部看,信号既可以从此端口流出,也可以向此端口输入信号。
INOUT模式包含了IN,OUT和BUFFER二种模式,因此可替代其中任何一种模式,但为了明确程序中各端口的实际任务,一般不作这种替代。
BUFFER模式:
BUFFER定义的通道确定为具有数据读入功能的输出端口,它与双向端口的区别在于只能接受一个驱动源。
16、VHDL语句中顺序描述语句有哪几种?
赋值语句
流程控制语句
等待语句
子程序调用语句
返回语句
空操作语句
17、用WAIT语句设置4种不同的条件分别是什么?
对于不同的结束挂起条件的设置,WAIT语句有以下四种不同的语句格式。
WAIT;--第一种语句格式
WAITON信号表;--第二种语句格式
WAITUNTIL条件表达式;--第三种语句格式
WAITFOR时间表达式;--第四种语句格式,超时等待语句
18、常用的if语句有哪几种?
写出其书写格式。
A.门闩
IF条件句Then--第一种IF语句结构
顺序语句
ENDIF
B.二选一
IF条件句Then--第二种IF语句结构
顺序语句
ELSE
顺序语句
ENDIF
C.多选择
IF条件句Then--第三种IF语句结构
顺序语句
ELSIF条件句Then
顺序语句
...
ELSE
顺序语句
ENDIF
D.IF的嵌套
IF条件句Then
IF条件句Then
...
ENDIF
ENDIF
19、如何描述时钟上升沿和下降沿?
时钟脉冲的上升沿的条件可以写为:
IFclock_signal=current_valueANDclock_signal’LAST_VALUEANDclock_signal’EVENT
也可以简写为:
IFclock_signal=clock_signal’EVENTANDcurrent_value
时钟脉冲的下降沿的条件可以写为:
IFclock_signal=current_valueANDclock_signal’LAST_VALUEANDclock_signal’EVENT
20、指出信号和变量有哪些区别?
简单的说,信号是全局的,用于结构体中并行语句间数据流的传递;变量则是局部的,他主要用于单个进程中中间变量的存储.
主要用于对暂时数据进行局部存储。
临时数据,没有物理意义只能在Process和Function中定义,并只在其内部有效要使其全局有效,先转换为Signal。
用:
=进行赋值
variableresult:
std_logic:
='0';
变量说明的格式:
VARIABLE变量名:
数据类型约束条件:
=表达式;
例:
VARIABLEX,Y:
INTEGER;
VARIABLEC:
INTEGERRANGE0TO255:
=10;(表示变量C的数据类型是整型,变量范围从0到255,初始值为10。
)
变量只能在进程语句、函数语句和过程语句结构中使用,它是一个局部量。
在仿真过程中,它不像信号那样,到了规定的仿真时间才进行赋值,变量是立即生效的。
信号是抽象的电子电路内部硬件连接。
它除了没有数据流动方向说明以外,其它性质几乎和前面所述的端口概念一致。
信号通常在构造体、包集合和实体内说明。
信号说明的格式:
SIGNAL信号名;数据类型约束条件:
=表达式;
例:
SIGNALa,b,c:
STD_LOGIC;
SIGNALCOUNT_2:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALS_CLK:
BIT:
='0';
信号(Signals)
代表连线,Port也是一种信号。
没有方向性,可给它赋值,也可当作输入
在Entity中和Architecture中定义
设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。
用<=进行赋值。
信号和变量值的代入不仅形式不同,而且其操作过程也不同。
在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变量。
在执行下一条语句时,该变量的值就为上一句新赋的值。
变量赋值符为“:
=”。
信号代入语句采用“<=”代入符,该语句即使被执行也不会使信号立即发生代入。
下一条语句执行时,仍使用原来的信号值。
由于信号代入语句是同时进行处理的,因此,实际代入过程和代入语句的处理是分开进行的。
21、信号赋值语句在什么情况下作为并行语句?
在什么情况下作顺序语句?
信号赋值和变量赋值符号分别是什么?
两种赋值符号有什么区别?
信号赋值语句在进程外作并行语句,并发执行,与语句所处的位置无关。
信号赋值语句在进程内或子程序内做顺序语句,按顺序执行,与语句所处的位置有关。
信号赋值符号为“<=”变量赋值用“:
=”。
信号赋值符号用于信号赋值动作,不立即生效。
变量,赋值符号用于变量赋值动作,立即生效。
22、进程的敏感信号表指的是什么?
简述敏感信号表在进程中的作用?
进程的“敏感信号表”也称敏感表,是进程的激活条件,可由一个或多个信号组成,各信号间以“,”号分隔。
当敏感信号表中的任一个信号有事件发生,即发生任意变化,此时,进程被激活,进程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕之后,进程即进入等待挂起状态,直到下一次敏感表中的信号有事件发生,进程再次被激活,如此循环往复。
23、什么是库、程序包、子程序、过程调用和函数调用?
库和程序包用来描述和保存元件、类型说明和子程序等,以便在其它设计中通过其目录可查询、调用。
子程序由过程和函数组成。
在子程序调用过程中,过程能返回多个变量,函数只能返回一个变量。
若子程序调用的是一个过程,就称为过程调用,若子程序调用的是一个函数,则称为函数调用。
过程调用、函数调用都是子程序调用。
24、简述WHEN_ELSE条件信号赋值语句和IF_ELSE顺序语句的异同。
答:
WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现;是并行语句,必须放在结构体中。
IF_ELSE顺序语句中有分号;是顺序语句,必须放在进程中。
三、综合题
1、完成
A.解释带有下划线的语句。
B.画出该程序的原理图符号。
C.说明该程序逻辑功能。
D.改用WITH_SELECT_WHEN语句编写下列程序。
Libraryieee;
Useieee.std_logic_1164.all;定义元件库
entityqk_11is
port(a,b,c,d,en:
instd_logic;
s:
instd_logic_vector(1downto0);输入信号s是两位的输入总线
op:
outstd_logic);
endqk_11;
architecturear_1ofqk_11is
signalf:
std_logic_vector(2downto0);
begin
f<=en&s;将输入信号en和s连接赋值给f
process(f)敏感信号f的变化将启动进程process
begin
casefis
when"100"=>op<=a;
when"101"=>op<=b;
when"110"=>op<=c;
whenothers=>op<=d;其他情况,将输入信号d赋值给op
endcase;
endprocess;
endar_1;
逻辑功能是:
带有使能端en的四选一数据选择器。
用WITH_SELECT_WHEN语句编写上述程序:
Libraryieee;
Useieee.std_logic_1164.all;
entityqk_11is
port(a,b,c,d,en:
instd_logic;
s:
instd_logic_vector(1downto0);
op:
outstd_logic);
endqk_11;
architecturear_1ofqk_11is
signalf:
std_logic_vector(2downto0);
begin
f<=en&s;
withfselect
op<=awhen"100",
bwhen"101",
cwhen"110",
dwhenothers;
endar_1;
2、以下是一个模为24(0~23)的8421BCD码加法计数器VHDL描述,请补充完整
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYtbIS
PORT(CLK:
INSTD_LOGIC;
SHI,GE:
OUTINTEGERRANGE0TO9);
END;
ARCHITECTUREbhvOFtbIS
SIGNALSHI1,GE1:
INTEGERRANGE0TO9;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'then
IFGE1=9THEN
GE1<=0;
SHI1<=SHI1+1;
ELSIFSHI1=2ANDGE1=3THEN
SHI1<=0;
GE1<=0;
ELSE
GE1<=GE1+1;
ENDIF;
ENDIF;
ENDPROCESS;
GE<=GE1;
SHI<=SHI1;
ENDbhv;
3、下面程序是参数可定制带计数使能异步复位计数器的VHDL描述,试补充完整。
--N-bitUpCounterwithLoad,CountEnable,and
--AsynchronousReset
libraryieee;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
useIEEE.std_logic_arith.all;
entitycounter_nis
generic(width:
integer:
=8);
port(data:
instd_logic_vector(width-1downto0);
load,en,clk,rst:
instd_logic;
q:
outstd_logic_vector(width-1downto0));
endcounter_n;
architecturebehaveofcounter_nis
signalcount:
std_logic_vector(width-1downto0);
begin
process(clk,rst)
begin
ifrst='1'then
count<=(others=>‘0’);――清零
elsifclk’eventandclk=‘1’then――边沿检测
ifload='1'then
count<=data;
elsifen='1'then
count<=count+1;
endif;
endif;
endprocess;
q<=count;
endbehave;
4、补全下列六进制计数器cnt6程序(10分)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYcnt6IS
PORT(reset,en,clk:
INSTD_LOGIC;
carry:
OUTSTD_LOGIC;
q:
OUTSTD_ULOGIC_VECTOR(2DOWNTO0));
ENDcnt6;
ARCHITECTURErtlOFcnt6IS
SIGNALqs:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALca:
STD_LOGIC;
BEGIN
PROCESS(clk)
VARIABLEq6:
INTEGER;
BEGIN
IF(clk'EVENTANDclk='1')THEN
ENDIF;
qs<=CONV_STD_LOGIC_VECTOR(q6,3);
q<=TO_STDULOGICVECTOR(qs);
ENDPROCESS;
PROCESS(ca,en)
BEGIN
carry<=caANDen;
ENDPROCESS;
ENDrtl;
5、补全以下二选一VHDL程序(本题10分)
Entitymuxis
port(d0,d1,sel:
inbit;
q:
outBIT);
endmux;
architectureconnectofMUXis
signaltmp1,TMP2,tmp3:
bit;
begin
cale:
block
begin
tmp1<=d0andsel;
tmp2<=d1and(notsel)
tmp3<=tmp1andtmp2;
q<=tmp3;
endblockcale;
endCONNECT;
6、根据下表填写完成一个3-8线译码器的VHDL程序(10分)。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYdecoder_3_to_8IS
PORT(a,b,c,g1,g2a,g2b:
INSTD_LOGIC;
y:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDdecoder_3_to_8;
ARCHITECTURErtlOFdecoder_3_to_8IS
SIGNALindata:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
indata<=c&b&a;
PROCESS(indata,g1,g2a,g2b)
BEGIN
IF(g1='1'ANDg2a='0'ANDg2b='0')THEN
CASEindataIS
WHEN"000"=>y<="11111110";
WHEN"001"=>y<="11111101";
WHEN"010"=>y<="11111011";
WHEN"011"=>y<="11110111";
WHEN"100"=>y<="11101111";
WHEN"101"=>y<="11011111";
WHEN"110"=>y<="10111111";
WHEN"111"=>y<="01111111";
WHENOTHERS=>y<="XXXXXXXX";
ENDCASE;
ELSE
y<="11111111";
ENDIF;
ENDPROCESS;(16)
ENDrtl;
7、填写完成一个8-3线编码器的VHDL程序(16分)。
Libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityeight_triis
port(
b:
instd_logic_vector(7downto0);
en:
instd_logic;
y:
outstd_logic_vector(2d