《EDA》复习资料.docx
《《EDA》复习资料.docx》由会员分享,可在线阅读,更多相关《《EDA》复习资料.docx(26页珍藏版)》请在冰豆网上搜索。
《EDA》复习资料
一、单项选择题:
(在每小题的四个备选答案中,选出一个正确答案,将其序号填在题中的括号内,每小题3分,共30分)
1.IP核在EDA技术和开发中具有十分重要的地位;提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路的IP核为__________。
A.软IPB.固IPC.硬IPD.都不是
2.综合是EDA设计流程的关键步骤,在下面对综合的描述中,_________是错误的。
A.综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;
B.综合就是将电路的高级语言转化成低级的,可与FPGA/CPLD的基本结构相映射的网表文件;
C.为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;
D.综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系是唯一的(即综合结果是唯一的)。
3.进程中的变量赋值语句,其变量更新是_________。
A.立即完成;
B.按顺序完成;
C.在进程的最后完成;
D.都不对。
4.VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描述___________。
A.器件外部特性;
B.器件的综合约束;
C.器件外部特性与内部功能;
D.器件的内部功能。
5.不完整的IF语句,其综合结果可实现________。
A.时序逻辑电路B.组合逻辑电路
C.双向电路D.三态控制电路
6.下列标识符中,__________是不合法的标识符。
A.State0B.9moonC.Not_Ack_0D.signall
7.关于VHDL中的数字,请找出以下数字中最大的一个:
__________。
A.2#1111_1110#
B.8#276#
C.10#170#
D.16#E#E1
8.下列EDA软件中,哪一个不具有逻辑综合功能:
________。
A.Max+PlusII
B.ModelSim
C.QuartusII
D.Synplify
9.IP核在EDA技术和开发中具有十分重要的地位;提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路的IP核为__________。
A.瘦IPB.固IPC.胖IPD.都不是
10.进程中的信号赋值语句,其信号更新是_______。
A.按顺序完成;
B.比变量更快完成;
C.在进程的最后完成;
D.都不对。
11.下列那个流程是正确的基于EDA软件的FPGA/CPLD设计流程
A.原理图/HDL文本输入→适配→综合→功能仿真→编程下载→硬件测试;
B.原理图/HDL文本输入→功能仿真→综合→适配→编程下载→硬件测试;
C.原理图/HDL文本输入→功能仿真→综合→编程下载→适配→硬件测试;
D.原理图/HDL文本输入→功能仿真→适配→编程下载→综合→硬件测试。
12.IP核在EDA技术和开发中具有十分重要的地位,以HDL方式提供的IP被称为
A.硬IP;
B.固IP;
C.软IP;
D.都不是;
13.在VHDL语言中,下列对时钟边沿检测描述中,错误的是_______。
A.ifclk’eventandclk=‘1’then
B.iffalling_edge(clk)then
C.ifclk’eventandclk=‘0’then
D.ifclk’stableandnotclk=‘1’then
14.在一个VHDL设计中idata是一个信号,数据类型为std_logic_vector,试指出下面那个赋值语句是错误的。
A.idata<=“00001111”
B.idata<=b”0000_1111”;
C.idata<=X”AB”
D.idata<=16”01”;
15.综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;在下面对综合的描述中,_____是错误的。
A.综合就是将电路的高级语言转化成低级的,可与FPGA/CPLD的基本结构相映射的网表文件;
B.为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;
C.综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系不是唯一的。
E.综合是纯软件的转换过程,与器件硬件结构无关;
16.请指出AlteraCyclone系列中的EP1C6Q240C8这个器件是属于
A.ROMB.CPLDC.FPGAD.GAL
17.下面对利用原理图输入设计方法进行数字电路系统设计,哪一种说法是正确的:
__________
A.原理图输入设计方法直观便捷,很适合完成较大规模的电路系统设计
B.原理图输入设计方法一般是一种自底向上的设计方法
C.原理图输入设计方法无法对电路进行功能描述
D.原理图输入设计方法不适合进行层次化设计
18.在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,不正确的是:
_______
A.PROCESS为一无限循环语句
B.敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动
C.当前进程中声明的变量不可用于其他进程
D.进程由说明语句部分、并行语句部分和敏感信号参数表三部分组成
19.对于信号和变量的说法,哪一个是不正确的:
_________
A.信号用于作为进程中局部数据存储单元
B.变量的赋值是立即完成的
C.信号在整个结构体内的任何地方都能适用
D.变量和信号的赋值符号不一样
20.VHDL语言共支持四种常用库,其中哪种库是用户的VHDL设计现行工作库:
_______
A.IEEE库
B.VITAL库
C.STD库
D.WORK工作库
21.下列4个VHDL标识符中正确的是:
_______
A.10#128#
B.16#E#E1
C.74HC124
D.X_16
22.下列语句中,不属于并行语句的是:
_______
A.进程语句
B.CASE语句
C.元件例化语句
D.WHEN…ELSE…语句
二、名词解释:
写出下列缩写的英文字符的中文含义(每小题2分,共10分)
1.VHDL
2.FPGA
3.RTL
4.SOPC
5.IEEE
6.ASIC
7.SOC
8.EDA
9.Synthesis
10.CPLD
11.IP
12.HDL
三、VHDL程序填空:
(10分)
下面程序是参数可定制带计数使能异步复位计数器的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;
architecturebehaveofcounteris
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;
LIBRARYIEEE;--8位分频器程序设计
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYPULSEIS
PORT(CLK:
INSTD_LOGIC;
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
FOUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFPULSEIS
SIGNALFULL:
STD_LOGIC;
BEGIN
P_REG:
PROCESS(CLK)
VARIABLECNT8:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFCLK’EVENTANDCLK=‘1’THEN
IFCNT8="11111111"THEN
CNT8:
=D;--当CNT8计数计满时,输入数据D被同步预置给计数器CNT8
FULL<='1';--同时使溢出标志信号FULL输出为高电平
ELSECNT8:
=CNT8+1;--否则继续作加1计数
FULL<='0';--且输出溢出标志信号FULL为低电平
ENDIF;
ENDIF;
ENDPROCESSP_REG;
P_DIV:
PROCESS(FULL)
VARIABLECNT2:
STD_LOGIC;
BEGIN
IFFULL'EVENTANDFULL='1'THEN
CNT2<=NOTCNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反
IFCNT2='1'THENFOUT<='1';
ELSEFOUT<='0';
ENDIF;
ENDIF;
ENDPROCESSP_DIV;
END;
下面程序是一个10线-4线优先编码器的VHDL描述,试补充完整。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYcoderIS
PORT(din:
INSTD_LOGIC_VECTOR(9DOWNTO0);
output:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcoder;
ARCHITECTUREbehavOFCODERIS
SIGNALSIN:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(DIN)
BEGIN
IF(din(9)='0')THENSIN<="1001";
ELSIF(din(8)=’0’)THENSIN<="1000";
ELSIF(din(7)='0')THENSIN<="0111";
ELSIF(din(6)='0')THENSIN<="0110";
ELSIF(din(5)='0')THENSIN<="0101";
ELSIF(din(4)='0')THENSIN<="0100";
ELSIF(din(3)='0')THENSIN<="0011";
ELSIF(din
(2)='0')THENSIN<="0010";
ELSIF(din
(1)='0')THENSIN<="0001";
ELSESIN<=“0000”;
ENDIF;
ENDPROCESS;
Output<=sin;
ENDbehav;
以下程序是一个BCD码表示0~99计数器的VHDL描述,试补充完整。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt100bis
port(clk,rst,en:
instd_logic;
cq:
outstd_logic_vector(7downto0);--计数输出
cout:
outstd_logic);--进位输出
endentitycnt100b;
architecturebhvofcnt100bis
begin
process(clk,rst,en)
variablecqi:
std_logic_vector(7downto0);
begin
ifrst='1'then
cqi:
=(others=>‘0’);--计数器清零复位
else
ifclk’eventandclk=‘1’then--上升沿判断
ifen='1'then
ifcqi(3downto0)<"1001"then--比较低4位
cqi:
=cqi+1;--计数加1
else
ifcqi(7downto4)<"1001"then--比较高4位
cqi:
=cqi+16;
else
cqi:
=(others=>'0');
endif;
cqi(3downto0):
=“0000”;--低4位清零
endif;
endif;
endif;
endif;
ifcqi=“10011001”then--判断进位输出
cout<='1';
else
cout<='0';
endif;
cq<=cqi;
endprocess;
endarchitecturebhv;
四、VHDL程序改错:
(10分)
仔细阅读下列程序,回答问题
1LIBRARYIEEE;
2USEIEEE.STD_LOGIC_1164.ALL;
3
4ENTITYCNT10IS
5PORT(CLK:
INSTD_LOGIC;
6Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
7ENDCNT10;
8ARCHITECTUREbhvOFCNT10IS
9SIGNALQ1:
STD_LOGIC_VECTOR(3DOWNTO0);
10BEGIN
11PROCESS(CLK)BEGIN
12IFRISING_EDGE(CLK)begin
13IFQ1<9THEN
14Q1<=Q1+1;
15ELSE
16Q1<=(OTHERS=>'0');
17ENDIF;
18ENDIF;
19ENDPROCESS;
20Q<=Q1;
21ENDbhv;
1.在MAX+PlusII中编译时,提示的第一条错误为:
Error:
Line12:
Filee:
\mywork\test\cnt10.vhd:
VHDLsyntaxerror:
IfstatementmusthaveTHEN,butfoundBEGINinstead
指出并修改相应行的程序(如果是缺少语句请指出大致的行数):
错误1行号:
12程序改为:
IFRISING_EDGE(CLK)THEN
错误2行号:
3程序改为:
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
12行if语句配套关键字是then而非begin
3行程序中使用了+号重载函数,应包含使用对应程序包ieee.std_logic_unsigned.all
2.若编译时出现如下错误,请分析原因。
当前编译的程序文件没有放在指定文件夹内,所以系统找不到WORK工作库。
01LIBRARYIEEE;
02USEIEEE.STD_LOGIC_1164.ALL;
03USEIEEE.STD_LOGIC_UNSIGNED.ALL;
04ENTITYLED7CNTIS
05PORT(CLR:
INSTD_LOGIC;
06CLK:
INSTD_LOGIC;
07LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
08ENDLED7CNT;
09ARCHITECTUREoneOFLED7CNTIS
10SIGNALTMP:
STD_LOGIC_VECTOR(3DOWNTO0);
11BEGIN
12CNT:
PROCESS(CLR,CLK)
13BEGIN
14IFCLR='1'THEN
15TMP<=0;
16ELSEIFCLK'EVENTANDCLK='1'THEN
17TMP<=TMP+1;
18ENDIF;
19ENDPROCESS;
20OUTLED:
PROCESS(TMP)
21BEGIN
22CASETMPIS
23WHEN"0000"=>LED7S<="0111111";
24WHEN"0001"=>LED7S<="0000110";
25WHEN"0010"=>LED7S<="1011011";
26WHEN"0011"=>LED7S<="1001111";
27WHEN"0100"=>LED7S<="1100110";
28WHEN"0101"=>LED7S<="1101101";
29WHEN"0110"=>LED7S<="1111101";
30WHEN"0111"=>LED7S<="0000111";
31WHEN"1000"=>LED7S<="1111111";
32WHEN"1001"=>LED7S<="1101111";
33WHENOTHERS=>LED7S<=(OTHERS=>'0');
34ENDCASE;
35ENDPROCESS;
36ENDone;
在程序中存在两处错误,试指出,并说明理由:
提示:
在MAX+PlusII10.2上编译时报出的第一条错误为:
Error:
Line15:
File***/led7cnt.vhd:
Typeerror:
typeinwaveformelementmustbe“std_logic_vector”
第15行,错误:
整数0不能直接赋值给TMP矢量
改正:
TMP<=(OTHERS=>‘0’);
第16行,错误:
ELSEIF缺少一条对应的ENDIF语句
改正:
将ELSEIF改为关键字ELSIF
仔细阅读下列程序,回答问题
LIBRARYIEEE;--1
USEIEEE.STD_LOGIC_1164.ALL;--2
ENTITYLED7SEGIS--3
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);--4
CLK:
INSTD_LOGIC;--5
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));--6
ENDLED7SEG;--7
ARCHITECTUREoneOFLED7SEGIS--8
SIGNALTMP:
STD_LOGIC;--9
BEGIN--10
SYNC:
PROCESS(CLK,A)--11
BEGIN--12
IFCLK'EVENTANDCLK='1'THEN--13
TMP<=A;--14
ENDIF;--15
ENDPROCESS;--16
OUTLED:
PROCESS(TMP)--17
BEGIN--18
CASETMPIS--19
WHEN"0000"=>LED7S<="0111111";--20
WHEN"0001"=>LED7S<="0000110";--21
WHEN"0010"=>LED7S<="1011011";--22
WHEN"0011"=>LED7S<="1001111";--23
WHEN"0100"=>LED7S<="1100110";--24
WHEN"0101"=>LED7S<="1101101";--25
WHEN"0110"=>LED7S<="1111101";--26
WHEN"0111"=>LED7S<="0000111";--27
WHEN"1000"=>LED7S<="1111111";--28
WHEN"1001"=>LED7S<="1101111";--29
ENDCASE;--30
ENDPROCESS;--31
ENDone;
1.在程序中存在两处错