eda试题及答案Word文档格式.docx
《eda试题及答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《eda试题及答案Word文档格式.docx(65页珍藏版)》请在冰豆网上搜索。
B.VITAL库
C.STD库
D.WORK工作库
9.下列4个VHDL标识符中正确的是:
_______B
A.10#128#
B.16#E#E1
C.74HC124
D.X_16
10.下列语句中,不属于并行语句的是:
A.进程语句
B.CASE语句
C.元件例化语句
D.WHEN…ELSE…语句
二、EDA名词解释(10分)
写出下列缩写的中文(或者英文)含义:
1.ASIC专用集成电路
2.FPGA现场可编程门阵列
3.IP知识产权核(软件包)
4.JTAG联合测试行动小组
5.HDL硬件描述语言
三、VHDL程序填空:
(10分)
以下程序是一个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='
ifcqi(3downto0)<
"
1001"
then--比较低4位
cqi:
=cqi+1;
--计数加1
else
ifcqi(7downto4)<
then--比较高4位
cqi:
=cqi+16;
else
'
0'
);
endif;
cqi(3downto0):
=“0000”;
--低4位清零
endif;
endif;
endif;
endif;
ifcqi=“10011001”then--判断进位输出
cout<
='
;
cq<
=cqi;
endprocess;
endarchitecturebhv;
四、VHDL程序改错:
仔细阅读下列程序,回答问题
LIBRARYIEEE;
--1
USEIEEE.STD_LOGIC_1164.ALL;
--2
ENTITYMOORE1IS--3
PORT(DATAIN:
INSTD_LOGIC_VECTOR(1DOWNTO0);
--4
CLK,RST:
INSTD_LOGIC;
--5
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
--6
ENDMOORE1;
--7
ARCHITECTUREBEHAVOFMOORE1IS--8
SIGNALST_TYPEIS(ST0,ST1,ST2,ST3,ST4);
--9
SIGNALC_ST:
ST_TYPE;
--10
BEGIN--11
PROCESS(CLK,RST)--12
BEGIN--13
IFRST='
THENC_ST<
=ST0;
Q<
="
0000"
--14
ELSIFCLK'
EVENTANDCLK='
THEN--15
CASEC_STIS--16
WHENST0=>
IFDATAIN="
10"
=ST1;
--17
ELSEC_ST<
--18
ENDIF;
Q<
--19
WHENST1=>
11"
=ST2;
--20
--21
0101"
--22
WHENST2=>
01"
=ST3;
--23
--24
1100"
--25
WHENST3=>
00"
=ST4;
--26
--27
0010"
--28
WHENST4=>
--29
--30
--31
ENDCASE;
--32
ENDIF;
--33
ENDPROCESS;
--34
ENDBEHAV;
--35
1.在程序中存在两处错误,试指出,并说明理由:
在QuartusII中编译时,其中一个提示的错误为:
Error(Line9):
VHDLsyntaxerroratMOORE1.vhd(9)neartext"
IS"
expecting"
:
"
or"
"
第9行,状态机数据类型声明错误,关键字应为TYPE
第32行,case语句缺少whenothers处理异常状态情况
2.修改相应行的程序(如果是缺少语句请指出大致的行数):
错误1行号:
9程序改为:
SIGNAL改为TYPE
错误2行号:
32程序改为:
之前添加一句whenothers=>
c_st<
=st0;
五、阅读下列VHDL程序,画出相应RTL图:
ENTITYTRISIS
PORT(CONTROL:
INN:
INOUTSTD_LOGIC;
Y:
OUTSTD_LOGIC);
ENDTRIS;
ARCHITECTUREONEOFTRISIS
BEGIN
PROCESS(CONTROL,INN,Q)
BEGIN
IF(CONTROL='
)THEN
Y<
=Q;
Q<
Z'
ELSE
=INN;
ENDONE;
六、写VHDL程序:
1.试描述一个带进位输入、输出的8位全加器
端口:
A、B为加数,CIN为进位输入,S为加和,COUT为进位输出
ENTITYADDER8IS
PORT(A,B:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CIN:
COUT:
OUTSTD_LOGIC;
S:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDADDER8;
ARCHITECTUREONEOFADDER8IS
SIGNALTS:
STD_LOGIC_VECTOR(8DOWNTO0);
TS<
=(‘0’&
A)+(‘0’&
B)+CIN;
S<
=TS(7DOWNTO0);
COUT<
=TS(8);
2.看下面原理图,写出相应VHDL描述
ENTITYMYCIRIS
PORT(A,CLK:
C,B:
ENDMYCIR;
ARCHITECTUREBEHAVOFMYCIRIS
SIGNALTA:
STD_LOGIC;
PROCESS(A,CLK)
IFCLK’EVENTANDCLK=‘1’THEN
TA<
=A;
B<
=TA;
C<
=AANDTA;
七、综合题(20分)
下图是一个A/D采集系统的部分,要求设计其中的FPGA采集控制模块,该模块由三个部分构成:
控制器(Control)、地址计数器(addrcnt)、内嵌双口RAM(adram)。
控制器(control)是一个状态机,完成AD574的控制,和adram的写入操作。
adram是一个LPM_RAM_DP单元,在wren为’1’时允许写入数据。
试分别回答问题
下面列出了AD574的控制方式和控制时序图:
AD574逻辑控制真值表(X表示任意)
CE
CS
RC
K12_8
A0
工作状态
X
禁止
1
启动12位转换
启动8位转换
12位并行输出有效
高8位并行输出有效
低4位加上尾随4个0有效
AD574工作时序
问题:
1.要求AD574工作在8位转换模式,K12_8、A0在control中如何设置?
K12_8低电平
A0高电平
2.试画出control的状态机的状态图
3.地址计数器每当ClkInc时钟上升沿到达,输出地址加1,请对该模块进行VHDL描述。
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entitycnt64is
Port(ClkInc,Cntclr:
--时钟信号和清零信号输入
Wraddr:
outstd_logic_vector(5downto0));
Endcnt64;
Architectureoneofcnt64is
Begin
Process(clkinc,cntclr)
Variablecounter:
std_logic_vector(5downto0);
Begin
Ifcntclr=‘1’thencounter:
Elsifclkinc=‘1’andclkinc’eventthencounter:
=counter+1;
Endif;
Wraddr<
=counter;
Endprocess;
Endone;
4.根据状态图,试对control进行VHDL描述
Entitycontrolis
Port(CLK,STATUS:
--时钟信号和AD转换状态信号输入
ADDATA:
instd_logic_vector(7downto0);
--转换数据输入
CS,CE,A0,RC,K12_8:
outstd_logic;
--AD574控制信号
ClkInc:
--地址计数器时钟信号
rddata:
outstd_logic_vector(7downto0));
--转换数据输出
Endcontrol;
Architecturebehaveofcontrolis
Typesm_stateis(s0,s1,s2,s3,s4);
Signalc_st,n_st:
sm_state;
Signallock:
std_logic;
Signalregdata:
K12_8<
=‘0’;
A0<
=‘1’;
Process(clk)
Ifclk’eventandclk=‘1’thenc_st<
=n_st;
endif;
Process(c_st,status)
Casec_stis
Whens0=>
n_st<
=s1;
rc<
ce<
cs<
lock<
Whens1=>
=s2;
=‘0;
Whens2=>
ifstatus=‘0’thenn_st<
=s3;
elsen_st<
Rc<
=‘1’cs<
Whens3=>
=s4;
Whens4=>
=s0;
Whenothers=>
Endcase;
Process(lock)
Iflock’eventandlock=‘1’then
Regdata<
=addata;
Clkinc<
Else
Rddata<
=regdata;
Endbehave;
5.已知adram的端口描述如下
ENTITYadramIS
PORT
(data:
--写入数据
wraddress:
INSTD_LOGIC_VECTOR(5DOWNTO0);
--写入地址
rdaddress:
--读地址
wren:
INSTD_LOGIC:
--写使能
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)--读出数据);
ENDadram;
试用例化语句,对整个FPGA采集控制模块进行VHDL描述
EntityADC574is
Cntclr:
--计数器清零信号
Rdaddr:
instd_logic_vector(5downto0);
--adram读数地址
--adram读数据输出
EndADC574;
Architectureoneofadc574is
componentcnt64
Port(ClkInc,Cntclr:
Wraddr:
Endcomponent;
componentcontrol
Port(CLK,STATUS:
ADDATA:
CS,CE,A0,RC,K12_8:
ClkInc:
rddata:
componentadram
PORT(data:
wraddress:
rdaddress:
wren:
q:
ENDcomponent;
Signalr_data:
std_logic_vector(7downto0);
Signalclkinc:
Signalwraddr:
U1:
cnt64portmap(clkinc=>
clkinc,cntclr=>
cntclr,wraddr=>
wraddr);
U2:
controlportmap(clk=>
clk,status=>